今天分享EDI报文转换,主要围绕X12标准 850 采购订单展开介绍。
以下方案的源代码先分享出来。
https://www.kasoftware.com/translation/edi_xml_convert_sample.html
实现EDI转自定义XML,可以分两步完成。
- 根据国际标准,先将EDI文件转换为标准的XML文件;
- 通过脚本,实现标准XML与自定义XML的关系映射。
以850采购订单为例,源文件如下:
ISA*00* *00* *ZZ*WAYNE_TECH *ZZ*ACME *160609*1330*U*00401*000000007*0*T*>~
GS*PO*WAYNE_TECH*ACME*20160609*1330*7*T*004010~
ST*850*0001~
BEG*00*DS*0476696888**20150708~
REF*SB*ZZ11~
REF*6P*ZZ~
REF*8M*0056~
REF*CR*1070335099~
REF*CO*7109790082~
PER*CN*ACME, Inc.*TE*(555) 555-5555~
CSH*SC~
SAC*C*ZZZZ**********06~
TD5*Z*2*123456~
N9*PD*ZCOF~
MSG*Thanks!~
N1*BY*Wayne Tech*92*5601~
N2*Wayne Tech*~
N3*125 WayneHigh Road.~
N1*EN*ACME, Inc.~
N1*ST*Wayne Tech Plant 1*92*0000505462~
N2*Wayne Tech Plant 1*~
N3*100 Wayne Ave.~
N4*Chapel Hill*MX*27514*US**~
PO1**500000*EA*495*TP*BP*337S3744*VP*422242224~
PID*F****500,000 red widgets****EN~
SCH*500000*EA***002*20180708~
PO1**100*EA*395*HP*BP*337S3745*VP*422242226~
PID*F****100 blue widgets****EN~
SCH*100*EA***002*20180708~
PO1**500*EA*210*TP*BP*337S3746*VP*422201210~
PID*F****AH-0310 red widgets****EN~
SCH*500*EA***002*20180708~
PO1**150*EA*350*TP*BP*337S3747*VP*422241452~
PID*F****F-100 blue widgets****EN~
SCH*100*EA***002*20180708~
PO1**500000*EA*495*TP*BP*337S3748*VP*422244512~
PID*F****HU-021 black widgets****EN~
SCH*500000*EA***002*20180708~
PO1**1500*EA*3000*HP*BP*337S3749*VP*422241023~
PID*F****100-20J widgets****EN~
SCH*100*EA***002*20180708~
CTT*6*500100~
SE*39*0001~
GE*1*7~
IEA*1*000000007~
先看转换标准XML的结果,内容看似很长,一半以上的内容都是注释,解释每个字段对应的业务含义,即便没有EDI规范,也可以快速了解该EDI文件都包含了哪些业务数据:
<Interchange Delimiters=":*. ^~" xmlns="http://www.rssbus.com" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<Meta>
<!--Authorization Information Qualifier-->
<ISA01><!--No Authorization Information Present (No Meaningful Information in I02)-->00</ISA01>
<!--Authorization Information-->
<ISA02> </ISA02>
<!--Security Information Qualifer-->
<ISA03>00</ISA03>
<!--Security Information-->
<ISA04> </ISA04>
<!--Interchange ID Qualifier-->
<ISA05><!--Mutually Defined-->ZZ</ISA05>
<!--Interchange Sender ID-->
<ISA06>WAYNE_TECH </ISA06>
<!--Interchange ID Qualifier-->
<ISA07><!--Mutually Defined-->ZZ</ISA07>
<!--Interchange Receiver ID-->
<ISA08>ACME </ISA08>
<!--Interchange Date-->
<ISA09>160609</ISA09>
<!--Interchange Time-->
<ISA10>1330</ISA10>
<!--Interchange Control Standards Identifier-->
<ISA11>U</ISA11>
<!--Interchange Control Version Number Code-->
<ISA12><!--Standards Approved for Publication by ASC X12 Procedures Review Board through October 1997-->00401</ISA12>
<!--Inter Control Number-->
<ISA13>000000007</ISA13>
<!--Acknowlegment Requested Code-->
<ISA14>0</ISA14>
<!--Interchange Usage Indicator Code-->
<ISA15><!--Test Data-->T</ISA15>
<!--Component Element Separator-->
<ISA16>></ISA16>
</Meta>
<FunctionalGroup>
<Meta>
<!--Functional Identifier Code-->
<GS01><!--Purchase Order (850)-->PO</GS01>
<!--Application Sender's Code-->
<GS02>WAYNE_TECH</GS02>
<!--Application Receiver's Code-->
<GS03>ACME</GS03>
<!--Date-->
<GS04>20160609</GS04>
<!--Time-->
<GS05>1330</GS05>
<!--Group Control Number-->
<GS06>7</GS06>
<!--Responsible Agency Code-->
<GS07><!--Transportation Data Coordinating Committee (TDCC)-->T</GS07>
<!--Version / Release / Industry Identifier Code-->
<GS08><!--Standards Approved for Publication by ASC X12 Procedures Review Board through October 1997-->004010</GS08>
</Meta>
<TransactionSet>
<TX-00401-850 type="TransactionSet">
<Meta>
<!--Transaction Set Identifier Code-->
<ST01><!--Purchase Order-->850</ST01>
<!--Transaction Set Control Number-->
<ST02>0001</ST02>
</Meta>
<BEG type="Segment">
<!--Transaction Set Purpose Code-->
<BEG01><!--Original-->00</BEG01>
<!--Purchase Order Type Code-->
<BEG02><!--Dropship-->DS</BEG02>
<!--Purchase Order Number-->
<BEG03>0476696888</BEG03>
<!--Release Number-->
<BEG04 xsi:nil="true"/>
<!--Date-->
<BEG05>20150708</BEG05>
</BEG>
<REF type="Segment">
<!--Reference Identification Qualifier-->
<REF01><!--Sales Region Number-->SB</REF01>
<!--Reference Identification-->
<REF02>ZZ11</REF02>
</REF>
<REF type="Segment">
<!--Reference Identification Qualifier-->
<REF01><!--Group Number-->6P</REF01>
<!--Reference Identification-->
<REF02>ZZ</REF02>
</REF>
<REF type="Segment">
<!--Reference Identification Qualifier-->
<REF01><!--Originating Company Identifier-->8M</REF01>
<!--Reference Identification-->
<REF02>0056</REF02>
</REF>
<REF type="Segment">
<!--Reference Identification Qualifier-->
<REF01><!--Customer Reference Number-->CR</REF01>
<!--Reference Identification-->
<REF02>1070335099</REF02>
</REF>
<REF type="Segment">
<!--Reference Identification Qualifier-->
<REF01><!--Customer Order Number-->CO</REF01>
<!--Reference Identification-->
<REF02>7109790082</REF02>
</REF>
<PER type="Segment">
<!--Contact Function Code-->
<PER01><!--General Contact-->CN</PER01