コンテンツフレーム起動

プログラミングの例 文書を SAP ライブラリストラクチャに組み込む

以下のセクションには、簡単な例だけが記載されています。詳細については、配布されている RFC SDK srfctest.c sapinfo.c を参照してください。

内部テーブルを転送する RFC クライアントプログラム

RFC_TABLE tables[1]; /* 一つの内部データで動作 */

RfcEnvironment (...); /* エラー取り扱い機能インストール */

rfc_handle = RfcOpen (&rfc_opt); /* RFC 接続を開く */

if (rfc_handle == RFC_HANDLE_NULL) /* リターンコードをチェック */

{

rfc_error_handling( RfcOpen ); /* RfcLastError によるエラー処理と */

return 1; /* エラー仕様の取得は、 */

}

tables[0].name = ITAB1000 ; /* SAP-FM の定義と合わせる必要がある */
/* SAP
−FMのクライアント */
tables[0].nlen = 8; /*
名称の長さ */
tables[0].type = TYPEC; /*
文字のみ */
tables[0].nlen = 1000; /*
テーブル行の長さ */
tables[0].itmode = RFC_ITMODE_BYREFERENCE; /*
推奨 */
tables[0].ithandle =
ItCreate (...); /* 保存域の割り当て */
/*
内部テーブル用 */

if (rfc_rc != RFC_OK) /* リターンコードをチェック */

{

rfc_error_handling( RfcOpen ); /* RfcLastError で、 */
/*
特定エラーを取得して */
return 1; /*
エラー処理 */

}

fill_table (table[0].ithandle, 10); /* 内部テーブルを */
*/ 10
行で埋める */

rfc_rc = RfcCallReceive (...); /* 汎用モジュールのコール */

if (rfc_rc != RFC_OK) /* リターン・コードをチェック */

{

rfc_error_handling( RfcCallReceive ); /* RfcLastError 経由で、 */
/*
特定エラーを取得して */
return 1; /*
エラー処理 */

}

ItDelete ( ...); /* 内部テーブルの保存域を開放 */

RfcClose (...); /* RFC 接続を閉じる */

 

/* 依頼どおりに内部テーブルをテキストで埋める

void fill_table (ITAB_H itab_h, int table_leng)

{
int linenr; /*
テーブルの実際の行数 {
int linenr; /*
テーブル行の長さ */
char *ptr; /*
テーブル行のポインタ */
char table_data[]=
This is a test ; /* テスト用テキスト */

if (table_leng == 0) return 0; /* エントリのないテーブル */

lineleng = ItLeng (itab_h); /* テーブル行の長さを決定 */
/*
*/

for (linenr = 1; linenr <= table_leng; linenr++)
/*
依頼された通りにテーブルを埋める */

{

ptr = (char *) ItAppLine (itab_h);
/*
次の行のアドレスを取得 */

if (ptr == NULL) /* リターンコードのチェック */

{ /* エラーメッセージを出力 */

printf( ”\ nMemory insufficient\n ); /* output error message */

exit(1); /* プログラムを終了 */
}

memcpy(ptr, table_data, lineleng); /* 内部テーブルに */ /* データを転送 */

}
return; /*
メインプログラムに戻る */

}

内部テーブルを受信 RFC クライアントプログラム

RFC_TABLE tables[1]; /* 一つの内部データで動作 */

RfcEnvironment (...); /* エラー取り扱い機能インストール */

rfc_handle = RfcOpen (&rfc_opt); /* RFC 接続を開く */

if (rfc_handle == RFC_HANDLE_NULL) /* リターンコードのチェック */

{

rfc_error_handling( RfcOpen ); /* RfcLastError によるエラー処理と */

return 1; /* エラー仕様の取得 */

}

tables[0].name = ITAB1000 ; /* SAP-FM の定義と */
/*
合わせる必要がある。 */
tables[0].nlen = 8; /*
名称の長さ */
tables[0].type = TYPEC; /*
文字のみ */
tables[0].nlen = 1000; /*
テーブル行の長さ */
tables[0].itmode = RFC_ITMODE_BYREFERENCE; /*
推奨 */
tables[0].ithandle =
ItCreate (...); /* 保存域の割り当て */
/*
内部テーブル用 */

if (rfc_rc != RFC_OK) /* リターンコードのチェック */

{

rfc_error_handling( ItCreated ); /* RfcLastError で、 */
/*
特定エラーを取得して */
return 1; /*
エラー処理 */

}

rfc_rc = RfcCallReceive (...); /* 汎用モジュールのコール */

if (rfc_rc != RFC_OK) /* リターンコードのチェック */

{

rfc_error_handling( RfcCallReceive ); /* RfcLastError 経由で、 */
/*
特定エラーを取得して */
return 1; /*
エラー処理 */

}

display_table (table[0].ithandle); /* 受信した内部テーブルを */
/*
画面へ出力 */

ItDelete ( ...); /* 内部テーブルの保存域を開放 */

RfcClose (...); /* RFC 接続を閉じる */

 

/* 受信した内部テーブルを画面に表示 */

void display_table (ITAB_H itab_h)

{
int linenr; /*
テーブルの実際の行数 */
int lineleng; /*
テーブル行の長さ */
char ptr; /*
テーブル行のポインタ */
char table_data[8193]; /*
内部テーブルの最大長 */
/*
テーブル( 8192 B */

lineleng = ItLeng (itab_h); /* テーブル行の長さを取得 */

for (linenr = 1; ; linenr++) /* 内部テーブルでのループ */

{

ptr = (char *) ItGetLine (itab_h);
/*
次の行のアドレスを取得 */

if (ptr == NULL) break; /* ヌル : テーブルの最後に到達 */

memcpy(table_data, ptr, lineleng);
/*
テーブル行をバッファへ読み込み */

table_data[lineleng] = ’\ 0 ; /* 文字列の最後を出力用に設定 */
/*
出力 */

printf( ”’ %s ’\ n , table_data); /* 画面へ出力 */

}

戻り値 ; /* メインプログラムに戻る */

}

 

 

コンテンツフレーム終了