蘇州市相城區(qū)住房和城鄉(xiāng)建設(shè)局網(wǎng)站網(wǎng)絡(luò)媒體推廣方案
經(jīng)常有客戶問起,為什么在處理EDI文件時(shí)不一次到位,而需要使用多個(gè)端口來分次進(jìn)行處理呢,是不是想要多占用幾個(gè)端口好多賣錢呀?
實(shí)際上,在一開始的知行EDI產(chǎn)品中,功能還沒有這么完善,當(dāng)時(shí)只支持EDI常見的傳輸協(xié)議,那個(gè)時(shí)候我們在做報(bào)文翻譯時(shí),還不能僅通過簡單的配置來實(shí)現(xiàn),需要手寫代碼,去讀取報(bào)文,然后獲取每一行的數(shù)據(jù),再逐一去讀對應(yīng)的業(yè)務(wù)值。參考之前的實(shí)施經(jīng)驗(yàn),覺得實(shí)施過程漫長、前期開發(fā)代碼量大、后期維護(hù)成本也高,經(jīng)過產(chǎn)品部門多次考量,在一次次的產(chǎn)品升級過程中,不停的進(jìn)行功能新增、完善,才形成了現(xiàn)在這樣的一套報(bào)文處理模式。
那么,到底是不是直接對報(bào)文進(jìn)行處理更簡單呢?
假設(shè)我們現(xiàn)在通過AS2傳輸,接收850采購訂單EDI報(bào)文,采用自定義XML方案。
直接處理EDI報(bào)文
我們來回顧一下直接處理業(yè)務(wù)報(bào)文的步驟:
首先,通過AS2收到850采購訂單后,要直接進(jìn)行處理,完成報(bào)文翻譯,我們的代碼邏輯大約如下:
- 先讀取當(dāng)前850采購訂單報(bào)文的內(nèi)容
- 對內(nèi)容進(jìn)行分割,將850采購訂單的內(nèi)容按照節(jié)點(diǎn)分割,例如:ST節(jié)點(diǎn),BEG節(jié)點(diǎn)等等,每個(gè)節(jié)點(diǎn)代表不同的信息
- 開始逐一讀取節(jié)點(diǎn),匹配節(jié)點(diǎn)所屬的業(yè)務(wù)含義,并將每個(gè)節(jié)點(diǎn)中的詳細(xì)業(yè)務(wù)數(shù)據(jù)讀取出來
- 一邊讀取數(shù)據(jù),一邊輸出自定義XML
- 調(diào)試程序,確認(rèn)業(yè)務(wù)邏輯和取值正確
以上步驟中我們可以看出,所有的處理都要使用代碼來實(shí)現(xiàn),那么代碼量一定是非常大的。同時(shí),因?yàn)镋DI報(bào)文中數(shù)據(jù)比較多,而且結(jié)構(gòu)復(fù)雜,所以代碼邏輯也會非常復(fù)雜。在初步完成代碼之后,后續(xù)的業(yè)務(wù)測試過程中,若是因?yàn)閷DI報(bào)文理解不到位,想要修改某一部分的處理邏輯或是取值方式,將會造成很大的工作量,而且往往都是牽一發(fā)而動全身,修改可能會造成其他本來正確的數(shù)據(jù)出錯(cuò)。同時(shí),在切換生產(chǎn)環(huán)境之后,如果貿(mào)易合作伙伴對EDI規(guī)范做了某些升級或者調(diào)整,后來的維護(hù)人員需要將整個(gè)的代碼整體通讀一遍,完全理解之后,才能進(jìn)行修改。
分步處理EDI報(bào)文
如果在目前的知行EDI產(chǎn)品中,我們分多個(gè)端口去完成報(bào)文翻譯,每個(gè)端口都只負(fù)責(zé)各自的功能部分,那么整體步驟如下:
- AS2端口收到850采購訂單后,直接轉(zhuǎn)發(fā)到X12端口(直接配置實(shí)現(xiàn))
- X12端口將EDI報(bào)文轉(zhuǎn)換為標(biāo)準(zhǔn)XML,并轉(zhuǎn)發(fā)到XMLMap端口(直接配置實(shí)現(xiàn))
- XMLMap端口通過界面拖拽,并輔以少許簡單code,實(shí)現(xiàn)轉(zhuǎn)換為自定義XML文件(簡單coding)
以上步驟中我們可以看出,通過這種方式,一方面,代碼量非常少,大家知道,寫的越多,容易出錯(cuò)的地方越多,代碼量少了,大部分功能依賴于產(chǎn)品,所以出錯(cuò)概率會降低。如果有EDI報(bào)文結(jié)構(gòu)更改或是升級的情況,前兩步我們不用做任何修改,只要在最后一步,僅修改需要調(diào)整的部分即可。
標(biāo)準(zhǔn)XML文件
在知行EDI系統(tǒng)中,幾乎所有的EDI報(bào)文處理都是以標(biāo)準(zhǔn)XML文件為媒介的。
XML(可擴(kuò)展標(biāo)記語言)是一種標(biāo)記語言,提供了一種簡單,靈活的文本格式。XML描述文檔的數(shù)據(jù)結(jié)構(gòu),并為所有其他規(guī)范提供通用語法。XML的主要應(yīng)用程序之一就是處理B2B和B2C數(shù)據(jù)交換。
這是部分EDI報(bào)文采購訂單和標(biāo)準(zhǔn)XML采購訂單:
850 原始EDI文件:
...
BEG*00*DS*0476696888**20150708~
REF*SB*ZZ11~
REF*6P*ZZ~
...
經(jīng)X12端口標(biāo)準(zhǔn)XML:
...
<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>
...
我們可以看出,標(biāo)準(zhǔn)XML包含解釋每個(gè)節(jié)點(diǎn)含義的注釋。最重要的是,對于標(biāo)準(zhǔn)XML文件,可以直接將其映射到目標(biāo)格式,而不必查找EDI文檔中每個(gè)節(jié)點(diǎn)的含義,只需參考標(biāo)準(zhǔn)XML文檔中提供的說明和貿(mào)易伙伴提供的規(guī)范即可。
顯而易見,在處理EDI報(bào)文時(shí),并不是直接對EDI報(bào)文進(jìn)行處理一步到位就更好。先將EDI報(bào)文轉(zhuǎn)換為標(biāo)準(zhǔn)XML,再對標(biāo)準(zhǔn)XML進(jìn)行后續(xù)處理存在以下優(yōu)點(diǎn):
-
代碼邏輯簡單,工作量較小
-
可以自動檢查貿(mào)易合作伙伴傳來的EDI報(bào)文是否符合國際標(biāo)準(zhǔn)
-
易于調(diào)試,進(jìn)行業(yè)務(wù)測試
-
易于后期維護(hù)
-
易于和其他目標(biāo)格式文檔做轉(zhuǎn)換,比如自定義XML,CSV,PSV,Excel等
-
增加功能模塊的獨(dú)立性,降低耦合性
閱讀原文