更新报价与成本分析
# 产生报价与成本分析
# 1. 说明
- 产生报价与成本分析的工作流实现产生报价与成本分析的数据,通过呼叫Flying实现报表图片的生成,下载并经过编码后,将图片通过邮件发送出来,同时向初始发送的地址传递工作流已结束的信息。
- 在报价与成本分析经过计算处理后,会产生报价单编号,可用于进行单据数据提取,实现报表的报价单生成的功能。
- 邮件发送的图片文件是经过编码处理的,可以直接写入邮件正文。
- 提供了回调的脚本,用来提醒工作流已处理完成。
# 2. 设计工作流
新建一个工作流,流程名称为
wf_sdquote
,如下图所示。创建完成后,点击[保存]
按钮完成保存。打开工作流设计画面。设计的工作流如下图所示。接下来对工作流的节点依照顺序进行说明。
增加公共变量,这些公共变量将用于工作流流转。变量说明如下:
变量名称 说明 companyid 公司ID customercode 客户编号 customerquote 客户报价单编号 depcode 部门编号 empid 业务员编号 partno 产品编号 pcbid 参数样板 quoteclass 报价大类 saleqty 销售数量 sdquote_analyzeurl 报价单成本分析报表URL sdquote_data 报价单报表文件base64文本 sdquote_url 报价单报表URL sdquoteanalyze_data 报价单报表分析文件base64文本 userid 用户编号 增加开始节点。
增加脚本节点,该脚本节点用于执行产生报价单与成本分析的内容。将会引用工作流中引入的参数。将呼叫
fasterp2_sdquote
自定程序,并获取运行完成后的报价单编号的变量,作为公共变量传递给下一个节点使用。增加脚本节点,用来产生指定的报价单编号的报表文件,将文件URL传递给下一个节点。
增加脚本节点,用于下载报表文件,将文件转换为base64文本。
增加邮件发送节点,填写收件人,主题,消息等信息。将base64文本插入至消息正文中。
增加脚本节点,用于发送restapi消息,向目标服务器发送工作流运行完成的消息,同时传递已生成的报表文件。
# 3. 调用工作流
设计完成的工作流可使用以下方式来调用执行。
# 3.1. RestAPI
使用浏览器或RestAPI 客户端,访问以下地址,执行自定程序调用。请将 {ip}
修改为运行 TaskRunner 主机的IP地址,{port}
修改为 TaskRunner WebSocket 服务端监听的地址。
http://{ip}:{port}?restapi=workflow
请求的主体如下:
{"name":"wf_sdquote","params":[{"name":"companyid","value":"{companyid}"},{"name":"partno","value":"{partno}"},{"name":"userid","value":"{userid}"},{"name":"depcode","value":"{depcode}"},{"name":"saleqty","value":"{saleqty}"},{"name":"pcbid","value":"{pcbid}"},{"name":"quoteclass","value":"{quoteclass}"}]}
# 3.2. WebSocket
使用WebSocket客户端,连接至 TaskRunner 中的 WebSocket 服务端。向 WebSocket 服务端发送以下文本实现自定程序的调用。
{"action":"workflow","name":"wf_sdquote","params":[{"name":"companyid","value":"{companyid}"},{"name":"partno","value":"{partno}"},{"name":"userid","value":"{userid}"},{"name":"depcode","value":"{depcode}"},{"name":"saleqty","value":"{saleqty}"},{"name":"pcbid","value":"{pcbid}"},{"name":"quoteclass","value":"{quoteclass}"}]}
# 3.3. MQTT
使用 MQTT 客户端,连接至 TaskRunner 连接的 MQTT 服务器。MQTT 客户端向 TaskRunner 订阅的主题发送以下文本实现自定程序的调用。
{"action":"workflow","name":"wf_sdquote","params":[{"name":"companyid","value":"{companyid}"},{"name":"partno","value":"{partno}"},{"name":"userid","value":"{userid}"},{"name":"depcode","value":"{depcode}"},{"name":"saleqty","value":"{saleqty}"},{"name":"pcbid","value":"{pcbid}"},{"name":"quoteclass","value":"{quoteclass}"}]}
# 3.4. 代码调用
可以在TaskRunner的其他功能代码(自定程序、MQTT自定程序、自动化作业、其他工作流)中调用这个自定程序。使用方法如下:
var params = new TStringList();
params.Values["companyid"] = {companyid};
params.Values["partno"] = {partno};
params.Values["userid"] = {userid};
params.Values["depcode"] = {depcode};
params.Values["saleqty"] = {saleqty};
params.Values["pcbid"] = {pcbid};
params.Values["quoteclass"] = {quoteclass};
UGCM.RunWorkFlow("wf_sdquote",params);
2
3
4
5
6
7
8
9
params := TStringList.Create();
params.Values['companyid'] := {companyid};
params.Values['partno'] := {partno};
params.Values['userid'] := {userid};
params.Values['depcode'] := {depcode};
params.Values['saleqty'] := {saleqty};
params.Values['pcbid'] := {pcbid};
params.Values['quoteclass'] := {quoteclass};
UGCM.RunWorkFlow('wf_sdquote',params);
2
3
4
5
6
7
8
9