什么網(wǎng)站做電氣自動化兼職做優(yōu)化的網(wǎng)站
XML Map 端口是用于在不同XML之間建立關(guān)系映射的工具,允許通過拖拽操作實現(xiàn)源XML和目標(biāo) XML之間的數(shù)據(jù)字段映射,除此之外,XML Map 端口還提供了其它豐富多彩的功能,使用戶能夠更加靈活和高效的處理XML 數(shù)據(jù)映射任務(wù),讓我們一同深入探索這些功能吧。
以生成850訂單為例:
點擊下載850訂單的源文件和目標(biāo)文件
自定義腳本檢查必填字段
使用check、else和 throw 三個關(guān)鍵字組合,代碼如下:
<arc:check value="[xpath('字段xpath值') | def | trim]"><arc:else><arc:throw code="Miss value" desc="Miss 字段名"/></arc:else>
</arc:check>
以知行之橋EDI系統(tǒng)的XMLMap端口下映射編輯器處理的映射關(guān)系為例:
如上圖所示,對于850訂單來說,po_no訂單號是必須要有的,所以我們需要對訂單號進(jìn)行必填校驗,操作如下:
鼠標(biāo)點擊BEG02節(jié)點,右鍵選擇新增,點擊代碼腳本
進(jìn)入到?腳本?頁面中:
復(fù)制上文介紹的代碼并補充需要進(jìn)行必填校驗的字段名稱:
腳本名稱必須填寫,本例寫的是‘po_no的必填校驗’,可根據(jù)自己的實際情況填寫,填寫后保存,顯示如下:
擴(kuò)展閱讀:
check 關(guān)鍵字的使用方法
else關(guān)鍵字的使用方法
throw關(guān)鍵字的使用方法
條件映射編輯器
對于非必填字段,當(dāng)其值為空時需要跳過該字段所在的segment,從而避免向客戶發(fā)一個空的segment。這種靈活性使用戶能夠更好的控制數(shù)據(jù)映射過程,確保生成的目標(biāo)文件符合交易伙伴的預(yù)期及要求。
使用【條件】進(jìn)行跳過,例:鼠標(biāo)浮在需要跳過的節(jié)點上,點擊藍(lán)色圖標(biāo):
進(jìn)入到條件映射編輯器,并點擊添加條件:
在InputXML中選擇對應(yīng)的字段:
在等于處選擇條件:
N1Loop1里涉及到兩個字段,需要添加兩個條件,當(dāng)shipto_name或 shipto_no有一個不為空時就可進(jìn)入N1Loop1,兩個都為空時則跳過N1Loop1。
條件名稱?可根據(jù)自身需求填寫,可為空:
然后點擊?保存?即可
自定義腳本檢查物料行信息
代碼示例如下:
<rsb:if exp="![hasxpath('')]"><rsb:throw code="error" desc="no " />
</rsb:if>
在映射編輯器中涉及到的映射關(guān)系如下:
對于物料部分,按照XML Map的取值邏輯,會先從源文件找PO_ITEM,如果找不到就會跳過,不會進(jìn)入到具體字段的取值,所以即便你對物料部分的字段值做了必填值校驗,也不會進(jìn)入到這個校驗里,所以我們需要對PO_ITEM先進(jìn)行校驗。
點擊上圖右側(cè)PO1Loop1上面的任何節(jié)點,右鍵選擇新增,點擊添加代碼腳本,彈窗如下:
復(fù)制代碼,并根據(jù)實際情況修改如下,本例只需要在 腳本名稱 下方的方框中填寫腳本代碼,然后保存即可。
腳本添加完成后,映射編輯器中將會顯示如下內(nèi)容:
表達(dá)式編輯器
格式化器支持操作不同xpath返回的值,比如當(dāng)用戶傳過來的日期格式與目標(biāo)格式不同,就需要進(jìn)行日期格式轉(zhuǎn)換,轉(zhuǎn)換方法如下:
[xpath() | trim | todate('要轉(zhuǎn)換的格式','被轉(zhuǎn)換的格式')]
例:對于訂單日期,用戶傳入EDI的格式是yyyy-MM-dd HH:mm:ss,而客戶要求的格式是yyyyMMdd。
操作步驟:鼠標(biāo)懸停在BEG05節(jié)點上,選擇表達(dá)式。
進(jìn)入表達(dá)式編輯器:
進(jìn)行todate處理:
注意:需要先trim去空,再todate
擴(kuò)展閱讀:
文本格式化器trim的使用方法
日期格式化器todate的使用方法
如果傳入的日期為空,todate會轉(zhuǎn)成當(dāng)前日期,所以當(dāng)傳入日期值為空時根據(jù)實際情況進(jìn)行必填校驗或者通過條件映射編輯器跳過。
除了todate之外,還有很多常見的字符串處理,比如split,substring ,toupper等
拆分字符串
split(delimiter,indextoreturn)
delimiter:用作分隔符的字符串,以該字符串對整個字段值進(jìn)行拆分
indextoreturn:字段值被以分隔符拆分后的索引
例:收到一組服裝信息,以 ; 隔開存放在一個字段里,需求是要取第二個顏色值,代碼如下:
<rsb:set attr="testString" value="sweater;blue;women; wool"/>
<rsb:set attr="item.color" value="[testString | split(';',2)]"/>
<!—item.color:blue-->
XMLMap端口映射編輯器中對于拆分字符串的映射關(guān)系處理如下:
比如用戶有多個工廠,對應(yīng)多個編號,傳過來的buyer_no字段包含每個工廠對應(yīng)的編號,以;隔開,目前這個是A工廠發(fā)出的訂單,要取的是第二個編號。將鼠標(biāo)懸浮在N104處,點擊表達(dá)式:
進(jìn)入表達(dá)式編輯器:
參考示例代碼進(jìn)行拆分處理:
保存后顯示如下:
截取字符串
substring (index[,length])
index:索引,從index處開始截取
length:要截取的長度,如果沒有指定,則默認(rèn)截取到該字段結(jié)束
例:需要將輸入字段的前兩位值讀到輸出字段里
<rsb:set attr="input.value " value="AB1234"/>
<rsb:set attr="output.value" value="[ input.value | substring(0,2)]"/>
在XML Map中的用法參考split格式化器
獲取字符串的長度
getlength()
返回字符串的長度
例:將輸入字段的長度寫到輸出字段里
<rsb:set attr="input.value " value="AB1234"/>
<rsb:set attr="output.value" value="[input.value | getlength()]"/>
在XML Map中的用法參考split格式化器
加減乘除計算
add(value)
返回數(shù)字屬性值和參數(shù)指定的值之和,默認(rèn)值為1
multiply(value)
返回數(shù)值屬性值與參數(shù)的指定值相乘的結(jié)果,默認(rèn)值為2
subtract(value)
返回數(shù)值屬性值與參數(shù)指定值之間的差值
divide(value)
返回數(shù)值屬性值除以參數(shù)指定值的結(jié)果
例:將輸入字段值乘以1000給輸出字段
<rsb:set attr="input.value " value="2"/>
<rsb:set attr="output.value" value="[input.value | multiply(1000)]"/>
在XML Map中的用法參考split格式化器
自定義目標(biāo)文件名稱
將業(yè)務(wù)類型和關(guān)鍵字段以及當(dāng)前時間放在文件名上,方便有問題時,快速定位查詢
代碼如下:
<rsb:set attr="_message.header:filename" value="業(yè)務(wù)類型_[xpath() | trim]_[_ | now | todate('yyMMddHHmm')].xml"/>
例:對于850訂單,一般使用訂單號來溝通訂單數(shù)據(jù)。
點擊BEG節(jié)點,右鍵選擇新增,點擊添加代碼腳本。
復(fù)制代碼,并根據(jù)實際情況修改如下,本例腳本名稱填寫腳本代碼,然后保存即可。
虛擬節(jié)點
虛擬節(jié)點就是出現(xiàn)在XML設(shè)計器中,但是不會出現(xiàn)在XML輸出里的一種特殊節(jié)點。
前面提到的腳本代碼、條件都屬于虛擬節(jié)點。本章節(jié)主要講解的是XML Map端口中的第三種虛擬節(jié)點——循環(huán)。
循環(huán)一般用于減少層級,避免層級結(jié)構(gòu)的重復(fù),將輸入文件中的重復(fù)元素’扁平化’為輸出文件中的非分層結(jié)構(gòu)。常用場景如下:
我們的輸入文件如圖左,需要的輸出文件如圖右:
點開XML Map上傳源文件和目標(biāo)文件,如下圖:
鼠標(biāo)點擊上圖右側(cè)的child節(jié)點,右鍵選擇?新增,點擊?循環(huán)?。
對循環(huán)進(jìn)行命名并保存。
將左側(cè)源Parent節(jié)點拖拽到右側(cè)的循環(huán)上創(chuàng)建Foreach關(guān)系,然后將源child節(jié)點拖拽映射到目標(biāo)child節(jié)點。
點擊右上角的測試映射進(jìn)行測試,得到所需輸入文件: