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を起動させます。トランザクション終了後またはサービス関数終了後,すぐに起動させることも,設定した時間経過後に起動させることもできます。

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

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

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

一定の時間間隔で起動時間に達したかどうかを監視するので,activeに設定した時間と実際の起動時間には誤差が生じます。時間監視の精度は,MCF通信構成定義mcfttimの-tオプションのbtimオペランドに指定した時間監視間隔の値に依存します。

●apnam

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

●comdata

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

●cdataleng

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

リターン値

リターン値リターン値(数値)意味
DCMCFRTN_000000正常に終了しました。
DCMCFRTN_71002-12002メッセージキューへの入出力処理時に障害が起こりました。
メッセージキューが閉塞されています。
メッセージキューが割り当てられていません。
セグメント長に32000バイトを超える値を設定しています。
MCFが終了処理中のため,apnamに設定したMHPを起動できません。
DCMCFRTN_71003-12003メッセージキューが満杯です。
DCMCFRTN_71004-12004メッセージを格納するバッファをメモリ上に確保できませんでした。
DCMCFRTN_71108-12108apnamに設定したアプリケーション名の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-13005actionでDCMCFESIを設定したdc_mcf_execap関数で,メッセージのセグメント長に1バイト未満の値を設定しています。
DCMCFRTN_72007-13007dc_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-13016actionに設定できない値を設定しています。
resv01に設定した値がヌル文字になっていません。
actionに設定したアプリケーション起動の方法が間違っています。
設定した引数が間違っています。
DCMCFRTN_72024-13024commformにDCNOFLAGSを設定していません。
DCMCFRTN_72026-13026actionのセグメント種別(最終セグメント DCMCFEMI,または最終セグメント以外 DCMCFESI)に設定した値が間違っています。
DCMCFRTN_72041-13041最終セグメント以外(DCMCFESI)を設定したdc_mcf_execap関数を呼び出していないアプリケーションに,最終セグメント(DCMCFEMI送信セグメント長=0)を設定したdc_mcf_execap関数を呼び出しています。
DCMCFRTN_72044-13044dc_mcf_contend関数をすでに呼び出した 継続問い合わせ応答型(type=cont)のMHPから,dc_mcf_execap関数で 継続問い合わせ応答型のMHPを起動させています。
DCMCFRTN_72108-13108activeに設定できる範囲の値を超えています。
DCMCFRTN_72109-13109MCFアプリケーション定義で継続問い合わせ応答型(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ファイルを排他ありで参照してください。排他なしで参照した場合,更新前のデータが入力されることがあります。