1.2.4.1 IMS/DBプラグインのデータ構造定義

DB PCB構造を指すポインタは、Tuxedo ART for IMSサーバーからCOBOLプログラムに渡され、最後にIMS/DBのプラグインのdb_entry()に渡されます。プラグインが適切に機能するようにするには、各COBOLプログラムを呼び出す前にDB PCB構造に適切に入力する必要があります。この項では、DB PCBへの入力方法に関する詳細な要件を定義します。

次のリスト2に、DB PCB構造の例を示します。

DB PCB構造のリスト

struct { 
char dbname[8];
char seglevel[2];
char stat_code[2];
char opt[4];
char res[4]; 
char segname[8];
char keylen[4]; 
char segnum[4];
char keyfa[IMS_FEEDAREA_LEN];
};
  • dbname: PSB内のPCB文にPROCSEQ= <name>が含まれている場合は、<name>をdbnameに移入します。それ以外の場合、PSBからのNAME= <name>の名前をdbnameに移入します。
  • seglevel: NULLを移入します
  • stat_code: 空白を移入します
  • opt: PSB内のPCB文からPROCOPTオプションに設定されている値を移入します。
  • res: 何も移入しません
  • segname: NULLを移入します
  • keylen: 何も移入しません
  • segnum: 何も移入しません
  • keyfa: NULLを移入します

次のリスト3は、get_dbpcbattrインタフェースに使用される構造定義を示しています。コンテンツはPSBファイルから読み取られ、get_dbpcbattrインタフェースを介してアプリケーションに返されます。

get_dbpcbattrインタフェースに使用される構造定義のリスト

enum PCBTYPE {IOPCB = 1, ALTPCB = 2, GSAMPCB = 3, DBPCB = 4};
enum SEQUENTIALBUFFERING {NO = 1, COND = 2};
enum PCBPOS {SINGLE = 1, MULTIPLE = 2};
enum SENSITIVITY {READ = 1, UPDATE = 2};
struct __SENFLD {
       char name[8];        /* mandatory, less than 8 filled with blank */
       unsigned short start;/* mandatory, range [1-32767] */
       int replace;         /* optional, default is 1 */
};

struct SSPTR {
       unsigned short pointer; /* range[1-8], default 0 */
       enum SENSITIVITY sens;
};

struct __SENSEG {
       char segname[8];   /* mandatory, less than 8 filled with blank */
       char parent[8];    /* mandatory, less than 8 filled with blank */
       char procopt[4];   /* optional, default filled with blank */
       SSPTR ssptr[8];    /* each slot contains a subset pointer number and 
associated sensitivity, pointer of 0 indicates end, totally up to 8 can be 
specified */
      char indices[8];   /* optional, default filled with blank */
      SENFLD * senfld;   /* optional, default is NULL */
      unsigned short senfld_num; /* optional, default is 0, up to 255 
SENFLD can be defined for each SENSEG */
};

struct __DB_PCB_ATTR { /* PCB Attributes */
       enum PCBTYPE type; /* mandatory */
       char dbname[8]; /* db name, default filled with blank */
       char pcbname[8]; /* pcb name, optional, default filled with blank */
       char procopt[4]; /* procopt , default filled with blank */
       enum SEQUENTIALBUFFERING sb; /* optional, default is NO */
       enum PCBPOS pos; /* optional, default is SINGLE */
       int keylen; /* optional, default is invalid value 0 */
       char procseq[8]; /* optional, default filled with blank */
       int msdb_commit; /* optional, default is 0 */
       int list; /* optional, default is 1 */    
       char *areas; /* area list set by SETR in DFSCTL, no change will be 
applied on it in ART/IMS */
       int senseg_num; /* optional, default is 0 */
       struct SENSEG * senseg; /* optional, default is NULL */
};