結構節點和屬性

針對業務物件定義,結構的目的是要建立結構與維護物件之間的連結。針對業務服務定義,您將指定結構與服務 (一般服務、搜尋服務或維護物件服務) 之間的連結。針對服務指令檔定義,您將定義用於將資訊傳送至指令檔和從指令檔傳送資訊的 API。下列文件是您建構結構時可使用之 XML 節點與屬性的完整列表。
備註:結構定義可能包含使用者介面相關屬性,這些屬性代表用於呈現的結構個別層面。這些屬性屬於稱為「UI 提示」的個別命名空間,因此不是結構資料結構的一部分。如需詳細資訊,請參考瞭解 UI 提示

四種元素類型

結構元素可以是四種不同結構類型其中之一。請注意,有兩種類別的元素類型:群組與列表結構節點,以及包含欄位與原始節點的資料。

記憶碼 有效值 描述 範例
type= "field"

任何元素只要未明確標示為欄位以外的類型,欄位類型便為其預設類型。因此,您實際上一律不需要將元素明確標示為欄位。請注意,欄位元素與群組或列表不同,會在其節點而非其他節點中包含資訊。

"group"

群組元素通常僅是結構的結構元素,在此情況下,它並無對應。

請注意,將數個都用來對應業務物件導向記錄之 CLOB/XML 欄位 XML 結構的元素分組時,可以在群組層級進行對應。

使用群組來建立結構的範例

<schema>
  <input type="group"
    <userId/>
  </input>
  <output type="group">
    <firstName/>
    <lastName/>
  </output>
</schema>

群組包含對應的範例:

<parameters type="group" 
mapXML="BO_DATA_AREA" mdField=
"F1_TODOSUMEMAIL_PARM_LBL"/>
  <numberOfDays 
  mdField="F1_NBR_DAYS" 
  required="true"/>
  <frequency 
   mdField="F1_FREQUENCY"/>
"list"

列表節點是類似群組節點的結構節點。唯一的差異在於列表結構能夠在 XML 文件中重複多次。

含有列表的結構範例:

<schema>
  <statesList type="list">
    <state isPrimeKey="true"/>
    <description/>
  </statesList>
</schema>

含有列表的結構範例:

<xml>
  <statesList>
    <state>AK</state>
    <description>Alaska</description>
  </statesList>
  <statesList>
    <state>AL</state>
    <description>Alabama</description>
  </statesList>
...
</xml>
"raw"

原始資料類型可用來擷取沒有任何相關固有結構的原始文字區塊。

<sendDetail type="raw" />

上述結構的 XML 實例範例:

<sendDetail>
  <messageInfo>
    <senderAddress>123 W. Main St,    Ontario, CA
    </senderAddress>
    <corpZone>3A</corpZone>
  </messageInfo>
</sendDetail>

欄位元素的資料類型

在四種不同元素類型中,只有欄位可以有資料類型。

記憶碼 有效值 描述 範例
dataType= "string"

欄位元素預設為字串。因此,無須指定字串資料類型。

<schema>
  <custName dataType="string"/>
</schema>
"number"

定義身為數字的元素。

備註:UI 提示包含用以隱藏自動數字格式的設定。
備註:請使用 currencyRef 屬性來自動顯示與所參考幣別代碼相關的幣別符號。此格式會忽略幣別小數位數,讓您可以顯示有許多小數之單位費率的幣別符號。

範例

<schema>
  <count dataType="number"/>
</schema>
<schema>
  <taxRate dataType="number" 
   currencyRef="currency"/>
</schema>
"money"

選擇性額外屬性

currencyRef="元素名稱"

定義代表貨幣金額的元素。

您可以視需要使用幣別參考,如果留白,則會使用安裝幣別。要根據幣別套用的自動格式設定與驗證。例如,自動轉譯時,將會顯示幣別符號。此外,小數位數不可超過為幣別定義的有效數目。

備註:如需用於參考其他元素的支援語法,請參閱參考其他元素
<schema>
  <currency default="USD" 
    suppress="true"/>
  <balance dataType="money" 
   currencyRef="currency"/>
</schema>
"lookup"

必要額外屬性

lookup="欄位名稱"

定義具有以查尋定義之有效值的元素。查尋欄位為必要欄位。

<schema>
  <status dataType="lookup" 
   lookup="STATUS_FLG"/>
</schema>
"lookupBO"

必要額外屬性

lookupBO="業務物件名稱"

定義具有以可延伸查尋定義之有效值的元素。可延伸查尋的業務物件為必要物件。

<schema>
  <category dataType="lookupBO" 
   lookupBO="CM-BusinessCategory"/>
</schema>
"boolean"

定義具有 "Y" 和 "N" 值的元素。

<schema>
  <allowsEdit dataType="boolean"/>
</schema>
"date"

定義代表日期的元素。

<schema>
  <startDate dataType="date"/>
</schema>

"dateTime"

定義代表日期和時間的元素。

備註:如需可供代表標準時間之日期/時間欄位使用的額外組態,請參考標準時間考量
<schema>
  <startDateTime 
  dataType="dateTime"/>
</schema>
"time"

定義代表時間的元素。

<schema>
  <startTime dataType="time"/>
</schema>
"uri"

定義擷取 URI 的元素。以此類型定義的元素可用來支援 URI 允許列表與替代,如參考 URI 所述。

<schema>
  <exportDirectory dataType="uri"/>
</schema>

參考其他元素

有數個屬性可允許參考同一結構中的另一個元素。支援的 XPath 參考語法在每一種情況中都相同。本節提供使用預設參考屬性 (defaultRef) 的範例。

參考旁系元素:

<schema>
   <id mapField="ACCT_ID" required="true"/>
   <altId defaultRef="id" required="true"/>
</schema>

參考較高群組中的元素:

<schema>
   <id mapField="ACCT_ID" required="true"/>
   <msgInfo type="group" mapXML="XML_FIELD">
     <altId defaultRef="../id" required="true"/>
   </msgInfo>
</schema>

參考較低群組中的元素:

<schema>
   <id mapField="ACCT_ID" defaultRef="msgInfo/altId" required="true"/>
   <msgInfo type="group" mapXML="XML_FIELD">
     <altId required="true"/>
   </msgInfo>
</schema>

參考另一個群組中的元素:

<schema>
  <acctInfo type="group">
    <id mapField="ACCT_ID" required="true"/>
  </acctInfo>
   <msgInfo type="group" mapXML="XML_FIELD">
     <altId defaultRef="../acctInfo/altId" required="true"/>
   </msgInfo>
</schema>

標準時間考量

大多數日期/時間欄位都代表「合法」時間,因此,如果時區變更其冬季與夏季時間的時鐘,日期/時間欄位便會擷取目前所觀測到的時間。不過,有些日期/時間欄位應一律以標準時間擷取,以避免發生混淆/模稜兩可的情況。與詳細區間資料有關的日期和時間就是一個好例子。如需詳細資訊,請參考設計時區

dataType="dateTime" 定義元素時,您可以視需要設定 stdTime="true",表示該元素中所擷取的資料一律代表「基準」時區的標準時間。「基準」時區是在安裝選項上指定。

備註:如果將元素對應至「標準時間類型」為實際的資料表/欄位,便隱含 stdTime="true"。如需詳細資訊,請參考欄位

範例:

<schema>
  <startTime dataType="Time" stdTime="true"/>
</schema>

如果代表日期/時間欄位的時區不是安裝時區,請在日期/時間元素上使用 stdTimeRef="時區元素的 XPath" 選擇性設定,以指出元素代表標準時間並指出要使用的時區。如需用於參考其他元素的支援語法,請參閱參考其他元素

範例:

<schema>
  <alternateTimeZone fkRef="F1-TZONE" suppress="true"/>
  <startDateTime dataType="dateTime" stdTimeRef="alternateTimeZone"/>
</schema>
備註:如果將元素對應至「標準時間類型」為參考的資料表/欄位,便隱含 stdTime="XPath"。如需詳細資訊,請參考欄位
備註:以標準時間擷取結構元素時,UI 對應會支援 HTML 標記法,可自動顯示套用日光節約時間/夏季時間更正的資料。如需詳細資訊,請參考 HTML 屬性 oraType="dateTime; stdTime:true"

有可能發生以一個時區的標準時間擷取日期/時間,但應使用不同時區來顯示的情況。在此情況下,除了識別擷取資料時所用時區的適當屬性之外,還可以使用 displayRef="XPath" 屬性。如需瞭解支援的語法,請參閱參考其他元素

<schema>
  <displayTimeZone fkRef="F1-TZONE" suppress="true"/>
  <startDateTime dataType="dateTime" stdTime="true" displayRef="displayTimeZone"/>
</schema>

對應屬性

建構您的結構時,您可以從下列其中一個對應屬性中選擇。

記憶碼 有效值 描述 範例
mapField= "欄位名稱"

就業務物件而言,mapField 屬性可用來識別元素相關的資料庫資料欄。針對業務服務結構,mapField= 屬性則可用來將結構元素與服務元素連結。

<schema>
  <factId 
   mapField="FACT_ID"/>
</schema>
mapChild= "資料表名稱"

mapChild 屬性僅用於業務物件對應。其使用方式有兩種:

  • 第一種,在業務物件中建立一個對應維護物件下階資料表的列表。

  • 第二種,您可以使用 mapChild 來識別扁平化欄位所在的下階資料表。如需有關扁平化的資訊,請參考下方的扁平化小節

業務物件中下階資料表內列表的範例:
<persons type="list" 
   mapChild="CI_ACCT_PER"
  <personId mapField="PER_ID"/>
</persons>
mapList= "列表名稱"

mapList 屬性僅用於業務服務對應。其使用方式有兩種:

  • 第一種,在業務服務中建立一個對應服務中列表的列表。

  • 第二種,您可以使用 mapList 來識別扁平化欄位所在的列表。如需有關扁平化的資訊,請參考下方的扁平化小節

業務服務內列表的範例:
<selectList type="list" 
  mapList="DE" 
  <value mapField="COL_VALUE"> 
    <row mapList="DE_VAL"> 
      <SEQNO is="2"/> 
    </row> 
  </value>  
</selectList>
mapXML= "欄位名稱"

mapXML 屬性通常用來將 XML 結構對應至服務的大型字元/XML 欄位。請注意,使用 mapXML 來對應列表或群組結構 (type="list"type="group") 時,您不需要對應結構內的所有下階元素。您也可以將列表元素對應至與列表下階相關的大型字元欄位。

<enrollmentRequest type="group" 
mapXML="CASE_CLOB">
  <messageID/>
  <sender/>
</enrollmentRequest>
<enrollmentKey 
mapXML="CASE_CLOB"/>
<enrollmentInfo type="list" 
mapChild="CI_CASE_CHILD">
  <sequence 
  mapField="CHILD_SEQ"/>
  <name 
  mapXML="CASE_CHILD_CLOB"/>
  <value 
  mapXML="CASE_CHILD_CLOB"/>
</enrollmentInfo>
isPrimeKey= "true"

您必須為所對應 XML 元素內定義的列表 (type="list" mapXML="CLOB") 指定主索引鍵。架構會使用主索引鍵來判斷進行業務物件更新時,是否需要新增、更新或刪除列表元素。

備註:您不需要為與維護物件列表對應的業務物件列表指定主索引鍵。對應實體列表時,會從現有的實體中繼資料導出主索引鍵。
<questionnaire 
type="list" mapXML="CASE_CLOB">
  <question 
  isPrimeKey="true"/>
  <answer/>
</questionnaire>
orderBy= "XPath asc|desc, XPath asc|desc"

所對應 XML 元素內定義的列表 (type="list" mapXML="CLOB") 預設會依列表的第一個元素排序。您可以使用 orderBy 屬性來指定不同的排序順序。屬性值是一個以逗號分隔的列表,由欄位 XPath (相對於列表元素) 與選擇性的排序順序 (預設值為遞增) 所組成。

備註:這僅適用於在業務物件內以 XML 形式對應的列表。
<questionnaire type="list" 
  orderBy="page/section, 
page/sequence" 
mapXML="CASE_CLOB">
<question isPrimeKey="true"/>
<answer/>
<page type="group">
  <section/>
  <sequence/>
</page>
</questionnaire>

描述性屬性

下列屬性可用來描述結構元素,並提供與元素相關的額外組態。通常,這些屬性僅對欄位元素有用。

記憶碼 有效值 描述 範例
<!-- comment -->

使用此屬性以特殊的左右字元 <!-- 和 --> 將註釋新增至結構。

<schema>
  <!-- This schema is used to 
capture business information 
only, please refer to the 
'HUMAN' BO for person 
information -->
</schema>
description= "文字"

元素的描述可用來提供元素的內部描述,以協助結構的讀取者瞭解該元素的業務原因。

<schema>
  <active type="boolean" 
description="active account" 
label="Active"/>
</schema>
label= "文字"

元素的標籤應該是一小段用語,通常置於使用者介面中元素的前方。

<schema>
  <active type="boolean" 
description="active account" 
label="Active"/>
</schema>
required= "true"

用來在進行物件互動時,要求元素必須存在。

備註:針對包含結構,當業務物件與業務服務結構包含在服務指令檔結構內時,系統不會處理業務物件與業務服務結構上的 required="true" 屬性。這是為了支援在從服務指令檔叫用內嵌業務物件或業務服務之前,讓服務指令檔能夠先植入必要的元素。

<schema>
  <logDate mapField="LOG_DT" 
default="%CurrentDate" 
required="true" 
private="true"
</schema>
mdField= "欄位代碼"

中繼資料欄位屬性可用來將元素與欄位的中繼資料建立關聯。此欄位會定義資料類型,以及其標籤與說明文字。如果您將元素與中繼資料欄位連結,便無需指定任何這些屬性。

備註:針對業務物件結構,mapField 屬性可用來導出資料類型與標籤。您可以視需要提供 mdField 屬性來置換這些屬性。如果元素與 XML 資料欄對應,便需有 mdField 來提供適當的資料類型與標籤。
<schema>
  <active 
mdField="CM_ACTIVE_SW"/>
</schema>
fkRef= "外來索引鍵參考代碼"

如果元素是外來索引鍵,定義其外來索引鍵參考會在進行結構互動時啟用元素架構驗證,並自動提供描述與導覽功能。

<schema>
  <person fkRef="PER" 
mapField="CHAR_VAL_FK1">
   <row mapChild="CI_SA_CHAR">
      <CHAR_TYPE_CD is="PER"/>
    </row>
  </person>
</schema>
private= "true"

將元素設為私人可防止在結構互動中公開該元素。

備註:私人元素需有預設值。
<schema>
  <type mdField="SA_TYPE_CD" 
default="E1" private="true"/>
</schema>
suppress= "true"

此設定可防止元素出現在自動產生的使用者介面中。

備註:您可以在群組上指定此屬性,在此情況下,會隱藏該群組的所有元素。
備註:如需與隱藏元素的預設值相關的建議,請參考預設和系統變數
<schema>
    <ls mdField="LIFE_SUPPORT_FLG" 
default="N" suppress="true"/<
</schema>
"blank"

此設定意謂著處於顯示模式的自動 UI 轉譯會將值空白的元素隱藏。元素不論是否空白,在輸入對應上都仍將可以修改。

<schema>
  <email mdField="EMAIL" 
suppress="blank"/>
</schema>
"input"

此設定意謂著自動 UI 轉譯會隱藏用於輸入的元素,但如果元素並非空白,則仍可能會顯示。

備註:標示為 suppress="input" 的元素會與使用 suppress="blank" 時的行為一樣。如果值空白,則在顯示或輸入對應上都不會顯示任何值。如果元素有值,則在顯示與輸入對應上都會顯示該元素。
備註:如需與隱藏元素的預設值相關的建議,請參考預設和系統變數
<schema>
  <email mdField="EMAIL" 
suppress="input"/>
</schema>
noAudit= "true"

此設定可防止元素在業務物件的稽核外掛點中顯示為已變更的元素。如果在群組或列表節點上指定,就會套用至整個節點。您無法在結構根節點上指定它,只能在結構元素上指定。

備註:此屬性僅適用於業務物件結構。
<schema>
  ...
  <version mapField="VERSION_NBR"
 noAudit="true"/>
  ...
  <workFields type="group"
 noAudit="true"
    <lastProcessedId/>
    <lastProcessedTime/>
  </workFields>
</schema>
storeEmptyNodes= "true"

儲存時預設會將空白節點從業務物件執行環境中移除。此設定可讓群組或列表元素明確保留其空白節點。

在與外部系統交換業務物件資料而必須區分以下兩種情況時,此屬性即可派上用場:元素參與同步,且值為空值;元素未參與同步,因此訊息中完全予以省略。

備註:這僅適用於群組與列表元素。
<schema>
  <message type="group" storeEmptyNodes="true">
  ...
  </message>
</schema>
emitEmptyGroups= "true"

根據預設,系統不會將空白節點包含在業務物件或業務服務要求的輸出中。此屬性是設定在最上層的結構節點,讓所有群組和列表元素的空白節點可以被包含在輸出中。

此屬性在需要使用 storeEmptyNodes= 屬性的相同情況下也很有用。

備註:此屬性僅適用於業務物件和業務服務結構。
<schema emitEmptyGroups="true">
  <message type="group">
  ...
  </message>
</schema>
emitEmptyElements= "true"

此屬性與 emitEmptyGroups= 屬性類似,但您也可在欄位層級指定該屬性。此屬性適用於所有結構類型。

<schema>
  <messageNumber type="field" emitEmptyElements="true">
  ...
  </message>
</schema>
adheresToDA= “逗點分隔的資料區域名稱列表。”

此屬性適用於結構、群組及列表節點。其宣稱基於一般多樣性原因,此子結構節點旨在與其中一個所列資料區域的結構「類似」。

備註:若要強制使用共用資料區域的結構,建議的方法是將其包含在結構中。此屬性應僅限於無法在其中包含資料區域的使用案例。
<schema>
  <messageNumber type="group" adheresToDA="DataAreaName">
  ...
  </message>
</schema>

結構常數

有一些結構是產品所擁有的結構,其中的設計擔保結構中有預設值,但該值為實作特定值而因此無法由產品定義。針對這些情況,產品可以使用一種稱為結構常數的技術。結構的設計將包含宣告的常數。在實作階段,組態任務將包含定義適當的常數值。

例如,想像產品提供將在特定條件發生時建立外傳訊息的演算法。要使用的外傳訊息類型必須由實作設定。為了使用結構常數來定義外傳訊息類型,基準產品將設定下列各項:

  • 定義 F1CN_​OPT_​TYP_​FLG 查尋的選項類型查尋值。例如,M202 - Java 值名稱為 outmsgCompletion 的活動完成外傳訊息類型

  • 用來建立「完成活動」外傳訊息的基準結構會使用選項類型查尋值的 Java 值名稱來參考結構常數

    ...
    <outboundMessageType mapField="OUTMSG_TYPE_CD" default="%Constant(outmsgCompletion)"/>
    ...

在實作階段,管理使用者必須為「活動完成」設定適當的外傳訊息類型。接著,瀏覽至功能組態、選擇結構常數功能類型、選擇活動完成外傳訊息類型選項類型,然後在選項值中輸入新建立的外傳訊息類型。

結構常數也可在扁平化語法中用來定義扁平化所需的資料列元素

預設和系統變數

預設屬性可用來設定欄位元素及扁平化所需的資料列元素的預設值。您可以將欄位的預設值設為某個常數或數個系統變數其中之一。

若元素是必要的,當您新增或變更未提供此元素值的記錄時,系統會在伺服器層級套用預設值。

若元素是選用的,您可以設定該元素的預設值,讓系統在處於「新增」模式的使用者介面上植入記錄時,可以向使用者提供您建議的值。使用者應可移除此類型元素的預設值,且系統不會在儲存時嘗試植入此值。

備註:

「列表」維護的標準是針對使用者是否選擇植入的新列表顯示空白資料列。因此,列表元素不會顯示 UI 預設值。

不建議為處於「新增」模式的使用者介面上不可編輯或不可見的選擇性元素設定預設屬性 (例如,含有 suppress="true"suppress="input" 的元素,或未按上一點顯示其預設值的列表元素)。系統仍會套用此類型元素的預設值,但使用者無法重設此值。這可能會導致不一致的情況發生,因為由 UI 互動以外的使用案例所新增的選用欄位,並不會發生設定為預設值的情況。

記憶碼 有效值 描述 範例
default= "值" 使用此屬性將元素的預設值設為指定的值。有效值取決於 dataType 設定。
<schema>
  <perType mapField="PER_OR_BUS_FLG" 
default="P" required="true"/>
</schema>
<schema>
  <frequency dataType="number" 
default="1" required="true"/>
</schema>
"%CurrentDate" 用來將元素的預設值設為目前日期。這僅適用於日期元素。
<schema>
  <logDate mapField="LOG_DT" 
default="%CurrentDate" required="true"/>
</schema>
"%CurrentDateTime" 用來將元素的預設值設為目前日期/時間。這僅適用於日期/時間元素。
<schema>
  <logDateTime mapField="LOG_DTTM" 
default="%CurrentDateTime" 
required="true"/>
</schema>
"%StandardDateTime" 用來將預設值設為標準日期和時間。除非基準時區的日光節約時間/夏季時間生效,否則標準日期和時間會與目前日期和時間一致。這可以與 stdTime 屬性搭配使用。
備註:如需詳細資訊,請參閱標準時間考量
<schema>
  <startDateTime mapField="START_DTTM" 
default="%StandardDateTime" 
required="true"/>
</schema>
"%ProcessDate" 您可以將預設值設為處理日期。處理日期與目前日期不同,因為處理日期會在所執行處理的整個期限中保持不變。目前日期會反映實際的處理日期。這類似於身為標準批次參數的批次業務日期。
<schema>
  <billDate mapField="BILL_DT" 
default="%ProcessDate" 
required="true"/>
</schema>
"%ProcessDateTime" 這類似於 "%ProcessDate",但用於日期/時間欄位。
<schema>
  <calcDateTime mapField="CALC_DTTM" 
default="%ProcessDateTime" 
required="true"/>
</schema>
"%CurrentUser" 用來將元素的預設值設為目前使用者。
<schema>
  <logUser mapField="LOG_USER" 
default="%CurrentUser" 
required="true"/>
</schema>
"%CurrentUserTimeZone" 用來將元素的預設值設為目前使用者的時區。如果找不到目前使用者的時區,則會使用安裝時區。
<schema>
  <timeZone 
default="%CurrentUserTimeZone" 
required="true"/>
</schema>
"%CurrentUserLanguage" 用來將元素的預設值設為目前使用者的語言。
<schema>
  <custLanguage mapField="CUST_LANG" 
default="%CurrentUserLanguage" 
required="true"/>
</schema>
"%InstallationCurrency" 用來將預設值設為安裝記錄中的幣別。
<schema>
  <currency mapField="CURRENCY_CODE" 
default="%InstallationCurrency" 
required="true"/>
</schema>
"%InstallationCountry" 您可以將預設值設為安裝記錄中的國家/地區。
<schema>
  <country mapField="COUNTRY" 
default="%InstallationCountry" 
required="true"/>
</schema>
"%InstallationLanguage" 您可以將預設值設為安裝記錄中的語言。
<schema>
  <language mapField="LANGUAGE" 
default="%InstallationLanguage" 
required="true"/>
</schema>
"%Constant( )" 您可以使用結構常數來設定元素的預設值。 以下是一個用來作為預設值的結構常數範例,其中查尋值的 Java 值名稱為 'customerLanguage'。
<language mapField="CUSTOMER_LANG" 
default="%Constant(customerLanguage)" 
required="true"/>
"%Context( )" 您可以將內容變數中包含的值設為預設值。
警告:必須先在伺服器指令檔內將內容變數初始化,才能夠套用結構內容預設值。如需詳細資訊,請參考內容變數
用來作為預設值的內容變數範例:
<source mapField="PER_ID" 
default="%Context(source)" 
required="true"/>
備註:在指令檔中定義內容變數時,應加上 $$ 前綴。在 %Context( ) 語法中參考變數時,則不包含該前綴。
defaultRef= "XPath"

使用此屬性將一個元素的值預設為另一個元素的值。

如需用於參考其他元素的支援語法,請參閱參考其他元素

扁平化節點和屬性

「扁平化」一詞是用來描述為實際上是維護物件內列表所含的結構定義一或多個單一元素的行為。如果列表有其他屬性可以定義來唯一描述元素,便可以進行扁平化。其中一個常見的扁平化使用案例就是特性。定義物件的特性時,不會使用集合來讓使用者必須先選擇特性類型再定義值來定義特性,而是會將特性定義為具有已顯示之適當標籤的實際元素。此技術可讓結構與使用者介面的設計者將每個個別特性顯示在使用者介面中的合理位置,而不是都擠成一團。

備註:一個扁平化元素代表資料庫中的一個唯一資料列。當建立扁平化值時,便會插入此資料列。當任何扁平化值發生變更時,便會更新此資料列。當所有扁平化值都被移除時,便會刪除此資料列。具有生效日期的元素行為稍有不同 - 請參閱將具有生效日期的列表扁平化
備註:扁平化功能也可用來定義列表,請參閱扁平化列表

識別列表或下階資料表

將下階資料表扁平化時,需有資料列節點來識別元素的來源列表/下階資料表。在資料列節點內,必須至少為一個元素定義 is= 定義,以確保該元素在資料庫中是唯一資料列。它也可定義資料列中隱藏及使用預設值組態植入的元素或欄位。

  • 針對業務物件,資料列節點會定義扁平化欄位所屬的下階資料表。

    語法為 <row mapChild="資料表名稱">。此範例適用於 Customer Care and Billing 產品中帳戶的人員列表。可以將一個人員標示為「主要」人員。這說明如何為主要人員 ID 定義一個明確元素以簡化對該欄位的參考。它是 CI_​ACCT_​PER 下階資料表的一部分。使其具唯一性的關鍵在於 MAIN_​CUST_​SW 為 true (且只有一資料列可以具有該值)

    <custId mapField="PER_ID" mdField="CM-MainCust">
      <row mapChild="CI_ACCT_PER">
        <MAIN_CUST_SW is="true" />
        <ACCT_REL_TYPE_CD default="MAIN" />
      </row>
    </custId>
    備註:上述範例說明資料列節點也可以定義列表內隱藏並被指派預設值的元素。此語法一律不會用來識別特定資料列。請注意,預設值可以是文字字串,或是系統變數
  • 針對業務服務,資料列節點會識別扁平化欄位所屬的列表名稱。

    語法為 <row mapList="列表名稱">。此範例顯示將來自列表的兩個項目扁平化成欄位值與描述。

    <selectList type="list" mapList="DE"> 
        <value mapField="COL_VALUE"> 
    <row mapList="DE_VAL"> 
              <SEQNO is="2"/> 
    </row> 
        </value>  
      <description mapField="COL_VALUE"> 
    <row mapList="DE_VAL"> 
            <SEQNO is="3"/> 
    </row> 
      </description> 
    </selectList>

唯一識別扁平化欄位或列表

row 或 rowFilter 元素內的 is= 語法可用來唯一識別資料列。

記憶碼 有效值 描述 範例
is= "值" 使用此屬性來直接參考值。
<tdTypeCd 
  mapField="CHAR_VAL_FK1">
  <row 
    mapChild="F1_EXT_LOOKUP_VAL_CHAR">
    <CHAR_TYPE_CD 
   is="CM-TD-TYPE"/>
  </row>
</tdTypeCd>
"%Constant( )" 您可以使用結構常數來設定扁平化元素。進行服務互動時,會使用結構常數的值在其下階資料列中識別扁平化元素。

在扁平化語法中使用結構常數的範例,其中查尋欄位值的 Java 值名稱為 'cmRate'。

<unitRate mapField="CHAR_VAL" 
  dataType="number">
  <row mapChild=
   "F1_EXT_LOOKUP_VAL_CHAR">
    <CHAR_TYPE is
   ="%Constant(cmRate)"/>
  </row>
</unitRate>
"%n" %n 替代值可用來參考相對列表實例。相對列表實例通常用來為以序號作為索引鍵的下階資料表設定扁平化元素。n 的值應該是一個正整數。進行業務物件讀取互動時,會傳回該整數所指定的相對列表實例 (位置)。 相對列表實例的範例 - 其中會傳回資料列的第一個實例。
<schema>
  <mainPhone mapField="PHONE">
    <row mapChild="CI_PER_PHONE">
      <PHONE_TYPE_CD 
      is="%Constant(mainPhoneType)"/>
      <SEQ_NUMis="%1"/>
    </row>
  </mainPhone>
</schema>
快速路徑:將具有生效日期的列表扁平化時,會使用額外的 is= 值。如需詳細資訊,請參閱該小節。

將預先定義的特性類型扁平化

如果扁平化欄位在特性集合中,且特性類型是預先定義的特性,自動 UI 轉譯就會產生有效值列表的下拉式列表。例如,下方結構會為 Usage 元素產生顯示「使用狀態原因」(F1-SRUSG) 特性類型有效值的下拉式列表。

<usage mdField="STATUS_RSN_USAGE" mapField="CHAR_VAL">
  <row mapChild="F1_BUS_OBJ_STATUS_RSN_CHAR">
      <CHAR_TYPE_CD is="F1-SRUSG"/>
      <SEQ_NUM is="1"/>
  </row>
</usage>

定義來自列表的多個元素

嘗試包含來自同一列表的多個資料欄時,系統會提供速記標記法來複製另一個元素上所定義的扁平化規則,如此便不須重複扁平化規則。為了這麼做,資料列節點會包含 rowRef 屬性,它會指出定義對應資訊的另一個元素名稱。以下範例說明如何將來自帳戶之同一人員列表 (其中 MAIN_​CUST_​SW 為 true) 的「客戶 ID」與「接收帳單副本」欄位扁平化。

<custId mapField="PER_ID">
  <row mapChild="CI_ACCT_PER">
      <MAIN_CUST_SW is="true" />
      <ACCT_REL_TYPE_CD default="MAIN" />
  </row>
</custId>
<copyBill mapField="RECEIVE_COPY_SW" rowRef="custId"/>

請注意,上述標記法也說明可以直接在元素的屬性定義中定義 rowRef

備註:如需用於參考其他元素的支援語法,請參閱參考其他元素

將兩層深度扁平化

如果您的維護物件或服務有兩層深的巢狀列表,系統可支援將扁平化元素內的元素扁平化。此技術也使用 rowRef 屬性。扁平化第二層時會參考第一層的扁平化元素。以下範例說明如何為「主要」客戶將特性扁平化成稱為 legalContact 的元素。請注意,legalContact 元素有兩個資料列節點:一個用來參考其上階記錄的扁平化資訊,一個用來定義其下階資料表

<custId mapField="PER_ID">
  <row mapChild="CI_ACCT_PER">
    <MAIN_CUST_SW is="true" />
    <ACCT_REL_TYPE_CD default="MAIN" />
  </row>
</custId>
<legalContact mapField="CHAR_VAL_FK1">
  <row rowRef="custId">
    <row mapChild="CI_ACCT_PER_CHAR" >
       <CHAR_TYPE_CD is="LEGAL" />
    </row>
  </row>
</legalContact>

請注意,上述標記法也說明可以將 rowRef 定義為資料列節點的屬性,而不直接在元素的屬性定義中定義。

定義扁平化列表

有時列表或下階資料表可支援多個相同「類型」的值,而這些值應該以列表的形式呈現。若要繼續上述範例,帳戶的人員列表可將一個人員識別為「主要」人員。此人員已扁平化成單一元素 (其中已預設並隱藏帳戶關係類型)。若要維護與帳戶相關的其他人員,您可以定義一個列表,其中每個資料列都擷取「人員 ID」與「帳戶關係類型」。

扁平化列表會設有一個 rowFilter 元素,而不是資料列節點。以下結構說明所述的範例。列表節點會定義下階資料表。rowFilter 包含準則,可識別要納入的資料表內的資料列。列表的元素是在列表節點內的 rowFilter 元素外定義。

<custId mapField="PER_ID">
  <row mapChild="CI_ACCT_PER">
    <MAIN_CUST_SW is="true" />
    <ACCT_REL_TYPE_CD default="MAIN" />
  </row>
</custId>
<miscPersons type="list" mapChild="CI_ACCT_PER">
  <rowFilter>
    <MAIN_CUST_SW is="false" />
  </rowFilter>
  <relType mapField="ACCT_REL_TYPE_CD"/>
  <personId mapField="PER_ID"/>
</custId>

請注意,系統會驗證如果結構包含來自同一下階資料表的扁平化單一元素與扁平化列表,則定義其唯一性要素的準則必須是類似的。

將具有生效日期的列表扁平化

應用程式中有一些列表具有生效日期 (還有一些具有生效日期和時間)。例如,有一些具有生效日期的特性集合。在這些集合中,其設計是要針對可能隨時間變更的特性類型擷取單一值。它不是用來支援多個同時有效的特性值。

有些維護物件具有生效日期的特性且不具有基於順序的特性。對於這些實體,實作可能會想要使用該特性來定義不需要生效日期的其他欄位。

考慮為結構設計元素使其代表具有生效日期集合中的值時,請考慮該值是否為處理中所用的值 (例如計算帳單),這樣對擷取隨時間變更的值是很重要的。

  • 如果追蹤值的變更不是重要的事,建議將結構中的生效日期設定為固定值。(請參閱下方範例)。
  • 如果追蹤值的變更是很重要的事,您就必須考量結構的設計方式。
    • 其中一個選項是定義扁平化列表,如上所述。值及生效日期皆為此列表中的元素。在此使用案例中,您可以像管理任何列表一樣來管理此列表。您可以新增或移除值。
    • 另一個選項是在結構中定義扁平化單一值。若您使用此選項,系統在擷取記錄時會傳回最新的生效值。在此設計中,重要的問題是如何定義參考日期。
備註:如需用於參考其他元素的支援語法,請參閱參考其他元素

不追蹤其變更的扁平化元素

下列範例為在具生效日期的集合中,將其值不需要有生效日期的元素扁平化。在這種情況下,建議僅將 is= 屬性中的日期進行硬式編碼。

<schema>
  <externalReference mapField="ADHOC_CHAR_VAL" mdField="CM_EXT_REF" dataType="string">
    <row mapChild="CI_SA_CHAR">
      <CHAR_TYPE is="CM_EXT_REF"/>
      <EFFDT is="2000-01-01"/>
    </row>
  </externalReference>
</schema>

其變更具有生效日期的扁平化元素

如果您希望業務物件結構將應追蹤隨時間變更之具生效日期的值扁平化,扁平化後的值將代表最新的生效項目。在此案例中,建議明確地將日期或日期/時間欄位定義為元素。然後,有個 is= 屬性的語法會指出明確的日期欄位就是該值的使用日期。

記憶碼 有效值 描述 範例
is= "%effectiveDate( )" 使用此組態以指出要使用的日期是另一個元素的值。
備註:如需用於參考其他元素的支援語法,請參閱參考其他元素
<schema>
  <price mapField="CHAR_VAL" 
   dataType="number" required="true">
    <row mapChild="CI_SA_CHAR">
      <CHAR_TYPE is="PRICE"/>
      <EFFDT 
   is="%effectiveDate(priceEdate)" />
    </row>
  </price>
<priceEdate mapField="EFFDT" 
  rowRef="price"/>
</schema>
"%effectiveDateTime( )" 使用此組態以指出要使用的日期/時間是另一個元素的值。
備註:如需用於參考其他元素的支援語法,請參閱參考其他元素
<schema>
  <price mapField="CHAR_VAL" 
  dataType="number">
    <row mapChild="RATE_CHAR">
      <CHAR_TYPE is="PRICE"/>
      <EFFDTTM 
  is="%effectiveDateTime(priceEdatetime)"/>
    </row>
  </price>
  <priceEdatetime mapField="EFFDTTM" 
  rowRef="price"/>
</schema>

當顯示扁平化欄位時,您應考慮是否應在使用者介面上顯示明確的日期或日期/時間元素,或應予以隱藏。設計人員也應考慮透過使用者對話方塊來更新該值。僅顯示扁平化欄位並用個別的對話方塊來更新具生效日期的值可能更為直覺。

若使用此選項,建議讓該物件的維護頁面包含個別的區域,以顯示隨時間變更具生效日期值的歷史記錄。該區域也可包含最新的值。

備註:針對回溯相容性,系統也支援下列選項。不過,不建議您使用。它們會以隱含的方式,隨時都會將參考日期定義為目前日期。這些選項支援當值變更時,新增具生效日期資料列的功能。但該技術也會在我們更新有相同結構的其他元素時,讓新的具生效日期資料列出現。由於參考日期或日期/時間就是目前日期 (即變更),因此新資料列的目前日期或日期/時間就會有相同的資料列值。本產品不建議在未將日期或日期/時間定義為明確元素的情況下,管理具生效日期的特性。

記憶碼 有效值 描述 範例
is= "%effectiveDate"

不建議您使用此組態

<schema>
  <price mapField="CHAR_VAL" 
  dataType="number">
    <row 
  mapChild="CI_SA_CHAR">
      <CHAR_TYPE is="PRICE"/>
      <EFFDT
   is="%effectiveDate"/>
    </row>
  </price>
</schema>
"%effectiveDateTime"

不建議您使用此組態

<schema>
  <price mapField="CHAR_VAL" 
   dataType="number">
    <row mapChild="RATE_CHAR">
      <CHAR_TYPE is="PRICE"/>
      <EFFDT 
    is="%effectiveDateTime" />
    </row>
  </price>
</schema>

搜尋區域

當結構包含在維護 UI 對應內時,可以設定 UI 對應結構元素來啟用自動搜尋對話方塊。

備註:請注意,可以為 fkRef 設定搜尋區域。如果結構元素具有 fkRef,但沒有明確的搜尋屬性 (如此處所述),則在 UI 對應中會使用 fkRef 搜尋資訊。換句話說,如果結構元素已經有 fkRef,則結構中的這些明確搜尋屬性便只會用來置換 fkRef 搜尋資訊。
備註:如需有關搜尋區域組態的詳細資訊,請參考 UI 對應屬性與函數

search="search zone"

搜尋屬性可在 UI 對應結構內使用,並可用來自動產生 oraSearch UI 對應屬性。搜尋區域是設定為搜尋的資料總管區域。

<person fkRef="PER" search="C1_PSRCH"/>

searchField="搜尋欄位:元素|'文字';"

searchField 屬性只能與搜尋屬性搭配使用。searchField 屬性可用來建立 oraSearchField UI 對應屬性。searchField 值可用來在啟動搜尋區域時,植入含有初始值的搜尋區域篩選。初始值也可以是文字。searchField 值可用來與名稱也是 searchField 的篩選記憶碼配對。

搜尋欄位:元素|'文字'。搜尋欄位代表要在啟動時植入的搜尋區域篩選。元素是用來植入篩選的對應結構元素。元素為選擇性,如果留白,則會預設為被指定此屬性的元素。searchField 也接受「文字」作為輸入值

備註:可以在啟動時於搜尋區域內植入多個篩選,但必須在屬性值內建構多個搜尋欄位配對。此處指定的值將用來在被指定此結構的 UI 對應內直接建立 HTML 屬性 oraSearchField。
備註:請注意,元素參考是相對的。如需用於參考其他元素的支援語法,請參閱參考其他元素
<person fkRef="PER" search="C1_PSRCH" searchField="PERSON; PER_TYPE:personType;"/>

searchOut="搜尋欄位:元素;"

searchOut 屬性只能與搜尋屬性搭配使用。searchOut 屬性可用來建立 oraSearchOut UI 對應屬性。searchOut 值可用來從搜尋區域擷取選取的值,然後將其移至 UI 對應元素。指定的 searchOut 值應與搜尋結果區域參數內的 ELEMENT_​NAME 記憶碼相符。

搜尋欄位:元素。搜尋欄位代表傳回給 UI 對應的搜尋區域結果。元素是要植入的對應結構元素。元素為選擇性,如果留白,則會預設為被指定此屬性的元素。

備註:在選取搜尋區域後,可以植入多個元素,但必須在屬性值內建構多個搜尋欄位配對。此處指定的值將用來在被指定此結構的 UI 對應內直接建立 HTML 屬性 oraSearchOut。
備註:請注意,元素參考是相對的。如需用於參考其他元素的支援語法,請參閱參考其他元素
<person fkRef="PER" search="C1_PSRCH" searchField="PER_ID" 
searchOut="PER_ID;PRIMARY_PHONE:personPhone;"/>

延伸服務指令檔的安全性

從業務處理助理指令檔或 UI 對應叫用業務物件或服務指令檔,但不從服務指令檔叫用時,會強制執行應用服務安全性。如果您希望在從服務指令檔叫用業務物件或服務指令檔時強制執行安全性,就必須將下列屬性新增至服務指令檔的結構。

appSecurity="true"

appSecurity 屬性僅適用於服務指令檔結構。如果指定,任何業務物件或服務指令檔只要是服務指令檔所直接叫用,系統就會對其應用服務進行存取評估。

<schema appSecurity="true">
  ...
</schema>

置換業務服務的動作

如果您想要使用 'read' 以外的動作來叫用業務服務,就必須在主要節點業務服務結構上指定動作屬性。

pageAction="add, change, delete"

動作屬性可用來置換業務服務結構上的預設動作 read。有效值為:

  • add

  • update (僅允許用於維護物件服務)

  • change (不允許用於維護物件服務)

  • delete

  • read (如果未指定 pageAction,則此為預設動作)

範例:

<schema pageAction="change">
  <parm type="group">
    <ele1/>
    <ele2/>
  </parm>
</schema>

指定搜尋服務的 searchBy

如果您想要叫用搜尋服務,就必須為結構中對應的元素明確指定適當的 searchBy 屬性。

searchBy="MAIN"

您可以使用「檢視 XML URL」,藉由檢視與業務服務連結的 XML 結構來尋找 searchBy 屬性的值。典型的值為:

  • MAIN

  • ALT

  • ALT2

  • ALT3

  • 等等。
<schema searchBy="MAIN">
  <AccountID mapField="ACCT_ID"/>
  <Results type="list">
    <AccountID mapField="ACCT_ID"/>
  </Results>
</schema>

包含其他結構

您可以將結構包含在另一個結構中,這方面並無任何限制 - 所有類型都可以被包含在所有其他類型中。此外,也允許巢狀包含 - 且目前對巢狀深度並無任何限制。

包含結構時需要兩個部分:

  1. 包含節點
  2. 名稱屬性

下表指出支援的 Include 陳述式。

記憶碼 描述 範例

<includeBO name=" "/>

允許將業務物件結構包含在另一個結構中。

請注意,業務物件或業務服務結構的對應規則在上階結構內容中可能有意義,也可能沒意義。包含其他結構須自負風險。不過,XML 處理有一個非常實用之處,就是架構會忽略非相關的屬性。換句話說,將對應屬性包含在指令檔結構中不會有什麼壞處。

<schema>
  <cust type="group">
<includeBO name="C1-Person"/>
</cust>
  <spouse type="group">
<includeBO name="C1-Person"/>
</spouse>
</schema>

<includeBS name=" "/>

用來包含業務服務結構。

<schema>
<includeBS name="F1-ReadMOLog"/>
</schema>

<includeDA name=" "/>

用來包含資料區域結構。

<schema>
<includeDA 
   name="F1CommonSchemaFieldData"/>
</schema>

<includeMP name=" "/>

用來包含 UI 對應結構。

<schema>
<includeMP 
   name="F1-DisplayRecordActions"/>
</schema>

<includeSS name=" "/>

用來包含服務指令檔結構。

<schema>
<includeSS name="F1-ActShowZn"/>
</schema>

相容性屬性

這些屬性是舊版的架構升級時一併新增的。

fwRel="2"

在架構 4 的升級過程中,已將此屬性新增至在架構 2 中建立的結構。新結構將不需要此屬性。在不瞭解下列行為差異的情況下,不建議修改此屬性,因為不適當的變更可能會導致錯誤:

備註:在架構 2 中以 fwRel="2" 屬性建立的結構,會將群組下的任何 XML 對應欄位儲存為 mapXML 欄位中的最上層 XML 元素。這意謂著如果讓不同群組結構中的兩個或更多個欄位有相同欄位名稱,其儲存可能會彼此衝突而導致發生錯誤。新行為 (不使用 fwRel="2" 屬性) 會保留群組結構而避免衝突。
<schema fwRel="2"
    ...
</schema>