标签:XML 文件 ERP 解决方案 报文 EDI Json
JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式,易于阅读和编写,同时也易于机器解析和生成。因此在EDI项目中常常需要将EDI报文解析为Json格式的文件来与ERP系统集成。与其他方案类似,Json格式的EDI 解决方案中同样包含传输和转换两个步骤,但如何将收到的EDI报文解析为能与ERP系统集成的Json文件呢?
要将EDI报文解析为Json格式的文件,首先需要了解EDI报文的结构,根据报文设计出对应的XML文件格式,最后将XML文件转换为Json格式的文件,再将其Json文件发送到ERP系统对应的API中即可。
下面小知就以ORDERS报文为例,来带大家看看如何将EDI报文解析为对应的Json文件,并传输到ERP系统中。
1 EDIFACT ORDERS报文
下方即为示例ORDERS报文的内容:
BGM+220+123456789' DTM+137:20200202:102' DTM+2:20200202:102' NAD+SU+1234567890102::9' NAD+BY+1234567890123::9' CTA+OC+ChinaShangHai:First Street' COM+?+112233441:TE' COM+?+443322115:FX' NAD+DP+1234567890098::9' CTA+GR+A company:The EDI apartment' COM+?+123456789:TE' COM+?+987654321:FX' NAD+IV+4567890123456::9' CUX+2:USD:9' PAT+22++5::D:45' TOD+3++FOB' LOC+1+:::BeiJing' LIN+00010++5463728190345:EN' PIA+1+123456789:BP::92' IMD+F+ABC+:::Item01, M, red' IMD+C+98+::92:M' IMD+F+35+::92:red' QTY+21:3:PCE' PRI+AAA:2.2:::1:PCE' LIN+00020++6574839201098:EN' PIA+1+12345678:BP::92' IMD+F+CBA+:::Item2, S, blue' IMD+C+98+::92:S' IMD+F+35+::92:blue' QTY+21:5:PCE' PRI+AAA:9.9:::1:PCE' UNS+S' MOA+86:56.1' CNT+2:2' UNT+31+1' UNZ+1+10001' |
看着这样的EDI报文,难免有些头大,不要着急,小知带大家看看这EDI报文的真面目。首先看看报文的首部的UNA、UNB和UNH字段,这几个字段表示的是EDI报文的头部信息,这些头部信息中包含着该EDI报文Message ID,报文的日期、报文的种类以及报文的规范等信息。同时UNA字段与报文尾部的UNH字段为一对,表示报文的开始与结束。
再往下看,从BGM到LOC字段包含此订单的主信息,其中BGM字段表示此EDI报文的业务主键,DTM表示与此报文有关的日期时间,NAD则表示联系人的信息,例如NAD+SU则表示供应商的信息。CTA以及COM表示联系人的联系方式等信息,LOC则表示地址信息。而从LIN字段到PRI字段则表示此订单的物料信息,通常一个订单中往往包含多种物料,因此在一个报文中可能含有多个此结构。在知道了这些信息后,我们就可以按照此报文的结构来设计对应的XML模板了。
2 设计XML模板
根据报文中对应的字段,我们便可设计出其对应的XML模板,如下所示:
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 | <Items> <order_header> <id /> <buyer_number/> <buyer_telephone /> <buyer_company /> <create_datetime /> <currency /> <delivery_datetime /> <rff_1 /> <invoice_recipent_number/> <order_number /> <status /> <supplier_number/> <supplier_telephone /> <order_items> <id /> <buyer_item_number /> <item_description /> <unit_price /> <po_number /> <price_unit /> <status/> </order_items> </order_header> </Items> |
有了模板之后还需要将EDI 报文输出的标准XML文件与此自定义XML文件在XML Map端口完成映射,生成Json文件对应的XML文件。如何使用XML Map端口来映射文件,可以参考XML Map端口实战,映射完成的XML文件如下所示:
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 | <?xml version="1.0" encoding="UTF-8"?> <Items> <order_header> <id>1</id> <buyer_number>1234567890123</buyer_number> <buyer_company>A company</buyer_company> <buyer_telephone>112233441</buyer_telephone> <create_datetime>20200202</create_datetime> <currency>USD</currency> <delivery_datetime>20200202</delivery_datetime> <rff_1>The EDI apartment</rff_1> <invoice_recipent_number>4567890123456</invoice_recipent_number> <order_number>123456789</order_number> <status type="int">0</status> <supplier_number>1234567890102</supplier_number> <supplier_telephone>+123456789</supplier_telephone> <plant>BeiJing</plant> <order_items> <id>1</id> <buyer_item_number>5463728190345</buyer_item_number> <item_description>Item01, M, red</item_description> <unit_price type="double">PCE</unit_price> <po_number>123456789</po_number> <price_unit>2.2</price_unit> <status>0</status> </order_items> <order_items> <id>2</id> <buyer_item_number>6574839201098</buyer_item_number> <item_description>Item2, S, blue</item_description> <unit_price type="double">PCE</unit_price> <po_number>12345678</po_number> <price_unit>9.9</price_unit> <status type="int">0</status> </order_items> </order_header> </Items> |
3 将XML文件转换为Json文件
我们将上面映射好的XML文件,在Json port转换为Json格式就能得到对应的Json文件了,如下所示:
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 | { "order_header": { "id": "1", "buyer_number": "1234567890123", "buyer_company": "A company", "buyer_telephone": "112233441", "create_datetime": "20200202", "currency": "USD", "delivery_datetime": "20200202", "rff_1": "The EDI apartment", "invoice_recipent_number": "4567890123456", "order_number": "123456789", "status":"0", "supplier_number": "1234567890102", "supplier_telephone": "+123456789", "plant": "BeiJing", "order_items": [ { "id": "1", "buyer_item_number": "5463728190345", "item_description": "Item01, M, red", "unit_price":"PCE", "po_number": "123456789", "price_unit": "2.2", "status": "0" }, { "id": "2", "buyer_item_number": "6574839201098", "item_description": "Item2, S, blue", "unit_price":"PCE", "po_number": "12345678", "price_unit": "9.9", "status": "0" } ] } } |
4 调用Http post请求将Json文件发送到ERP系统中
将EDI报文成功解析为对应的Json文件后,我们还需要将其发送到ERP系统对应的API中,这样才能完成EDI报文与ERP系统的集成。而要如何将此Json文件发送到ERP系统中呢,我们的知行EDI系统为我们提供了方法——利用代码,调用httppost方法,将此Json文件传输到ERP系统中。
下面即为实现此功能的代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 | <rsb:set attr="http.header:name#" value="Authorization"/> <rsb:set attr="http.header:value#" value="4z7D0m9d7Q7i8z3W3o6w "/> <rsb:set attr="http.header:name#" value="Connection"/> <rsb:set attr="http.header:value#" value="keep-alive"/> <rsb:set attr="http.header:name#" value="User-Agent"/> <rsb:set attr="http.header:value#" value="Apache-HttpClient/4.5.3 (Java/1.8.0_45)"/> <rsb:set attr="http.url" value="http://localhost:8001/api.rsc/orders "/> <rsb:set attr="http.postdata" value='file://[FilePath]'/> <rsb:call op="httpPost" in="http" out="out"> <rsb:set attr="output.data" value="[out.http:content]"/> </rsb:call> <rsb:set attr="output.FileName"value="Response.json" /> <rsb:push item="output" /> |
在这段代码中,首先将http post请求的头部信息写入httpPost方法的header属性中,这里要注意,因为Header属性包含了多种参数,所以需要将各个参数对应的值放入其header属性对应的数组中。这些头部的参数中包含认证、服务器,连接等信息,如非必须的头部信息也可以不填写。其次将请求的URL地址写入HttpPost方法的url属性中,再将Json文件的内容放入httpPost方法的postdata属性中。最后调用httpPost方法,传入这些参数,将Json文件发送到对应的ERP系统的API中
标签:XML,文件,ERP,解决方案,报文,EDI,Json 来源: https://www.cnblogs.com/edi-ka/p/15784404.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。