前回に続き、フィールドのソートについてのお話です。今回はカスタマイズしたリストに基づいたソートを行ってみたいと思います。
ユニオンツールを使って並び替える場合のデメリット
といっても、実は#43でやっている内容ですが、今回は別の手法でやってみたいと思います。#43では、ユニオンツールに対して先に並び替えたヘッダを最初に接続することで実現していました。ただ、この方法ではBlob型とSpatialObj型に対応できませんでした(これはDesignerの仕様のようです)。また、データ型も制御できていませんでした。
すべてをクリアできるのはやはりセレクトツールです。ただ、普通にマクロ内に入れてアクションツールで更新、というやり方ではできません。
前準備:XMLビューの有効化
今回の方法では、まずDesigner側のオプションを設定してXMLビューを使えるようにした方が構築が楽です。メニューの[オプション]-[ユーザー設定]-[ユーザー設定の編集]を選択しましょう。
以下ダイアログにて「プロパティウィンドウにXMLを表示する」オプションにチェックを入れて保存します。
これで、XMLビューオプションが各ツールの設定画面に出てくるようになります。
フォーミュラで生XMLを更新オプション
今回は、アクションツールの「フォーミュラで生XMLを更新」オプションを使います。これは使い方は手間ですが最強のオプションで、他で解決できない問題をすべて解決できてしまうオプションです。
今回は以下のようなワークフローを作ります。
ここで、セレクトツールを見てみましょう。XMLビューが設定画面に出てきていると思いますので、これを選択してみましょう。
以下のようなXMLの設定が出てくると思います。赤い枠の部分が上記設定のXML版となります。
ポイントは、OrderChangedがTrueになっていないと下側のSelectFieldsに順番が設定されていても反映されません。このOrderChangedは、セレクトツール内でどれでもいいので並び替えを行えば自動的にTrueになります。
ちなみに、ここで右上の「編集」をクリックするとフリーに編集することができます。
次に、アクションツールを見てみましょう。アクションツールは以下のように設定します。
ここでは、アクションタイプは「フォーミュラで生XMLを更新」にします。「内部XMLを更新」にチェックを入れ、新しいMLを生成するフォーミュラは「#1」としています。そして、更新するXML要素は「SelectFields」にします。この設定により、コントロールパラメーターツールから来たデータでまるっと「SelectFields」の部分が書き換わることになります。「SelectFields」と「内部XMLを更新」によりセレクトツールの以下の赤枠の部分が書き換わることになります。
なお、OrderChanged内にあるタグ(value=”True”の部分)を書き換える際は、「外部XMLを更新」で書き換えることができます。
さて、これで準備は整ったので、赤枠内の部分をマクロの外で作る必要があります。それを見ていきましょう。
更新XMLを作る
更新用のXMLは地道にフォーミュラツールと集計ツールで作っていくことができます。インプットとしては、フィールド名と並び替えの順序のリストがあればオッケーです。例えば以下のような形にします。
セレクトツールには、「Unknown」があるので、それも今回入れています。
さて、ワークフローとしては以下のようになります。
最初にOrderで並べ替えた後、フィールド名の前後にタグを付与していきます。以下のような計算式になります。
'<SelectField field="'+[FieldName]+'" selected="True" />'
その後、集計ツールで一行にまとめ、もしUnknownが指定されていない場合はその後のフォーミュラツールで付加しています。これでXMLが生成できるので、マクロのコントロールパラメータ入力側にデータを入れればオッケーです。
ポイントは、どのようなXMLを作ってコントロールパラメータに入れるかというところです。この作るべきXMLをXMLビューで確認して作り込む、というところが少々難しいポイントですので、ある程度慣れた人にしかおすすめできない内容となります。
最終的には以下のようなワークフローになります。
マクロの中にマクロが入っていたりと複雑なワークフローになってしまいましたが、無事に完成させることができました。
まとめ
- セレクトツールをXMLで更新することで動的な任意の並べ替えに対応することができました。
- XMLビューについて解説を行いました
- アクションツールのフォーミュラで生XMLを更新をご紹介しました
- 正直Tipsという簡単なレベルではなくなってしまいました・・・
- サンプルワークフローがそのまま今回は再利用できるようにマクロになっています・・・
サンプルワークフローダウンロード
次回
未定です。
コメント