3.5.3.5. シリアライズ可能な引数とそうでない引数

OpenRPAのベースとなっているMicrosoft Workflow Fundation(MWF)では、変数や引数を2つの異なるカテゴリに分類しています。大半のワークフローでは、この違いを理解する必要はなく、何も影響を与えませんが、非シリアル化オブジェクトの技術的な制限を知ることで、ワークフローやプロセスが期待通りに動作しない理由を説明できる場合があります。

要するに、非シリアライズ可能なオブジェクトは、その名が示すように、シリアライズすることができないのです。この用語は、この文脈では、「これらのオブジェクトは保存できない/ネットワーク上で送信できない」と簡略化することができる。つまり、ワークフローにシリアライズ不可能な変数/引数が含まれる場合、ワークフローの状態を保存することができません。また、シリアライズ不可能な引数を持つワークフローの起動もサポートされていません。最も一般的なシリアライズ不可能な変数/引数のタイプは次のとおりです。DataTablesDataSetsですが、その他の型(すべての名前空間から無限に存在する型)もこのカテゴリに属します。

この簡単な説明のもと、シリアライズ不可能な変数や引数を含むワークフローを扱う際にユーザーが直面する可能性のある制限と、その回避策をいくつか紹介します。

  • ワークフローの状態の保存

    OpenRPAが OpenFlowに接続されている場合、特定のアクティビティ¹に到達するたびに、ワークフローの状態がOpenFlowに自動的に保存されます。これらの状態は、実行中のデザイナーレイアウト(アクティビティ、シーケンス)、変数や引数、およびそれらの現在値など、ワークフローインスタンスに関連する現在の状況を示すために存在します。したがって、ワークフローがDataTableのようなシリアライズ不可能なオブジェクトを含む場合、ステートを保存することはできない。

    アイドル状態になるすべてのアクティビティ(Detectors、Delay、Invoke Remote with wait)、およびPersistアクティビティです。

    回避策複雑なワークフローをより小さなワークフローに分割し、シリアライズできないオブジェクトの管理を小さなワークフローに任せます。そうすることで、予期せぬ中断が発生しても、すべてのデータを失うことはありません。

  • リモート OpenRPA / シリアル化できない引数での起動

  • Openflowの起動 / Node-REDの起動とデータリターン

    Invoke Remote OpenRPAActivityを使用する場合、呼び出されるワークフローがシリアライズ不可能な引数を使用する可能性があることに注意してください。呼び出し先のコンピューター/OpenRPAが呼び出し元のOpenRPAと異なるため、シリアライズ不可能な引数を渡すことができず、呼び出しに失敗します。

    同様の制限は、ユーザーがNode-REDで Invoke Openflowアクティビティを使用してフローを呼び出す場合にも発生し、シリアライズできないオブジェクトは引数として使用することがサポートされません。このルールの例外はDataTableタイプで、OpenRPAは Node-REDに問い合わせる前にこれらをきちんとJArray オブジェクトに変換し、データが返されたとき/ ノードワークフローが使われたときにDataTableに戻そうと試みます。

    回避OpenRPA.OpenFlowDBツールボックスのアクティビティを使用して、OpenFlowMongoDBにファイルをアップロード/データを更新/エンティティやコレクションを作成し、デスティネーションコンピュータでOpenFlowMongoDBにクエリを実行してデータにアクセスします。この方法では、データ/データセット/データテーブル(シリアライズできないオブジェクト) 全体が MongoDB に格納され、呼び出し時に渡されるパラメーターは_idやその他の識別子になります。

    回避策2:シリアライズできないオブジェクトをシリアライズ可能なオブジェクトに変換します(例:base64文字列)。