追加フィールドのマッピング

Landis+Gyrヘッドエンド・システムから受信する測定および設備イベント・ファイルには、Oracle Utilities Smart Grid Gatewayにインポートされるデータを格納した追加フィールドを含めることができます。これらの追加フィールドは、OSBによって処理され、Smart Grid Gatewayに送信されるXMLドキュメント内の要素にマップする必要があります。

このマッピングは、EnvironmentSettings.xqファイルでmodifyResultXMLInputパラメータを使用して指定する、カスタムXQueryドキュメントを使用して実行できます。

次のサンプル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)