サーバー管理者として、ユーザーが実行したワークフロー情報を抽出する仕組みを作成しております。
現状、ワークフローからServerAPIを実行しジョブ実行者、ワークフロー名、ワークフローの実行ログまでは関連付けできているのですがDCMの情報(Connectionid)との関連付けができていない状態です。
生成AIの回答ではMongoDB内のAlteryxServiceデータベースからワークフローのバイナリデータを取得、デコードしてyxmdを再構築してConnectionidを特定する方法が提示されたのですが
そもそもワークフローのバイナリがどこに存在するのか分かっておりません。
AS_App_Chunks、AS_Applicationsを確認しましたがchunkフィールドを見る限りすべてByte数となっておりました。
上記ワークフローのバイナリデータから特定する方法に限らず
jobIDもしくはworkflowIDとConnectionidを関連付けする方法があればアドバイスをいただけますと幸いです。
バージョンは2024.2となります。
解決済! 解決策の投稿を見る。
@Yosuke-Usuki ServerからWFを取得するにはMongo DBから直接抜き出すことも可能ですが、Server API V3を使うと楽です。Mongo DBのスキーマはバージョンによって変更が発生するため、Server APIでできることは、Server APIを利用することで改修の手間が省けます。
ServerのWFはyxzp形式になっており、このままですと中身のXMLが直接読み込めないので、一度、解凍する必要があります。Alteryx WF内で完結させるのであれば、以下のステップを踏むことになります:
① yxzpファイルの拡張子を .yxzp => .zip に書き換える
② ①のzipファイルを、RunCommandツールを利用してPowershellの ”Expand-Archive” で解凍
③ ②で解凍したyx**ファイル群をXMLとして読み込む
④ ③をパースしていき、DCM関連の情報を取り出す
上記ステップ①~③までのWFとしては、下図のようになります。サンプルWFを添付しますので、叩き台にご利用ください。
先に紹介したV3 APIは、「直接ダウンロードが無効」になっていると403エラーとなります。
「直接ダウンロードが無効」の設定に関わらずWFをダウンロードするには、以下のAdmin API V1が使えます。こちらはCuratorしか使えませんが、ご要望から察するに貴社のCuratorの方がDCMを管理したい意図かと思いますので、ご利用いただけるものと思慮しております。
Mongo DBからWFを取得できるか試行錯誤してみたのですが、期待したコレクションにWFのBynary Dataが存在しておらず、予想よりも難易度は高そうでした。頑張ればできるのかもしれませんが、上記Admin API V1を使うのが素直なやり方のようです。
ありがとうございます。
API V1の方で試してたところ直接ダウンロード無効の状態でGetできました。
共有いただいたサンプルを参考にして
API V1でGetしたワークフローのバイナリファイルをxml生データとして抽出するところまで作成できました。
WFのXMLからWF内のツール情報を取り出すには、下記のWorkflow XML Parser toolが便利です。標準ツールではないので、yxiでインストールが必要となります。
https://marketplace.alteryx.com/en-US/apps/444941/workflow-xml-parser
情報提供ありがとうございます。
少し戻るのですが、検証では以下まで実行できており①、②の部分をサーバーAPIツールに置き換えて
APIの出力レコード内の[DownloadData]のフィールドを利用してXML変換したいのですが
最下部の図のようにPK...と一部しか出力させることができません。。。
①swaggerで以下APIを実行
②swaggerの[Downloadfile]からダウンロード
③ワークフローで②をXML変換
やりたいこととしては
実ファイルとしてダウンロードせずにAPIからの出力レコードを使って処理できればと思っております。
DownloadDataフィールドではなく、BinaryDataフィールドを使ってください。この中にYXZPファイルがバイナリ形式で保管されています。
先に共有したWFの上流にコントロールコンテナを追加し、BinaryDataをInputフォルダにYXZPとして出力(Blob出力ツールを利用)するロジックを追加すると、WF上で全ての処理を完結できます。
ありがとうございます。
BinaryDataフィールドから出力できることを確認できました。