前言
随着微软技术的更新,在逐渐的抛弃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步骤如下: