EDIFACT message 怎麼拆?(上)
UN/EDIFACT (the United Nations rules for Electronic Data Interchange for Administration, Commerce and Transport)
https://www.unece.org/cefact/edifact/welcome.html
EDIFACT 是個國際標準的通用 EDI 格式,各行各業都可用的格式,但用起來怎麼玩就各家公司都不一樣了。當年一聽說客戶要玩這個,我查一下網上的文檔,隨便一個 message 都幾百上千個值,我就興起跳海的念頭了……先不要!知道方法就不用餵魚了!(其實肥毒宅只會污染海洋
)
當初因為不懂,以為要先把上千個值都抓到出來,然後再從中挑想要的。由於沒經驗,所以當年我們找了第三方的dll 去處理,在這個第三方把信息生成一個 PowerBuilder 的 TreeView 以後,再用代碼讀出所有「樹枝」的路徑,再從而取得所有的值,近千個數據就生成了上萬條數據,然後還要從這萬條挑出有用的值,超慢滴……
後來因為實在太慢,又常常因為慢而導致其他問題,最後看不過去了,加上對客戶的電子信息已經有所了解,多了一點點的自信,於是就把整個解釋程序都重寫了,寫得簡單易明,速度也提高了幾十倍。
我的處理步驟:
1. 以 PowerBuilder 把信息分行寫到 DataWindow 中並寫進數據庫
2. 以 PowerBuilder 調用 Stored Procedure 進行拆解並寫到*臨時表
3. 在前面的 Stored Procedure 中對新來的信息做檢查,是新的就寫進臨時訂單表,是重覆的就判定處理方法,可能無視,也可能覆蓋臨時訂單表中的訂單。
為什麼要有個*臨時表?臨時表的作用在於儲存「所有收到過的電子信息」,整理過的信息方便查詢和整理,而原來的電子檔在讀取過後就移到備份文件夾,定時刪除以節省空間。
這玩意初接觸時很可怕,了解了之後又不怎麼樣,下回就聊聊要怎麼應對。