D365 批处理作业 3 使用SysOperation 基于之前批处理作业1进行完善

介绍

        相比于RunBase,SysOperation更加全面(可以设计dialogUI,不再需要序列化存储参数),但是开发时长会大大延长,一般来说,使用RunBase只需要建一个Class,而SysOperation最少需要新建三个Class:

Controller,Contract,Service,若需要设计批处理dialog的UI页面,还需要另加一个UIBuilder。可以发现,SysOperation 开发思路与开发SSRS Report流程一致

现在简单的写一下代码案例。

1.TestSysOperationServiceController
class TestSysOperationServiceController extends SysOperationServiceController
{
    
    protected void new()
    {
        super(classStr(TestSysOperationServiceBase), methodStr(TestSysOperationServiceBase, runSubTask), SysOperationExecutionMode::Synchronous);
    }

    /// <summary>
    ///
    /// </summary>
    /// <returns></returns>
    protected ClassDescription defaultCaption()
    {
        ClassDescription ret;
    
        ret = super();
    
        return 'Process Job';
    }

    public static TestSysOperationServiceController construct(SysOperationExecutionMode _excutionMode = SysOperationExecutionMode::Synchronous)
    {
        TestSysOperationServiceController controller;
        ;
        controller = new TestSysOperationServiceController();
        controller.parmExecutionMode(_excutionMode);
        return controller;
    }

    public static void main(Args _args)
    {
        TestSysOperationServiceController controller;
        ;
        controller  = TestSysOperationServiceController::construct();
        controller.parmArgs(_args);
        controller.startOperation();
    }

    /// <summary>
    ///
    /// </summary>
    /// <returns></returns>
    public Batch doBatch()
    {
        batchHeader batchHeader;
        ;
        //执行完自动提醒用户
        // Setup alerts so that they alert on success or error via a popup toast
        // If the job is setup for scheduled batch
        batchHeader = this.batchInfo().parmBatchHeader();
        batchHeader.clearAllAlerts();

        batchHeader.addUserAlerts(curUserId(),  // alert user who created the job
        NoYes::Yes,                         // completed
        NoYes::Yes,                         // error
        NoYes::No,                          // canceled
        NoYes::Yes,                         // popup or toast in desktop client
        NoYes::No);
        // email
        return super();
    }

    /// <summary>
    ///
    /// </summary>
    /// <returns></returns>
    public boolean mustGoBatch()
    {
        boolean ret;
    
        ret = super();
        ret = true;
        return ret;
    }

}
2.TestSysOperationContract
[DataContractAttribute,
SysOperationContractProcessingAttribute(classstr(TestSysOperationAutomaticUIBuilder))]
class TestSysOperationContract
{
    str         DepartCode;
    NoYesId     allowDepartCode;

    [DataMemberAttribute,
        SysOperationLabelAttribute("部门编号"), 
        SysOperationControlVisibilityAttribute(true)]
    public str parmDepartCode(str _DepartCode = departCode)
    {
        departCode = _DepartCode;
 
        return departCode;
    }

    [DataMemberAttribute,
        SysOperationLabelAttribute("激活部门控件")]
    public NoYesId parmAllowDepartCode(NoYesId _allowDepartCode = allowDepartCode)
    {
        allowDepartCode = _allowDepartCode;
        return allowDepartCode;
    }

}
3.TestSysOperationTaskServiceBase
class TestSysOperationTaskServiceBase  extends SysOperationServiceBase
{
    public void process(TestSysOperationContract _contract)
    {
        Info(_contract.parmDepartCode());     
    }

}
4.TestSysOperationAutomaticUIBuilder
class TestSysOperationAutomaticUIBuilder extends SysOperationAutomaticUIBuilder
{
    TestSysOperationContract    TestSysOperationContract;
    DialogField                     dialogFieldDepartCode,
                                    dialogFieldAllowDepartCode;
    public boolean allowDepartCodeModified(FormCheckBoxControl _checkBoxControl)
    {
        // set enabled or disabled based on checkbox
        dialogFieldDepartCode.enabled(any2enum(dialogFieldAllowDepartCode.value())); 
        return true;
    }

    public void postBuild()
    {
        super();

        // get datacontract
        TestSysOperationContract = this.dataContractObject();

        // get dialog fields
        dialogFieldDepartCode       = this.bindInfo().getDialogField(TestSysOperationContract, methodstr(TestSysOperationContract, parmDepartCode));
        dialogFieldAllowDepartCode  = this.bindInfo().getDialogField(TestSysOperationContract, methodstr(TestSysOperationContract, parmAllowDepartCode));

        // register override methods
        dialogFieldAllowDepartCode.registerOverrideMethod(methodstr(FormCheckBoxControl, modified), methodstr(TestSysOperationAutomaticUIBuilder, allowDepartCodeModified), this);

        // enable/disable transdate based on checkbox
        dialogFieldDepartCode.enabled(any2enum(dialogFieldAllowDepartCode.value()));
    }

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值