この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
こんにちは、小澤です。
このシリーズではこれまでAlteryx SDKを構成する要素として、Configファイル, HTML GUIと紹介してきました。 また、それらを使ったサンプルマクロの作成も行いました。 Alteryx SDKでは処理内容の部分もマクロではなくプログラムとして記述することが可能です。
今回は、Pythonを使った処理内容の実装方法を解説していきたいと思います。
なお、Alteryx 11.8現在、Python SDKはベータ版となっています。 今後、仕様に破壊的変更が加わる可能性があるのでご注意ください。
Python SDKのメソッド
Pythonでプログラムを記述する際には、処理内容の他にワークフローのXMLに設定された値を取得するなどの部分も含めて記述する必要があります。 Alteryx上で「この操作を行った時にこの処理を実行する」という対応関係を記載する必要があります。 AlteryxのPython SDKではそれら特定のイベントに対応する処理を記述するための2つのクラスを実装します。
AyxPlugin
AyxPluginでは、主にツールがワークフロー中に配置された際の挙動を設定します。 実装するメソッドは以下になります。
メソッド | 役割 |
---|---|
__init__ | ツールがワークフローに配置された際に呼び出されるコンストラクタ |
pi_init | ツールの選択状態が解除された時(設定値が利用可能になった時)に呼び出される |
pi_add_incoming_connection | 入力コネクションが接続された時の動作を設定 |
pi_add_outcoming_connection | 出力コネクションが設定された時の動作を設定 |
pi_push_all_records | 入力がない(あるいはオプション)のツールで初期値を設定する |
pi_close | 終了処理 |
これらのメソッドを実行する処理は記述する必要はなく、Alteryxから呼び出されます。 クラス内にはその他にもヘルパなどのメソッドを定義しても問題ありません。
記述内容は以下のようになります。
class AyxPlugin:
def __init__(self, n_tool_id: int, alteryx_engine: object, output_anchor_mgr: object):
# 引数で受け取ったものや各種内部処理必要な設定をメンバ変数として初期化・保存
def pi_init(self, str_xml: str):
# ワークフローの設定値が渡されるので、XMLをパースして値を取得する
def pi_add_incoming_connection(self, str_type: str, str_name: str) -> object:
# 入力コネクションが設定された際にメタデータがわたるので必要な処理を行う
# IncomingInterfaceをインスタンス化する
def pi_add_outgoing_connection(self, str_name: str) -> bool:
# 出力に関する設定を行う
def pi_push_all_records(self, n_record_limit: int) -> bool:
# 初期値として必要な値の設定を行う
def pi_close(self, b_has_errors: bool):
# 終了処理
IncomingInterface
IncomingInterfaceでは主にワークフローが実行された際の動作に関する設定を行いいます。
メソッド | 役割 |
---|---|
__init__ | pi_incoming_connectionでインスタンス化された際に呼び出される |
ii_init | 入力コネクションから受け取るメタ情報が変更された際に呼び出される |
ii_push_records | ワークフロー実行時にデータ1行ごとに対して実行される処理 |
ii_update_progress | ツールの進捗状況(パーセンテージ)を返す |
ii_close | 終了処理 |
コンストラクタを除き、こちらもAlteryxから呼び出されるメソッドとなります。
class IncomingInterface:
def __init__(self, parent: object):
# インスタンスが生成された際の初期化を行う
def ii_init(self, record_info_in: object) -> bool:
# 入力コネクションのメタデータが変化した際に呼び出されるので必要な初期化や出力に関するメタデータの設定を行う
def ii_push_record(self, in_record: object) -> bool:
# ワークフローが実行された際に各レコードごとに「in_record」に値が渡される
# ここで具体的な処理内容を記述する
def ii_update_progress(self, d_percent: float):
# 処理の進捗状況を返す
def ii_close(self):
# 終了処理
Python SDKに含まれる各種クラス
Python SDKでは、ワークフローを実行しているAlteryxとのやり取りや入出力データを扱うクラスが用意されています。 実際に処理内容を記述していく際にはこれらを活用していくことになります。
Alteryxの各種ライブラリを利用するには、AlteryxPythonSDKをインポートします。
import AlteryxPythonSDK as Sdk
Alteryxで実際に利用するライブラリは以下のようなものになります
- AlteryxEngine
- OutputAnchor
- Record関連
- Field
AlteryxEngine
AlteryxEngineはAlteryxとPythonで記述したコードとの間でやり取りするためのメソッドが含まれます。 Resultsにメッセージを出力したり、Engine.*に含まれる変数を取得したりといった機能があります。
OutputAnchor
OutputAnchorでは出力に関する処理を行います。 後述のRecord関連の情報を与えて出力コネクションにデータを渡します。
Record関連
Recordでは1行1行のデータを扱います。 メタデータに関する情報の保持や追加・編集に利用可能なRecordInfoやデータの生成を行うRecordCreatorなどのクラスが含まれます。
Field
FieldはRecord内の個々のフィールドのデータを保持します。
これらの詳細については、公式ドキュメント内に詳細が記載されています。 網羅的な情報についてはそちらをご参照ください。
おわりに
今回は、Alteryx SDKのうち、Python SDKについて触れました。
普段からよくAlteryxを使っていてドキュメントを読み解きながらプログラムも書けるよ!という方はこの情報を元に実装を始められるかもしれませんが、これだけではイメージが掴めない!という方も多いかと思います。
次回は、Python SDKを使った簡単なツールの作成をして見ましょう!
Alteryxの導入なら、クラスメソッドにおまかせください
日本初のAlteryxビジネスパートナーであるクラスメソッドが、Alteryxの導入から活用方法までサポートします。14日間の無料トライアルも実施中ですので、お気軽にご相談ください。