Hitachi

OpenTP1 Version 7 分散トランザクション処理機能 OpenTP1 プログラム作成リファレンス C言語編


dc_mcf_execap

〈このページの構成〉

名称

アプリケーションプログラムの起動

形式

ANSI C ,C++の形式

#include <dcmcf.h>
int  dc_mcf_execap(DCLONG action,DCLONG commform,char *resv01,
                   DCLONG active,char *apnam,char *comdata,
                   DCLONG cdataleng)

K&R版 C の形式

#include <dcmcf.h>
int  dc_mcf_execap(action,commform,resv01,active,apnam,comdata,
                   cdataleng)
DCLONG      action;
DCLONG      commform;
char        *resv01;
DCLONG      active;
char        *apnam;
char        *comdata;
DCLONG      cdataleng;

機能

UAP(SPP,またはMHP)から,apnamに設定したアプリケーション名のMHPを起動させます。トランザクション終了後またはサービス関数終了後,すぐに起動させることも,設定した時間経過後に起動させることもできます。詳細については,マニュアル「OpenTP1 プログラム作成の手引」の「アプリケーションプログラムの起動」の説明を参照してください。

SPPからdc_mcf_execap関数を呼び出した場合は,SPPがトランザクションとして処理していることと,そのSPPのメイン関数でdc_mcf_open関数を呼び出していることが前提です。

MHPからdc_mcf_execap関数でMHPを起動させる場合,起動されたMHPで受け取るメッセージ入力元の論理端末名称は,最初に受信したメッセージ中の名称になります。さらに,そのMHPからdc_mcf_execap関数を呼び出した場合も,受け取るメッセージ入力元の論理端末名称は,最初にメッセージを受信したときの名称が引き渡されます。

SPPからdc_mcf_execap関数でMHPを起動する場合,起動されたMHPで受け取るメッセージ入力元の論理端末名称は「*」となります。さらに,そのMHPからdc_mcf_execap関数を呼び出した場合も,受け取るメッセージ入力元の論理端末名称は「*」となります。

送信できるメッセージの一つのセグメント長は,32キロバイトまでです。ただし,プロトコルによって,実際の最大長が小さいことがあります。詳細については,マニュアル「OpenTP1 プロトコル」の該当するプロトコル編を参照してください。

起動させるMHPに渡すメッセージのセグメント形式を次に示します。Lは,バッファ形式1の場合は8バイト,バッファ形式2の場合は4バイトです。

[図データ]

UAPで値を設定する引数

●action

起動させるMHPに渡すセグメントが論理メッセージの最終セグメントかどうか,MHPをいつ起動させるか,および使うバッファ形式を,次の形式で設定します。

{DCMCFESI|DCMCFEMI}〔|{DCMCFJUST|DCMCFINTV|DCMCFTIME}〕
                                                〔|{DCMCFBUF1|DCMCFBUF2}〕
DCMCFESI

先頭セグメント,または中間セグメントを渡すときに設定します。この値を設定したdc_mcf_execap関数を呼び出した場合は,そのあとに必ずactionにDCMCFEMIを設定したdc_mcf_execap関数を呼び出してください。

DCMCFEMI

最終セグメントを渡すときに設定します。

論理メッセージが単一セグメントの場合も,DCMCFEMIを設定します。

先頭セグメント,または中間セグメントの送信後,メッセージの送信の終了を連絡する場合にも,DCMCFEMIを設定します。

DCMCFJUST

即時起動のときに設定します。このとき,activeに設定した値は無視されます。

DCMCFINTV

経過時間指定のタイマ起動のときに設定します。dc_mcf_execap関数を呼び出してからactiveに設定した時間だけ経過したあとに,MHPを起動させます。

DCMCFTIME

時刻指定のタイマ起動の場合に設定します。activeに設定した時刻に,MHPを起動させます。

DCMCFBUF1

バッファ形式1を使うときに設定します。

DCMCFBUF2

バッファ形式2を使うときに設定します。

●commform

DCNOFLAGSを設定します。

●resv01

ヌル文字列を設定します。

●active

  • 経過時間指定のタイマ起動(actionにDCMCFINTVを設定)の場合

    dc_mcf_execap関数を呼び出してから,何秒後にMHPを起動させるかを設定します。設定できる秒数の範囲は,1から360000まで(1秒から100時間まで)です。

  • 時刻指定のタイマ起動(actionにDCMCFTIMEを設定)の場合

    apnamに設定したMHPを起動させる時刻を設定します。0時0分0秒を基準にして,起動時刻を秒数で算出して設定します。時刻はローカルタイムで指定します。

    (時刻の設定例)

    午後2時30分30秒(ローカルタイム)に起動させる場合:

    14 × 3600 + 30 × 60 + 30 = 52230

    …52230をactiveに設定します。

設定できる値の範囲は,0(0時0分0秒に開始)から86399(23時59分59秒に開始)までです。

activeに設定した値は,タイマ起動の場合にだけ有効となります。即時起動の場合は,activeに設定した値は無視されます。

注意事項
  • 経過時間指定のタイマ起動の場合

    時間監視の精度は秒単位です。また,タイマ定義(mcfttim -t)のbtimオペランドで指定する時間監視間隔で起動するかどうかを監視しています。このため,activeに設定した経過時間と実際に起動する時間には秒単位の誤差が生じます。そのため,タイミングによっては,設定した監視時間よりも短い時間で起動することがあります。監視時間が小さくなるほど,誤差の影響を受けやすくなりますので,監視時間は3(単位:秒)以上の値の設定を推奨します。

  • 時刻指定のタイマ起動の場合

    時間監視の精度は秒単位です。また,タイマ定義(mcfttim -t)のbtimオペランドで指定する時間監視間隔で起動するかどうかを監視しています。このため,activeに設定した時刻と実際に起動する時刻には秒単位の誤差が生じます。

●apnam

起動させるMHPのアプリケーション名を設定します。アプリケーション名は最大8バイトです。アプリケーション名の最後にはヌル文字を付けます。

●comdata

起動させるMHPに渡す,メッセージのセグメントの内容を設定します。先頭セグメント,または中間セグメントの送信後,メッセージの送信の終了を連絡する場合にも,必ず設定してください。

●cdataleng

起動させるMHPに渡すセグメントの長さを設定します。先頭セグメント,または中間セグメントの送信後,メッセージの送信の終了を連絡する場合には,0を設定します。

リターン値

リターン値

リターン値(数値)

意味

DCMCFRTN_00000

0

正常に終了しました。

DCMCFRTN_71002

-12002

メッセージキューへの入出力処理時に障害が起こりました。

メッセージキューが閉塞されています。

メッセージキューが割り当てられていません。

セグメント長に32000バイトを超える値を設定しています。

MCFが終了処理中のため,apnamに設定したMHPを起動できません。

DCMCFRTN_71003

-12003

メッセージキューが満杯です。

DCMCFRTN_71004

-12004

メッセージを格納するバッファをメモリ上に確保できませんでした。

DCMCFRTN_71108

-12108

apnamに設定したアプリケーション名のMHPを起動しようとしましたが,起動させようとしたMHPの管理テーブルが確保できませんでした。

プロセスのローカルメモリが不足しています。

DCMCFRTN_72000

-13000

<MHPの実行でリターンした場合>

actionにDCMCFFRSTを設定したdc_mcf_receive関数を呼び出す前に,dc_mcf_execap関数を呼び出しています。

<SPPの実行でリターンした場合>

トランザクションでないSPPの処理から,dc_mcf_execap関数を呼び出しています。

DCMCFRTN_72001

-13001

設定したアプリケーション名は,MCFで定義していません。

アプリケーション名が間違っています。

MCFマネジャ定義の通信サービス定義(mcfmcname定義コマンド)に,アプリケーション起動プロセス名を指定していません。

アプリケーション起動プロセスに対応するMCFアプリケーション定義の環境定義(mcfaenv定義コマンドの-pオプション)に,アプリケーション起動プロセス識別子を指定していません。

アプリケーション環境定義(mcfaenv定義コマンドの-pオプション)で指定したアプリケーション起動プロセス識別子と,アプリケーション起動プロセスの通信構成定義(mcftenv定義コマンド)で指定する識別子が一致していません。

<非応答型のMHPを起動する場合>

  • 起動先アプリケーションのアプリケーション属性定義の,論理端末(mcfaalcap定義コマンドの-nオプションのlnameオペランド)に値を指定していません。

  • 起動先アプリケーションのアプリケーション属性定義に指定した論理端末を,アプリケーション起動プロセスの通信構成定義(mcftalcle定義コマンド)に定義していません。

  • 起動先アプリケーションのアプリケーション属性定義に指定した論理端末が,一方送信型(mcftalcle -t=send)ではありません。

  • 起動先アプリケーションのアプリケーション属性定義で指定した論理端末は,アプリケーション起動を使えません。

<応答型および継続問い合わせ応答型のMHPを起動する場合>

  • 起動先アプリケーションのアプリケーション属性定義に,内部通信路(mcfaalcap定義コマンドの-nオプションのcnameオペランド)を指定していません。

  • 起動先アプリケーションのアプリケーション属性定義に指定した内部通信路を,アプリケーション起動プロセスの通信構成定義(mcftpsvr定義コマンドの-cオプション)に定義していません。

  • アプリケーション起動プロセスの通信構成定義(mcftalcle定義コマンド)に,問い合わせ型論理端末(mcftalcle -t=request)を指定していません。

<SPPからアプリケーションを起動する場合>

  • アプリケーション起動プロセス識別子を,起動元のUAPのユーザサービス定義またはユーザサービスデフォルト定義のmcf_psv_idオペランドに指定していません。

  • 起動元のUAPのユーザサービス定義またはユーザサービスデフォルト定義のmcf_psv_idオペランドに指定しているアプリケーション起動プロセス識別子が,アプリケーション起動プロセスの通信構成定義(mcftenv定義コマンドの-sオプション),およびアプリケーション環境定義(mcfaenv定義コマンドの-pオプション)で指定しているアプリケーション起動プロセス識別子と一致していません。

  • 起動元のUAPのユーザサービス定義またはユーザサービスデフォルト定義のmcf_mgridオペランドに指定しているMCFマネジャ識別子が,アプリケーション起動プロセスが属しているMCFマネジャの識別子と一致していません。

DCMCFRTN_72005

-13005

actionでDCMCFESIを設定したdc_mcf_execap関数で,メッセージのセグメント長に1バイト未満の値を設定しています。

DCMCFRTN_72007

-13007

dc_mcf_reply関数をすでに呼び出した 応答型(type=ans)のMHPから,応答型のMHPをdc_mcf_execap関数で起動させています。

dc_mcf_reply関数をすでに呼び出した 継続問い合わせ応答型(type=cont)のMHPから,継続問い合わせ応答型のMHPを dc_mcf_execap関数で起動させています。

DCMCFRTN_72009

-13009

応答型(type=ans)のMHPから,dc_mcf_execap関数で応答型のMHPを2回以上起動させています。

継続問い合わせ応答型(type=cont)のMHPから,dc_mcf_execap関数で継続問い合わせ応答型のMHPを2回以上起動させています。

DCMCFRTN_72011

-13011

応答型(type=ans)でないMHPから,dc_mcf_execap関数で応答型のMHPを起動させています。

継続問い合わせ応答型(type=cont)でないMHPから,dc_mcf_execap関数で継続問い合わせ応答型のMHPを起動させています。

DCMCFRTN_72016

-13016

actionに設定できない値を設定しています。

resv01に設定した値がヌル文字になっていません。

actionに設定したアプリケーション起動の方法が間違っています。

設定した引数が間違っています。

DCMCFRTN_72024

-13024

commformにDCNOFLAGSを設定していません。

DCMCFRTN_72026

-13026

actionのセグメント種別(最終セグメント DCMCFEMI,または最終セグメント以外 DCMCFESI)に設定した値が間違っています。

DCMCFRTN_72041

-13041

<メッセージが単一セグメントの場合>

cdatalengに0バイト,またはマイナス値を設定しています。

<メッセージが複数セグメントの場合>

actionにDCMCFESIを設定したdc_mcf_execap関数を呼び出さないで,メッセージの送信の終了を連絡しています。

DCMCFRTN_72044

-13044

dc_mcf_contend関数をすでに呼び出した 継続問い合わせ応答型(type=cont)のMHPから,dc_mcf_execap関数で 継続問い合わせ応答型のMHPを起動させています。

DCMCFRTN_72108

-13108

activeに設定できる範囲の値を超えています。

DCMCFRTN_72109

-13109

MCFアプリケーション定義で継続問い合わせ応答型(type=cont)と指定したMHPを,タイマ起動のdc_mcf_execap関数で起動させようとしています。

DCMCFRTN_77001

-18001

起動しようとしたアプリケーションに対応する論理端末(LE)は,処理中で使えません。または使える論理端末がありません。

上記以外

プログラムの破壊などによる,予期しないエラーが発生しました。

注意事項

  1. MCFマネジャ定義のUAP共通定義(mcfmuap -c order)の指定によって,アプリケーションプログラムの起動順序が異なりますので注意してください。

  2. 一つのサービス関数で,TAMまたはDAMファイルの更新とdc_mcf_execap関数の呼び出しをして,起動先のアプリケーションで更新後のTAMまたはDAMファイルを参照させたい場合,TAMまたはDAMファイルを排他ありで参照してください。排他なしで参照した場合,更新前のデータが入力されることがあります。