RPAエンジニアの雑記

RPA(Blue Prism)について色々記載してます。

(BluePrism)コレクションのフィールドを並び替える

はいこんにちは、おむおむです。

ついさっき、足の悪いお爺さんが道で困っていたので
荷物を持ってあげておうちまで送ってきました。

送り届けた後、名乗らず颯爽と立ち去る私は、
まさに現代の武士と言っても過言ではないでしょう。
いや、もはやBUSHI
Los Ingobernables de Japónです。

www.youtube.com

初期メンバーのEVIL抜けちゃいましたねぇ。

という前置きはここまでにして、本題。
※注意:マニア向けです

やりたいこと

「コレクションのフィールドを並べ替えたい!」

そう思ったことが、皆さん一度や二度はあったはずです。

できます。やってみましょう。

ステージってどんな構造?

その前に、ステージってどんなデータ構造になっているか、
考えてみましょう。

まずこんな感じでコレクションを作成します。
f:id:newgraduate19:20200801135336p:plain
f:id:newgraduate19:20200801135219p:plain

こいつをコピーしたら、
テキストエディタに貼りつけてみます。

<process name="__selection__test" type="object" runmode="Exclusive">
  <stage stageid="1b1f50ba-6e9f-4a89-aebd-555bd4a4c3b2" name="コレクション" type="Collection">
    <subsheetid>d59d5191-ebc0-455d-b9a7-209e20915a16</subsheetid>
    <loginhibit />
    <display x="-165" y="-15" />
    <datatype>collection</datatype>
    <private />
    <alwaysinit />
    <collectioninfo>
      <field name="No" type="number" />
      <field name="Name" type="text" />
    </collectioninfo>
    <initialvalue>
      <row>
        <field name="No" type="number" value="1" />
        <field name="Name" type="text" value="山田" />
      </row>
      <row>
        <field name="No" type="number" value="2" />
        <field name="Name" type="text" value="佐藤" />
      </row>
      <row>
        <field name="No" type="number" value="3" />
        <field name="Name" type="text" value="森" />
      </row>
    </initialvalue>
  </stage>
</process>


そう、みんな大好きXMLなのです!
※実際は改行やインデントは入っていません


collectioninfoを並べ替えてみる

フィールド定義は、collectioninfo要素に書かれています。
これを並び変えて、以下のようにしてみます。

・・・
    <collectioninfo>
      <field name="Name" type="text" />
      <field name="No" type="number" />
    </collectioninfo>
・・・


すると・・・
f:id:newgraduate19:20200801144614p:plain

入れ替わってる!
やったぜ☆

と思うじゃないですか?
ところがどっこい!
どっこい生きてるシャツの中!
初期値は入れ替わっていないのです!
f:id:newgraduate19:20200801150140p:plain

row要素を入れ替えてみる

ではrow要素を入れ替えてみましょう。

試しに3行目を入れ替えてみます。

・・・
      <row>
        <field name="Name" type="text" value="森" />
        <field name="No" type="number" value="3" />
      </row>
・・・


初期値を見てみましょう。
f:id:newgraduate19:20200801150702p:plain

変わりませんね。。。

では1行目を変えてみましょう。

・・・
        <field name="Name" type="text" value="山田" />
        <field name="No" type="number" value="1" />
・・・


すると・・・
f:id:newgraduate19:20200801150956p:plain

今度こそ、やったぜ☆

各種IDの挙動を確認する

やりたいことは実現できました。
ここからはおまけです。

XML内に、stageidという属性と、
subsheetidという要素がありました。

この2つのIDは、
別のページやオブジェクトにステージを移動させると
自動的に変化するのか、
それとも同じ値が保持されるのか、気になりません?
気になりますよね!(圧)

では確認してみましょう☆

別のページに移動させる

まずは、別のページに移動させてみましょう。

ちなみにIDはそれぞれ以下の値です。

stageid: 1b1f50ba-6e9f-4a89-aebd-555bd4a4c3b2
subsheetid: d59d5191-ebc0-455d-b9a7-209e20915a16


別のページにコピペして移動した結果がこちら。

stageid: 638ead3b-b7f5-476a-ace7-544970be2910
subsheetid: a995c9ad-4a8c-412c-a1fa-672b0fd22ee2


つまり、コピペするだけで
IDが自動的に変化するようです。

うーん、インテリジェント☆

別のオブジェクトに移動させる

何となく結果は見えていますが、
同じ要領で別のオブジェクトに移動させてみます。

結果はこちら。

stageid: f0d13e2e-e7d7-4b56-8ff4-399b8fdede37
subsheetid: e2dc4e71-815f-465f-862c-46ae4d82313d


やはり変わってますね。

うーん、インテリj(略)

stageidの重複の確認

最後にもう一つだけ確認。

もし、意図的に別のステージと
stageidを重複させたらどうなるでしょうか?

やってみましょう。

まず、注記ステージを配置してstageidを確認します。

stageid: a679d5ae-86fc-4fd9-808d-0cde1218bff4


コレクションのstageidをこれと一致させた状態で
フロー内に貼りつけてみるとどうなるでしょうか。

stageid: 960620ae-ac8d-4b9d-b733-9cce17dc4470


なんと、エラーは出ずに別のIDが割り振られました。

うーん、イ(略)

ちなみに、プロセスやオブジェクト内で
固有であると思われるほかの値
(process要素のname、type、runmode属性)も、
重複させたりあえて空にしても
自動的に値が修正されていました。
すげえなぁ。

まとめ

・ステージはXMLで構成されている
・フィールドの並び替えは可能だけどちょいと面倒
・Blue Prismはインテリジェント☆

役に立つ記事を書こうとしたけれど、
どんな内容が望まれているかわからん。。。

ご意見いただければ嬉しいです☆
f:id:newgraduate19:20200801154454p:plain

マオマオちゃん可愛いなぁ。(しみじみ)