メインコンテンツへスキップ
前提条件を完了すると、CData Sync はAPIScript を記述できる場所であればどこでもPython を読み取って実行できるようになります。 Sync スクリプティングエンジンにAPIScript の代わりにPython を使用するよう指示するには、以下のようにapi:script キーワードのlanguage アトリビュートを設定して、Python をスクリプト言語として定義します:
Python はSync スクリプティングエンジンに直接組み込まれているため、Python に慣れているユーザーは、スクリプト内でメッセージやコンテキストを操作する際に似たような構文を使用できます。 同じスクリプト内でAPIScript とPython を併用することもできます。このアプローチは、すでにAPIScript が組まれていて、Python を使用して追加のロジックを実装する必要がある場合に便利です。以下の例に示すように、Python はAPIScript で定義されたアイテムに直接アクセスできます:
いくつかのPython のメソッドと変数は、Sync のメッセージ、アイテム、アトリビュートのコンテキストで動作するよう特別に設計されています。

組み込みオブジェクトインターフェース

Sync のPython 実装は、以下に示す組み込み変数を公開し、スクリプティングコンテキストへのアクセスを可能にする2つの主要なインターフェースを提供します。
  • SyncScriptContext
  • SyncScriptItem

SyncScriptContext

このインターフェースは、Sync でのPython スクリプトの主要なスクリプティングコンテキストを表します。アイテムへの辞書のようなアクセスを提供し、ロギング機能を備えています。このインターフェースは_ctx 変数を公開しており、スクリプティングコンテキストへのアクセスと管理に使用します。 このインターフェースで利用可能なメソッドは以下のとおりです:
  • push
  • log

SyncScriptItem

このインターフェースは、Sync のスクリプティング環境内の個々のデータアイテムを表します。アトリビュートへの辞書のようなアクセスを提供し、各アイテムの値のリストを保持します。以下の変数は、自動的に利用可能な、あらかじめインスタンス化されたSyncScriptItem オブジェクトです:
  • _input
  • output
このインターフェースで利用可能なメソッドは以下のとおりです:
  • get
  • clear

SyncScriptContext とSyncScriptItem の仕組み

SyncScriptContext とSyncScriptItem インターフェースは連携して、スクリプト内でのデータのアクセスおよび処理方法を管理します。_ctx 変数はスクリプティングコンテキスト全体を表し、アイテムへのアクセスや定義を可能にします。_ctx.itemname という構文を使用して、スクリプト内で新しいアイテムを動的に作成したり、既存のアイテムにアクセスしたりできます。 _input 変数とoutput 変数は、スクリプティングコンテキスト内のデータのコンテナとして機能します。_input 変数は受信データを保持して公開し、output 変数は送信データを保持して定義します。 このモデルでは、スクリプトは通常、_input からデータを読み取り、_ctx を使用してアイテムにアクセスまたは整理し、output から結果を書き込みます。 詳細については、組み込み変数およびオペレーションを参照してください。

組み込み変数

組み込み変数(_ctx、_input、output)は、スクリプティング環境におけるメッセージコンテキストの中核へのアクセスを提供します。これらの変数を使用して、スクリプティングエンジンで利用可能なアイテムを操作します。

_ctx

_ctx 変数は、スクリプティング環境にアクセスする主要な方法です。スクリプト内で利用可能なすべてのアイテムへのアクセスを提供し、新しいアイテムの作成、アイテムのプッシュ、アプリケーションログへのエントリの書き込みを可能にします。 次の例では、_ctx 変数のlog メソッドを使用して、INFO レベルでアプリケーションログにエントリを書き込んでいます:

_input

_input 変数は、スクリプティングエンジンの読み取り専用の入力アイテムを表します。利用可能なアトリビュートは、イベントを記述するコンテキストによって異なります。例えば、ジョブの後に実行されるイベントでは、以下の入力が利用可能です:
  • ConnectorId
  • WorkspaceId
  • MessageId
  • FilePath
  • FileName
  • Attachment#
  • Header:*
ただし、イベントの後に実行されるイベントの場合、前のイベントからプッシュされたアウトプットのみが入力として利用可能です。 次の例では、現在のメッセージのログファイルにコネクタの名前を出力します:
この例では、入力ファイルを取得して名前を変更し、元の名前をログに記録してから、新しい名前で同じファイルをプッシュします:
この例では、入力ファイルの名前をチェックして、生鮮品か非生鮮品のアイテムを含むかどうかを判定します。その後、ファイル名に基づいて生鮮品のヘッダーと値を設定します:

output

output 変数は組み込みアイテムであり、1つのアウトプットのみが必要な場合に、独自のアイテムを作成してプッシュする代わりに使用できます。アウトプットとして送信するためにpush() メソッドを明示的に呼び出す必要があるカスタムアイテムとは異なり、output アイテムはスクリプトが完了すると自動的にプッシュされます。プロパティを変更するだけで、スクリプトの実行完了後に追加のpush() 呼び出しを行うことなく、自動的にアウトプットとしてプッシュされます。 アイテムに直接アトリビュートを設定することも、辞書(dict)を使用して定義することもでき、自分で定義したアイテムでも同じことができます。次の例では、いくつかのデータを含むアウトプットファイルをプッシュします:
次の例では、入力ファイルを取得して名前を変更し、元の名前をログに記録してから、新しい名前で同じファイルをプッシュします:

オペレーション

スクリプティング環境では、スクリプティングコンテキストおよびアイテムを操作するために、以下のオペレーションを利用できます。
  • clear
  • get
  • log
  • push
これらのオペレーションにより、情報のログ記録、アイテムのアウトプットの管理、アイテムのアトリビュートへのアクセスまたは変更が可能になります。

clear

clear() オペレーションは、メソッドが呼び出されたSyncScriptItem をクリアします。アイテム自体は残りますが、空になります。
前の例では、次のアウトプットが生成されます:

get

get(attr) オペレーションは、SyncScriptItem 上の指定したアトリビュートの値を返します。このオペレーションは、名前によってアイテムのアトリビュートにアクセスするプログラム的な方法を提供します。これは、ドット記法を使用してアトリビュートに直接アクセスする方法(例:_input.myattr)や、辞書形式でアクセスする方法(例:_input.get('myattr'))と機能的に同等です。 次の例では、item オブジェクトのtags アトリビュートの値のリストを、現在のスクリプトのログファイルに出力します:

log

_ctx 変数で利用できるlog(level, message) オペレーションは、Sync アプリケーションログに直接エントリを書き込むことができます。利用可能なログレベルは、DEBUG、INFO、WARNING、ERROR です。 次の例では、特定のコネクタでデータ評価が失敗した際に、Python のロギングコンテキストを使用してエラーレベルのメッセージを記録します:

push

push(item) オペレーションは、指定したアイテムをスクリプトのアウトプットとしてプッシュします。アイテムが指定されていない場合、現在のアウトプットアイテムがプッシュされます。 次の例では、SyncScriptContext に新しいアイテム(foo)を作成し、データとファイル名を割り当てた後、プッシュしています。