AX2009 批处理作业中使用多线程---独立任务模式
每个工单独立一个任务。
Class
/*
独立任务模式
*/
class DemoBatchIndividualTasks extends RunBaseBatch
{
str 20 SalesOrder;
#define.CurrentVersion(1)
#localmacro.CurrentList
SalesOrder
#endmacro
} public container pack()
{
return [#CurrentVersion, #CurrentList];
} public static DemoBatchIndividualTasks construct(str _SalesOrder)
{
DemoBatchIndividualTasks c;
;
c = new DemoBatchIndividualTasks();
c.parmSalesOrder(_SalesOrder);
return c;
} public boolean unpack(container packedClass)
{
Version version = RunBase::getVersion(packedClass);
switch(version)
{
case #CurrentVersion:
[version,#CurrentList] = packedClass;
break;
default:
return false;
}
return true;
} private void parmSalesOrder(str _SalesOrder)
{
SalesOrder= _SalesOrder;
} //Single Work item per thread
void run()
{
SalesTable salesTable;
SalesFormLetter formletter;
Map SalesMap; select * from salesTable
where salesTable.salesId == SalesOrder &&
salesTable.documentStatus == DocumentStatus::none; if (salesTable)
{
formletter = SalesFormLetter::construct(DocumentStatus::Invoice);
formletter.getLast();
formletter.resetParmListCommonCS();
formletter.allowEmptyTable(formletter.initAllowEmptyTable(true));
SalesMap = new Map(Types::Int64,Types::Record);
SalesMap.insert(salesTable.recid,salesTable);
// formletter.parmDataSourceRecordsPacked(SalesMap.pack());
// formletter.createParmUpdateFromParmUpdateRecord(SalesFormletterParmData::initSalesParmUpdateFormletter(DocumentStatus::Invoice, FormLetter.pack()));
formletter.showQueryForm(false);
formletter.initLinesQuery();
formletter.update(salesTable, systemDateGet(), SalesUpdate::All, AccountOrder::None, false, false);
}
} public void new()
{
super();
}
Job 测试
static void scheduleDemoIndividualTasksJob(Args _args)
{
BatchHeader batchHeader;
DemoBatchIndividualTasks demoBatchIndividualTasks;
BatchInfo batchInfo;
SalesTable salesTable; SalesId _SalesIdFrom,_SalesIdTo;
; _SalesIdFrom = "SSO000001";
_SalesIdTo = "SSO001000";
ttsBegin;
select count(RecId) from salesTable
where salesTable.salesId >= _SalesIdFrom &&
salesTable.salesId <= _SalesIdTo && salesTable.documentStatus == DocumentStatus::none; if (salesTable.recid > 0)
{
batchHeader = BatchHeader::construct();
batchHeader.parmCaption(strFmt('Batch job for demoBatchIndividualTasks')); while select * from salesTable
where salesTable.salesId >= _SalesIdFrom &&
salesTable.salesId <= _SalesIdTo &&
salesTable.documentStatus == DocumentStatus::none
{
/* Each task is created to process a single work item (in this case a single sales Order)*/
demoBatchIndividualTasks = DemoBatchIndividualTasks::construct( salesTable.salesid);
batchInfo = demoBatchIndividualTasks.batchInfo();
BatchInfo.parmCaption('Invoicing : '+salesTable.salesid); batchInfo.parmGroupId("COUNTING"); batchHeader.addTask(demoBatchIndividualTasks);
}
batchHeader.save();
}
ttsCommit;
info('Done');
} /*
独立任务模式 假设,我们处理10万条记录 #创建任务 #批处理线程(在我的测试服务器) #可并行执行的并行任务
100,000 10 10 一旦前10个任务完成,批处理框架将加载后10个任务并执行它们,在这种情况下
,它可以加载10,000或更多次。
*/
AX2009 批处理作业中使用多线程---独立任务模式的更多相关文章
- AX2009 批处理作业中使用多线程---批量捆绑
批量捆绑 由于Ax服务器中批处理线程是可以多个的,而实际批处理作业中线程往往只使用了一个 Class: /* 批量捆绑 */ /*class Code*/ public class DemoBat ...
- AX2009 批处理作业中使用多线程---顶级采摘
顶级采摘 是前两种模式的一种混合,使用使用实体表存储单任务模式那样的每个工单,任务每次都取顶行做操作.单任务数不想单任务模式,一个工单一个任务.而是类似批量捆绑那样设置任务数.表:demoTopPic ...
- 微冷的雨之Java中的多线程初理解(一)
在讲解多线程前,我们必须理解什么是多线程?而且很多人都会将进程和线程做对比. 进程和线程 进程:进程是操作系统结构的基础,是一次程序的执行,是一个程序及其数据在处理机上顺序执行时所发生的活动,是程序在 ...
- [转载]ArcGIS Engine 中的多线程使用
ArcGIS Engine 中的多线程使用 原文链接 http://anshien.blog.163.com/blog/static/169966308201082441114173/ 一直都想写 ...
- python中的多线程【转】
转载自: http://c4fun.cn/blog/2014/05/06/python-threading/ python中关于多线程的操作可以使用thread和threading模块来实现,其中th ...
- 拒绝卡顿——在WPF中使用多线程更新UI
原文:拒绝卡顿--在WPF中使用多线程更新UI 有经验的程序员们都知道:不能在UI线程上进行耗时操作,那样会造成界面卡顿,如下就是一个简单的示例: public partial class MainW ...
- C#中的多线程-入门
概述与概念C#支持通过多线程并行地执行代码,一个线程有它独立的执行路径,能够与其它的线程同时地运行.一个C#程序开始于一个单线程,这个单线程是被CLR和操作系统(也称为“主线程”)自动创建的,并具有多 ...
- OS X 和iOS 中的多线程技术(上)
OS X 和iOS 中的多线程技术(上) 本文梳理了OS X 和iOS 系统中提供的多线程技术.并且对这些技术的使用给出了一些实用的建议. 多线程的目的:通过并发执行提高 CPU 的使用效率,进而提供 ...
- Java 中传统多线程
目录 Java 中传统多线程 线程初识 线程的概念 实现线程 线程的生命周期 常用API 线程同步 多线程共享数据的问题 线程同步及实现机制 线程间通讯 线程间通讯模型 线程中通讯的实现 @(目录) ...
随机推荐
- RestTemplate invoke JSON and convert to Object
@Test public void webTest() throws JsonProcessingException { Map<String, String> a = new HashM ...
- Android 开发 View的API 转载
转载地址:https://blog.csdn.net/lemonrabbit1987/article/details/47704679 View类代表用户界面组件的基本构建块.一个View占据屏幕上的 ...
- linux系统下常用的命令(吐血自己整理,且用且珍惜)
1)linux命令太多,有时候记不起来是哪个,为了方便大家查询,自己吐血整理了以下这些,转载时请标明出处,珍惜原创成果 吐血自己整理,且用且珍惜) 吐血自己整理,且用且珍惜) 吐血自己整理,且用且珍惜 ...
- HTML: Dom event
转自:https://developer.mozilla.org/zh-CN/docs/Web/API/Event Event接口表示在DOM中发生的任何事件; 一些是用户生成的(例如鼠标或键盘事件) ...
- 【Debug】串口发送数据时部分字节被拉长,出现帧错误,原因MCU进入低功耗模式导致串口时钟停了!
串口发送数据时部分字节被拉长,出现帧错误,原因MCU进入低功耗模式导致串口时钟停了!
- SpringBoot之SOAP WebService
SpringBoot的Web Service类型常见有RESTful Web Service和SOAP Web Service两种,RESTful风格的web服务比较常用,但实际工作中仍有部分场景用到 ...
- python入门(十四):面向对象(属性、方法、继承、多继承)
1.任何东西1)属性(特征:通常可以用数据来描述)(类变量和实例变量)2)可以做一些动作(方法) 类来管理对象的数据.属性:类变量和实例变量(私有变量)方法: 1)实例方法 2)类方法 ...
- ActionScript3.0(AS3)中的泛型数组Vector
Adobe官方并没有"泛型数组"的叫法,这是我自己对Vector的叫法(有点标题党),不过Vector在使用上确实跟c#中的泛型数组有些相似之处. 原作者:菩提树下的杨过出处:ht ...
- pandas,读取或存储DataFrames的数据到mysql中
dataFrames格式的数据是表格形式的,mysql数据库中的数据也是表格形式的,二者可以很方便的读取存储 安装依赖的包 pip install pandas pip install sqlal ...
- React Router的Route的使用
Route 是 React Router中用于配置路由信息的组件,每当有一个组件需要根据 URL 决定是否渲染时,就需要创建一个 Route. 1) path 每个 Route 都需要定义一个 pat ...