ページの先頭行へ戻る
Interstage Business Application Server アプリケーション開発ガイド
FUJITSU Software

13.4.4 C言語サーバアプリケーションの作成・修正

業務ロジックを作成し、アプリケーション連携実行基盤から呼び出されるサーバアプリケーションを作成、または修正します。
サーバアプリケーションには、業務処理と任意の出口処理(初期処理、終了処理、前処理、後処理、エラー処理、トランザクション後メッセージ編集処理)を作成します。

C言語サーバアプリケーションの作成方法、および修正方法について説明します。

サーバアプリケーション作成時の注意事項については、“22.2 サーバアプリケーションを作成する場合の注意”を参照してください。

13.4.4.1 業務処理の作成

アプリケーション連携実行基盤から呼び出されるサーバアプリケーションを作成するためには、サーバアプリケーションの業務処理のインタフェースを、以下のように作成する必要があります。

関数の復帰値
任意の関数名(
   [ユーザ任意のパラメタ,]
   [const char * const  userwork, int  userworksize,]   /* アプリケーション作業域 */
   [int  *rtn, apfwExcept  *apfw_env]                  /* 処理結果情報/例外情報  */
 )

■アプリケーション作業域

アプリケーション作業域は、初期処理で初期化された情報を共通に参照する領域です。領域はアプリケーション連携実行基盤で獲得されます。
アプリケーション情報入力ファイルでアプリケーション作業域を使用するように指定した場合に、使用します。アプリケーション情報入力ファイルの指定方法については、“13.4.2 アプリケーション情報入力ファイルの作成・修正”の“◆アプリケーション作業域”を参照してください。

注意

アプリケーション作業域を使用する場合、あわせて運用時の設定として、アプリケーション連携実行基盤定義ファイルでアプリケーション作業域のサイズも指定する必要があります。
設定方法の詳細は、“Interstage Business Application Server セットアップガイド”の“アプリケーション連携実行基盤定義ファイルの作成”を参照してください。

■処理結果情報

処理結果情報は、アプリケーションの処理結果(アプリケーション連携実行基盤での動作指示情報)を表すパラメタです。
アプリケーション情報入力ファイルで、処理結果情報を使用するように指定した場合、または指定を省略した場合に使用します。アプリケーション情報入力ファイルの指定方法については、“13.4.2 アプリケーション情報入力ファイルの作成・修正”の“◆処理結果情報”を参照してください。

サーバアプリケーションが正常(Commit)の情報だけを返却する場合には、インタフェースから省略できます。サーバアプリケーションのインタフェースから処理結果情報を省略する場合には、アプリケーション情報入力ファイルの<result_info>タグで、flag属性の値を“OFF”に設定してください。詳細は、“13.4.2 アプリケーション情報入力ファイルの作成・修正”の“◆処理結果情報”を参照してください。

注意

処理結果情報を省略した場合、サーバアプリケーションから、正常(Rollback)、異常または例外、およびリトライを返却することはできません。

処理結果情報のデータ型はint型です。以下の値を指定できます。

処理結果

トランザクション情報

設定値

正常

Commit

APFW_RTN_COMMIT (0)

正常

Rollback

APFW_RTN_ROLLBACK (1)

異常または例外

Rollback

APFW_RTN_ERROR (2)

リトライ

Rollback

APFW_RTN_RETRY (3)

なお、処理結果情報に何も値を設定しないで復帰した場合、アプリケーション連携実行基盤では異常または例外(APFW_RTN_ERROR)が設定されたものとして処理が行われます。

■例外情報

例外情報は、アプリケーションの処理結果が異常または例外(APFW_RTN_ERROR)の場合に設定します。同期処理の場合は、呼出し元に例外情報が通知されます。
業務処理がC言語で作成されている場合には、例外情報は以下のデータ型(apfwExcept)を使用します。apfwExcept構造体の詳細については、“Interstage Business Application Server リファレンス”の“アプリケーションインタフェース(C言語)”を参照してください。
なお、サーバアプリケーションのインタフェースから処理結果情報を省略する場合には、例外情報も同時に省略されます。

typedef struct{
  unsigned int    arealen;
  unsigned int    vallen;
  unsigned char   *val;
}apfwSequenceOctet;

typedef struct{
  int                  errcode;
  char                 *errmessage;
  apfwSequenceOctet    errdata;
}apfwExcept;

注意

  • 例外情報には、処理結果としてAPFW_RTN_ERROR、またはAPFW_RTN_RETRYを設定した場合に有効になります。それ以外の値を設定した場合には、例外情報として扱われません。

  • 通知する情報として、errcode(エラーコード)、errmessage(エラーメッセージ)、およびerrdata(エラー詳細)を設定することができます。

  • errmessageに設定した値についてはコード変換が行われますが、errdataに設定した値についてはコード変換が行われません。

■ユーザ任意のパラメタ

ユーザ任意のパラメタは、パラメタの方向によって指定方法が異なります。以下に、サーバアプリケーションのパラメタ受渡しに使用するデータ型の指定方法を示します。

データ型

IN

OUT

INOUT

復帰値

char*

char*

char**

char**

char*

unsigned short*

unsigned short*

unsigned short**

unsigned short**

unsigned short*

unsigned char

unsigned char

unsigned char*

unsigned char*

unsigned char

short

short

short*

short*

short

int

int

int*

int*

int

long long

long long

long long*

long long*

long long

float

float

float*

float*

float

double

double

double*

double*

double

構造体(注)

struct*

struct**

struct**

struct*

配列(注)

Array*

array**

array**

array*

バイナリ(注)

struct*

struct**

struct**

struct*

注)パラメタの受渡しに使用するデータ型が構造体、配列、バイナリの場合、ユーザ定義型のデータ名を指定します。

ポイント

パラメタ値の省略について
データを設定するアドレスにNULLを設定することで、送受信するデータを省略することができます。以下のデータ型で使用できます。

  • 文字列型(char*、unsigned short*)

  • 構造体

  • 配列

  • バイナリ

    値を省略する場合の設定例を以下に示します。

    【条件】

    • 業務処理名:server_apl

    • 使用するデータ型:以下の記述例の構造体

      typedef struct str{
        int    mem1;
        char   *mem2;
      } str;
    • パラメタ:str型のOUT

    • パラメタ名:param_out

    • アプリケーション作業域:使用する

    • 復帰値:void

    【設定例】

    void
    server_apl(
      str                    **param_out,
      const  char  *  const  userwork,
      int                    userworksize,
      int                    *rtn,
      apfwExcept             *apfw_env )
    {
      /* OUT情報設定 */
      *param_out = NULL;    /* 省略データ(NULL)設定 */
    
      return;
    }

サーバアプリケーション、および、初期処理、終了処理、前処理、後処理、エラー処理、トランザクション後メッセージ編集処理を作成する際には、以下のファイルをインクルードしてください

サーバアプリケーションを作成する際には、インタフェースに以下の値を指定します。

これらのインタフェースはC言語実行基盤インタフェース生成ツールの実行時に自動的に付加されるため、IDLファイルに記述する必要はありません。なお、アプリケーション作業域、およびアプリケーション作業域長を指定する場合には、アプリケーション情報入力ファイルで、アプリケーション作業域を使用するように指定する必要があります。アプリケーション情報入力ファイルの詳細については、“13.4.2 アプリケーション情報入力ファイルの作成・修正”を参照してください。

■メモリの獲得・解放について

使用する型によって、メモリの獲得および解放を意識する必要があります。

獲得および解放を意識する必要がある型は、以下のとおりです。

以下に、パラメタの方向によるメモリの獲得および解放の基本的な考え方を示します。

IN/OUT

獲得

解放

IN

実行基盤インタフェースが領域を獲得するため、ユーザアプリケーションは意識する必要はありません。

実行基盤インタフェースが領域を解放するため、ユーザアプリケーションは意識する必要はありません。

OUT

ユーザアプリケーションが領域を獲得する必要があります。

実行基盤インタフェースが領域を解放するため、ユーザアプリケーションは意識する必要はありません。

INOUT

IN
実行基盤インタフェースが領域を獲 得するため、ユーザアプリケーションは意識する必要はありません。

OUT
ユーザアプリケーションが領域を獲得する必要があります。

実行基盤インタフェースが領域を解放するため、ユーザアプリケーションは意識する必要はありません。

具体的な記述については、“13.6 文字列型、構造体、配列、バイナリ、例外処理について”を参照してください。

13.4.4.2 初期処理、終了処理の作成

アプリケーション連携実行基盤から呼び出されるサーバアプリケーションの、初期処理、および終了処理を作成します。

注意

初期処理、および終了処理を作成する際には、以下のファイルをインクルードしてください。

  • /opt/FJSVibs/include/apfwcom.h

  • /opt/FJSVibs/include/apfw_cdr_lib.h

  • 実行基盤インタフェース生成ツールが作成するC言語実行基盤インタフェース共通ヘッダファイル

  • [Interstageのインストールディレクトリ]\BAS\include\apfwcom.h

  • [Interstageのインストールディレクトリ]\BAS\include\apfw_cdr_lib.h

  • 実行基盤インタフェース生成ツールが作成するC言語実行基盤インタフェース共通ヘッダファイル

初期処理、および終了処理の処理の内容については、“12.1.1 初期処理/終了処理/前処理/後処理/エラー処理/トランザクション後メッセージ編集処理”を参照してください。

また、初期処理と終了処理で作成した関数、およびライブラリは、システム構築シートを記入する際に入力する必要があります。詳細は、“Interstage Business Application Server セットアップガイド”の“同期アプリケーション連携実行基盤編”の“ワークユニット設定とアプリケーション情報の入力”を参照してください。

初期処理

ワークユニット起動時に1つのプロセスについて1回だけ呼び出す処理です。1ワークユニット上に複数のサーバアプリケーションを配備する場合でも、1つだけ作成してください。
初期処理のインタフェースは、以下のように作成する必要があります。

void
任意の関数名(
   [const char * const  userwork, int  userworksize,]
   [int  *rtn, apfwExcept  *apfw_env]
 )

初期処理はサーバアプリケーションとは別の定義で実行基盤インタフェースを作成する必要があります。以下の条件に従い初期処理用のIDLファイルとアプリケーション情報入力ファイルを作成してください。

Linuxを使用する場合の定義の記述例を以下に示します。

[初期処理]

IDLファイル
module apfwmod{
    interface apfwintf{
        void INIT_server_apl();
    };
};
アプリケーション情報入力ファイル
<?xml version="1.0" encoding="UTF-8"?>
<apfw-app>
    <server>
         <target name="INIT_server_apl"/>
         <library name="libINIT_server_apl.so"/>
         <userwork flag="ON"/>
         <result_info flag="ON"/>
    </server>
</apfw-app>

作成したIDLファイルとアプリケーション情報入力ファイルから、実行基盤インタフェースを作成してください。実行基盤インタフェースの作成方法は、“13.4.3 C言語実行基盤インタフェースの生成”を参照してください。

初期処理の記述例

初期処理は、サーバアプリケーションとは別のライブラリとして作成する必要があるため、ソースファイルもサーバアプリケーションと別のファイルに記述してください。
初期処理の記述例を以下に示します。

#include "apfwcom.h"
#include "apfw_cdr_lib.h"

#include "XXXXXX.h" /* 実行基盤インタフェース生成ツールより生成されるヘッダファイル */

void
INIT_server_apl(
  const char * const  userwork,  /* アプリケーション作業域 */
  int        userworksize,       /* アプリケーション作業域の長さ */
  int        *rtn,               /* 処理結果情報 */
  apfwExcept *apfw_env )         /* 例外情報 */
{
/* アプリケーション作業域を初期化(任意) */
  memset( (char*)userwork, 0x00, userworksize );
/* 初期処理を実施(任意) */
  return;
}

終了処理

ワークユニット終了時に1つのプロセスについて1回だけ呼び出す処理です。1ワークユニット上に複数のサーバアプリケーションを配備する場合でも、1つだけ作成してください。
終了処理のインタフェースは、以下のように作成する必要があります。

void
任意の関数名(
   [const char * const  userwork, int  userworksize,]
   [int  *rtn, apfwExcept  *apfw_env]
 )

終了処理はサーバアプリケーションとは別の定義で実行基盤インタフェースを作成する必要があります。
以下の条件に従い終了処理用のIDLファイルとアプリケーション情報入力ファイルを作成してください。

Linuxを使用する場合の定義の記述例を以下に示します。

[終了処理]

IDLファイル
module apfwmod{
    interface apfwintf{
        void TERM_server_apl();
    };
};
アプリケーション情報入力ファイル
<?xml version="1.0" encoding="UTF-8"?>
<apfw-app>
    <server>
         <target name="TERM_server_apl"/>
         <library name="libTERM_server_apl.so"/>
         <userwork flag="ON"/>
         <result_info flag="ON"/>
    </server>
</apfw-app>

作成したIDLファイルとアプリケーション情報入力ファイルから、実行基盤インタフェースを作成してください。実行基盤インタフェースの作成方法は、“13.4.3 C言語実行基盤インタフェースの生成”を参照してください。

終了処理の記述例

終了処理は、サーバアプリケーションとは別のライブラリとして作成する必要があるため、ソースファイルもサーバアプリケーションとは別のファイルに記述してください。

#include "apfwcom.h"
#include "apfw_cdr_lib.h"

#include "XXXXXX.h" /* 実行基盤インタフェース生成ツールより生成されるヘッダファイル */

void
TERM_server_apl(
  const char * const  userwork,  /* アプリケーション作業域 */
  int        userworksize,       /* アプリケーション作業域の長さ */
  int        *rtn,               /* 処理結果情報 */
  apfwExcept *apfw_env )         /* 例外情報 */
{
/* 終了処理を実施(任意)*/
  return;
}

13.4.4.3 前処理、後処理の作成

アプリケーション連携実行基盤から呼び出されるサーバアプリケーションの、前処理、および後処理を作成します。

前処理、および後処理は、アプリケーション情報入力ファイルでそれぞれの処理を使用するように指定した場合に、使用します。アプリケーション情報入力ファイルの指定方法については、“13.4.2 アプリケーション情報入力ファイルの作成・修正”の“◆前処理、後処理、エラー処理、およびトランザクション後メッセージ編集処理”を参照してください。

注意

  • アプリケーション情報入力ファイルで、前処理、および後処理関数を使用するように指定した場合には、必ず該当する処理関数を作成してください。

  • 前処理、および後処理を作成する際には、以下のファイルをインクルードしてください。


    • /opt/FJSVibs/include/apfwcom.h

    • /opt/FJSVibs/include/apfw_cdr_lib.h

    • 実行基盤インタフェース生成ツールが作成するC言語実行基盤インタフェース共通ヘッダファイル

    • [Interstageのインストールディレクトリ]\BAS\include\apfwcom.h

    • [Interstageのインストールディレクトリ]\BAS\include\apfw_cdr_lib.h

    • 実行基盤インタフェース生成ツールが作成するC言語実行基盤インタフェース共通ヘッダファイル

それぞれの処理の内容については、“12.1.1 初期処理/終了処理/前処理/後処理/エラー処理/トランザクション後メッセージ編集処理”を参照してください。

前処理

アプリケーション連携実行基盤からの要求ごとに、業務処理の直前に呼び出す処理です。
前処理のインタフェースは、以下のように作成する必要があります。
アプリケーション作業域、および処理結果情報が前処理のインタフェースに必要であるかは、サーバアプリケーションの設定に準じます。

void
PRE_業務処理の関数名(
   [const char * const  userwork, int  userworksize,]
   [int  *rtn, apfwExcept  *apfw_env]
 )

前処理を使用する場合には、サーバアプリケーションの実行基盤インタフェースを作成する際に、アプリケーション情報入力ファイルに以下の指定が必要になります。

以下に定義の記述例を示します。

アプリケーション情報入力ファイル
<?xml version="1.0" encoding="UTF-8"?>
<apfw-app>
    <server>
          ・・・・・・
         <pre flag="ON"/>
          ・・・・・・
    </server>
</apfw-app>
前処理の記述例

前処理の記述例を以下に示します。
なお、前処理は、サーバアプリケーションと同一ファイルに記述することも、別ファイルに記述することも可能です。

#include "apfwcom.h"
#include "apfw_cdr_lib.h"

#include "XXXXXX.h" /* 実行基盤インタフェース生成ツールより生成されるヘッダファイル */

void
PRE_server_apl(
  const char * const  userwork,  /* アプリケーション作業域 */
  int        userworksize,       /* アプリケーション作業域の長さ */
  int        *rtn,               /* 処理結果情報 */
  apfwExcept *apfw_env )         /* 例外情報 */
{
/*前処理を実施(任意) */
  return;
}

後処理

アプリケーション連携実行基盤からの要求ごとに、業務処理の直後に呼び出す処理です。
後処理のインタフェースは、以下のように作成する必要があります。
アプリケーション作業域、および処理結果情報が後処理のインタフェースに必要であるかは、サーバアプリケーションの設定に準じます。

void
POST_業務処理の関数名(
   [const char * const  userwork, int  userworksize,]
   [int  *rtn, apfwExcept  *apfw_env]
 )

後処理を使用する場合には、サーバアプリケーションの実行基盤インタフェースを作成する際に、アプリケーション情報入力ファイルに以下の指定が必要になります。

以下に定義の記述例を示します。

アプリケーション情報入力ファイル
<?xml version="1.0" encoding="UTF-8"?>
<apfw-app>
    <server>
          ・・・・・・
         <post flag="ON"/>
          ・・・・・・
    </server>
</apfw-app>
後処理の記述例

後処理の記述例を以下に示します。
なお、後処理は、サーバアプリケーションと同一ファイルに記述することも、別ファイルに記述することも可能です。

#include "apfwcom.h"
#include "apfw_cdr_lib.h"

#include "XXXXXX.h" /* 実行基盤インタフェース生成ツールより生成されるヘッダファイル */

void
POST_server_apl(
  const char * const  userwork,  /* アプリケーション作業域 */
  int        userworksize,       /* アプリケーション作業域の長さ */
  int        *rtn,               /* 処理結果情報 */
  apfwExcept *apfw_env )         /* 例外情報 */
{
/*後処理を実施(任意) */
  return;
}

13.4.4.4 エラー処理の作成

アプリケーション連携実行基盤から呼び出されるサーバアプリケーションの、エラー処理を作成します。

エラー処理は、アプリケーション情報入力ファイルで処理を使用するように指定した場合に、使用します。アプリケーション情報入力ファイルの指定方法については、“13.4.2 アプリケーション情報入力ファイルの作成・修正”の“◆前処理、後処理、エラー処理、およびトランザクション後メッセージ編集処理”を参照してください。

注意

  • アプリケーション情報入力ファイルで、エラー処理関数を使用するように指定した場合には、必ず該当する処理関数を作成してください。

  • エラー処理を作成する際には、以下のファイルをインクルードしてください。

    • /opt/FJSVibs/include/apfwcom.h

    • /opt/FJSVibs/include/apfw_cdr_lib.h

    • 実行基盤インタフェース生成ツールが作成するC言語実行基盤インタフェース共通ヘッダファイル

    • [Interstageのインストールディレクトリ]\BAS\include\apfwcom.h

    • [Interstageのインストールディレクトリ]\BAS\include\apfw_cdr_lib.h

    • 実行基盤インタフェース生成ツールが作成するC言語実行基盤インタフェース共通ヘッダファイル

エラー処理の内容については、“12.1.1 初期処理/終了処理/前処理/後処理/エラー処理/トランザクション後メッセージ編集処理”を参照してください。

エラー処理

前処理、業務処理、後処理が異常終了した場合に、その直後に呼び出される処理です。
異常終了とは、前処理、業務処理、後処理で、処理結果情報に正常(APFW_RTN_COMMIT、またはAPFW_RTN_ROLLBACK)以外の値を設定し、アプリケーション連携実行基盤に制御を返した状態を示します。

エラー処理のインタフェースは、以下のように作成する必要があります。
アプリケーション作業域、および処理結果情報がエラー処理のインタフェースに必要であるかは、サーバアプリケーションの設定に従います。

void
ERROR_業務処理の関数名(
   [const char * const  userwork, int  userworksize,]
   [int  *rtn, apfwExcept  *apfw_env]
 )

エラー処理を使用する場合には、サーバアプリケーションの実行基盤インタフェースを作成する際に、アプリケーション情報入力ファイルに以下の指定が必要になります。

以下に定義の記述例を示します。
なお、エラー処理は、サーバアプリケーションと同一ファイルに記述することも、別ファイルに記述することも可能です。

アプリケーション情報入力ファイル
<?xml version="1.0" encoding="UTF-8"?>
<apfw-app>
    <server>
          ・・・・・・
         <error flag="ON"/>
          ・・・・・・
    </server>
</apfw-app>
エラー処理の記述例

エラー処理では、業務処理、前処理、および後処理で発生した例外情報をapfwExcept構造体に受け取ります。例外情報を更新したい場合には、処理結果情報に異常または例外(APFW_RTN_ERROR)を設定したうえで、apfwExcept構造体の設定情報を変更してください。
例外情報を更新しない場合には、処理結果情報に異常または例外(APFW_RTN_ERROR)を設定したうえで、apfwExcept構造体の設定情報を変更しないで復帰してください。
アプリケーション連携実行基盤に例外情報を返す必要がなくなった場合には、処理結果情報に正常(APFW_RTN_COMMIT、またはAPFW_RTN_ROLLBACK)を設定して復帰してください。
例外情報のエラーコードを判定して、例外情報を更新する場合のエラー処理の記述例を以下に示します。

#include "apfwcom.h"
#include "apfw_cdr_lib.h"

#include "XXXXXX.h" /* 実行基盤インタフェース生成ツールより生成されるヘッダファイル */

void
ERROR_server_apl(
  const char * const  userwork,  /* アプリケーション作業域 */
  int        userworksize,       /* アプリケーション作業域の長さ */
  int        *rtn,               /* 処理結果情報 */
  apfwExcept *apfw_env )         /* 例外情報 */
{
  int    error_state;
  /* エラーに対するリカバリ処理を実施 */
  error_state    = 0;    /* リカバリの状態を設定 */

  switch( error_state  ){
    case 0:
      /* サーバアプリケーションを正常終了させる */
      *rtn  = APFW_RTN_COMMIT;  /* 処理結果情報に正常(APFW_RTN_COMMIT)を設定 */
      break;
    case 1:
      /* エラー情報を更新*/
      /* 例外情報のエラーコードの値を更新 */
      apfw_env->errcode = -9999;
      /* 例外情報のメッセージの値を更新 */
      if( apfw_env->errmessage != NULL ){
          apfw_c_free(apfw_env->errmessage );
      }
      apfw_env->errmessage = apfw_c_alloc(14);
      if( apfw_env->errmessage == NULL ){
         apfw_env->errcode = -1;
         *rtn  = APFW_RTN_ERROR;  /*処理結果情報に異常または例外(APFW_RTN_ERROR)を設定 */
         return;
      }
      strcpy(apfw_env->errmessage, "ERROR MESSAGE" );
      *rtn  = APFW_RTN_ERROR;  /* 処理結果情報に異常または例外(APFW_RTN_ERROR)を設定 */
      break;
    default:
      /*エラー処理を更新しない*/
      *rtn  = APFW_RTN_ERROR;  /* 処理結果情報に異常または例外(APFW_RTN_ERROR)を設定 */
  }
  return;
}

13.4.4.5 トランザクション後メッセージ編集処理の作成

アプリケーション連携実行基盤から呼び出されるサーバアプリケーションの、トランザクション後メッセージ編集処理を作成します。

トランザクション後メッセージ編集処理は、アプリケーション情報入力ファイルで処理を使用するように指定した場合に、使用します。アプリケーション情報入力ファイルの指定方法については、“13.4.2 アプリケーション情報入力ファイルの作成・修正”の“◆前処理、後処理、エラー処理、およびトランザクション後メッセージ編集処理”を参照してください。

注意

  • アプリケーション情報入力ファイルで、トランザクション後メッセージ編集処理関数を使用するように指定した場合には、必ず該当する処理関数を作成してください。

  • トランザクション後メッセージ編集処理を作成する際には、以下のファイルをインクルードしてください。

    • /opt/FJSVibs/include/apfwcom.h

    • /opt/FJSVibs/include/apfw_cdr_lib.h

    • 実行基盤インタフェース生成ツールが作成するC言語実行基盤インタフェース共通ヘッダファイル

    • [Interstageのインストールディレクトリ]\BAS\include\apfwcom.h

    • [Interstageのインストールディレクトリ]\BAS\include\apfw_cdr_lib.h

    • 実行基盤インタフェース生成ツールが作成するC言語実行基盤インタフェース共通ヘッダファイル

トランザクション後メッセージ編集処理の内容については、“12.1.1 初期処理/終了処理/前処理/後処理/エラー処理/トランザクション後メッセージ編集処理”を参照してください。

トランザクション後メッセージ編集処理

同期アプリケーション連携実行基盤で管理しているトランザクションの完了後に呼び出される処理です。トランザクション完了の結果により、アプリケーション連携実行基盤に返却するメッセージを編集する場合に使用します。
トランザクション後メッセージ編集処理のインタフェースは、以下のように作成する必要があります。
アプリケーション作業域、および処理結果情報がトランザクション後メッセージ編集処理のインタフェースに必要であるかは、サーバアプリケーションの設定に準じます。

void
POSTTRN_業務処理の関数名(
   const apfwDBResult dbinf,
   [const char * const  userwork, int  userworksize,]
   [int  *rtn, apfwExcept  *apfw_env]
 )

トランザクション後メッセージ編集処理を使用する場合には、サーバアプリケーションの実行基盤インタフェースを作成する際に、アプリケーション情報入力ファイルに以下の指定が必要になります。

以下に定義の記述例を示します。

アプリケーション情報入力ファイル
<?xml version="1.0" encoding="UTF-8"?>
<apfw-app>
    <server>
          ・・・・・・
         <posttrn flag="ON"/>
          ・・・・・・
    </server>
</apfw-app>
トランザクション後メッセージ編集処理の記述例

トランザクション後メッセージ編集処理では、業務処理、または初期処理、終了処理、前処理、後処理、トランザクション後メッセージ編集処理の処理結果情報を、apfwDBResult構造体、およびはapfwExcept構造体に受け取ります。例外情報を更新したい場合には、処理結果情報に異常または例外(APFW_RTN_ERROR)を設定したうえで、apfwExcept構造体の設定情報を変更してください。例外情報を設定する必要がない場合には、処理結果情報に正常(APFW_RTN_COMMIT、またはAPFW_RTN_ROLLBACK)を設定してください。
トランザクション後メッセージ編集処理の記述例を以下に示します。
なお、トランザクション後メッセージ編集処理は、サーバアプリケーションと同一ファイルに記述することも、別ファイルに記述することも可能です。

#include "apfwcom.h"
#include "apfw_cdr_lib.h"

#include "XXXXXX.h" /* 実行基盤インタフェース生成ツールより生成されるヘッダファイル */

void
POSTTRN_server_apl(
  const apfwDBResult   dbinf,    /* DB情報 */
  const char * const  userwork,  /* アプリケーション作業域 */
  int         userworksize,      /* アプリケーション作業域の長さ */
  int        *rtn,               /* 処理結果情報 */
  apfwExcept *apfw_env )         /* 例外情報 */
{
  /*トランザクション後メッセージ編集処理を実施(任意)*/

  return;
}