客户在使用知行EDI系统发送文件时,有时候交易伙伴对文件的时效性要求非常严格,如果没有及时发出报文,有可能会影响供应商评级扣分,甚至被交易伙伴开具罚单。
因此客户常常会有这样的担心:端口下是否有堆积的文件没有及时发送,该如何监控呢?
手动监控
如果您安装了知行之桥.net版本,可以将如下代码复制到一个.rst文件中,例如getMessageCount.rst,放置在知行之桥安装路径/www文件夹下
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 |
<arc:script xmlns:arc="http://www.arcesb.com/ns/arcscript/2"> <arc:info title="GetMessageCount" description="Download files for this port."> <input name="Workspace" desc="The id of the workspace."/> <input name="ConnectorId" desc="The id of the conector."/> <output name="Workspace" desc="The message id of the file." /> <output name="ConnectorId" desc="The subfolder of the file." /> <output name="Count" desc="The name of the file." /> </arc:info> <table id="tbMessageCount" class="table table-hover table-bordered table-striped table-condensed dataTable no-footer"> <thead> <tr> <th>Workspace</th> <th>Connector ID</th> <th>Unsent Files</th> </tr> </thead> <tbody> <rsb:set attr="port.workspace" value="[Workspace | def | trim]" /> <rsb:set attr="port.connectorId" value="[ConnectorId | def | trim]" /> <rsb:set attr="global.datadir" value="[AppDataDirectory()]" /> <rsb:if exp="![global.datadir | direxists]"> <rsb:throw code="-1"/> </rsb:if> <!--Default workspace--> <rsb:set attr="fileIn.path" value="[global.datadir | pathcombine('data')]" /> <rsb:set attr="fileIn.fileordir" value="dirs" /> <rsb:call op="fileListDir" in="fileIn" out="fileOut"> <rsb:set attr="fileIn2.path" value="[fileOut.file:fullname | pathcombine('Send')]" /> <rsb:if exp="[fileIn2.path | direxists]"> <rsb:set attr="fileIn2.recurse" value="true" /> <rsb:set attr="fileIn2.fileordir" value="files" /> <rsb:set attr="tmp.count" value="0" /> <rsb:call op="fileListDir" in="fileIn2"> <rsb:set attr="tmp.count" value="[_index]" /> </rsb:call> <rsb:set attr="output.Workspace" value="DEFAULT" /> <rsb:set attr="output.ConnectorId" value="[fileOut.file:name]" /> <rsb:set attr="output.Count" value="[tmp.count]" /> <rsb:push item="output" /> <tr> <td>[output.Workspace]</td> <td>[output.ConnectorId]</td> <td>[output.Count]</td> </tr> </rsb:if> </rsb:call> <!--Other workspaces--> <rsb:set attr="fileIn3.path" value="[global.datadir | pathcombine('workspaces')]" /> <rsb:set attr="fileIn3.fileordir" value="dirs" /> <rsb:if exp="[fileIn3.path | direxists]"> <rsb:call op="fileListDir" in="fileIn3" out="fileOut2"> <rsb:set attr="fileIn4.path" value="[fileOut2.file:fullname]" /> <rsb:set attr="fileIn4.fileordir" value="dirs" /> <rsb:call op="fileListDir" in="fileIn4" out="fileOut3"> <rsb:set attr="fileIn5.path" value="[fileOut3.file:fullname | pathcombine('Send')]" /> <rsb:if exp="[fileIn5.path | direxists]"> <rsb:set attr="fileIn5.recurse" value="true" /> <rsb:set attr="fileIn5.fileordir" value="files" /> <rsb:set attr="tmp.count" value="0" /> <rsb:call op="fileListDir" in="fileIn5"> <rsb:set attr="tmp.count" value="[_index]" /> </rsb:call> <rsb:set attr="output1.Workspace" value="[fileOut2.file:name]" /> <rsb:set attr="output1.ConnectorId" value="[fileOut3.file:name]" /> <rsb:set attr="output1.Count" value="[tmp.count]" /> <rsb:push item="output1" /> <tr> <td>[output1.Workspace]</td> <td>[output1.ConnectorId]</td> <td>[output1.Count]</td> </tr> </rsb:if> </rsb:call> </rsb:call> </rsb:if> </arc:script> </tbody> </table> |
此时,可以在浏览器直接访问地址:http://xxx.xxx.xxx.xxx:port/getMessageCount.rst即可查看知行EDI平台上所有工作区下的各端口待发送的文件数量,所涉及的属性包含Workspace(工作区名称)、Connector ID(端口名称)和Unsent Files(待发送文件数量)。
如果您安装了知行之桥Java版本,可将getMessageCount.rst放在arc.war中,重启Arc服务,即可在浏览器访问http://xxx.xxx.xxx.xxx:port/getMessageCount.rst。
具体操作步骤:进入知行之桥安装路径\webapp目录下,将arc.war重命名为arc.war.zip,解压缩后将getMessageCount.rst放进去(如下图),再将文件打包为arc.war。
自动监控
如果您不想每次在浏览器手动执行URL查看待发送文件数量,我们可以在知行EDI平台设置自动监控。首先,建立一个Script端口,将这段代码复制到端口的设置页面。
1 2 3 4 5 6 7 8 9 |
<!-- Time limits (Minutes) --> <rsb:set attr="file.time" value="30" /> <!-- Files amount limits--> <rsb:set attr="file.amount" value="1" /> <!-- Email To --> <rsb:set attr="file.email:to" value="xxx@xx.cn" /> <!-- Email Subject --> <rsb:set attr="file.email:subject" value="Warning: Unsent file exceeds limit!" /> <rsb:call op="getMessageCount.rst" in="file"/> |
其中,file.time(文件停留在Send目录下的时间大于这个值,单位为minutes),file.amount(当Send目录下的文件数量大于这个值)和file.email:to(接收通知的邮箱)都是可以根据实际业务情况设置的。
同时将如下代码复制到一个命名为getMessageCount.rst的文件中,放置在知行之桥安装路径下。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 |
<arc:script xmlns:arc="http://www.arcesb.com/ns/arcscript/2"> <arc:info title="GetMessageCount" description="Download files for this port."> <input name="Workspace" desc="The id of the workspace."/> <input name="ConnectorId" desc="The id of the conector."/> <input name="Time" desc="File residence time."/> <input name="Amount" desc="File amount."/> <input name="email:*" desc="Email information"/> <output name="Workspace" desc="The message id of the file." /> <output name="ConnectorId" desc="The subfolder of the file." /> <output name="Count" desc="The name of the file." /> </arc:info> <arc:set attr="file.warning" value="false" /> <arc:set attr="file.time" value="9" /> <arc:set attr="file.amount" value="9" /> <arc:check value="[Time | def | trim]"> <arc:set attr="file.time" value="[Time | add(0)]" /> </arc:check> <arc:check value="[Amount | def | trim]"> <arc:set attr="file.amount" value="[Amount | add(0)]" /> </arc:check> <arc:check value="[email:subject | def | trim]"> <arc:set attr="email.subject" value="[email:subject | trim]" /> </arc:check> <arc:check value="[email:to | def | trim]"> <arc:set attr="email.to" value="[email:to | trim]" /> </arc:check> <arc:set attr="email.html"> <table id="tbMessageCount" border="1" style="border-collapse: collapse;" cellpadding="5"> <colgroup> <col width="*"> <col width="*"> <col width="140px"> </colgroup> <thead> <tr> <th>Workspace</th> <th>Connector ID</th> <th>Unsent Files</th> </tr> </thead> <tbody> </arc:set> <arc:set attr="port.workspace" value="[Workspace | def | trim]" /> <arc:set attr="port.connectorId" value="[ConnectorId | def | trim]" /> <!-- <arc:call op="portGetSettings" out="settings"> --> <arc:set attr="global.datadir" value="[AppDataDirectory()]" /> <!-- </arc:call> --> <arc:if exp="![global.datadir | direxists]"> <arc:throw code="-1"/> </arc:if> <!--Default workspace--> <arc:set attr="fileIn.path" value="[global.datadir | pathcombine('data')]" /> <arc:set attr="fileIn.fileordir" value="dirs" /> <arc:call op="fileListDir" in="fileIn" out="fileOut"> <arc:set attr="fileIn2.path" value="[fileOut.file:fullname | pathcombine('Send')]" /> <arc:if exp="[fileIn2.path | direxists]"> <arc:set attr="fileIn2.recurse" value="true" /> <arc:set attr="fileIn2.fileordir" value="files" /> <arc:set attr="tmp.count" value="0" /> <arc:set attr="output.Workspace" value="DEFAULT" /> <arc:set attr="output.ConnectorId" value="[fileOut.file:name]" /> <arc:call op="fileListDir" in="fileIn2" out="fileOut4"> <arc:if exp="[_ | now | datediff(minute, [fileOut4.file:mtime])] > [file.time] && [fileOut4.file:name | endswith('.tmp',false,true)]"> <arc:set attr="tmp.count" value="[tmp.count | add]" /> </arc:if> </arc:call> <arc:if exp="[tmp.count] > [file.amount]"> <arc:set attr="file.warning" value="true" /> <arc:set attr="email.html">[email.html] <tr> <td style="text-align:right;">[output.Workspace]</td> <td style="text-align:right;">[output.ConnectorId]</td> <td style="text-align:right;">[tmp.count]</td> </tr> </arc:set> </arc:if> </arc:if> </arc:call> <!--Other workspaces --> <arc:set attr="fileIn3.path" value="[global.datadir | pathcombine('workspaces')]" /> <arc:set attr="fileIn3.fileordir" value="dirs" /> <arc:if exp="[fileIn3.path | direxists]"> <arc:call op="fileListDir" in="fileIn3" out="fileOut2"> <arc:set attr="fileIn4.path" value="[fileOut2.file:fullname]" /> <arc:set attr="fileIn4.fileordir" value="dirs" /> <arc:call op="fileListDir" in="fileIn4" out="fileOut3"> <arc:set attr="fileIn5.path" value="[fileOut3.file:fullname | pathcombine('Send')]" /> <arc:if exp="[fileIn5.path | direxists]"> <arc:set attr="fileIn5.recurse" value="true" /> <arc:set attr="fileIn5.fileordir" value="files" /> <arc:set attr="tmp.count" value="0" /> <arc:set attr="output1.Workspace" value="[fileOut2.file:name]" /> <arc:set attr="output1.ConnectorId" value="[fileOut3.file:name]" /> <arc:call op="fileListDir" in="fileIn5" out="fileOut5"> <arc:if exp="[_ | now | datediff(minute, [fileOut5.file:mtime])] > [file.time] && [fileOut5.file:name | endswith('.tmp',false,true)]"> <arc:set attr="tmp.count" value="[tmp.count | add]" /> </arc:if> </arc:call> <arc:if exp="[tmp.count] > [file.amount]"> <arc:set attr="file.warning" value="true" /> <arc:set attr="email.html">[email.html] <tr> <td style="text-align:right;">[output1.Workspace]</td> <td style="text-align:right;">[output1.ConnectorId]</td> <td style="text-align:right;">[tmp.count]</td> </tr> </arc:set> </arc:if> </arc:if> </arc:call> </arc:call> </arc:if> </arc:script> <arc:set attr="email.html" value="[email.html]</tbody></table>" /> <arc:equals attr="file.warning" value="true"> <arc:call op="appSendEmail" in="email" /> </arc:equals> |
我们可以设置Script端口定时执行脚本,便在满足条件时收到如下邮件。
以上操作对Java版本同样适用,但注意Java版本Script端口这里需要写getMessageCount.rst文件所在的绝对路径。
更多 EDI 信息,请参阅: EDI 是什么?
注:文案部分图片及内容来源于网络,版权归原创作者所有,如有侵犯到您的权益,请您联系我们进行删除,给您带来困扰,我们深感抱歉。