暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

EDI X12数据包生成

不想做程序员 2018-10-24
1712

        EDI电子数据交换,是对国际贸易中的采购订单、装箱单、提货单等数据的交换,定义的一种国际标准。有X12、EDIFACT、TRADACOMS及ebXML等多种报文格式,支持AS2、OFTP、SFTP、FTP等传输协议。

X12报文结构,参照百度文库:https://wenku.baidu.com/view/4dd847d2240c844769eaeeba.html


X12为例报文层次如下:

完整的856报文示例,以缩进表明层次关系


可以使用一款开源的插件,来实现X12报文生成、转换,下载地址为:

https://github.com/Inteligenz/X12Parser

此插件,用xml文件定义了各种单据的格式。


以下代码以上边第二张图片的856范本为例,856详解,请参照百度文库:https://wenku.baidu.com/view/4dd847d2240c844769eaeeba.html


先定义interchange ,交换报文,即ISA

Interchange interchange = new Interchange(DateTime.Now, 1, true, '~', '*', '>');

interchange.InterchangeSenderId = "taisingTest";

interchange.InterchangeReceiverId = "157269697";

interchange.SetElement(14, "0");


interchange 下定义FunctionGroup,即GS

FunctionGroup functionGroup= interchange.AddFunctionGroup("SH", DateTime.Now, 1);

functionGroup.ApplicationSendersCode = "taisingTest";

functionGroup.ApplicationReceiversCode = "157269697";

functionGroup.SetElement(4, DateTime.Now.ToString("yyMMdd"));


functionGroup下定义Transaction,即ST

Transaction transaction= functionGroup.AddTransaction("856", "0001");

Segment bsn= transaction.AddSegment("BSN");

bsn.SetElement(1, "00"); //2/2

bsn.SetElement(2, "00000"); //Shipper's Ship Notice Identification 2/10

bsn.SetElement(3, DateTime.Now.ToString("yyyyMMdd")); //Date

bsn.SetElement(4, DateTime.Now.ToString("HHMM"));


transaction下定义Segment,如PEF、TD、REF、HL等

var seg = transaction.AddSegment(new TypedSegmentDTM());

seg.DTM01_DateTimeQualifier=DTPQualifier.Shipped; //Shipped=011

seg.DTM02_Date= DateTime.Now.ToString("yyyyMMdd"); //Ship Date

var h1= transaction.AddHLoop("1","S",false); //HL1

var prf=h1.AddSegment("PRF");

prf.SetElement(1, "PO18001");

prf.SetElement(4, "20180823");

h1.AddSegment("TD1*BOX*2~");

h1.AddSegment("TD5*B*2*01*A~");


实例interchange格式化成X12报文字符串

string result=interchange.SerializeToX12(true)  


成EDI文件

 File.WriteAllText("test.edi", result);

文章转载自不想做程序员,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论