Dynamics 365 Fo 中的sysoperation


前言

随着微软技术的更新,在逐渐的抛弃RunBaseBatch框架,现在推出了一个新的框架Sysoperation取代了RunBaseBatch框架,这篇文章根据不同的业务需求列举了几种不同的使用方式

方式一

如果你只需要一个批处理去运行代码的话,可以使用最简单的一种方式。

1.创建一个Class

在这个类里面创建一个method,然后在这个mothod里面编写你需要运行的代码
以下为示例:

class SysoperationTest
{
    public void Main()
    {
		//编写你的代码
        Info('TestInfo');
    }

}

2.创建一个Action Menu Item

修改这个Action Menu的四个属性,分别如下:
Object:SysOperationserviceController
Object:Class
parameters:SysoperationTest.Main
Label:输入你的Lable,

如下图:
在这里插入图片描述

3.运行效果

效果如下图:
在这里插入图片描述
这个使用方式缺点是你的Action Menu和你这个Batch的Title及Description显示的是同一个Lable的值,如果你对于这些没有要求的话就可以这样使用,非常省事。

方式二

这个方式适合需要去设置这个batchd的title值和description的值的时候去使用

1.创建SysoperatonService的Class

1.创建SysoperationService的Class,然后extends系统的SysoperationServiceBase

class SysoperationServiceClass extends SysOperationServiceBase
{
}

2.创建一个运行method,然后在方法里面编写你的运行代码

class SysoperationServiceClass extends SysOperationServiceBase
{
    public void procesOperation()
    {
    	//编写你的运行代码
        Info("Test Run Sysoperation");
    }

}

2.创建SysoperationController的Class

1.1.创建SysoperationController的Class,然后extends系统的SysOperationServiceController

class SysoperationControllerClass extends SysOperationServiceController
{}

2.创建一个描述mothod

public ClassDescription caption()
{
    return "Description Info";
}

3.创建一个Main方法

public static void main(Args _args)
{
   	 SysoperationControllerClass controller = new SysoperationControllerClass();
     
     controller.parmClassName(classstr(SysoperationServiceClassTest));
     controller.parmMethodName(methodStr(SysoperationServiceClassTest,procesOperation));
     //显示的标题信息
     controller.parmDialogCaption('Title Info');
     controller.startOperation();
 }

3.创建一个Action Menu

这里需要需改三个属性,如下:
Lable:这个Action的显示值
ObjectType:Class
Object:SysoperationControllerClass

4.运行效果

效果如下图所示:
在这里插入图片描述
从上图可以看到title和description的值是不一样的

方式三

适用于当运行的batch需要一些参数控制时

1.创建一个Data Contract的Class

1.创建一个Class,并声明属性如下:

[DataContractAttribute]
public class SysoperationDataContractClass
{}

需要对数据新型验证的话就要修改成如下写法

[DataContractAttribute]
public class SysoperationDataContractClass implements SysOperationInitializable

2.创建一个参数的method
下面这是一个声明日期和ItemId参数的method示例。
SysOperationDisplayOrder参数是控制两个参数在页面上显示的顺序的

[DataContract]
public class SysoperationDataContractClass 
{
    TransDate       dateValue;
    ItemId          itemId;
    [DataMember,
    SysOperationLabel(literalStr('Date Test')),
    SysOperationHelpText(literalStr('Date Help Text')),
    SysOperationDisplayOrder('2')]
    public TransDate parmDate(TransDate _dateValue = dateValue)
    {
        dateValue = _dateValue;
        return dateValue;
    }

    [DataMember,
    SysOperationLabel(literalStr('Product')),
    SysOperationHelpText(literalStr('Product Help Text')),
    SysOperationDisplayOrder('1')]
    public ItemId productItemId(ItemId  _itemId = itemId)
    {
        itemId = _itemId;
        return itemId;
    }

}
}

3.重写initialize()这个method()

2.创建一个Service Class

这里与方式二的区别就是调用Data Contract这个Class中的Method
示例如下:

public void procesOperation(SysoperationDataContractClass _contract)
{
     Info(strFmt("ri qi can shu : %1   chan pin can shu: %2",
             _contract.parmDate(),
             _contract.productItemId()));
 }

3.同方式二创建一个controll的class

此处省略,请参考方式二

4.运行效果

在这里插入图片描述

方式四

对于data contract中的参数进行验证

1.创建Service Class

2.创建Controller Class

3.创建Data Contract Class

4.创建一个UI Builder Class

1.创建Class,并编写对应的Mehod

public class SysoperationUIBuliderClass extends SysOperationAutomaticUIBuilder
{
    DialogField dateField;
    public void postBuild()
    {
        super();
        dateField = this.bindInfo().getDialogField(this.dataContractObject(),
                        methodStr(SysOperationDataContractClass, parmDate));
    }

    public void postRun()
    {
        super();

        dateField.registerOverrideMethod(methodStr(FormDateControl,validate),
            methodStr(SysoperationUIBuliderClass,validateDate),this);
             departField.registerOverrideMethod(methodStr(FormStringControl, lookup),
            methodStr(SysoperationUIBuliderClass,t_Lookup),this);
       
        departField.registerOverrideMethod(methodStr(FormStringControl, jumpRef),
            methodStr(SysoperationUIBuliderClass,_jumpRef),this);
    }

    public boolean validateDate(FormDateControl _dateControl)
    {
        if(_dateControl.dateValue() > today())
        {
            Error("select Date,Please");
            return false;
        }
        return true;
    }

}

2.回到Data Contract Class,修改Class声明如下

[DataContract,SysOperationContractProcessing(classStr(SysoperationUIBuliderClass))]

3.需要进行参数初始化值的时候需要修改类声明为:

public class ARAgingDataContract implements SysOperationInitializable

然后重写initialize()

public void initialize()
{
}

如果需要每次运行时值都是重新初始化值,而不是使用上次运行时设置的值,
修改class声明为:

[DataContract,SysOperationAlwaysInitialize,SysOperationContractProcessing(classStr(ARAgingUIBuilder))]
public class ARAgingDataContract implements SysOperationInitializable

5.运行效果

当设置的日期条件不满足时就会出现错误,如下图:
在这里插入图片描述

总结

提示:这里对文章进行总结:
例如:以上就是今天要讲的内容,本文仅仅简单介绍了pandas的使用,而pandas提供了大量能使我们快速便捷地处理数据的函数和方法。有一种便捷的方式使用Sysoperation步骤如下:

可以参考以下博客
参考博客1
参考博客2

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值