[DataContractAttribute]
class ContractClass implements SysPackable
{
str departCode;
#define.CurrentVersion(1)
#localmacro.CurrentList
departCode
#endmacro
public container pack()
{
return [#currentVersion, #currentList];
}
public boolean unpack(container _packedClass)
{
int version = RunBase::getVersion(_packedClass);
boolean result = false;
switch (version)
{
case #CurrentVersion:
[version, #CurrentList] = _packedClass;
result = true;
break;
default :
result = false;
}
return result;
}
[DataMemberAttribute, SysOperationControlVisibilityAttribute(false)]
public str parmDepartCode(str _DepartCode = departCode)
{
departCode = _DepartCode;
return departCode;
}
2.Task
class Task extends RunBaseBatch
{
str DepartCode;
#define.CurrentVersion(2)
#define.Version1(2)
public boolean canGoBatchJournal()
{
return true;
}
public boolean init()
{
return true;
}
protected void new()
{
super();
}
public container pack()
{
return [#CurrentVersion];
}
public void run()
{
#OCCRetryCount
if (! this.validate())
throw error("");
try
{
ttsbegin;
..//需要增加的逻辑
ttscommit;
}
catch
{
retry;
}
}
public boolean runsImpersonated()
{
return true;
}
public boolean unpack(container packedClass)
{
Version version = RunBase::getVersion(packedClass);
;
switch (version)
{
case #CurrentVersion:
[version] = packedClass;
break;
default:
return false;
}
return true;
}
public boolean validate(Object _calledFrom = null)
{
if (false)
return checkFailed("");
return true;
}
server static Task construct()
{
return new Task();
}
static ClassDescription description()
{
return "标题";
}
static void main(Args args)
{
}
protected boolean canRunInNewSession()
{
return false;
}
public static Task newTask(Contract dataContract)
{
Task task;
task = Task::construct();
task.parmDepartCode(dataContract.parmDepartCode());
task.runOperation();
return task;
}
public str parmdepartCode(str _DepartCode = DepartCode)
{
DepartCode = _DepartCode;
return DepartCode;
}
}
3.Service
class Service extends SysOperationServiceBase
{
[SysEntryPointAttribute]
public void startOperation(Contract _dataContract)
{
Task::newTask(_dataContract);
}
}
4.Controller
class Cotnroller extends SysOperationServiceController
{
str taskCaption;
public void new()
{
super();
this.parmClassName(classStr(Service));
this.parmMethodName(methodStr(Service, startOperation));
this.parmDialogCaption("标题");
}
public str parmCaption(str _caption = taskCaption)
{
taskCaption = _caption;
return taskCaption;
}
public ClassDescription caption()
{
if (taskCaption)
return taskCaption;
else
return "标题";
}
}
5.Scheduler
class Scheduler extends SysOperationServiceController
{
str depart,userId;
public ClassDescription caption()
{
return '批处理详细信息';
}
public static void main(Args args)
{
DialogField dialogDepart;
FormBuildStringControl depCtrl;
Scheduler pro = new Scheduler();
Dialog dialog = new Dialog("标题");
dialogDepart = dialog.addFieldValue(extendedTypeStr(Str4095),'101','部门');
depCtrl = dialogDepart.control();
depCtrl.limitText(10000);
depCtrl.replaceOnLookup(false);
depCtrl.registerOverrideMethod(methodStr(FormStringControl, lookup), methodStr(Scheduler, lookupDepart),pro);
if(dialog.run())
{
pro.depart = dialogDepart.value();
pro.userId = dialogUserId.value();
pro.run();
}
}
protected void lookupDepart(FormStringControl _control)
{
Query query = new Query();
QueryBuildDataSource queryBuildDataSource;
SysTableLookup sysTableLookup = SysTableLookup::newParameters(tableNum(DepartTable), _control);
sysTableLookUp.addLookupfield(fieldNum(DepartTable, DepartCode));
sysTableLookUp.addLookupfield(fieldNum(DepartTable, DepartName));
queryBuildDataSource = query.addDataSource(tableNum(DepartTable));
sysTableLookup.parmQuery(query);
sysTableLookup.performFormLookup();
}
/// <summary>
///
/// </summary>
public void run()
{
BatchHeader batchHeader;
Controller controller;
Contract dataContract;
Query q = new Query();
QueryBuildDataSource qbds,qbdsTable;
QueryRun qr;
SalesLine salesLine;
Set set = new Set(Types::Class);
SetEnumerator se;
Batchable batchTask;
int i = 0;
;
str jobCaption = '标题';
qbds = q.addDataSource(tableNum(TestTable));
qr = new QueryRun(q);
while(qr.next())
{
salesLine = qr.get(tableNum(SalesLine));
if(!batchHeader)
{
batchHeader = BatchHeader::construct();
}
controller = new Controller();
controller.parmCaption(strFmt('批处理任务描述'));
dataContract = controller.getDataContractObject();
dataContract.parmDepartCode('101');
batchHeader.addTask(controller);
set.add(controller);
i++;
}
if(i) //此处一般不需要写,作用:当所有任务跑完后才运行下面的这个任务
{
controller = new Controller();
controller.parmCaption('汇总:Test');
dataContract = controller.getDataContractObject();
dataContract.parmDepartCode('101');
batchHeader.addTask(controller);
se = set.getEnumerator();
while (se.moveNext())
{
batchTask = se.current(); // Task to make dependent on
batchHeader.addDependency(controller,batchTask,BatchDependencyStatus::FinishedOrError);
}
if(batchHeader)
{
// save the batchheader if it has been created
batchHeader.parmCaption(jobCaption);
batchHeader.save();
info(strFmt("已生成批处理'));
}
}
else
error("未查询到满足条件的数据!");
}
}