意外と知られていないワークフロー定数を今回はご紹介したいと思います。
ワークフロー定数とは?
ワークフロー定数は、ワークフロー内で利用できる固定値です。
ワークフロー定数は、ワークフロー設定の「ワークフロー」タブで確認・設定することができます。
使用頻度的に少ないため、知らない方も多いかと思います。
ワークフロー定数の種類
ワークフロー定数は、システムが自動生成するものと、ユーザーが作成するものの2つが存在します。
タイプ:Engine
システムがデフォルトで作成するものは、タイプを「Engine」として以下の定数が作成されます。
- TempFilePath:Engineが一時的に利用するフォルダのパスが格納されています
- Version:Designerのバージョンが格納されています
- WorkflowDirectory:ワークフローが保存されているフォルダが格納されています
- WorkflowFileName:ワークフローの名前が格納されています
- GuiInteraction:GUIから動いている場合はTrue、そうでない場合(コマンドライン等)はFalseとなります
これら以外に、バッチマクロ、反復マクロそして位置最適化マクロの場合は、以下の定数が追加されます。
- IterationNumber:何回マクロが繰り返したか、回数が格納されています。0からスタートします
その他、2つのタイプ「Question」「User」があります。
タイプ:Question
分析アプリやマクロの場合はたいていインターフェースカテゴリのツールが使用されますが、これらのツールを追加されるとタイプ「Question」として自動的にワークフロー定数が追加されます。
この名前は、各インターフェースツールの「名前」欄のものがそのまま利用されます。たいてい自動で作成されるものは「テキストボックス(1)」みたいになっていてイマイチなのでワークフロー定数として利用する場合はわかりやすい名前をつけてあげたほうが良いかと思います。
タイプ:User
タイプがUserのものは自分自身で作成したものです。実際に作ってみましょう。作成する際は、右上の方にある「+」ボタンから作成できます。
「+」ボタンを押すと、ダイアログが出るわけでもなく、直接空っぽの項目が作成されます。ここで名前や値を直接入力することができます。
例えば、消費税の計算のためのtaxという固定値を作りたいと思います。
このように、名前、値を入れることができます。一番右端の「#」という項目は、値を数値として扱いたい場合はチェックを入れます(入れなければテキストとして扱われます)。
どのように利用できますか?
ワークフロー定数は、例えばフォーミュラツールやデータ出力ツールのファイルパスの中でも利用することができます。呼び出す場合は、タイプと組み合わせて記載します。例えば、ワークフローの名前がほしい場合は、タイプがEngineなので、[Engine.WorkflowFileName]と記載します。
フォーミュラ系ツール内で利用する(式内の定数)
先程の消費税計算を行ってみましょう。フォーミュラツールを配置して計算をしようとすると・・・。
見事に[User.tax]という項目がポップアップしてきます。これをそのまま計算式に組み込むと・・・。
結果は、、、
と無事に計算されています。この方法は、まさに定数として利用されています。
この方法は、数式内でしか利用できないのでご注意下さい。
データ入力・出力ツールなどで使う(参照ショートカット)
次に、データ出力ツールで使ってみましょう。以下のようにファイル名をワークフロー定数に記載します。
次に、保存先ファイル名としてこの定数を使ってみましょう。今回相対パスにします(ファイル名だけ入れればワークフローのあるフォルダ直下にファイルが保存されます)。
上のように、ワークフロー定数をブランケット([])ではなく、「%」で囲みます。これは参照ショートカットと呼ばれる方法です。Helpでは「この方法を使用する場合は、必ずしも期待どおりの結果が得られるとは限らないので注意してください。」と書いてあるので、実際に動くかどうかはやってみてください。ちなみに、数式内でも、テキストボックス内でも利用できる、とのことです。
まとめ
若干ややこしいので使い方をまとめます。
タイプ | 数式エディタ | テキストボックス |
---|---|---|
Engine | 可能 “%Engine.constname%” [Engine.constname] | 可能 %Engine.constname% |
Question | 可能 “%Question.constname%” [Question.constname] | 不可 |
User | 可能 “%User.constname%” [User.constname] | 可能 %User.constname% |
個別のややこしいパターンをご紹介します。
数式ツールの新規フィールド名で利用する
実用性はないですが、フォーミュラツールの新規フィールド名でも利用可能です。
という感じでワークフロー定数を作成します。フォーミュラツール内は以下のようにします。
こんな感じでしっかり反映されます。
項目名の場合は、数式内ではないため、[User.NewFieldName]みたいに書くと置き換えが発生せず、そのまま入力したものが表示されます。
Questionの利用方法
ナレッジベースにはこれはできないようなことを書かれていますが、動作するようです(2024.1で確認)。確かにメニュー上はまったくQuestionタイプは出てこないのですが、直接入力すれば動作しています。ただし、普通にワークフローを実行すると値が入らないのでデバッグが面倒です。
普通に実行すると、以下のようになります。
ちなみに、数式エディタ内で%で囲う場合(参照ショートカットを使う場合)は、文字列として認識させなければならないため、上記のようにさらにダブルクォテーションで囲う必要があります(他のタイプでも同様です)。
また、フォーミュラツールの新規フィールド名でQuestionを使う場合、
とすると、分析アプリなどで動かす場合は実際に動作します。しかしながら、ワークフローを普通に回すと、値が入っておらず空のフィールド名になるためエラーになります。もちろんダブルクォテーションで囲めば動きますが・・・分析アプリで動かす場合は余計なダブルクォテーションを取り除く必要があります。
実際のユースケース
バッチマクロ・反復マクロのデバッグ用
バッチマクロ・反復マクロの各反復の際にその時のデータを保存しておくとデバッグが楽になることがあります。[Engine.IterationNumber]定数をファイル名に含んでファイルを保存するようにしておけば、反復の際にその時のデータが保存されます。特に反復マクロでは繰り返し出力の結果は各反復ごとに変化するため、デバッグが非常にやりやすくなります。
DBの接続先の一括変更
少し特殊なケースですが、1つのワークフロー内で複数のDBへ書き込むような場合、DCMオンの場合は、データ出力ツールをバッチマクロとして接続先DBのODBC接続IDをテキストボックスで書き換えるようにしておき、ワークフロー定数で制御する、というのはDBの一括書き込み先変更として非常に便利です。
なお、DCMオフの場合は、ワークフロー定数に生のパスワードを埋め込むことになるのであまりおすすめしません。
まとめ
- ワークフロー定数の使い方をご紹介しました
- Question(インターフェースツール)を使う場合は少し癖があるので、普通にアクションツールと組み合わせたほうがデバッグなど考えると良いと思います。
- ワークフロー定数の書き換えまでなかなか目が行き届かないため、明確に変更をしてほしい場合はワークフロー内やドキュメント内でワークフロー定数を書き換えないといけないことを明記して下さい。
- 個人的には組織内で利用についての合意形成がなされてない場合はあまり使わないほうが良い気がしました
- とはいえ、集中管理はし易いのでユースケース次第では非常に強力に利用することができます
サンプルワークフローダウンロード
参考URL
次回
未定です。
コメント