對應其他欄位
接收自 Landis+Gyr 前端系統的測量及裝置事件檔案可包含其他欄位,其中包含要匯入至 Oracle Utilities Smart Grid Gateway 的資料。而這些其他欄位必須對應到由 OSB 處理並傳送至 Smart Grid Gateway 之 XML 文件內的元素。
此對應可透過使用自訂 XQuery 文件 (在 EnvironmentSettings.xq 檔案中透過 "modifyResultXMLInput" 參數指定) 來執行。
下列為範例 XQuery 文件,說明如何將其他欄位對應至要傳送到 Smart Grid Gateway 的 XML 格式。
範例 XQuery — 初始測量
下列 XQuery 範例顯示一個轉換,會傳入 3 個下階 (「結果」XML、「純」XML、環境設定) 的根元素,並傳回修改過的「結果」XML。為了進行測試,它會變更 <enQty>
「結果」元素中的原始值,並視環境設定變數替換成「純」XML 中的值。<serviceProviderExternalId>
值也會替換成硬式編碼的值。
declare namespace lan = "http://xmlns.oracle.com/LandisGyrUsage";
declare namespace xf = "http://tempuri.org/D3/lgimd";
declare namespace soap = "http://schemas.xmlsoap.org/soap/envelope/";
declare function xf:modifyResultXML($modifyResultXMLInput as element(*)) as element(*){
<InitialLoadIMDList>
{
for $InitLoadIMD in $ modifyResultXMLInput/InitialLoadIMDList/InitialLoadIMD
return
<InitialLoadIMD>
<preVEE>
<dvcIdN>{ data($InitLoadIMD/preVEE/dvcIdN) }</dvcIdN>
<externalId>{ data($InitLoadIMD/preVEE/externalId)}</externalId>
<uom>{ data($InitLoadIMD/preVEE/uom)}</uom>
<mcIdN>{ data($InitLoadIMD/preVEE/mcIdN)}</mcIdN>
<enDt>{ data($InitLoadIMD/preVEE/enDt)}</enDt>
{
if ($modifyResultXMLInput/EnvironmentSettings/test1="true")
then <enQty>{ data($modifyResultXMLInput/lan:MeterReads/lan:MeterRead/lan:ExtraFields/lan:ExtraField[lan:FieldName
= 'EF4']/lan:FieldValue) }</enQty>
else <enQty>{ data($modifyResultXMLInput/lan:MeterReads/lan:MeterRead/lan:ExtraFields/lan:ExtraField[lan:FieldName= 'EF2']/lan:FieldValue) }</enQty>
}
<imdType>{ data($InitLoadIMD/preVEE/imdType) }</imdType>
</preVEE>
<serviceProviderExternalId>NewSPId</serviceProviderExternalId>
</InitialLoadIMD>}</InitialLoadIMDList>
};
declare variable $modifyResultXMLInput as element(*)external;
xf:modifyResultXML($modifyResultXMLInput)
範例 XQuery — 裝置事件
下列 XQuery 範例顯示一個轉換,會傳入 3 個下階 (「結果」XML、「純」XML、環境設定) 的根元素,並傳回修改過的「結果」XML。為了進行測試,它會變更 <externalCommunicationModuleIdentifier>
「結果」元素中的原始值,並視環境設定變數替換成「純」XML 中的值。<externalServiceLocationId>
值也會替換成硬式編碼的值。
declare namespace lan = "http://xmlns.oracle.com/LandisGyrEvent";
declare namespace xf = "http://tempuri.org/D3/event";
declare namespace soap = "http://schemas.xmlsoap.org/soap/envelope/";
declare function xf:modifyResultXML($modifyResultXMLInput as element(*)) as element(*){
<DeviceEventSeeder>
<externalSenderId>{data($modifyResultXMLInput/DeviceEventSeeder/externalSenderId) }</externalSenderId>
<deviceIdentifierNumber>{ data($modifyResultXMLInput/DeviceEventSeeder/deviceIdentifierNumber) }</deviceIdentifierNumber>
<externalEventName>{ data($modifyResultXMLInput/DeviceEventSeeder/externalEventName) }</externalEventName>
<eventDateTime>{ data($modifyResultXMLInput/DeviceEventSeeder/eventDateTime) }</eventDateTime>
<externalSourceIdentifier>{ data($modifyResultXMLInput/DeviceEventSeeder/externalSourceIdentifier)
}</externalSourceIdentifier>
<eventInformation>
<externalEventCategory>{data($modifyResultXMLInput/DeviceEventSeeder/eventInformation/externalEventCategory)
}</externalEventCategory>
<externalEventSeverity>{data($modifyResultXMLInput/DeviceEventSeeder/eventInformation/externalEventSeverity)
}</externalEventSeverity>
<externalDeviceType>{data($modifyResultXMLInput/DeviceEventSeeder/eventInformation/externalDeviceType)
}</externalDeviceType>
<externalServiceLocationId>{1234 }</externalServiceLocationId>
{
if ($modifyResultXMLInput/EnvironmentSettings/testA="true")
then <externalCommunicationModuleIdentifier>{ data($modifyResultXMLInput/lan:DeviceEvents/lan:DeviceEvent/lan:DeviceType)}</externalCommunicationModuleIdentifier>
else <externalCommunicationModuleIdentifier>{data($modifyResultXMLInput/lan:DeviceEvents/lan:DeviceEvent/lan:CategoryId)}</externalCommunicationModuleIdentifier>
}
<externalStatusValue>{data($modifyResultXMLInput/DeviceEventSeeder/eventInformation/externalStatusValue)
}</externalStatusValue>
<externalStatusDateTime>{data($modifyResultXMLInput/DeviceEventSeeder/eventInformation/externalStatusDateTime)}</externalStatusDateTime>
</eventInformation>
</DeviceEventSeeder>
};
declare variable $modifyResultXMLInput as element(*) external;
xf:modifyResultXML($modifyResultXMLInput)