Hitachi

OpenTP1 Version 7 分散トランザクション処理機能 OpenTP1 プロトコル TP1/NET/TCP/IP編


CBLDCMCF('RESEND△△') − メッセージの再送(COBOL言語)

〈このページの構成〉

形式

PROCEDURE DIVISIONの指定

CALL  'CBLDCMCF'  USING  一意名1  一意名2  一意名3

DATA DIVISIONの指定

01  一意名1.
    02  データ名A   PIC X(8)  VALUE 'RESEND  '.
    02  データ名B   PIC X(5).
    02  FILLER      PIC X(3).
    02  データ名C   PIC X(4)  VALUE SPACE.
    02  データ名D   PIC X(4)  VALUE SPACE.
    02  データ名E   PIC 9(8).
    02  データ名F   PIC 9(8).
    02  データ名G   PIC 9(9)  COMP VALUE ZERO.
    02  データ名H   PIC X(4)  VALUE SPACE.
    02  データ名I   PIC X(4)  VALUE SPACE.
    02  データ名J   PIC X(4).
    02  データ名K   PIC X(4).
    02  データ名L   PIC X(8)  VALUE SPACE.
    02  データ名M1  PIC X(4)  VALUE SPACE.
    02  データ名M2  PIC X(8)  VALUE SPACE.
    02  データ名M3  PIC X(4)  VALUE SPACE.
    02  データ名M4  PIC 9(9)  COMP VALUE ZERO.
    02  データ名M5  PIC 9(9)  COMP VALUE ZERO.
    02  データ名M6  PIC X(1)  VALUE SPACE.
    02  データ名M7  PIC X(1)  VALUE SPACE.
    02  データ名N   PIC X(14) VALUE LOW-VALUE.
01  一意名2.
    02  データ名O   PIC X(4)  VALUE 'OUT '.
    02  データ名P   PIC X(8).
    02  データ名Q   PIC X(8)  VALUE SPACE.
    02  データ名R   PIC X(8)  VALUE SPACE.
    02  データ名S   PIC X(28) VALUE LOW-VALUE.
01  一意名3.
    02  データ名T   PIC X(8).
    02  データ名U   PIC X(4).
    02  データ名V   PIC 9(9)  COMP.
    02  データ名W   PIC X(4).
    02  データ名X   PIC X(12) VALUE LOW-VALUE.

機能

以前に送信したメッセージを,再び送信します。再送するメッセージは,以前に送信したメッセージとは別の,新しいメッセージとして扱います。どのメッセージを再送するかは,次に示す送信済みメッセージの情報で選択できます。

対象としたメッセージが以前に送信されていない場合は,CBLDCMCF('RESEND△△')はステータスコード70904を返します。また,メッセージキュー(ディスクキュー)内に対象のメッセージがない場合も,ステータスコード70904を返します。このため,使用するメッセージキューの種別ではディスクキューを指定するとともに,メッセージキューの大きさの定義では余裕を持った値を指定してください。

UAPで値を設定するデータ領域

●データ名A

メッセージの再送を示す要求コード「VALUE 'RESEND△△'」を設定します。

●データ名C,データ名D

空白を設定します。

●データ名E,データ名F

MCFで使用する領域です。

●データ名G

0を設定します。

●データ名H,データ名I

空白を設定します。

●データ名J

一般として再送するか優先として再送するかを設定します。

VALUE 'NORM'

一般の一方送信メッセージとして再送する場合に設定します。

VALUE 'PRIO'

優先の一方送信メッセージとして再送する場合に設定します。

空白

省略されたものとして,「VALUE 'NORM'」(一般の一方送信メッセージとして再送)が設定されます。

●データ名K

再送するメッセージに出力通番を付け直すかどうかを設定します。

VALUE 'SEQ△'

再送するメッセージに出力通番を付け直す場合に設定します。

VALUE 'NSEQ'

再送するメッセージに出力通番を付け直さない場合に設定します。

空白

省略されたものとして,「VALUE 'NSEQ'」(出力通番を付け直さない)が設定されます。

●データ名L,データ名M1,データ名M2,データ名M3

空白を設定します。

●データ名M4,データ名M5

0を設定します。

●データ名6,データ名M7

空白を設定します。

●データ名N

MCFで使用する領域です。

●データ名O

一方送信を示す「VALUE 'OUT△'」を設定します。

●データ名P

出力先の論理端末名称を設定します。論理端末名称は最大8バイトの長さです。8バイトに満たない名称を設定する場合は,後ろを空白で埋めてください。

●データ名Q,データ名R

空白を設定します。

●データ名S

MCFで使用する領域です。

●データ名T

再送するメッセージを検索するキーとして,以前に送信したメッセージの出力先の論理端末名称を設定します。論理端末名称は最大8バイトの長さです。8バイトに満たない名称を設定する場合は,後ろを空白で埋めてください。

●データ名U

再送するメッセージを検索するキーとして,以前に送信したメッセージの送信種別を設定します。

VALUE 'NORM'

一般の一方送信メッセージを対象とする場合に設定します。

VALUE 'PRIO'

優先の一方送信メッセージを対象とする場合に設定します。

空白

省略されたものとして,「VALUE 'NORM'」(一般の一方送信メッセージを対象)が設定されます。

「VALUE 'PRIO'」を設定した場合は,データ名Tに出力先の論理端末名称を設定できません。

●データ名V

再送するメッセージを検索するキーとして,以前に送信したメッセージの出力通番を設定します。データ名Wに「VALUE 'LAST'」を設定した場合は,ここに設定した値は無効となります。

●データ名W

最終出力通番を持つメッセージを再送するかどうかを設定します。

VALUE 'LAST'

最終出力通番を持つメッセージを再送する場合に設定します。この値を設定した場合は,データ名Vに設定した値は無効となります。

空白

データ名Vで設定した出力通番を持つメッセージを再送する場合に設定します。

●データ名X

MCFで使用する領域です。

OpenTP1から値が返されるデータ領域

●データ名B

ステータスコードが,5けたの数字で返されます。

ステータスコード

ステータスコード

意味

00000

正常に終了しました。

70904

出力通番使用論理端末数(MCFマネジャ共通定義(mcfmcomn)の-nオプション)を省略,または0を指定しています。

データ名T,データ名U,またはデータ名Vに設定した値が間違っています。

再送するメッセージは次に示す理由によって,再送できるメッセージの条件を満たしていません。

  • 再送対象とするメッセージの送信時に出力通番を付けていません。

  • 出力メッセージの割り当て先にメモリキューを使用しています(論理端末定義(mcftalcle -k)のquekindオペランドを省略,またはmemoryを指定)。

  • 論理端末が閉塞しているなどの要因によって,送信メッセージが送信済みになっていません。

  • 送信済みのメッセージがディスクキューに保持されていません(保持メッセージ数は,メッセージキューサービス定義のquegrpコマンドの-mオプションで指定します)。

データ名Tで指定した論理端末に割り当てられているメッセージキューは,システム開始時に障害が発生したため,メモリキューを代用して縮退運転をしています。

70905

再送するメッセージのセグメントの長さが,UAP共通定義(mcfmuap -e)で指定した値を超えています。

71002

メッセージキューへの出力処理中に障害が発生しました。

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

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

MCFが終了処理中のため,メッセージの再送を受け付けられません。

71003

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

71004

メッセージキューから取り出したメッセージを格納するバッファ(作業領域)を,メモリ上に確保できませんでした。

71108

メッセージを再送しようとしましたが,再送先の管理テーブルが確保できませんでした。

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

72000

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

  • 先頭セグメントを受信するCBLDCMCF('RECEIVE△')を呼び出す前に,CBLDCMCF('RESEND△△')を呼び出しています。

  • 非トランザクション属性のMHPから,CBLDCMCF('RESEND△△')を呼び出しています。

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

トランザクションでないSPPの処理から,CBLDCMCF('RESEND△△')を呼び出しています。

72001

データ名Pまたはデータ名Tに設定した論理端末名称が間違っています。

CBLDCMCF('RESEND△△')を呼び出せない論理端末を設定しています。

72016

データ名Jに設定した値が間違っています。

データ名M4に設定した値が間違っています。

データ名Uに設定した値が間違っています。

データ名N,データ名S,またはデータ名Xに設定した値が間違っています。

72017

データ名Kに設定した値が間違っています。

72019

データ名M6に設定した値が間違っています。

72024

データ名Oに設定した値が間違っています。

72028

データ名Aに設定した値が間違っています。

上記以外

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

注意事項

メッセージの再送時には,MCFマネジャ定義のUAP共通定義(mcfmuap)の-eオプションと-lオプションの指定値に注意してください。

-eオプション

-eオプションでは,CBLDCMCF('RESEND△△')で使用する作業領域の大きさを指定します。再送するメッセージのセグメントがこの作業領域より大きい場合,CBLDCMCF('RESEND△△')はメッセージを再送しないで,ステータスコード70905を返します。このため,-eオプションでは,セグメントの最大長よりも大きな値を設定しておいてください。

-lオプション

-lオプションでは,出力通番に関して指定します。この内容によっては,メッセージキューファイル内に同じ出力通番を持つメッセージが同時に存在する場合があります。この場合は,どのメッセージを再送するか保証できません。