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

13.6.5 例外処理について

例外情報は構造体で宣言されます。ユーザ例外を設定する際には、業務処理および各出口関数内で、例外情報の領域を獲得して使用してください。

なお、例外情報を返却する際には、処理結果情報に異常または例外(APFW_RTN_ERROR)、またはリトライ(APFW_RTN_RETRY)を設定してください。

IDLファイル定義例
module apfwmod {
    interface apfwinf {
        long server_apl(
             in long param_in,        /* INパラメタ */
             out long param_out      /* OUTパラメタ */
        );
    };
};
サーバアプリケーションインタフェース定義例
int
server_apl(
  int          param_in,          /* INパラメタ */
  int          *param_out,        /* OUTパラメタ */
  int          *rtn,              /* 処理結果情報 */
  apfwExcept   *apfw_env );       /* 例外情報 */
パラメタの扱い

パラメタ

アプリケーション連携実行基盤から
渡されたパラメタ

アプリケーション連携実行基盤へ
渡すパラメタ

例外

  • 例外情報を設定しない場合
    エラーコードに0を設定してください。

  • 例外情報を設定する場合
    渡された領域をそのまま使用してください。
    例外領域内にユーザ例外を設定する場合には設定する領域をapfw_c_alloc()で領域を獲得して使用してください。
    なお、獲得した例外領域はC言語実行基盤インタフェースで自動的に解放されます。

    エラーメッセージ文字列には、JIS非漢字およびJIS漢字範囲の文字を使用してください。範囲外の文字を使用した場合は文字コード変換エラーになる場合があります。

サーバアプリケーションの記述例
#include "apfwcom.h"
#include "apfw_cdr_lib.h"

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

int
server_apl(
  int          param_in,          /* INパラメタ */
  int         *param_out,         /* OUTパラメタ */
  int         *rtn,               /* 処理結果情報 */
  apfwExcept  *apfw_env )         /* 例外情報 */
{
  int    apfw_result = 0;   /* アプリケーションの復帰値 */
  int    data = 100;
/* OUTパラメタ */
  *param_out = 0;

/* 復帰情報 */
  apfw_result = 0; 	
  *rtn = APFW_RTN_ERROR;    /* 処理結果情報に異常または例外(APFW_RTN_ERROR)を設定 */

/* 例外情報 */
  /* 例外情報のエラーコードに値を設定(値は任意) */
  apfw_env->errcode = -1;
  /* 例外情報のメッセージに値を設定(値は任意、省略する場合NULLを設定) */
  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" );
  /* 例外情報のデータに値を設定 */
/* (値は任意、省略する場合errdata.vallenに0を、errdata.valにNULLを設定) */
  apfw_env->errdata.arealen = 100;
  apfw_env->errdata.val = apfw_c_alloc(apfw_env->errdata.arealen);

  if( apfw_env->errdata.val == NULL ){
     apfw_env->errcode = -1;
     *rtn  = APFW_RTN_ERROR;  /*処理結果情報に異常または例外(APFW_RTN_ERROR)を設定 */
     return;
  }
  apfw_env->errdata.vallen = 4;
  memcpy(apfw_env->errdata.val, &data, sizeof(int) );

  return( apfw_result );
}