当直采客户向德州仪器TI发出ORDERS(采购订单)后,会收到德州仪器TI回复的ORDRSP(采购订单响应)。订单响应是对我们发出的原始订单的信息确认,在ORDRSP(采购订单)报文中,一般会包含原始订单的内容,例如采购订单编号PO Number,订单日期PO Date,物料编号Item Number,以及响应状态码Action Request code等等。
德州仪器TI对于采购订单的响应类型,一般会在行项目中体现,也就是EDI报文中的LIN段。
Action Request code不同的值表示的业务含义:
- 2:删除。在买方的采购订单变更请求之后,TI从原始采购订单中删除了行项目。
- 5:未经修改接受。TI完全接受该行项目。
- 6:经修改后接受。该行项目经修改后被TI接受。此代码也用于德州仪器TI发起的修改,该修改不直接响应买方的采购订单变更请求。
在了解如何从EDI技术角度解析德州仪器TI直供业务EDI项目ORDRSP报文之前,请先下载知行EDI系统,进行安装,下文中的转换过程都是围绕知行EDI系统完成的。
1 先创建EDIFACT端口实现EDI转标准XML;
2 创建XML Map端口实现标准XML与自定义XML的数据关系映射。
具体操作步骤,请观看本文尾部的视频。
报文转换过程
将接收自德州仪器TI的EDIFACT标准ORDRSP业务报文转换为用户自定义XML订单响应为例,转换过程主要分为如下3个步骤:
1.熟悉EDIFACT标准的ORDRSP报文
如下EDIFACT标准的ORDRSP报文,对于报文中的每一个段加以注释,以便理解该报文中所涵盖的业务数据。
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 |
BGM+231+POC1:9’ - POC1: 订单响应编号 - 9:原始订单 DTM+137+19981020:102’ - 137:控制符,表示文件创建时间 - 19981020: 订单响应时间 RFF+ON:PO11223’ - ON:控制符,表示采购订单编号 - PO11223: 采购订单编号 NAD+BY+AABBCC::92’ - BY:控制符,表示采购商编号 - AABBCC: 采购商编号 NAD+SE+FACTORYA::92’ - SE:控制符,表示供应商编号 - FACTORYA: 供应商编号 CUX+2:USD:9’ - USD: 美元 - 9:订单货币 LIN+1+5+ITEM222:BP::92’ - 5: 未经修改接收 - ITEM222: 买方物料编号 PIA+1+12345:VP::91’ - 12345: 供应商物料编号 QTY+113:3300:PCE’ - 3300: 交付总数 - PCE:piece PRI+AAA:5.50:CT::1:PCE’ - 5.50: 净价 SCC+1’ - 1:确认 QTY+113:2200’ - 2200: 交付数量 DTM+67:19990204:102’ - 19990204: 交付日期 SCC+1’ - 1:确认 QTY+113:1100’ - 1100: 交付数量 DTM+67:19990304:102’ -19990304: 交付日期 |
2.由ORDRSP报文转化得到标准XML格式订单响应
上一步展示了EDIFACT ORDRSP(采购订单响应)原始报文,可读性差,即便是EDI专业人员,也需要借助EDI规范说明解读报文中每个段(Segment)中所携带的业务数据。
以下示例是通过EDIFACT端口后,输出的标准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 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 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 |
<Interchange Delimiters=":+.?*';" xmlns="http://www.rssbus.com" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> ... <TransactionSet> <TX-D97A-ORDRSP type="TransactionSet"> ... <BGM type="Segment"> <!--DOCUMENT/MESSAGE NAME--> <C002 type="Composite"> <!--Document/message name, coded--> <_1001> <!--Purchase order response-->231 </_1001> </C002> <!--DOCUMENT/MESSAGE IDENTIFICATION--> <C106 type="Composite"> <!--Document/message number--> <_1004>POR001 </_1004> </C106> <!--MESSAGE FUNCTION, CODED--> <_1225> <!--Original-->9 </_1225> </BGM> <DTM type="Segment"> <!--DATE/TIME/PERIOD--> <C507 type="Composite"> <!--Date/time/period qualifier--> <_2005> <!--Document/message date/time-->137 </_2005> <!--Date/time/period--> <_2380>19981015 </_2380> <!--Date/time/period format qualifier--> <_2379> <!--CCYYMMDD-->102 </_2379> </C507> </DTM> <RFFLoop1 type="Loop"> <RFF type="Segment"> <!--REFERENCE--> <C506 type="Composite"> <!--Reference qualifier--> <_1153> <!--Order number (purchase)-->ON </_1153> <!--Reference number--> <_1154>PO11223 </_1154> </C506> </RFF> </RFFLoop1> <NADLoop1 type="Loop"> <NAD type="Segment"> <!--PARTY QUALIFIER--> <_3035> <!--Buyer-->BY </_3035> <!--PARTY IDENTIFICATION DETAILS--> <C082 type="Composite"> <!--Party id. identification--> <_3039>AABBCC </_3039> <!--Code list qualifier--> <_1131> </_1131> <!--Code list responsible agency, coded--> <_3055> <!--Assigned by buyer or buyer's agent-->92 </_3055> </C082> </NAD> </NADLoop1> <CUXLoop1 type="Loop"> <CUX type="Segment"> <!--CURRENCY DETAILS--> <C504 type="Composite"> <!--Currency details qualifier--> <_6347> <!--Reference currency-->2 </_6347> <!--Currency, coded--> <_6345>USD </_6345> <!--Currency qualifier--> <_6343> <!--Order currency-->9 </_6343> </C504> </CUX> </CUXLoop1> <LINLoop1 type="Loop"> <LIN type="Segment"> <!--LINE ITEM NUMBER--> <_1082>1 </_1082> <!--ACTION REQUEST/NOTIFICATION, CODED--> <_1229> <!--Accepted with amendment-->6 </_1229> <!--ITEM NUMBER IDENTIFICATION--> <C212 type="Composite"> <!--Item number--> <_7140>ITEM222 </_7140> <!--Item number type, coded--> <_7143> <!--Buyer's part number-->BP </_7143> <!--Code list qualifier--> <_1131> </_1131> <!--Code list responsible agency, coded--> <_3055> <!--Assigned by buyer or buyer's agent-->92 </_3055> </C212> </LIN> <PIA type="Segment"> <!--PRODUCT ID. FUNCTION QUALIFIER--> <_4347> <!--Additional identification-->1 </_4347> <!--ITEM NUMBER IDENTIFICATION--> <C212 type="Composite"> <!--Item number--> <_7140>12345 </_7140> <!--Item number type, coded--> <_7143> <!--Vendor's (seller's) part number-->VP </_7143> <!--Code list qualifier--> <_1131> </_1131> <!--Code list responsible agency, coded--> <_3055> <!--Assigned by seller or seller's agent-->91 </_3055> </C212> </PIA> <QTY type="Segment"> <!--QUANTITY DETAILS--> <C186 type="Composite"> <!--Quantity qualifier--> <_6063> <!--Quantity to be delivered-->113 </_6063> <!--Quantity--> <_6060>3300 </_6060> <!--Measure unit qualifier--> <_6411>PCE </_6411> </C186> </QTY> <SCCLoop2 type="Loop"> <SCC type="Segment"> <!--DELIVERY PLAN STATUS INDICATOR, CODED--> <_4017> <!--Firm-->1 </_4017> </SCC> <QTYLoop4 type="Loop"> <QTY type="Segment"> <!--QUANTITY DETAILS--> <C186 type="Composite"> <!--Quantity qualifier--> <_6063> <!--Quantity to be delivered-->113 </_6063> <!--Quantity--> <_6060>2200 </_6060> </C186> </QTY> <DTM type="Segment"> <!--DATE/TIME/PERIOD--> <C507 type="Composite"> <!--Date/time/period qualifier--> <_2005> <!--Delivery date/time, current schedule-->67 </_2005> <!--Date/time/period--> <_2380>19990204 </_2380> <!--Date/time/period format qualifier--> <_2379>102 SCC </_2379> </C507> </DTM> </QTYLoop4> <QTYLoop4 type="Loop"> <QTY type="Segment"> <!--QUANTITY DETAILS--> <C186 type="Composite"> <!--Quantity qualifier--> <_6063> <!--Quantity to be delivered-->113 </_6063> <!--Quantity--> <_6060>1100 </_6060> </C186> </QTY> <DTM type="Segment"> <!--DATE/TIME/PERIOD--> <C507 type="Composite"> <!--Date/time/period qualifier--> <_2005> <!--Delivery date/time, current schedule-->67 </_2005> <!--Date/time/period--> <_2380>19990304 </_2380> <!--Date/time/period format qualifier--> <_2379> <!--CCYYMMDD-->102 </_2379> </C507> </DTM> </QTYLoop4> </SCCLoop2> </LINLoop1> <UNS type="Segment"> <!--SECTION IDENTIFICATION--> <_0081> <!--Detail/summary section separation-->S </_0081> </UNS> </TX-D97A-ORDRSP> </TransactionSet> </Interchange> |
3.由标准XML格式订单响应转化得到自定义XML格式订单响应
上文标准XML,较标准EDIFACT ORDRSP(采购订单响应)而言,可读性高,但冗余字段过多,这一步我们将对标准XML进行简化,仅输出对于内部业务系统而言重要的业务数据。
这一步,是依赖XML Map端口实现的,简单的拖拽功能即可实现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 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 |
<ordrsp_master> <!-- 采购订单响应编号 --> <ordrsp_number>POR001 </ordrsp_number> <!-- 采购订单响应日期 --> <create_datetime>19981015 </create_datetime> <!-- 原始采购订单编号 --> <order_number>PO11223 </order_number> <!-- 直采客户身份标识 --> <buyer_id>AABBCC </buyer_id> <!-- 货币类型 --> <order_currency>USD </order_currency> <!-- 订单响应行明细 --> <ordrsp_item> <!-- 订单响应行号 --> <line_item_number>1 </line_item_number> <!-- 订单行响应状态码 --> <request_status>6 </request_status> <!-- 直采客户的物料编号 --> <buyer_item_number>ITEM222 </buyer_item_number> <!-- 德州仪器/TI的物料编号 --> <seller_item_number>12345 </seller_item_number> <!-- 物料价格 --> <net_price>5.50 </net_price> <!-- 物料单位 --> <price_unit>PCE </price_unit> <!-- 确认订购总数量 --> <total_ack_quantity>3300 </total_ack_quantity> <!-- 订单行数量明细 --> <ordrsp_qty> <plan_status>1 </plan_status> <!-- 订单数量 --> <delivery_quantity>2200 </delivery_quantity> <!-- 请求交货日期 --> <delivery_datetime>19990204 </delivery_datetime> </ordrsp_qty> <ordrsp_qty> <plan_status>1 </plan_status> <!-- 订单数量 --> <delivery_quantity>1100 </delivery_quantity> <!-- 请求交货日期 --> <delivery_datetime>19990304 </delivery_datetime> </ordrsp_qty> </ordrsp_item> </ordrsp_master> |
阅读到这里,可以看到最终输出的XML,简单明了。之前有客户提到过,为什么不直接一步到位做到如此效果呢? 其实早期我们就是那样做的,前台简单的效果展示,必须通过成百上千行代码的支撑。现基于我们积累的实施经验,开发相关功能,简化解析过程,同时也便于后期维护。
视频演示
注:文案部分图片及内容来源于网络,版权归原创作者所有,如有侵犯到您的权益,请您联系我们进行删除,给您带来困扰,我们深感抱歉。