CData Software Blog

クラウド連携のCData Software の技術ブログです。

ArcESB - XML Map(_map) レコードの行数を出力する、レコードに連番を付与する

f:id:irokawah:20220214143836p:plain

ArcESB では多様な接続先とのデータ連携を実現するために中間フォーマットとしてXML を利用しており、データソース間での項目マッピングには、XML Map コネクタを利用します。

cdn.arcesb.com

項目マッピングはレコード単位で行われるケースが殆どだと思いますが、なかには「ファイル内のレコード行数の出力」や「ファイル内でのレコード番号(通番)の付与」など、マッピング全体を通じて値を保持・計算し、出力したいケースもあると思います。

こういった時、ArcESB では Mapping Context (_map ) アイテムを利用することで実現できます。この記事では Mapping Context (_map ) アイテムについて、簡単なサンプルとともに紹介します。

Mapping Context (_map )

ArcESB で利用できるArcScript には幾つかのビルトインアイテムが用意されていますが、Mapping Context (_map )XML Map コネクタで利用できる特別なアイテムです。通常のアイテムはマッピングが次の出力ノードに移動するたびにクリアされますが、_map アイテムはドキュメント全体がマップされるまでクリアされず保持されます。

このため、_map アイテムは、マッピングのある時点で計算を行い、マッピングの後半で参照する情報を保存するときなどに便利です。

ArcScript に関心のある方は、ぜひこちらのナレッジベースも活用してください。 www.arcesb.com

例1. レコード行数を出力する

In のItem レコードの出現回数を計算して、Out のItemCount として出力します。

In

<?xml version="1.0" encoding="UTF-8"?>
<Items>
    <Item>
        <col1>1</col1>
        <col2>a</col2>
    </Item>
    <Item>
        <col1>2</col1>
        <col2>b</col2>
    </Item>
    <Item>
        <col1>3</col1>
        <col2>c</col2>
    </Item>
</Items>

Out

<?xml version="1.0" encoding="UTF-8"?>
<Items>
    <Item>
        <col1>1</col1>
        <col2>a</col2>
    </Item>
    <Item>
        <col1>2</col1>
        <col2>b</col2>
    </Item>
    <Item>
        <col1>3</col1>
        <col2>c</col2>
    </Item>
    <ItemCount>3</ItemCount>
</Items>

XML Map

XML Map で以下のように設定します。

出現回数の計算中は出力ノードには設定せず、計算用の新規コードスクリプト(カスタムスクリプト)を利用します。

f:id:irokawah:20220214143340p:plain

<arc:set item="_map" attr="itemCount" value="[_map.itemCount | def(0) | add(1)]" />

f:id:irokawah:20220214143350p:plain

f:id:irokawah:20220214143407p:plain

<arc:set attr="result.text">[_map.itemCount]</arc:set>

f:id:irokawah:20220214143417p:plain

例2. レコード番号を付与する

Out のcol2 にItem レコードの連番を出力します。

In

<?xml version="1.0" encoding="UTF-8"?>
<Items>
    <Item>
        <col1>a</col1>
    </Item>
    <Item>
        <col1>b</col1>
    </Item>
    <Item>
        <col1>c</col1>
    </Item>
</Items>

Out

<?xml version="1.0" encoding="UTF-8"?>
<Items>
    <Item>
        <col1>a</col1>
        <col2>1</col2>
    </Item>
    <Item>
        <col1>b</col1>
        <col2>2</col2>
    </Item>
    <Item>
        <col1>c</col1>
        <col2>3</col2>
    </Item>
</Items>

XML Map

XML Map で以下のように設定します。

f:id:irokawah:20220214143435p:plain

<arc:set item="_map" attr="i" value="[_map.i | def(0) | add(1)]" />

<arc:set attr="result.text">[_map.i]</arc:set>

f:id:irokawah:20220214143445p:plain

おわりに

この記事では、XML Map コネクタでの Mapping Context (_map ) アイテムの利用例をご紹介しました。

ArcESB では、Drag & Drop によるマッピングと式エディタで、項目の変換や操作に関する多くのケースをカバーできますが、変数を活用した計算や選択など複雑性を持つカスタムロジックが必要なマッピングシナリオではArcScript を利用したカスタムスクリプトが活用できます。

皆さんのつなぎたいシナリオでぜひ ArcESB を試してみてください。

www.arcesb.com

お試しいただく中で何かご不明な点があれば、テクニカルサポートへお気軽にお問い合わせください。

www.cdata.com


この記事では ArcESB™ 2021 - 21.0.8054 を利用しています。