Skip to main content

This is documentation for Caché & Ensemble. See the InterSystems IRIS version of this content.Opens in a new tab

For information on migrating to InterSystems IRISOpens in a new tab, see Why Migrate to InterSystems IRIS?

<code>

カスタム・コード行を実行します。

Synopsis

<code name='CodeWrittenInBasic'>          'invoke custom method "MyApp.MyClass".Method(context.Value)    </code> 

詳細

属性または要素 説明
namedisabledxposyposxendyend 属性 一般的な属性と要素” を参照してください。
<annotation> 要素

説明

BPL <code> 要素は、BPL ビジネス・プロセス内の 1 行または複数行のユーザ記述コードを実行します。<code> 要素を使用すると、BPL 要素では表現が難しい特殊なタスクを実行できます。<code> 要素で参照するプロパティは、ビジネス・プロセスの実行コンテキスト内のプロパティである必要があります。

BPL <code> 要素のスクリプト言語は、この要素を含む <process> 要素の language 属性で指定されます。Caché Basic または ObjectScript になります。ビジネス・プロセス内のすべて式、および <code> 要素内のコード行は、指定の言語で記述されている必要があります。指定しない場合は、デフォルトの ObjectScript が使用されます。

これらの Caché プログラミング言語の詳細は、以下を参照してください。

MVBasic は <code> 要素ではサポートされません。

通常、開発者は、アポストロフィー (') や アンパサンド (&) などの特殊な XML 文字をエスケープしなくてすむように、<code> 要素の内容を CDATA ブロック内にラップします。以下に例を示します。

<code name="MyCode" language="objectscript">
   callrequest.Name = request.FirstName & " " & request.LastName
</code>

ビジネス・プロセスの実行を適切に中断およびリストアできるようにするために、<code> 要素の使用時には以下のガイドラインに従ってください。

  • 実行時間は短くします。カスタム・コードがビジネス・プロセスの実行を妨げないようにしてください。

  • システム・リソースを割り当てる (ロックの取得やデバイスのオープンなど) 場合は、必ず同じ <code> 要素内でそのリソースを解放してください。

  • <code> 要素がトランザクションを開始する場合は、同じ <code> 要素が考えられるすべてのシナリオでトランザクションを終了することを確認します。トランザクションを終了していない場合には、トランザクションは無期限に開いたままになる可能性があります。これにより他の処理が阻止されたり、重大なダウンタイムを発生することがあります。

  • ビジネス・プロセスの実行コンテキストに含まれていない変数には依存しないでください。Ensemble は、ビジネス・プロセスが中断され、後から再開された場合は常に、実行コンテキストの内容を自動的にリストアします。他の変数はクリーンアップされます。

また、<code> 内にコードの複数行を挿入するのではなく、クラス・メソッドや必要なコードを含むルーチンを起動することを強くお勧めします。この方法は、実行した処理のテストおよびデバッグをはるかに簡単にします。

使用可能な変数

<call> 要素は、以下の実行コンテキスト変数とそのプロパティを参照できます。このリストに示されていない変数を使用しないでください。

変数 目的
context context オブジェクトは、ビジネス・プロセスの汎用データ・コンテナです。context は自動的には定義されません。このオブジェクトのプロパティを定義するには、<context> 要素を使用します。その場合、<process> 要素内でこれらのプロパティを参照するには、context.Balance のようにドット構文を使用します。
request request オブジェクトには、このビジネス・プロセスをインスタンス化させた元の要求メッセージ・オブジェクトのプロパティが含まれます。<process> 要素内の任意の場所で request のプロパティを参照するには、request.UserID のようにドット構文を使用します。
response response オブジェクトには、ビジネス・オブジェクトが返す最終的な応答メッセージ・オブジェクトの構築に必要となるすべてのプロパティが含まれます。<process> 要素内の任意の場所で response のプロパティを参照するには、response.IsApproved のようにドット構文を使用します。これらのプロパティに値を割り当てるには <assign> 要素を使用します。
status status は、成功または失敗を示す %StatusOpens in a new tab 型の値です。BPL ビジネス・プロセスが開始されると、status には成功を示す値が自動的に割り当てられます。BPL ビジネス・プロセスの実行中に status が失敗値を受け取ると、そのビジネス・プロセスは即座に終了し、該当するテキスト・メッセージがイベント・ログに書き込まれます。通常、<call> アクティビティから不成功値が返された時点で、この処理が自動的に行われます。ただし、<assign> または <code> を使用して status 値を設定すれば、BPL ビジネス・プロセス・コードをいつでも正常に終了できます。このトピックの最後の説明を参照してください。
process process オブジェクトは、BPL ビジネス・プロセス・オブジェクトの現在のインスタンス (BPL クラスのインスタンス) を表します。このオブジェクトには、そのクラスで定義されたプロパティごとに 1 つのプロパティがあります。process.SendRequestSync() などの process オブジェクトのメソッドを起動できます。
Caution:

その他すべての実行コンテキスト変数名と同様、status は BPL の予約語です。<code> ブロックを終了させる場合以外は、<code> ブロック内で使用しないでください。

<code> を使用したステータス変数の設定

status%StatusOpens in a new tab 型のビジネス・プロセスの実行コンテキスト変数であり、成功または失敗を表します。

Note:

BPL ビジネス・プロセスのエラー処理は自動的に実行されます。BPL ソース・コードで status 値をテストまたは設定する必要はありません。ここでは、特殊な状況下で BPL ビジネス・プロセスを終了しなければならない場合に備えて、status 値が設けられています。

BPL ビジネス・プロセスが開始されると、status には成功を示す値が自動的に割り当てられます。status に成功値が割り当てられているかどうかを確認するには、ObjectScript ではマクロ $$$ISOK(status)、Basic ではメソッド $SYSTEM.Status.IsOK(status) を使用します。このテストで True 値が返された場合、status には成功値が格納されています。

BPL ビジネス・プロセスの実行中に status が失敗値を受け取ると、そのビジネス・プロセスは即座に終了し、該当するテキスト・メッセージがイベント・ログに書き込まれます。この処理は、status がどのような状況で失敗値を受け取ったかにかかわらず実行されます。したがって、status に失敗値を設定すれば、BPL ビジネス・プロセスをいつでも正常に終了することができます。

<code> アクティビティ内の文では、status を失敗値に設定できます。<code> アクティビティがすべて完了するまで、BPL ビジネス・プロセスは status 値の変更を認識しません。したがって、status が失敗の場合に <code> アクティビティを即座に終了するには、status に失敗値を設定した直後に、<code> アクティビティ内に終了コマンドを配置する必要があります。

BPL ビジネス・プロセスでは、<process> 内であればどこでも status を使用できます。status を参照するための構文は、%StatusOpens in a new tab 型の変数の場合と同じです。つまり status となります。

関連項目

<call><sql>

FeedbackOpens in a new tab