サンプルの実装
次のサンプルは、Smart Grid Gatewayに送信されるXML書式への追加フィールドのマッピング方法を示しています。この場合、着信測定データの単位は<externalUOM>によって定義され、標準<UOM>要素にマップする必要があります。
サンプル・スクリプト
次のGroovyスクリプトは、D1-IMDSeederノードのリストをループし、externalUomの値(この例ではGD_KWH)をチェックし、同じ場合は<UOM>要素が<externalUOM>の値で作成され、<externalUOM>要素が削除されます。
スクリプト・タイプ: Groovyライブラリ・スクリプト
ステップ10: Groovyインポート
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NodeList;
import org.w3c.dom.Node;
import com.splwg.d1.domain.sgg.processing.PayloadProcessingCMHandler;
import com.splwg.shared.logging.Logger;
import com.splwg.shared.logging.LoggerFactory;
import com.splwg.base.support.scripting.XMLUtils;
ステップ20: Groovyライブラリ・インタフェース
PayloadProcessingCMHandler getHandler()
ステップ30: Groovyメンバー
public PayloadProcessingCMHandler getHandler() {
return new CMhandler();
}
public class CMhandler implements PayloadProcessingCMHandler{
org.w3c.dom.Document onList(org.w3c.dom.Document resultList, org.w3c.dom.Document plainXML) {
NodeList imdList=resultList.getDocumentElement().getElementsByTagName("D1-IMDSeeder");
for(int i=0;i<imdList.getLength();i++){
Element imdEl = (Element) imdList.item(i);
//check if msrs element exists
NodeList msrsList = imdEl.getElementsByTagName("msrs");
if (msrsList.length > 0) {
//get preVEE
NodeList preVEENodeList = imdEl.getElementsByTagName("preVEE");
Element preVEENode = (Element) preVEENodeList.item(0);
//get externaluom
NodeList uomList = preVEENode.getElementsByTagName("externalUOM");
Element uomElm = uomList.length>0 ? uomList.item(0) : null;
String uom = uomElm!=null ? uomElm.getTextContent() : "";
//get mcIdN
NodeList mcIdNList = preVEENode.getElementsByTagName("dvcIdN");
if ( uom.compareTo("GD_KWH")==0 && mcIdNList.length>0 ) {
Element externalUOMElm = resultList.createElement("uom");
externalUOMElm.setTextContent(uom);
//replace uom with externalUOM
preVEENode.replaceChild(externalUOMElm, uomElm);
}
}
}
return resultList;
}
}
サンプル・ファイル
次に、サンプルのLandis+Gyr使用ファイルを示します。このファイルには"Units"があり、値は"GD_KWH"です。
Record Type~Record Version~Time Stamp~Premise ID~ESIID~Provisioned~Meter ID~Purpose~Commodity~Units~Calculation Constant~Interval~Count~FirstIntervalDateTime~Data MEPMD01~20080519~11092010012000AM~~~~GD_LL_SN100~OK~E~GD_KWH~~000100~24~10062010010000AM~~0.2316~~0.1416~~0.2904~~0.2628~~0.240~~0.2796~~0.2232~~0.1692~~0.0552~~0.24096~~0.276~~0.1572~~0.0612~~0.3168~~0.132~~0.1092~~0.2532~~0.2844~~0.198~~0.0756~~0.3084~~0.15240~~0.1788~~0.1716~~
プレーンXML出力
次に、前述のLandis+Gyr使用ファイルのプレーンXML出力を示します。このファイルには<Units>要素があり、値は"GD_KWH"です。
<MeterReads
xmlns="http://xmlns.oracle.com/LandisGyrUsage">
<MeterRead>
<Origin>IMD_INT_GD_LL_SN100_good1.lg-2020-04-13-07-42-36-092</Origin
>
<ServProvExtRefId>L+G</ServProvExtRefId>
<RecordType>MEPMD01</RecordType>
<RecordVersion>20080519</RecordVersion>
<TimeStamp>11092010012000AM</TimeStamp>
<MeterID>GD_LL_SN100</MeterID>
<Purpose>OK</Purpose>
<Comodity>E</Comodity>
<Units>GD_KWH</Units>
<Interval>000100</Interval>
<Count>24</Count>
<FirstIntervalDateTime>10062010010000AM</FirstIntervalDateTime>
<Data>
<Row v="0.2316"/>
<Row v="0.1416"/>
<Row v="0.2904"/>
<Row v="0.2628"/>
<Row v="0.240"/>
<Row v="0.2796"/>
<Row v="0.2232"/>
<Row v="0.1692"/>
<Row v="0.0552"/>
<Row v="0.24096"/>
<Row v="0.276"/>
<Row v="0.1572"/>
<Row v="0.0612"/>
<Row v="0.3168"/>
<Row v="0.132"/>
<Row v="0.1092"/>
<Row v="0.2532"/>
<Row v="0.2844"/>
<Row v="0.198"/>
<Row v="0.0756"/>
<Row v="0.3084"/>
<Row v="0.15240"/>
<Row v="0.1788"/>
<Row v="0.1716"/>
</Data>
<RawData>MEPMD01~20080519~11092010012000AM~~~~GD_LL_SN100~OK~E~GD_KWH~~000100~24~10062010010000AM~~0.2316~~0.1416~~0.2904~~0.2628~~0.240~~0.2796~~0.2232~~0.1692~~0.0552~~0.24096~~0.276~~0.1572~~0.0612~~0.3168~~0.132~~0.1092~~0.2532~~0.2844~~0.198~~0.0756~~0.3084~~0.15240~~0.1788~~0.1716~~</RawData>
</MeterRead>
</MeterReads>
結果リスト入力
次に、ハンドラ・スクリプトに送信される結果リスト入力を示します。このファイルには<externalUOM>要素があり、値は"GD_KWH"です。
<?xml version="1.0" encoding="UTF-8"?>
<ResultList>
<D1-IMDSeeder>
<fromDateTime>2010-10-06-00.00.00</fromDateTime>
<preVEE>
<dvcIdN>GD_LL_SN100</dvcIdN>
<externalId>IMD_INT_GD_LL_SN100_good1.lg-2020-04-13-07-42-36-092</externalId>
<externalUOM>GD_KWH</externalUOM>
<stDt>2010-10-06-00.00.00</stDt>
<spi>3600</spi>
<imdType>D1IL</imdType>
<msrs>
<mL>
<s>1</s><q>0.2316</q>
</mL>
<mL>
<s>2</s><q>0.1416</q>
</mL>
<mL>
<s>3</s><q>0.2904</q>
</mL>
<mL>
<s>4</s><q>0.2628</q>
</mL>
<mL>
<s>5</s><q>0.240</q>
</mL>
<mL>
<s>6</s><q>0.2796</q>
</mL>
<mL>
<s>7</s><q>0.2232</q>
</mL>
<mL>
<s>8</s><q>0.1692</q>
</mL>
<mL>
<s>9</s><q>0.0552</q>
</mL>
<mL>
<s>10</s><q>0.24096</q>
</mL>
<mL>
<s>11</s><q>0.276</q>
</mL>
<mL>
<s>12</s><q>0.1572</q>
</mL>
<mL>
<s>13</s><q>0.0612</q>
</mL>
<mL>
<s>14</s><q>0.3168</q>
</mL>
<mL>
<s>15</s><q>0.132</q>
</mL>
<mL>
<s>16</s><q>0.1092</q>
</mL>
<mL>
<s>17</s><q>0.2532</q>
</mL>
<mL>
<s>18</s><q>0.2844</q>
</mL>
<mL>
<s>19</s><q>0.198</q>
</mL>
<mL>
<s>20</s><q>0.0756</q>
</mL>
<mL>
<s>21</s><q>0.3084</q>
</mL>
<mL>
<s>22</s><q>0.15240</q>
</mL>
<mL>
<s>23</s><q>0.1788</q>
</mL>
<mL>
<s>24</s><q>0.1716</q>
</mL>
</msrs>
</preVEE>
<serviceProviderExternalId>L+G</serviceProviderExternalId>
</D1-IMDSeeder>
</ResultList>
結果リスト出力
次に、ハンドラ・スクリプトから返された結果リスト出力を示します。<externalUOM>要素が<UOM>に置き換えられ、値が"GD_KWH"になっています。
<?xml version="1.0" encoding="UTF-8"?>
<ResultList>
<D1-IMDSeeder>
<fromDateTime>2010-10-06-00.00.00</fromDateTime>
<preVEE>
<dvcIdN>GD_LL_SN100</dvcIdN>
<externalId>IMD_INT_GD_LL_SN100_good1.lg-2020-04-13-07-42-36-092</externalId>
<uom>GD_KWH</uom>
<stDt>2010-10-06-00.00.00</stDt>
<spi>3600</spi>
<imdType>D1IL</imdType>
<msrs>
<mL>
<s>1</s><q>0.2316</q>
</mL>
<mL>
<s>2</s><q>0.1416</q>
</mL>
<mL>
<s>3</s><q>0.2904</q>
</mL>
<mL>
<s>4</s><q>0.2628</q>
</mL>
<mL>
<s>5</s><q>0.240</q>
</mL>
<mL>
<s>6</s><q>0.2796</q>
</mL>
<mL>
<s>7</s><q>0.2232</q>
</mL>
<mL>
<s>8</s><q>0.1692</q>
</mL>
<mL>
<s>9</s><q>0.0552</q>
</mL>
<mL>
<s>10</s><q>0.24096</q>
</mL>
<mL>
<s>11</s><q>0.276</q>
</mL>
<mL>
<s>12</s><q>0.1572</q>
</mL>
<mL>
<s>13</s><q>0.0612</q>
</mL>
<mL>
<s>14</s><q>0.3168</q>
</mL>
<mL>
<s>15</s><q>0.132</q>
</mL>
<mL>
<s>16</s><q>0.1092</q>
</mL>
<mL>
<s>17</s><q>0.2532</q>
</mL>
<mL>
<s>18</s><q>0.2844</q>
</mL>
<mL>
<s>19</s><q>0.198</q>
</mL>
<mL>
<s>20</s><q>0.0756</q>
</mL>
<mL>
<s>21</s><q>0.3084</q>
</mL>
<mL>
<s>22</s><q>0.15240</q>
</mL>
<mL>
<s>23</s><q>0.1788</q>
</mL>
<mL>
<s>24</s><q>0.1716</q>
</mL>
</msrs>
</preVEE>
<serviceProviderExternalId>L+G</serviceProviderExternalId>
</D1-IMDSeeder>
</ResultList>