升級屬性
屬性的升級牽涉到將架構中的 Field 元素 或 欄位屬性 節點升階為 辨別欄位 或 屬性欄位。 如果[記錄] 節點的 [內容欄位] ([記錄] 節點的[內容類型] 屬性設定為SimpleContent) ,您也可以將[記錄] 節點升階為 [屬性欄位]。 本節提供將節點升級為 辨別欄位 或 屬性欄位的逐步指示。
若要使用簡單內容) 、Field Element或Field Attribute節點升級Record (做為屬性欄位,您可以先定義稱為屬性架構的特殊架構類型。 屬性架構會定義一組非結構化的 Field 元素節點,您可以使用簡單的內容) 、Field Element或Field Attribute節點,將Record (升階到其中。 如需建立屬性架構的逐步指示,請參閱 如何建立屬性架構。
或者,您可以使用 快速升階 功能,每當您升級新的 Field Element、 Field Attribute或 Record (時,就會使用簡單的內容) 節點來自動建立和更新單一屬性架構。
注意
您可以將欄位升階為 辨別欄位 和 屬性欄位。
注意
快速升級功能會插入具有升級節點名稱的新屬性,藉此修改屬性架構。
重要
一旦您升級結構描述中的欄位之後,就不能將它移動或重新命名。 當您移動或重新命名結構描述欄位時,BizTalk 編輯器不會更新用來定義升級欄位位置的 XPath。
XSD 與 CLR 資料型別
在某些地方,例如在屬性升級中,XSD 資料型別會升級為 Common Language Runtime (CLR) 資料型別。 下表顯示可以升級的 XSD 資料型別以及對應的 CLR 資料型別。
XSD 資料型別 | CLR 資料類型 |
---|---|
anyURI | 字串 |
Boolean | 布林值 |
Byte | sbyte |
Date | Datetime |
dateTime | Datetime |
Decimal | Decimal |
Double | Double |
ENTITY | 字串 |
Float | Single |
gDay | DateTime |
gMonth | DateTime |
gMonthDay | DateTime |
gYear | DateTime |
gYearMonth | DateTime |
識別碼 | String |
IDREF | 字串 |
Int | Int32 |
整數 | Decimal |
Language | String |
名稱 | 字串 |
NCName | 字串 |
negativeInteger | Decimal |
NMTOKEN | 字串 |
nonNegativeInteger | Decimal |
nonPositiveInteger | Decimal |
normalizedString | 字串 |
NOTATION | 字串 |
positiveInteger | Decimal |
QName | 字串 |
Short | Int16 |
字串 | 字串 |
時間 | Datetime |
語彙基元 | 字串 |
unsignedByte | Byte |
unsignedInt | UInt32 |
unsignedShort | UInt16 |
注意
XSD 的資料型別 base64Binary、duration、ENTITES、hexBinary、IDREFS、long、NMTOKENS 和 unsignedLong 不支援升級。
升級屬性的限制
在升級屬性時請考量下列事項:
升級屬性的長度有 256 個字元的限制,但是寫入屬性並無長度限制。
升級屬性是用於訊息路由中,且基於比較與儲存效率的原因,所以在大小上會有所限制。 雖然寫入屬性在大小上並無嚴格限制,在內容中使用過大的值會影響效能,因為這些值仍會被處理並與訊息一起傳遞。 [辨別欄位] 即為寫入屬性的範例。
記錄節點永遠不會升級為 辨別欄位。
升級屬性僅限非重複項目/屬性。
請勿將屬於相同根節點的欄位升級至相同的屬性。 這類升級會產生編譯或部署錯誤。
在訊息內容中無法使用部分屬性,這是因為這些屬性尚未升級。 BTS.ReceiveLocationName 屬性即為其中一個屬性。 如果您可以將新的屬性結構描述或新的 BizTalk Server 專案加到開發中,就有辦法從協調流程中存取這個屬性。
屬性值是以屬性目標命名空間和屬性名稱來識別。 下列範例顯示如何以程式碼存取接收位置。
string receiveLocationName = pInMsg.Context.Read("ReceiveLocationName", sysNamespace);