Solaris版 List Worksでは、富士通ホスト帳票をファイル転送運用で登録する場合、ユーザ出口コマンド(listext) を利用することにより、パラメタファイルに設定した各印刷データの配信連携情報を利用して登録することができます。
ユーザ出口コマンドは以下の場合に作成します。
複数の印刷データを1個のファイルで転送するため(複数のI制御レコードが存在し、それぞれのI制御レコードの属性を有効にして登録したいため)、分割して登録する場合
印刷データの内容を解析して、帳票情報を付加する場合
印刷データの内容を更新する場合
なお、ユーザ出口コマンドを登録すると、配信連携マスタファイルと配信連携定義ファイルで登録した情報は使用されません。ユーザ出口コマンドで指定するパラメタファイルおよび配信連携情報の情報が使用されます。
受信フォルダの振り分け定義を有効にしている場合は、ユーザ出口コマンドによる振り分けは無効となります。
利用者が作成するユーザ出口コマンド(listext)の形式と、コマンドに渡される引数の内容について説明します。
List Worksがユーザ出口コマンド(listext)を呼び出すときの、呼出し形式を以下に示します。
listext -tpath -apath
処理する印刷データのファイル名を、フルパスでpathに指定します。
パラメタファイル名を、フルパスでpathに指定します。なお、パラメタファイルには、参照権と更新権が必要です。パラメタファイルは、帳票登録コマンド(lvrcvlst)の実行後に削除されます。
注意
パラメタファイル、および配信連携情報のインクルードファイルは、リスト管理サーバのインストール時に作成されます。
これらファイルの詳細は、“インストールガイド”を参照してください。 |
オプション名と指定値の間に空白をあけないでください。
パラメタファイルには、分割した印刷データのパス名と、それぞれの印刷データを登録するための配信連携情報のファイル名を設定します。リスト管理サーバは、パラメタファイルに設定した印刷データのパス名や配信連携情報を利用して印刷データの登録処理を行います。
作成するパラメタファイルの形式を以下に示します。
1個のファイルを複数の印刷データに分割した場合は、分割した印刷データの個数をバイナリで指定します。分解しない場合は1を指定します。
印刷データに付加する管理情報などを定義した配信連携情報のファイルのパス名をASCII コードで指定します。配信連携情報には、参照権が必要です。
印刷データの個数分必要です。1個のファイルを複数の印刷データに分割した場合は分割したファイルの数分作成します。分割しない場合は、1個分を作成します。
NULLを指定します。
NULLを指定します。
配信連携情報には、印刷データを登録するための帳票情報や登録先を設定します。リスト管理サーバは、配信連携情報に設定した情報を利用して印刷データの登録処理を行います。
作成する配信連携情報の形式を以下に示します。
List WorksのバージョンレベルをASCII コードで指定します。
例) V10.1の場合 X'56313031'
配信連携情報(ヘッダ部)長+配信連携情報数×配信連携情報(ボディ部)長
配信連携情報の数をバイナリで指定します。1個のファイルを複数の印刷データに分割した場合は、分割した印刷データの個数を指定します。分割しない場合は1を指定します。
各情報の説明は、“E.1 配信連携定義による登録”を参照してください。 |
各情報のデータの型を以下に示します。なお、キャラクタの場合は左詰めで残りにはNULLを設定してください。
管理簿ディレクトリ名 :キャラクタ(ASCII) 削除種別 :バイナリ 帳票名 :キャラクタ(ASCII) コメント :キャラクタ(ASCII) 帳票作成者名 :キャラクタ(ASCII) 帳票管理者名 :キャラクタ(ASCII) 作成OS :バイナリ 登録有効期間 :バイナリ 文字間隔 :バイナリ コード系 :バイナリ ユーザアクセス権1 :バイナリ ユーザアクセス権2 :バイナリ ユーザ名1 :キャラクタ(ASCII) グループ名1 :キャラクタ(ASCII) ユーザ名2 :キャラクタ(ASCII) グループ名2 :キャラクタ(ASCII) 用紙サイズ :バイナリ FCB名 :キャラクタ(ASCII) 印刷モード :バイナリ 印刷禁止域 :バイナリ とじしろ幅 :バイナリ とじしろ方向 :バイナリ 印刷開始原点X方向 :バイナリ 印刷開始原点Y方向 :バイナリ 先頭非表示ページ数 :バイナリ 末尾非表示ページ数 :バイナリ オーバレイ名 :キャラクタ(ASCII) 連続紙の横幅 :バイナリ 抜き出し検索ファイルの作成 :バイナリ 登録後印刷プリンタ名 :キャラクタ(ASCII)
NULLを指定します。
NULLを指定します。
ユーザアクセス権1は以下の形式で指定します。
.... ...1 1... .... List Worksが使用する情報です。必ず指定します。 .... .... ..1. .... グループ名1に帳票表示の権利を与える場合 .... .... .... .1.. ほかの利用者に帳票表示の権利を与える場合 .... .... ...1 .... グループ名1に帳票管理の権利を与える場合 .... .... .... ..1. ほかの利用者に帳票管理の権利を与える場合 XXXX XXX. .X.. X..X リザーブ
ユーザアクセス権2は以下の形式で指定します。
.... ...1 1.11 .11. List Worksが使用する情報です。必ず指定します。 XXXX XXX. .X.. X..X リザーブ
ユーザ名2、グループ名2はList Worksが使用する情報です。
ユーザ名1、グループ名1と同一の値を設定してください。
配信連携情報を登録する場合のユーザ出口コマンドを示します。なお、印刷データはファイル名で振り分けて登録します。
/* Copyright 1997-2012 FUJITSU LIMITED */ /***************************************************************/ /* ユーザ出口ルーチンの例です. */ /* " E.1 配信連携定義による登録 "の */ /* 使用例にある配信連携定義ファイルと同様の機能を実現します. */ /***************************************************************/ #include <stdio.h> #include <stdlib.h> #include <string.h> #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #include <unistd.h> /* 配信連携定義ファイルのヘッダ部の定義 */ typedef struct lvtrinf_head { char version_level[4]; /* バージョンレベル */ long file_length; /* ファイル長 */ short num_of_body; /* 配信連携情報数 */ char reserve1[2]; char reserve2[40]; char reserve3; char reserve4[3]; char reserve5[24]; } LVTRINF_HEAD; /* 配信連携定義ファイルのボディ部の定義 */ typedef struct lvtrinf_body { char reserve1[64]; char reserve2; char reserve3[3]; char kanribo_dir[256]; /* 管理簿ディレクトリ名 */ char reserve4[2]; char del_type; /* 削除種別 */ char reserve5; char title[40]; /* 帳票名 */ char reserve6; char reserve7[3]; char sub_title[40]; /* コメント */ char reserve8; char reserve9[3]; char maker_name[16]; /* 帳票作成者名 */ char reserve10; char reserve11[3]; char manager_name[16]; /* 帳票管理者名 */ char reserve12[2]; char os_name; /* 作成OS */ char reserve13; short reg_limit; /* 登録有効期限 */ char char_par_inch; /* 文字間隔 */ char code_type; /* コード系 */ short user_access1; /* ユーザアクセス権1 */ short user_access2; /* ユーザアクセス権2 */ char user_name[8]; /* ユーザ名1 */ char reserve14; char reserve15[3]; char group_name[8]; /* グループ名1 */ char reserve16; char reserve17[3]; char user_name2[8]; /* ユーザ名2 */ char reserve18; char reserve19[3]; char group_name2[8]; /* グループ名2 */ char reserve20; char reserve21[3]; char reserve22[32]; char reserve23; char reserve24; short shRvdpasz; /* 用紙サイズ */ char chRvdfcb[4]; /* FCB 名 */ char reserve25; char reserve26; short shRvdprmd; /* 印刷モード */ short shRvdnpra; /* 印刷禁止域 */ short shRvdbwdh; /* とじしろ幅 */ short shRvdbdic; /* とじしろ方向 */ unsigned short usRvdprsx; /* 印刷開始原点(X 方向) */ unsigned short usRvdprsy; /* 印刷開始原点(Y 方向) */ short shRvdsep1; /* 先頭非表示ページ数 */ short shRvdsep2; /* 末尾非表示ページ数 */ char reserve27[47]; char chRvdovl[4]; /* オーバレイ名 */ char reserve28[2]; char reserve29; short LP_width; /* 連続紙の横幅 */ char Make_search_file; /* 抜き出しファイルの作成 */ char reserve30[3]; char reserve31[67]; char reserve32[3]; char Printout[10]; char reserve33[58]; char reserve34; char reserve35[3]; } LVTRINF_BODY; /* パラメタファイルのヘッダ部の定義 */ typedef struct parm_head { short num_of_data; /* 印刷データの個数 */ char reserve1[2]; char lvtrinf_path[256]; /* 配信連携情報のパス名 */ char reserve2; char reserve3[3]; char reserve4[24]; } PARM_HEAD; /* パラメタファイルのボディ部の定義 */ typedef struct parm_body { char data_path[256]; /* 印刷データのパス名 */ char reserve1; char reserve2[3]; char reserve3[24]; } PARM_BODY; main(argc,argv) int argc ; char **argv ; { char *spool_file_name; char *parm_file_name; char *get_addr; long pattern_id; LVTRINF_HEAD *lvtrinf_head_p; LVTRINF_BODY *lvtrinf_body_p; PARM_HEAD *parm_head_p; PARM_BODY *parm_body_p; static char lvtrinf_file_name[]="/var/tmp/lvtrinf"; long get_pattern_id(); char *get_area(); void set_lvtrinf_file(); void set_parm_file(); void make_lvtrinf_file(); void make_parm_file(); /* 印刷データのパス名の取り出し */ spool_file_name=argv[1]+2; /* パラメタファイルのパス名の取り出し */ parm_file_name=argv[2]+2; /* 印刷データのファイル名からどの登録パターンとなるかを判定する */ pattern_id=get_pattern_id(spool_file_name); /* 配信連携情報用とパラメタファイルの領域を獲得する */ get_addr=get_area(&lvtrinf_head_p,&lvtrinf_body_p, &parm_head_p,&parm_body_p); /* 配信連携情報ファイルの領域に値を設定する */ set_lvtrinf_file(lvtrinf_head_p,lvtrinf_body_p,pattern_id); /* パラメタファイルの領域に値を設定する */ set_parm_file(parm_head_p,parm_body_p, spool_file_name,lvtrinf_file_name); /* 配信連携情報ファイルを作成する */ make_lvtrinf_file(lvtrinf_file_name,lvtrinf_head_p); /* パラメタファイルを作成する */ make_parm_file(parm_file_name,parm_head_p); /* 配信連携情報用とパラメタファイルの領域を解放する */ free(get_addr); return(0); } long get_pattern_id(full_name) char *full_name; { long ptn_id; long full_name_len; char *file_name; /* フルパス名の長さを求める */ full_name_len = strlen(full_name); /* フルパス名の最終位置にポインタを設定する */ file_name = full_name + full_name_len -1; /* ファイル名の後ろから"/"を探す */ while(strncmp(file_name,"/",1) != 0) { file_name--; } /* 最後の"/"の次からがファイル名である */ file_name++; if(strncmp(file_name,"ei",2) == 0) { /* 営業部門の印刷データである */ if(strncmp(file_name+2,"1a",2) == 0) /* A 製品売上用のデータである */ ptn_id = 0; else if(strncmp(file_name+2,"1b",2) == 0) /* B 製品売上用のデータである */ ptn_id = 1; else if(strncmp(file_name+2,"2c",2) == 0) /* C 製品売上用のデータである */ ptn_id = 2; else if(strncmp(file_name+2,"2d",2) == 0) /* D 製品売上用のデータである */ ptn_id = 3; else /* その他用のデータである */ ptn_id = 4; } else if(strncmp(file_name,"so",2) == 0) { /* 総務部門用の印刷データである */ if(strncmp(file_name+2,"ss",2) == 0) /* 出張精算書用のデータである */ ptn_id = 5; else if(strncmp(file_name+2,"sk",2) == 0) /* 給料明細書用のデータである */ ptn_id = 6; else /* その他用のデータである */ ptn_id = 7; } else /* その他用のデータである */ ptn_id = 8; return(ptn_id); } char *get_area(lv_head_p,lv_body_p,pr_head_p,pr_body_p) LVTRINF_HEAD **lv_head_p; LVTRINF_BODY **lv_body_p; PARM_HEAD **pr_head_p; PARM_BODY **pr_body_p; { long getsize; char *getaddr; /* 配信連携情報用とパラメタファイルの領域のサイズを求める */ getsize=sizeof(LVTRINF_HEAD)+sizeof(LVTRINF_BODY) +sizeof(PARM_HEAD)+sizeof(PARM_BODY); /* 配信連携情報用とパラメタファイルの領域を獲獲する */ getaddr=malloc(getsize); /* 獲得した領域をゼロクリアする */ memset(getaddr,0x00,getsize); /* 配信連携情報ファイルのヘッダ部へのアドレスを設定する */ *lv_head_p=(LVTRINF_HEAD *)getaddr; /* 配信連携情報ファイルのボディ部へのアドレスを設定する */ *lv_body_p=(LVTRINF_BODY *)((char *)*lv_head_p+sizeof(LVTRINF_HEAD)); /* パラメタファイルのヘッダ部へのアドレスを設定する */ *pr_head_p=(PARM_HEAD *)((char *)*lv_body_p+sizeof(LVTRINF_BODY)); /* パラメタファイルのボディ部へのアドレスを設定する */ *pr_body_p=(PARM_BODY *)((char *)*pr_head_p+sizeof(PARM_HEAD)); return(getaddr); } void set_lvtrinf_file(lv_head_p,lv_body_p,ptn_id) LVTRINF_HEAD *lv_head_p; LVTRINF_BODY *lv_body_p; long ptn_id; { static char kanribo_dir[9][20]={"/home/eigyo/eigyo1", "/home/eigyo/eigyo1", "/home/eigyo/eigyo2", "/home/eigyo/eigyo2", "/home/eigyo/eigyo2", "/home/soumu/soumuka", "/home/soumu/soumuka", "/home/soumu/soumuka", "/home/other/any" }; static char del_type[9]={0x01,0x01,0x01,0x01,0x01,0x00,0x00,0x00,0x01}; static char title[9][12]={"A 製品売上","B 製品売上","C 製品売上", "D 製品売上","その他", "出張精算書", "給料明細書","その他", "その他" }; static char maker_name[9][12]={"帳票通夫","帳票通夫","帳票通夫", "帳票通夫","帳票通夫","帳票通子", "帳票通子","帳票通子","帳票太郎" }; static short limit[9]={30,30,30,30,30,50,50,50,30}; static char cpi[9]={0x01,0x01,0x01,0x01,0x01,0x00,0x00,0x00,0x01}; static char user_name[9][6]={"E0001","E0001","E0001", "E0001","E0001","S0001", "S0001","S0001","M0001"}; static char group_name[9][8]={"eigyo","eigyo","eigyo", "eigyo","eigyo","soumu", "soumu","soumu","zensha"}; static char Make_search_file[9]={0x01,0x01,0x01,0x01, 0x00,0x00,0x00,0x00,0x00 }; /* 配信連携情報ファイルのヘッダ部にバージョンレベルを設定する */ strncpy(lv_head_p->version_level,"5010",4); /* 配信連携情報ファイルのヘッダ部にファイル長を設定する */ lv_head_p->file_length=sizeof(LVTRINF_HEAD)+sizeof(LVTRINF_BODY); /* 配信連携情報ファイルのヘッダ部に配信連携情報数を設定する */ lv_head_p->num_of_body=1; /* 配信連携情報ファイルのボディ部に管理簿ディレクトリ名を設定する*/ strcpy(lv_body_p->kanribo_dir,kanribo_dir[ptn_id]); /* 配信連携情報ファイルのボディ部に削除種別を設定する */ lv_body_p->del_type=del_type[ptn_id]; /* 配信連携情報ファイルのボディ部に帳票名(主題)を設定する */ strcpy(lv_body_p->title,title[ptn_id]); /* 配信連携情報ファイルのボディ部に帳票作成者名を設定する */ strcpy(lv_body_p->maker_name,maker_name[ptn_id]); /* 配信連携情報ファイルのボディ部に帳票管理者名を設定する */ strcpy(lv_body_p->manager_name,maker_name[ptn_id]); /* 配信連携情報ファイルのボディ部に登録有効期限を設定する */ lv_body_p->reg_limit=limit[ptn_id]; /* 配信連携情報ファイルのボディ部に文字間隔を設定する */ lv_body_p->char_par_inch=cpi[ptn_id]; /* 配信連携情報ファイルのユーザアクセス権1 を設定する */ lv_body_p->user_access1=0x01a0; /* 配信連携情報ファイルのユーザアクセス権2 を設定する */ lv_body_p->user_access2=0x01b6; /* 配信連携情報ファイルのボディ部にユーザ名1 を設定する */ strcpy(lv_body_p->user_name,user_name[ptn_id]); /* 配信連携情報ファイルのボディ部にグループ名1 を設定する */ strcpy(lv_body_p->group_name,group_name[ptn_id]); /* 配信連携情報ファイルのボディ部にユーザ名2 を設定する */ strcpy(lv_body_p->user_name2,user_name[ptn_id]); /* 配信連携情報ファイルのボディ部にグループ名2 を設定する */ strcpy(lv_body_p->group_name2,group_name[ptn_id]); /* 配信連携情報ファイルのボディ部に抜き出しファイルの作成情報を設定する */ lv_body_p->Make_search_file=Make_search_file[ptn_id]; return; } void set_parm_file(pr_head_p,pr_body_p,spl_file_name,lv_file_name) PARM_HEAD *pr_head_p; PARM_BODY *pr_body_p; char *spl_file_name; char *lv_file_name; { /* パラメタファイルのヘッダ部に印刷データの個数を設定する */ pr_head_p->num_of_data=1; /* パラメタファイルのヘッダ部に配信連携定義情報のパス名を設定する */ strcpy(pr_head_p->lvtrinf_path,lv_file_name); /* パラメタファイルのボディ部に印刷データのパス名を設定する */ strcpy(pr_body_p->data_path,spl_file_name); return; } void make_lvtrinf_file(file_name,lv_head_p) char *file_name; LVTRINF_HEAD *lv_head_p; { long fid; /* 配信連携情報ファイルが存在するかどうかをチェックする */ if(access(file_name,F_OK)==0) /* ファイルが存在しているため置換モードでオープンする */ fid=open(file_name,O_RDWR|O_TRUNC); else /* ファイルが存在していないので新規作成モードでオープンする */ fid=open(file_name,O_RDWR|O_CREAT); /* 配信連携情報ファイルにアクセス権を設定する */ fchmod(fid,(mode_t)0007777); /* 配信連携情報ファイルに情報を書き込む */ write(fid,lv_head_p,sizeof(LVTRINF_HEAD)+sizeof(LVTRINF_BODY)); /* 配信連携情報ファイルをクローズする */ close(fid); return; } void make_parm_file(file_name,pr_head_p) char *file_name; PARM_HEAD *pr_head_p; { long fid; /* パラメタファイルをオープンする */ fid=open(file_name,O_RDWR|O_CREAT); /* パラメタファイルにアクセス権を設定する */ fchmod(fid,(mode_t)0007777); /* パラメタファイルに情報を書き込む */ write(fid,pr_head_p,sizeof(PARM_HEAD)+sizeof(PARM_BODY)); /* パラメタファイルをクローズする */ close(fid); return; }