实例目标:创建事件触发的服务流程,实现单据列表上点击某事件,触发服务流程,实现简单数据的传输。
1.新建服务流程
注意服务流程"启动方式"的选择,"事件触发",此类服务流程没有输入参数,其它参数设置,按照需求添加,当前实例,设置了输出参数、一个集成对象和一个中间参数,当前实例的中间参数用于输出中间变量,可不添加。(用到的集成对象没有单独定义,是直接选择引用)
依赖资源,按需引入,当前引入了两个依赖资源,截图仅展示一个。
2.构建流程图
新创建的服务流程,打开流程图,由一个开始节点和一个结束节点构成,且开始节点和结束节点之间没有连线,下图是构建好的流程图。
当前实例选择了"数据获取"作为第二个节点,也可以用脚本取数,获取到单据列表选中的数据。
当前实例流程思路,开始节点从单据中获取到需要传递数据的id,“数据获取”节点,根据id获取到完整数据,"数据映射"节点将单据中获取的数据与需要保存的表中字段做映射,并保存到表中,至此流程结束。
注意:(1)"数据获取"节点获取的数据字段,跟使用的集成对象数据设置有关,可以通过修改集成对象的数
据来获取需要的数据字段。
(2)从集成对象中获取单据体的字段,可以用 单据体.字段名.属性 的办法获取。
开始节点的配置,配置触发流程的集成对象,填写对象赋值变量(赋值变量与流程属性中设置的一样,可按需设置),填写"取值字段",当前服务流程触发之后,从触发单据中获取什么值,就设置什么字段。
可选择的"单据事件"有很多,结合需求要求来选择,"单据事件"与单据实际的事件的对应的,这里能选到的事件,单据上都是存在的;当前实例选了"提交"。
"数据获取"节点,取数中添加上自己所需的字段,集成对象中如果没有的字段,可以点出来。
"自动填充"会将当前选中的集成对象中的所有字段都填充过来。
"数据获取"节点中,过滤条件一栏,可以设置过滤条件,相当于取数过滤,过滤出从开始节点中传过来的"id"在其中的数据,获取的数据字段在"取数设置"中添加了,后续还有"排序设置",当前实例没有添加排序条件。
“数据映射”节点,需要添加映射脚本,当前实例的脚本,数据映射脚本是根据前面取到的数据和最后保存数据格式来将两边的数据做一个格式处理,拼出需要的数据样式(拿到需要的数据格式之后,可以先运行一次服务流程,"流程实例"的"变量"中获取到前面office数据样式之后,再拼凑映射脚本)。
下面是最终映射脚本,一开始调试可以参考服务流程测试步骤。
var queryRes = @office/entryentity => { //office 是前面取到的数据 //@../是获取上一层的数据 "billno":@../billno, "billstatus":@../billstatus, "create_time":@../datefield, "goods_name":goods_name.name.zh_CN, "qty_field":qtyfield, "price_field":pricefield, }; //officeTo 是查看office结构和数据 officeTo = office; if (queryRes is Not Empty) { for(item:queryRes){ var sql="insert into office_supplies_dyl (billno,billstatus,goods_name, create_time,qty_field,price_field ) values(?,?,?,?,?,?)"; var batch = [[item.billno,item.billstatus,item.goods_name,item.create_time,item.qty_field,item.price_field]]; var types =[VARCHAR,VARCHAR,VARCHAR,VARCHAR,DECIMAL,DECIMAL]; //execute_batch 是批量处理数据,帮助手册中可找到用法 var GS = execute_batch(cn, sql, batch, types); } RES={"MESS_TYPE":"S"}; }
3.测试服务流程
服务流程的测试分三个阶段
(1)第一阶段
获取"数据获取"节点取到的数,用于后续映射脚本的编写。
开始脚本映射处仅做一个赋值处理,将office的值赋给输出变量
var RES = office; return RES;
在"服务流程"中,选中对应服务流程,再选择"流程实例",选择执行结果,"变量"中即可看到,赋值之后的输出变量,这个结构就是前面"数据获取"节点取到的json数据结构,后续数据映射就需要用到这个结构。
获取上述json结构后,可到"脚本执行工具"中,作为输入参数,来构建映射脚本。
(2)第二阶段
在将数据映射脚本添加好,发布之后做的服务流程测试,将测试的单据编号填写到条件中,启动流程之后到"流程实例"中查看运行情况。
(3)第三阶段
服务流程测试成功之后,可以到数据传输的目标处查看数据,数据传输成功了,就可以到继承对象的单据上,测试,当前实例是单据提交的时候触发。提交单据的时候会触发服务流程,将选中的单据数据传输到目标地点。
总结:
实现数据传输的办法有很多,在调试的时候都是前后修改,最后实现功能;可能一开始思路还比较混乱,只知道一个大概方向,后面才会越来越清晰,当前实例在运行时,如果选中多条单据点提交,就会在服务流程的流程实例中生成多个传数记录,一个单据多个单据体,可以一次传输,当前实例仅是探索的一个小例子,目的是将过程走通,记下来后面参考。
推荐阅读