編輯資料步驟
編輯資料步驟提供任意格式區域,而您可以在其中指定指令來控制指令檔處理。
在編輯資料文字欄位中,輸入指令檔指令。按一下相鄰的圖示以開啟視窗,而此視窗提供更多空間來定義編輯資料步驟。
一般而言,編輯資料內可用的語法會模擬明確步驟類型內可用的指令。不過,有一些指令只能用於編輯資料內。例如,兩個結構化指令:For 和 If。
本節主題提供編輯資料步驟類型中所支援語法的明細。
註釋
您可以在編輯資料步驟的前兩個字元中,使用雙斜線標記法 // 為指令檔加上註釋。範例:
//
// quit with error
//
if ("not(customer/securityEnabled)")
terminate with error (8000, 1001 %1="customer/id" %2='not allowed');
end-if;
暫時變數
您可以在所有類型的指令檔中宣告暫時變數。若要參考它們,應在前面加上單貨幣符號 ('$')。不過,暫時變數在各種指令檔類型中的行為各有不同:
-
業務處理助理指令檔的暫時變數從一個業務處理助理指令檔轉到另一個指令檔時仍可持續存留 (請參考執行指令檔和轉移控制陳述式),這意謂著您可以利用暫時變數進行業務處理助理指令檔間的溝通。
-
暫時變數無法從業務處理助理指令檔傳遞至服務或外掛指令檔。只有資料區域元素可以在這些類型的指令檔之間傳遞。
-
在服務與外掛指令檔內,暫時變數只會在宣告該變數之特定指令檔的存留期內持續存留。這意謂著暫時變數無法在外掛指令檔與服務指令檔之間傳遞,只有全域變數、內容變數及資料區域元素可以在這些類型的指令檔之間傳遞。
宣告/初始化/預設暫時變數
使用暫時變數時,應該在使用前先宣告或以適當的值初始化。例如,宣告變數的典型方法就是在 Move 陳述式中將資料移至該變數。
move "0" to $index;
針對業務處理助理指令檔,暫時變數可從一個業務處理助理指令檔傳遞至另一個指令檔。因此,在業務處理助理中參考應該已由先前業務處理助理初始化的暫時變數是很常見的。不過,如果有任何原因導致暫時變數未由先前的業務處理助理初始化,參考它時就會造成錯誤。因此,使用將對尚未建立/初始化的暫時變數進行初始化的 Default 陳述式是一個好做法。
-
下列陳述式會將暫時變數 $InputAction 初始化 – 但僅限於暫時變數尚未初始化的情況下:
default $InputAction;
-
下列陳述式會將暫時變數 $InputAction 的值設為 'read' – 但僅限於變數尚未初始化的情況下:
default $InputAction as 'read';
關鍵字 |
---|
add |
as |
asError |
bpa |
branch |
data |
declareBO |
declareBS |
declareDA |
declareMap |
declareSS |
default |
delete |
edit |
element |
else |
end-edit |
end-for |
end-if |
error |
escape |
evaluate |
fastAdd |
fastUpdate |
for |
goto |
if |
in |
invokeBO |
invokeBS |
invokeMap |
invokeSS |
label |
map |
move |
navigate |
navigateAndReloadDashboard |
null |
page |
performScript |
popup |
read |
readWithoutVersion |
replace |
suppress |
target |
terminate |
to |
transferControl |
update |
using |
warn |
with |
內容變數
內容變數僅可供在服務指令檔內使用。內容變數僅供在服務指令檔及其所叫用之所有項目的期限內使用。因此,您可以在服務指令檔內使用內容變數,將資訊傳達給較低層級的服務指令檔或結構。若要參考它們,應在前面加上雙貨幣符號 ('$$')。
宣告/初始化/預設內容變數
使用內容變數時,應該在使用前先宣告或以適當的值初始化。例如,宣告變數的典型方法就是在 Move 陳述式中將資料移至該變數。
move 'context variable' to $$contextVariable;
Move 陳述式
Move 陳述式會將來源值複製到目標。下表指出 Move 陳述式中支援的各種選項。
陳述式 | 範例描述 | 範例語法 |
---|---|---|
移至元素 move "xpath" to "xpath"; 備註:XPath 表示式需以雙引號括住。
|
搭配簡單 XPath 參考的 Move 陳述式。 |
|
搭配 XPath 串連函式的 Move 陳述式。 |
|
|
搭配 XPath substring-before 函式的 Move 陳述式。 |
|
|
搭配 XPath substring-after 函式的 Move 陳述式。 |
|
|
搭配 XPath substring 函式的 Move 陳述式。 |
|
|
移至元素 move 'literal' to "xpath"; 備註:文字值需以單引號括住。
|
使用文字字串的 Move 陳述式。 |
|
移至元素 move 'Boolean' to "xpath"; |
以布林作為文字字串的 Move 陳述式。 |
|
移動表示式,其結果為布林。請注意,以下範例中的篩選是位於群組節點上。 |
|
|
移至群組 move "xpath" to "xpath"; |
將一組元素從一個群組移至另一個群組。 系統會將初始層級的元素名稱和群組/列表名稱從來源結構配對至目標結構。針對列表和群組,預設行為是將來源群組/列表內的所有元素移至目標群組/列表 (即使目標群組/列表中並未定義那些元素)。 您可以使用業務服務 F1-MoveByName 來進行更細微的移動控制 (無須定義每個個別的 Move 陳述式)。 |
此陳述式等同於以下陳述式:
|
使用暫時變數進行移動 |
移至暫時區域變數時,不需以雙引號括住。 move "xpath" to $variable; |
|
從暫時變數移動時,變數需以雙引號括住。 move "$variable" to “xpath”; |
|
|
使用內容變數進行移動 move "xpath" to $$variable; move $$variable to “xpath”; |
參考內容變數 (來源或目標) 時,不需以雙引號括住。 |
|
使用動態位置進行移動 move "xpath" | 'literal' to evaluate("xpath" | $variable); move evaluate("xpath" | $variable) to "xpath" | $variable; |
Evaluate 陳述式可允許從變數或結構元素位置動態導出您的移動來源或目標位置。 |
|
Move escape move escape("xpath" | $variable) to "xpath" | $variable; |
Move escape 僅適用於服務指令檔和外掛指令檔。Escape 陳述式會掃描您的來源文字值以找出 HTML 內容並將其逸出,亦即以從 HTML 轉譯中逸出的特殊字元取代任何類似 HTML 的字元。藉由這麼做,當文字顯示為 HTML 元素的一部分時,就會顯示為純文字。 備註:您應該只有在文字要顯示為 HTML 元素的一部分,且懷疑其包含類似 HTML 的字元或甚至是不應轉譯為 HTML 的惡意 HTML 時,才使用此函式。如果使用非 HTML 元素以不正確的方式顯示,特殊逸出字元 (如果有的話) 就會顯示在您的文字中。如需有關如何定義元素來顯示 HTML 內容的詳細資訊,請參考 UI 對應屬性與函式。
|
|
Move null move null to "xpath"; |
您可以透過 move 'null' 特殊語法將資訊從 XML 實例文件中移除。請注意,您可以在 XPath 表示式中指定節點名稱或群組名稱。如果您指定群組名稱,則群組及所有下階元素都會自處理中排除。 |
移除節點及其所有下階節點:
使用後綴 '/*' 來移除群組節點的所有下階節點。
|
Go To 陳述式
編輯資料步驟支援類似於前往步驟類型的功能。語法為 goto label;,其中 label 代表編輯資料文字欄位內的另一個位置 (由此標籤識別),或代表指令檔中的另一個步驟。
以下是前往由 addSpouse 標籤識別之相同步驟中另一個位置的範例。
if ("string(parm/spouse/name) != $BLANK")
goto addSpouse;
end-if;
addSpouse: invokeBO 'Person' using "parm/spouse" for add;
以下是前往相同指令檔內不同步驟的範例。步驟順序是用來作為標籤的參考。
if ("string(parm/spouse/name) != $BLANK")
goto 110;
end-if;
.
.
.
110: invokeBO 'Person' using "parm/spouse" for add;
條件式分支陳述式
編輯資料步驟支援類似於條件式分支步驟類型的功能。語法為 branch (“xpath”) goto label else label;,其中:
-
Branch 陳述式中的 XPath 條件必須評估為布林值 True 或 False。
-
Goto 與 Else 陳述式的目標是代表編輯資料文字欄位內另一個位置的標籤 (由此標籤識別),或代表指令檔中另一個步驟的標籤。
以下範例使用 addSpouse 與 addAccount 的標籤
branch ("string(parm/spouse/name) != $BLANK") goto addSpouse else addAccount;
If 陳述式
If 陳述式與條件式分支陳述式類似。兩者都可用來建立您指令檔邏輯的結構。此陳述式可視需要包含 Else 陳述式,但應一律以 End-If 陳述式結尾。
語法為 if (“xpath”) else end-if;。XPath 條件必須評估為布林值 True 或 False。以下是一些範例。
XPath 包含簡單邏輯條件的範例。
if ("string(parm/spouse/name) != $BLANK")
//
// Create spouse since spouse name present
goto addSpouse;
else
//
// Create account without spouse
goto addAccount;
end-if;
XPath 包含複雜條件的範例。
if ("string(parm/spouse/name) != $BLANK and string(parm/hasSpouse) = true or boolean(parm/requireSpouse)")
//
// Create spouse since spouse name present
goto addSpouse;
end-if;
用來評估欄位多個可能值的一組堆疊陳述式範例。
if ("parm/rowCount = 0")
//
// no rows found
goto quit;
end-if;
if ("parm/rowCount = 1")
//
// one row found
goto process;
end-if;
if ("parm/rowCount > 1")
//
// more than one row found
goto quit;
end-if;
quit: terminate;
以下 XPath 會根據節點是否存在來顯示布林。在此範例中,如果節點存在於所處理的 XML 實例文件中,陳述式就會評估為 True。如果找不到元素,陳述式就會評估為 False。
if ("boolean(parm/spouse/name)")
goto addSpouse;
else
//
// Create account without spouse
goto addAccount;
end-if;
if ("not(parm/spouse/name)")
//
// Create account without spouse
goto addAccount;
else
goto addSpouse;
end-if;
For 陳述式
For 陳述式會依據您的 XPath 表示式建立節點或值列表。如果您指定列表節點,迴圈內便會提供該列表的每個下階節點及其內容。如果您直接指定下階節點,則迴圈內將只會提供值列表。
語法為 for ($variable in "xpathList") end-for;。XPath 條件必須評估為布林值 True 或 False。
以下範例是以此樣本結構為基礎:
<schema>
<SAList type="list">
<id/>
<balance/>
</SAList>
<SAContributor type="list">
<id/>
</SAContributor>
</schema>
在 XPath 表示式中指定列表節點讓所有下階節點皆可供進行處理的範例。
move "0" to $AccountBalance;
move "0" to $index;
for ($SAList in "SAList")
move "$SAList/balance + $AccountBalance" to $AccountBalance;
//
// keep track of each SA contributing to the balance in the SA Contributor list
move "1 + $index" to $index;
move "$SAList/id" to "SAContributor[$index]/id";
end-for;
在 XPath 表示式中指定列表節點內下階節點的範例。只有該節點的值可供進行處理。
move "0" to $AccountBalance;
for ($SABalance in "SAList/balance")
move "$SABalance + $AccountBalance" to $AccountBalance;
end-for;
顯示可用來限制 For 迴圈所選資料列的篩選範例。
move "0" to $AccountDebitBalance;
for ($SAList in "SAList[Balance>0]")
move "$SAList/balance + $AccountDebitBalance" to $AccountDebitBalance;
end-for;
顯示在指定下階節點時使用篩選的範例。
move "0" to $AccountCreditBalance;
for ($SABalance in "SAList[Balance<0]/balance")
move "$SABalance + $AccountCreditBalance" to $AccountCreditBalance;
end-for;
列表處理
本節提供有關處理列表的明細。本節中的範例會參考下列結構:
<schema>
<parm type="group">
<name/>
</parm>
<Person type="group">
<names type="list">
<type/>
<name/>
</names>
</Person>
</schema>
參考列表元素。您可以透過在篩選內參考列表中的識別節點,將值移至特定列表實例。語法為 move "xpath" to "xpathList[filter]/element";。範例:
move "parm/name" to "Person/names[type='main']/name";
建立新的列表實例。您可以在移動目標陳述式內使用特殊標記法來指出應該建立新的列表實例。"+" 會向指令檔處理器指出應該為目標元素起始一個新的列表實例。語法為 move "xpath" to "+xpathList";。範例:
move "parm/name" to "Person/+names/name";
刪除列表實例。您可以透過將動作屬性 'delete' 移至元素名稱,將 XML 列表項目從資料庫中刪除。若要促成資料庫的列表項目刪除,目標節點中必須有動作屬性 "delete" 且須有後續的更新業務物件互動。語法為 move 'delete' to "xpathList@action");。範例:
if ("parm/action = 'd'")
move "0" to $index;
for ($CCList in "CCList")
move "1 + $index" to $index;
if ("$CCList/id = parm/id")
move 'delete' to "CCList[$index]@action";
goto update;
end-if;
end-for;
end-if;
以下顯示產生的 XML。
<root>
<CCList>
<id>9876538976</id>
<balance>309.98</balance>
</CCList>
<CCList action="delete">
<id>4321125899</id>
<balance>87.45</balance>
</CCList>
</root>
處理列表的函式
XPath 提供數個對處理列表元素相當有用的函式,包括 count、sum 及 last。
下列範例是以此樣本 XML 文件為基礎:
<xml>
<ft>
<type>bill</type>
<date>20100101</date>
<amt>30.30</amt>
<cat>tax</cat>
</ft>
<ft>
<type>adj</type>
<date>20100301</date>
<amt>20.20</amt>
<cat>int</cat>
</ft>
<ft>
<type>bill</type>
<date>20100201</date>
<amt>10.10</amt>
<cat>tax</cat>
</ft>
</xml>
以下是 sum 的範例。語法為 move "sum(xpathList/element)" to $variable;。此範例會加總餘額總計。
move "sum(ft/amt)" to $TotalBalance;
以下是使用篩選來取得小計的 sum 範例。此範例會加總類目為 ‘tax’ 的項目餘額。
move "sum(ft[cat='tax']/amt)" to $TaxBalance;
以下是 count 的範例。語法為 move "count(xpathList)" to $variable;。此範例會尋找列表中財務交易項目數的數目。
move "count(ft)" to $TranCount;
以下是 ‘last’ 的範例,這是用來找出最後一個項目。語法為 move "last(xpathList)" to $variable;。此範例會尋找財務交易列表中的最後金額。
move "ft[last()]/amt" to $LastAmount;
宣告和叫用結構型物件
您可以在編輯資料步驟內叫用業務物件、業務服務或服務指令檔。若要支援動態叫用,必須宣告動態資料區域名稱。
要宣告的結構可以是業務物件 (BO) 結構、業務服務 (BS) 結構、服務指令檔 (SS) 結構、資料區域 (DA) 結構或 UI 對應結構。Declare 陳述式會根據結構類型而有所不同,但語法則類似。
-
declareBO 'BO Name' | $variable | "xpath" as 'DynamicDataArea';
-
declareBS 'BS Name' | $variable | "xpath" as 'DynamicDataArea';
-
declareSS 'SS Name' | $variable | "xpath" as 'DynamicDataArea';
-
declareDA 'DA Name' | $variable | "xpath" as 'DynamicDataArea';
-
declareMap 'Map Name' | $variable | "xpath" as 'DynamicDataArea';
叫用業務物件、業務服務或服務指令檔時,可以將物件的名稱指定為文字,或其也可以是元素或變數內的值。針對每個 Invoke,您都必須提供群組名稱的 XPath 參考。
叫用業務物件時,必須提供動作。語法為 invokeBO 'BO Name' | $variable | "xpath" using "xpath" for action;。有效動作如下:
-
read。此動作會讀取目前的業務物件資料檢視。
-
add。此動作會新增物件,然後讀取並傳回產生的業務物件檢視。
-
fastAdd。此動作會新增物件,但不會執行後續的「讀取」來傳回產生的業務物件檢視。如果沒有理由重新讀取記錄,則就效能考量而言,此選項比 Add 好。
-
update。此動作會更新物件,然後讀取並傳回產生的業務物件檢視。此動作會將 Invoke 陳述式之要求 XML 文件中指定的資訊與現有的業務物件資料「合併」。使用此動作可允許指令檔僅指出要變更的元素。
-
fastUpdate。此動作會更新物件,但不會執行後續的「讀取」來傳回產生的業務物件檢視。如果沒有理由重新讀取記錄,則就效能考量而言,此選項比 Update 好。
-
delete。此動作會刪除物件。
-
replace。此動作是 Update 動作的替代方案。Replace 動作會以要求文件中的資訊完全取代現有的業務物件資料。通常,當業務物件包含列表時會使用 Replace 動作,因為直接取代所有列表實例比嘗試合併列表簡單,後者需要特殊邏輯來明確刪除列表實例。
備註:使用 UI 對應功能來上傳 CSV 檔案時,必須使用 Replace 動作。備註:目前針對在使用列表隱喻來一次顯示頁面中所有記錄的「固定」頁面中所維護的任何維護物件,都不支援 Replace 動作。幣別即為這類頁面的一個範例。
範例:
invokeBO 'BusinessObject' using "dataArea" for fastAdd;
invokeBO $variableBO using "dataArea" for fastUpdate;
invokeBO "daName/boElement" using "dataArea" for replace;
業務服務與服務指令檔的 Invoke 陳述式語法類似。指定業務服務/服務命令檔時,是與群組名稱的 XPath 參考一起指定:
-
invokeBS 'BS Name' | $variable | "xpath" using "xpath";
-
invokeSS 'SS Name' | $variable | "xpath" using "xpath";
這些範例使用 invokeBS 陳述式,但用於 invokeSS 陳述式的陳述式也類似。
invokeBS 'BusinessService' using "dataArea";
invokeBS $variableBS using "dataArea";
invokeBS "daName/bsElement" using "dataArea";
業務物件警告。請注意,針對業務處理助理指令檔,Invoke 陳述式也可以指出如何處理警告。
語法 | 描述 | 範例 |
---|---|---|
with warn asError |
指出應將警告視為顯示在 UI 對應中的錯誤。asError 文字為選擇性。 |
|
with warn popup |
指出應以標準架構蹦現呈現警告。在此情況下,會對使用者呈現標準的「確定」或「取消」按鈕。如果使用者按一下「確定」,即表示應繼續處理。如果使用者按一下「取消」,則表示應中斷處理。這是建議的設定。 |
|
with warn suppress |
指出應抑制警告。如果未將任何警告語法新增至 Invoke 陳述式,則此為預設值。 |
|
針對業務處理助理指令檔,叫用後面還應該有邏輯來處理錯誤與警告 (如果使用了 with warn as popup)。如果使用者已在警告蹦現視窗中按一下「取消」按鈕,系統變數 $WARNING 會設為 true。如果已顯示過對應,邏輯應重新顯示對應 (在此將會重新顯示警告訊息)。這讓使用者還有可能進行變更,並再次儲存。如果在警告之前未顯示對應,則邏輯應該終止。
系統變數 $ERROR 指出已收到錯誤。如果在錯誤之前已顯示過對應,則邏輯應重新顯示對應 (在此將會顯示錯誤)。如果未顯示對應,產品會提供應用來顯示錯誤的業務處理助理指令檔 F1-HandleErr。以下是一個典型的錯誤處理邏輯範例。
invokeBO "F1-DetermineBo/output/bo" using "boSchema" for update with warn popup;
if ("$WARNING")
if ("map_schema/action = 'DEL'")
terminate;
else
goto maintMap;
end-if;
end-if;
if ("$ERROR")
if ("map_schema/action != 'DEL'")
goto maintMap;
else
transferControl 'F1-HandleErr';
end-if;
end-if;
系統和全域變數
下列資料表指出可用於撰寫指令檔的系統和全域變數。
系統變數 - 所有指令檔類型
下列系統變數適用於所有指令檔類型 (服務指令檔、外掛指令檔及業務處理助理指令檔)。
變數 | 描述 | 範例 |
---|---|---|
$BLANK | 代表空白節點。 |
|
$CURRENT-DATE | 代表目前日期。 針對業務處理助理指令檔,這是瀏覽器日期。 針對伺服器指令檔,這是伺服器日期 (並且會受系統日期置換邏輯影響)。 |
|
$CURRENT-STD-DTTM | 代表以標準時間表示的目前日期時間 (表示沒有任何夏季時間/日光節約時間調整)。 |
|
$DEVICE-OS | 代表使用者的裝置作業系統。 |
|
$DEVICE-BROWSER | 代表使用者的裝置瀏覽器。 |
|
$DEVICE-DISPLAY-TYPE | 代表使用者的裝置螢幕顯示類型,可能為桌上型電腦大小、中型或小型大小。傳回的值可能像是 oraDesktop、oraTablet 及 oraPhone。 |
|
$DEVICE-INFO | 提供所有三個裝置特性 (DEVICE-OS、DEVICE-BROWSER 及 DEVICE-DISPLAY-TYPE) 的組合,並以分號分隔每個特定值。 |
|
系統變數 - 僅業務處理助理指令檔
下列系統變數僅適用於業務處理助理指令檔類型。
變數 | 描述 | 範例 |
---|---|---|
$DOUBLE_QUOTE | 代表雙引號。 |
|
$SINGLE_QUOTE | 代表單引號。 |
|
$SPACE | 包含單空格值。 |
|
$SYSTEM-DATE | 代表伺服器日期。請注意,此日期會受系統日期置換邏輯影響。 |
|
系統變數 - 僅伺服器指令檔
下列系統變數僅適用於服務指令檔和外掛指令檔類型。
變數 | 描述 | 範例 |
---|---|---|
$ADDITIONAL-IP-INFO | HTTP 要求包含「額外 IP 位址」標頭欄位。如果 Proxy 伺服器或負載平衡器上有提供一些資訊 (例如原始 IP 位址),便可由實作植入此欄位。 |
|
$CURRENT-DTTM | 代表目前日期時間。 |
|
$F1-INSTALLATION-TIMEZONE | 代表安裝選項上定義的時區代碼。 |
|
$LANGUAGE | 代表指令檔要使用的語言代碼。通常這是使用者的預設語言。 |
|
$PROCESS-DATE | 代表處理日期。處理日期與目前日期不同,因為處理日期在所執行之處理的整個期限內都會保持不變。例如,如果服務指令檔儲存數個業務物件 – 處理日期會在服務指令檔執行開始時初始化,且每個業務物件都會具有相同的預設處理日期。目前日期 (尤其是目前日期時間) 則會反映實際的處理時間。 |
|
$PROCESS-DTTM | 代表處理日期時間。請注意,處理日期和時間會在特定處理開始時初始化,且不會反映確切的更新日期和時間。 |
|
$REQUESTING-IP-ADDRESS | 代表來自 HTTP 要求的 IP 位址。請注意,如果是透過 Proxy 伺服器或負載平衡器遞送要求,此 IP 位址就會是該 Proxy 或負載平衡器的 IP 位址,而非一般使用者的 IP 位址。如需詳細資訊,請參考 $ADDITIONAL-IP-INFO 變數。 |
|
$USER | 代表執行指令檔之使用者的使用者 ID。 |
請參考實用提示與技巧,以取得需要知道目前使用者之使用者 ID 的業務處理助理指令檔。 |
全域變數
業務處理助理指令檔與服務指令檔可存取全域內容中定義的值。
從使用者介面啟動業務處理助理指令檔時,這些變數將會自動初始化。若要參考它們,請在欄位名稱前面加上單貨幣符號。例如,如果 PER_ID 是支援的全域變數,便可在業務處理助理指令檔內參考 $PER_ID:
move "$PER_ID" to "schema/customerId";
針對服務指令檔,只有直接從業務處理助理指令檔或入口上的區域叫用服務指令檔之後,才可以參考全域變數。從業務處理助理指令檔或入口區域叫用服務指令檔時,服務指令檔將能夠存取在 UI 階段作業中植入的該套全域內容變數。針對服務指令檔,全域欄位前面必須加上兩個貨幣符號 (而不是像在業務處理助理指令檔一樣只需一個)。例如,如果 PER_ID 是支援的全域內容變數,便可在服務指令檔內參考 $$PER_ID。
move $$PER_ID to "schema/customerId";
執行指令檔和轉移控制陳述式
編輯資料步驟支援類似於執行指令檔步驟類型和轉移控制步驟類型的功能。這兩者都僅適用於業務處理助理指令檔。
語法 | 有效值 | 註釋 |
---|---|---|
performScript |
'業務處理助理指令檔名稱' | 明確提供要執行的指令檔。 |
$Variable | 在變數中尋找要執行的指令檔。 | |
"XPath" | 在由 XPath 參考的元素中尋找要執行的指令檔。 | |
transferControl |
類似於 performScript 陳述式 |
使用業務物件群組來宣告業務物件
此陳述式是打算將基準指令檔「主要業務物件維護處理」(F1–MainProc) 用於其「產生編輯對應」陳述式的業務處理助理指令檔所特定的陳述式。此指令檔會預期用來在對應中顯示的資料是在 boGroup 標記內。
語法 | 有效值 | 註釋 |
---|---|---|
declareBOWithBOGroup |
'業務物件名稱' | 明確提供業務物件。 |
$Variable | 在變數中尋找業務物件。 | |
"XPath" | 在由 XPath 參考的元素中尋找業務物件。 |
下表指出此陳述式的額外語法。
語法 | 有效值 |
---|---|
as |
'動態結構名稱' |
範例:
declareBOWithBOGroup 'BusinessObject' as 'newMapSchema';
declareBOWithBOGroup $variableBO as 'newMapSchema';
declareBOWithBOGroup "daName/boElement" as 'newMapSchema';
Invoke Map 陳述式
編輯資料步驟支援類似於叫用對應步驟類型的功能。這僅適用於業務處理助理指令檔。
語法 | 有效值 | 註釋 |
---|---|---|
invokeMap |
'對應名稱' | 明確提供 UI 對應。 |
$Variable | 在變數中尋找 UI 對應。 | |
"XPath" | 在由 XPath 參考的元素中尋找 UI 對應。 |
下表指出此陳述式的額外語法。
語法 | 有效值 | 註釋 |
---|---|---|
using |
"資料區域群組名稱" |
指出轉譯與對應相關的 HTML 表單時,要傳遞至伺服器或從伺服器傳遞的資料區域。 |
target |
bpa |
|
page |
||
popup |
如需有關 target 值的詳細資訊,請參考叫用對應步驟類型。
如果設定讓 UI 對應傳回值,則可以使用 $MAP-VALUE 變數來評估該值。
invokeMap 'UI Map' using "dataArea";
invokeMap $variableMap using "dataArea";
invokeMap "daName/mapElement" using "dataArea" target bpa;
// $MAP-VALUE is a variable returned by the invoked map.
if ("$MAP-VALUE='continue' ")
goto 300;
else
terminate;
end if;
「產生編輯對應」陳述式
「產生編輯對應」陳述式可用來根據結構定義,動態產生和啟動 UI 編輯對應。使用的結構可以是業務物件結構、業務服務結構、服務指令檔結構或資料區域結構。這僅適用於業務處理助理指令檔。Generate 陳述式會根據結構的類型而有所不同,但語法則類似。
語法 |
---|
generateBOEditMap |
generateBSEditMap |
generateSSEditMap |
generateDAEditMap |
指定業務物件代碼/業務服務代碼/服務指令檔代碼/資料區域代碼時,可以使用文字 (以單引號括住) 以暫時變數的形式指定,或藉由參考 XPath 結構位置 (以雙引號括住) 來指定。
下表指出此陳述式的額外語法。
語法 | 有效值 | 註釋 |
---|---|---|
using |
"資料區域群組名稱" |
指出轉譯與對應相關的 HTML 表單時,要傳遞至伺服器或從伺服器傳遞的資料區域。 |
target |
bpa |
|
page |
||
popup |
Target 值會指出應將產生的對應顯示在何處,如叫用對應步驟類型所述。如果設定讓 UI 對應傳回值,則可以使用 $MAP-VALUE 變數來評估該值。
這些範例使用 generateBOEditMap,但用於其他結構類型的的陳述式也類似。
generateBOEditMap 'BO Name' using "dataArea";
generateBOEditMap $variableMap using "dataArea";
generateBOEditMap "daName/mapElement" using "dataArea" target bpa;
// $MAP-VALUE is a variable returned by the invoked map.
if ("$MAP-VALUE='continue' ")
goto 300;
else
terminate;
end if;
Terminate 陳述式
編輯資料步驟支援類似於終止步驟類型的功能。
以下是一個會停止指令檔的簡單終止步驟範例。
if ("not(parm/spouse/name)")
terminate;
else
goto addSpouse;
end-if;
terminate with error 陳述式僅可在服務指令檔中使用。
語法 | 屬性 | 註釋 |
---|---|---|
terminate with error (x, y %n= element= ) |
'x' 代表訊息類目 | 必要。 |
'y' 代表訊息編號 | 必要。 | |
%n='元素 XPath' 或 %n='文字' | 使用文字值或 XPath 參考來指定訊息支援的替代參數。如果要替代的值是在列表內的元素,請使用該列表所限定列表內的元素 XPath。 | |
element='元素 XPath' 或 element=$variable | 視需要在 UI 對應內指定元素名稱以在錯誤中反白標示。如果發生錯誤的元素是在列表內,請使用該列表所限定列表內的元素 XPath。 |
簡單欄位的範例:
if ("string(customer/lastName) = $BLANK")
terminate with error (8000, 1001 %1="customer/lastName" %2='Last name required' element='customer/lastName');
end-if;
要標示的元素在列表內的 Terminate 範例:
for ($list in "parm/hard/newBusinessObject/listName")
if //** check some condition for elementName
terminate with error (11000, 11000 %1="$list/elementName" element='$list/elementName');
end-if;
end-for;
叫用 Groovy 程式碼
如果您的外掛指令檔或服務指令檔混合了 XPath 指令檔和 Groovy 指令檔,則編輯資料步驟支援使用 invokeGroovy 'method'; 語法來叫用 Groovy 程式碼的功能,其中 'method' 是指令檔內 Groovy 成員步驟中定義的方法名稱。只有不接收引數並傳回 void 的方法可以透過此方式叫用。不過,其他 Groovy 成員步驟類型中的額外 Groovy 程式碼可支援從編輯資料步驟叫用的方法。
範例編輯資料步驟:
invokeGroovy 'invoke';
範例 Groovy 成員步驟:
void invoke() {
initParms()
readBO()
initConfig()
retrieve()
updateBO()
}
業務處理助理指令檔除錯
如果業務處理助理指令檔的高度大於零,則在執行時間便可以顯示所選取的指令檔資料區域節點。XML 資料會在指令檔執行時,顯示在業務處理助理指令檔的顯示區域內。在成對的 '%+' 與 '+%' 字元之間指定來自任何業務處理助理指令檔資料區域的 XML 程式碼 XPath。
例如,名稱為 'input' 之結構群組節點的整個內容,以及名稱為 'output/status' 之結構元素的特定內容,將會顯示在業務處理助理指令檔的顯示區域中。必須將除錯文字輸入至業務處理助理指令檔的文字區域中,而不是指令檔的編輯資料欄位內。您可以針對指令檔的任何明確步驟宣告除錯文字。
display input: %+input+% , and output status: %+output/status+%
實用提示與技巧
此區段提供有關如何實作某些通用邏輯的一些建議。
尋找業務處理助理中的已登入使用者
伺服器型指令檔的 $USER 變數會植入目前登入的使用者。此變數無法用於業務處理助理指令檔。若需要此資訊,業務處理助理可以呼叫服務指令檔 F1-GetUser。
從業務處理助理指令檔發出錯誤
如果是伺服器型指令檔,可使用 terminate with error 陳述式傳回要顯示給使用者的錯誤訊息。業務處理助理可以透過將控制轉移到 F1–HandleErr 來顯示該錯誤,如宣告和叫用結構型物件中所述。但業務處理助理指令檔不支援此功能。可供業務處理助理用於發出錯誤的技術是呼叫業務服務 F1-RethrowError 以傳遞錯誤明細。此業務服務會植入發出錯誤時所需的適當系統錯誤欄位。然後將控制轉移至 F1–HandleErr。
if ("string($assignedToUser) != string(F1-GetUser/user)")
declareBS 'F1-RethrowError' as 'errorMsg';
move '11010' to "errorMsg/messageCategory";
move '11511' to "errorMsg/messageNumber";
move "$toDoEntryId" to "errorMsg/messageParameters/+parameters/parameterValue";
invokeBS 'F1-RethrowError' using "errorMsg";
transferControl 'F1-HandleErr';
end-if;