式とは、ワークフロー内で計算を実行したり、データを操作したり、タスクを自動化したりする数式またはコードスニペットです。Visual Basic for Applications (VBA) や .NET などの言語で記述され、DocuWare 固有のカスタマイズが含まれる場合もあります。
ドキュメントベースのワークフローに式を埋め込むことで、値を動的に生成したり、データを検証したり、ドキュメントの内容に基づく条件付きロジックを作成したりできます。これにより、より高度で自動化された処理が可能になります。
式に関する詳細は、PDF の Workflow Expression Parser をご覧ください。
式ダイアログの使用
DocuWare Workflow Designer には、算術式を使用するための専用ダイアログが用意されています。
このダイアログは、データの割り当てや条件などのアクティビティで使用できます。
たとえば、「データの割り当て」アクティビティの場合:
最初の割り当てに移動し、宛先の種類と宛先のエントリを設定します。
ソースの種類を式に設定し、式の作成リンクをクリックします。
.png)
式に変数を追加するには、追加したい変数のグループのタブを選択します:
システム変数
グローバル変数
インデックステーブル
変数またはフィールドをクリックして、式に追加します。
利用可能なタブと変数は、使用する関数や該当するアクティビティの設定によって異なります。
式を使用したテーブルの整合
式に基づいて異なるテーブルソースを比較します。これにより、請求書やその他のドキュメントのデジタル化中に発生しうるエラーを排除できます。
例:
次の式は、2 つの文字列を比較してその類似度を推定します:
Peter Peterson _~ Peter Pitersen = 93%
S523-A336MS ~ S523-A336M5 = 95%
次の式は、パターンに従って文字列を変更します:
パターンに従って文字列からすべての数字を削除する
\d:Something123Anything => SomethingAnything次のパターンを使用して入力文字列を分割する:
\d+:Something123Anything => Something, Anything
文字列がパターンに一致するかを確認する:
[A-Z0-9]\d{3}-\d{3}:
A123-456 => true
DocuWare インデックステーブルでの式の使用
式の中でインデックステーブルの値を使用できます。編集したいインデックステーブルと同じテーブルの列から値を取得する場合、同じ行の値、つまり 1 つの値が得られます。これを行うには、「<テーブル名> のセル」タブから列を選択します。
一方、別のテーブルのインデックステーブル列にアクセスする場合は、その列のすべての値のリストが得られます。これを行うには、テーブル列タブから列を選択します。
同じテーブルの別の列から値を読み取り、必要に応じて式で変換してから、宛先列に書き込むことも可能です。
「行番号」システム列の挿入
DocuWare の「SYS_ROW_NUMBER」列は、インデックステーブルの該当行の番号を返します。この値を使用して値を連結したり、計算を実行したり、同じ行の別のテーブルから値を取得したりできます。テーブルの最初の行は常に行番号「1」とみなされます。
これは、行を判定するためにインデクサーを使用する場合に特に重要です。インデクサーでは 0 からカウントが始まるためです。
ただし、「SYS_ROW_NUMBER」システム列を使用すると、カウントは 1 から始まります。そのため、同じ行を取得するには 1 を減算する必要があります > 「...[SYS_ROW_NUMBER]-1」。
例:
「Example」という名前のテーブル (内部名「EXAMPLE」) を編集しており、「New Items」という別のテーブル (内部名「NEW_ITEMS」) から「Name」列に値を挿入したいとします。検索対象の値は、そのテーブルの「New Name」列 (内部名「NEW_I_NAME」) にあります。
値の判定にはインデクサーを、値の割り当てには「SYS_ROW_NUMBER」システム列を使用します。
通常、宛先列に対して次の算術式を定義します:
DW_NEW_ITEMS[NEW_I_NAME](X)
これにより、「New Items」テーブルの「New Name」列の指定された行の値が返されます。「X」はリストから返したいエントリを指定します。インデクサーは 0 から始まるため、たとえば「0」は最初の行を意味します。
ここで、宛先テーブルのフィールドにはソーステーブルの同じ行の値が必要です。そのため、インデクサーに固定値ではなく、新しいシステム列「SYS_ROW_NUMBER」を使用します。
ここで問題となるのは、「SYS_ROW_NUMBER」システム列のみを使用すると、最初に意図した行が得られないことです:
DW_NEW_ITEMS[NEW_I_NAME](DW_EXAMPLE[SYS_ROW_NUMBER])
この式は、「New Items」テーブルの「New Name」列の次の行の値を返します。つまり、たとえば「Line Items」テーブルの最初の行が処理される場合、「New Items」テーブルの 2 行目の値が返されます。
これは、「[SYS_ROW_NUMBER]」が値「1」を返し、実効的な式が DW_NEW_ITEMS[NEW_I_NAME](1) となるためです。
同じ行の正しい値を取得するには、「SYS_ROW_NUMBER」システム列から 1 を減算する必要があります。
DW_NEW_ITEMS[NEW_I_NAME]((DW_EXAMPLE [SYS_ROW_NUMBER]-1))
これにより、「New Items」テーブルの「New Name」列の同じ行の値が返されます。
つまり、たとえば「Example」テーブルの最初の行が処理される場合、「New Items」テーブルの最初の行の値が返されます。
これは、「[SYS_ROW_NUMBER]-1」が値「0」を返し、実効的な式が DW_NEW_ITEMS[NEW_I_NAME](0) となるためです。