マップの使用例
本章では、OSCのインストール時に一緒にインストールされるOIVPを利用して、マップを使用する手順を説明します。
1. 概要
OIVP(OpenFrame Online Installation Verification Procedure)は、OpenFrame環境が正常に構築され、システムが提供する機能に問題がないことを検証するためのアプリケーション・プログラムです。
以下は、OIVPでマップを使用する手順です。
OIVPの詳細については、OpenFrame OSC『管理者ガイド』を参照してください。 |
2. マップおよびアプリケーションのソースコードの作成
まず、マップ・ソースコードとマップを使用するアプリケーション・ソースコードを作成します。
以下は、OIVPのメイン・プログラムであるOIVPMAINのCOBOLソースコードです。
ID DIVISION. PROGRAM-ID. OIVPMAIN. AUTHOR. BSKIM. DATA DIVISION. WORKING-STORAGE SECTION. 01 WS-TRANS-ID PIC X(4) VALUE 'OIVP'. 01 WS-MAPSET-NAME PIC X(7) VALUE 'OIVPMS1'. 01 WS-MAP-NAME PIC X(7) VALUE 'OIVPM01'. 01 WS-RESPONSE-CODE PIC S9(8) COMP. 01 WS-COMMUNICATION-AREA PIC X(1). 01 WS-FIRST-TIME-FLAG PIC S9(4) COMP. 88 FIRST-TIME VALUE 0. 01 WS-ERROR-MESSAGE. 05 PIC X(35) VALUE '** OSC ERROR -- CONTACT HELP DESK '. 05 PIC X(35) VALUE '-- REPORT THIS INFORMATION ** '. 05 PIC X(9) VALUE SPACE. 05 WS-ERROR-LINE1. 10 PIC X(14) VALUE ' EIBTRNID = '. 10 WS-EIBTRNID PIC X(4). 10 PIC X(61) VALUE SPACES. 05 WS-ERROR-LINE2. 10 PIC X(14) VALUE ' EIBRSRCE = '. 10 WS-EIBRSRCE PIC X(8). 10 PIC X(57) VALUE SPACES. 05 WS-ERROR-LINE3. 10 PIC X(14) VALUE ' EIBRESP = '. 10 WS-EIBRESP PIC ZZZZZZZ9. 10 PIC X(57) VALUE SPACES. 05 WS-ERROR-LINE4. 10 PIC X(14) VALUE ' EIBRESP2 = '. 10 WS-EIBRESP2 PIC ZZZZZZZ9. 10 PIC X(57) VALUE SPACES. 05 PIC X(79) VALUE ALL '*'. COPY OIVPM01. 01 DEFINITIONS-OF-EIBAID-FIELD PIC X(1). 88 ENTER-KEY VALUE ''''. 88 CLEAR-KEY VALUE '_'. 88 PF1-KEY VALUE '1'. 88 PF2-KEY VALUE '2'. 88 PF3-KEY VALUE '3'. 88 PF4-KEY VALUE '4'. 88 PF5-KEY VALUE '5'. 88 PF6-KEY VALUE '6'. 88 PF7-KEY VALUE '7'. 88 PF8-KEY VALUE '8'. 88 PF9-KEY VALUE '9'. 88 PF10-KEY VALUE ':'. 88 PF11-KEY VALUE '#'. 88 PF12-KEY VALUE '@'. * DEFINITION OF INFORMATION 01 WS-DATE-TIME-AREA. 05 DCA-DATE PIC X(8). 05 DCA-TERM PIC X(4). 05 DCA-TIME. 10 DCA-TIME-HRS PIC z9. 10 DCA-COLON PIC X(1). 10 DCA-TIME-MIN PIC 9(2). 10 DCA-TIME-AMPM PIC X(3). * DEFINITION OF RESOURCES 01 FILE01 PIC X(8) VALUE 'OIVPFILE'. 01 TDQ01 PIC X(8) VALUE 'OIV1'. 01 TSQ01 PIC X(8) VALUE 'OIVPTSQ'. 01 ITEM01 PIC S9(4) COMP VALUE 1. 01 LEN PIC S9(4) COMP VALUE 4. 01 LEN1 PIC S9(4) COMP VALUE 8. 01 START-KEY PIC S9(8) COMP VALUE 0. * DEFINITION OF PEOPLE 01 DATALEN PIC S9(4) COMP VALUE 104. 01 PEOPLE-INFO-GET. 02 WS-KEY PIC S9(8) COMP. 02 WS-DATA. 05 WS-NAME PIC X(10). 05 WS-DEPARTMENT PIC X(15). 05 WS-PHONE PIC X(15). 05 WS-EMAIL PIC X(20). 05 WS-ADDRESS PIC X(40). LINKAGE SECTION. 01 DFHCOMMAREA PIC X(1). PROCEDURE DIVISION. 0000-MAIN. PERFORM 5100-ALWAYS-TEST. EVALUATE TRUE WHEN FIRST-TIME PERFORM 0100-FIRST-TIME WHEN ENTER-KEY PERFORM 0200-MENU WHEN OTHER PERFORM 9100-INVALID-KEY END-EVALUATE. PERFORM 5300-RETURN-TRANS-ID. 0100-FIRST-TIME. MOVE LOW-VALUES TO OIVPM01O. MOVE 'ENTER APPROPRIATE CODE OR ID' TO MSGO. PERFORM 5200-INFO. PERFORM 7200-SENDMAP. 0200-MENU. PERFORM 7100-RECEIVEMAP. EVALUATE CODEI WHEN 'BROS' PERFORM 0300-BROWSE WHEN 'INQR' PERFORM 0400-INQUIRY WHEN 'INSR' PERFORM 0500-INSERT WHEN 'UPDT' PERFORM 0600-UPDATE WHEN 'DELT' PERFORM 0700-DELETE WHEN OTHER PERFORM 9200-INVALID-CODE END-EVALUATE. 0300-BROWSE. EXEC CICS STARTBR FILE(FILE01) RIDFLD(START-KEY) KEYLENGTH(LEN) RESP(WS-RESPONSE-CODE) END-EXEC. IF WS-RESPONSE-CODE NOT EQUAL DFHRESP(NORMAL) MOVE 'DATA DOES NOT EXIST' TO MSGO PERFORM 7250-SENDMAP-DATA PERFORM 5300-RETURN-TRANS-ID END-IF. EXEC CICS START TRANSID('OIBR') TERMID(EIBTRMID) RESP(WS-RESPONSE-CODE) END-EXEC. PERFORM 5300-RETURN-TRANS-ID. 0400-INQUIRY. MOVE IDENI TO WS-KEY. PERFORM 0800-CHECK-DATA. EXEC CICS ENQ RESOURCE('OIVPTDQW') LENGTH(8) END-EXEC. EXEC CICS WRITEQ TD QUEUE(TDQ01) FROM(PEOPLE-INFO-GET) LENGTH(DATALEN) END-EXEC. EXEC CICS DEQ RESOURCE('OIVPTDQW') LENGTH(8) END-EXEC. EXEC CICS START TRANSID('OIIQ') TERMID(EIBTRMID) RESP(WS-RESPONSE-CODE) END-EXEC PERFORM 5300-RETURN-TRANS-ID. 0500-INSERT. EXEC CICS START TRANSID('OIIS') TERMID(EIBTRMID) RESP(WS-RESPONSE-CODE) END-EXEC PERFORM 5300-RETURN-TRANS-ID. 0600-UPDATE. MOVE IDENI TO WS-KEY. PERFORM 0800-CHECK-DATA. EXEC CICS WRITEQ TS QUEUE(TSQ01) FROM(WS-KEY) LENGTH(LEN1) ITEM(ITEM01) END-EXEC. EXEC CICS START TRANSID('OIUP') TERMID(EIBTRMID) RESP(WS-RESPONSE-CODE) END-EXEC. PERFORM 5300-RETURN-TRANS-ID. 0700-DELETE. MOVE IDENI TO WS-KEY. PERFORM 0800-CHECK-DATA. EXEC CICS WRITEQ TS QUEUE(TSQ01) FROM(WS-KEY) LENGTH(LEN1) ITEM(ITEM01) END-EXEC. EXEC CICS START TRANSID('OIDE') TERMID(EIBTRMID) RESP(WS-RESPONSE-CODE) END-EXEC. PERFORM 5300-RETURN-TRANS-ID. 0800-CHECK-DATA. EXEC CICS READ FILE(FILE01) RIDFLD(WS-KEY) KEYLENGTH(LEN) INTO(PEOPLE-INFO-GET) LENGTH(DATALEN) RESP(WS-RESPONSE-CODE) END-EXEC. EVALUATE WS-RESPONSE-CODE WHEN DFHRESP(NORMAL) CONTINUE WHEN DFHRESP(NOTFND) MOVE LOW-VALUES TO OIVPM01O MOVE 'ID ERROR' TO MSGO PERFORM 7200-SENDMAP PERFORM 5300-RETURN-TRANS-ID END-EVALUATE. 5100-ALWAYS-TEST. MOVE EIBAID TO DEFINITIONS-OF-EIBAID-FIELD. IF CLEAR-KEY PERFORM 5400-QUIT. MOVE EIBCALEN TO WS-FIRST-TIME-FLAG. 5200-INFO. EXEC CICS LINK PROGRAM ('OIVPINFO') COMMAREA (WS-DATE-TIME-AREA) LENGTH (LENGTH OF WS-DATE-TIME-AREA) END-EXEC. MOVE DCA-DATE TO DATEO. MOVE DCA-TERM TO TERMO. MOVE DCA-TIME TO TIMEO. 5300-RETURN-TRANS-ID. EXEC CICS RETURN TRANSID (WS-TRANS-ID) COMMAREA (WS-COMMUNICATION-AREA) LENGTH (LENGTH OF WS-COMMUNICATION-AREA) END-EXEC. 5400-QUIT. EXEC CICS START TRANSID('OIQU') AFTER SECONDS(5) TERMID(EIBTRMID) RESP(WS-RESPONSE-CODE) END-EXEC. EXEC CICS RETURN END-EXEC. * PERFORM 5300-RETURN-TRANS-ID. 7100-RECEIVEMAP. EXEC CICS RECEIVE MAP(WS-MAP-NAME) MAPSET(WS-MAPSET-NAME) INTO(OIVPM01I) RESP(WS-RESPONSE-CODE) END-EXEC. EVALUATE WS-RESPONSE-CODE WHEN DFHRESP(NORMAL) CONTINUE WHEN DFHRESP(MAPFAIL) MOVE 'NO CODE OR ID ENTERED' TO MSGO PERFORM 7250-SENDMAP-DATA PERFORM 5300-RETURN-TRANS-ID WHEN OTHER PERFORM 9999-ABORT END-EVALUATE. 7200-SENDMAP. EXEC CICS SEND MAP(WS-MAP-NAME) MAPSET(WS-MAPSET-NAME) FROM(OIVPM01O) ERASE CURSOR END-EXEC. 7250-SENDMAP-DATA. EXEC CICS SEND MAP(WS-MAP-NAME) MAPSET(WS-MAPSET-NAME) FROM(OIVPM01O) DATAONLY END-EXEC. 9100-INVALID-KEY. MOVE LOW-VALUES TO OIVPM01O. MOVE 'INVALID KEY ENTERED' TO MSGO. PERFORM 7250-SENDMAP-DATA. 9200-INVALID-CODE. MOVE LOW-VALUES TO OIVPM01O. MOVE 'INVALID CODE ENTERED' TO MSGO. PERFORM 7250-SENDMAP-DATA. 9999-ABORT. MOVE EIBTRNID TO WS-EIBTRNID. MOVE EIBRSRCE TO WS-EIBRSRCE. MOVE EIBRESP TO WS-EIBRESP. MOVE EIBRESP2 TO WS-EIBRESP2. EXEC CICS SEND TEXT FROM(WS-ERROR-MESSAGE) ERASE ALARM FREEKB END-EXEC. EXEC CICS RETURN END-EXEC.
以下は、OIVPが使用するマップ・ソースコードのOIVPM001の例です。
OIVPMS1 DFHMSD TYPE=&SYSPARM, X LANG=COBOL, X MODE=INOUT, X CTRL=FREEKB, X STORAGE=AUTO, X TIOAPFX=YES OIVPM01 DFHMDI SIZE=(24,80), X LINE=1, X COLUMN=1 DATE DFHMDF POS=(1,2), X LENGTH=8, X ATTRB=(NORM,PROT,FSET) TERM DFHMDF POS=(1,74), X LENGTH=4, X ATTRB=(NORM,PROT,FSET) TIME DFHMDF POS=(2,2), X LENGTH=8, X ATTRB=(NORM,PROT,FSET) DFHMDF POS=(1,24), X LENGTH=33, X ATTRB=(NORM,PROT), X HILIGHT=BLINK, X INITIAL='** WELCOME TO OPENFRAME ONLINE **' DFHMDF POS=(3,2), X LENGTH=77, X ATTRB=(NORM,PROT), X OUTLINE=OVER DFHMDF POS=(3,80), X LENGTH=1, X ATTRB=(DRK,PROT) DFHMDF POS=(4,17), X LENGTH=46, X ATTRB=(NORM,PROT), X COLOR=RED, X INITIAL='** OSC INSTALLATION VERIFICATION PROCEDURE **' DFHMDF POS=(7,23), X LENGTH=5, X ATTRB=(NORM,PROT), X COLOR=BLUE, X INITIAL='CODE ' CODE DFHMDF POS=(7,29), X LENGTH=4, X ATTRB=(NORM,UNPROT,IC), X COLOR=BLUE, X HILIGHT=REVERSE DFHMDF POS=(7,34), X LENGTH=1, X ATTRB=(DRK,PROT) DFHMDF POS=(7,43), X LENGTH=4, X ATTRB=(NORM,PROT), X COLOR=BLUE, X INITIAL='ID ' IDEN DFHMDF POS=(7,48), X LENGTH=8, X ATTRB=(NORM,UNPROT,NUM), X COLOR=BLUE, X HILIGHT=REVERSE DFHMDF POS=(7,57), X LENGTH=1, X ATTRB=(DRK,PROT) DFHMDF POS=(10,22), X LENGTH=36, X ATTRB=(NORM,PROT), X COLOR=BLUE, X INITIAL='BROS Browse data <BROS>' DFHMDF POS=(11,22), X LENGTH=36, X ATTRB=(NORM,PROT), X COLOR=BLUE, X INITIAL='INQR Inquiry data by ID <INQR,ID>' DFHMDF POS=(12,22), X LENGTH=36, X ATTRB=(NORM,PROT), X COLOR=BLUE, X INITIAL='INSR Insert data <INSR>' DFHMDF POS=(13,22), X LENGTH=36, X ATTRB=(NORM,PROT), X COLOR=BLUE, X INITIAL='UPDT Update data by ID <UPDT,ID>' DFHMDF POS=(14,22), X LENGTH=36, X ATTRB=(NORM,PROT), X COLOR=BLUE, X INITIAL='DELT Delete data by ID <DELT,ID>' MSG DFHMDF POS=(21,2), X LENGTH=76, X ATTRB=(BRT,PROT), X COLOR=YELLOW DFHMDF POS=(23,2), X LENGTH=77, X ATTRB=(NORM,PROT), X OUTLINE=OVER DFHMDF POS=(23,80), X LENGTH=1, X ATTRB=(DRK,PROT) DFHMDF POS=(24,29), X LENGTH=49, X ATTRB=(NORM,PROT), X INITIAL='CopyRight(c) 2007, Tmaxsoft, All Rights ReserveX d.' DFHMSD TYPE=FINAL END
3. マップの作成
以下の例は、指定したリージョンのosc.{servername}サブジェクト、GENERALセクションのMAPDIRキーのVALUE項目が設定されていない場合です。デフォルト・ディレクトリに該当する$OPENFRAME_HOME/osc/region/OSCOIVP1/mapディレクトリを使用します。マップ・ソースコードは、$OPENFRAME_HOME/osc/mapというディレクトリに存在すると仮定します
マップ・ソースコードをmscasmcツールおよびmscmapcツールを利用して以下のようにコンパイルします。マップ・ファイルのデプロイ・ディレクトリを準備した後、[-r]オプションを使用してOSCOIVP1リージョンの指定された場所に自動でデプロイされるようにOIVPM001.mapをコンパイルします。
$ cd $OPENFRAME_HOME/osc/region/OSCOIVP1/map
$ mkdir physical
$ mkdir symbolic
$ cd symbolic
$ mkdir OIVPMS1
$ cd $OPENFRAME_HOME/osc/map
$ mscasmc OIVPM001.map
[MSCASMC] input map : OIVPM001.map
[MSCASMC] file[OIVPM001.map.atm] create ok.
$ mscmapc -r OSCOIVP OIVPM001.map.atm
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
* input map : OIVPM001.map.atm
* copybook :
[/home/oframe/OpenFrame/osc/region/OSCOIVP1/map/symbolic/OIVPMS1/OIVPMS1.cpy] create.
* binary image :
[/home/oframe/OpenFrame/osc/region/OSCOIVP1/map/physical/OIVPMS1.phy]
create.
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
$
4. アプリケーションのコンパイル
マップおよびアプリケーションのソースコードの作成で作成されたOIVPMAINプログラムを、以下の例のようにosccobprepツールおよびosccblppツールを利用して前処理した後、該当のCOBOLコンパイラーを使って共有オブジェクト形式にコンパイルします。
以下は、MF COBOLを使用してコンパイルする例です。
$ osccobprep –f .cpy –p
$ OPENFRAME_HOME/osc/region/OSCOIVP1/map/symbolic/OIVPMS1 OIVPMAIN.cob
$ osccblpp osccobprep_OIVPMAIN.cob
$ mv osccblpp_osccobprep_OIVPMAIN.cob OIVPMAIN.cbl
$ cob64 –zav –U –o OIVPMAIN.so OIVPMAIN.cbl
cob64 -C nolist -zav -U -o OIVPMAIN.so OIVPMAIN.cbl
* Micro Focus Server Express V4.0 revision 000 Compiler
* Copyright (C) 1984-2005 Micro Focus International Ltd. URN RXCAB/AA0/00000J
* Accepted - verbose
* Accepted - nolist
* Compiling OIVPMAIN.cbl
* Total Messages: 0
* Data: 7328 Code: 4825
* Micro Focus Server Express V4.0.00 Code generator
* Copyright (C) 1984-2005 Micro Focus International Ltd. All rights reserved.
* Accepted - verbose
* Generating osccblpp_osccobprep_OIVPMAIN
* Data: 7728 Code: 19664 Literals: 1472 Dynamic: 638976
Cobol program "cics_receive_map" undefined. Assuming it will be dynamically loaded.
Cobol program "cics_writeq_td" undefined. Assuming it will be dynamically loaded.
Cobol program "cics_writeq_ts" undefined. Assuming it will be dynamically loaded.
Cobol program "_Uia64_step" undefined. Assuming it will be dynamically loaded.
Cobol program "cics_return" undefined. Assuming it will be dynamically loaded.
Cobol program "cics_send_text" undefined. Assuming it will be dynamically loaded.
Cobol program "cics_send_map" undefined. Assuming it will be dynamically loaded.
Cobol program "handle_exception" undefined. Assuming it will be dynamically loaded.
Cobol program "_Uia64_get_reg" undefined. Assuming it will be dynamically loaded.
Cobol program "cics_startbr" undefined. Assuming it will be dynamically loaded.
Cobol program "cics_entry" undefined. Assuming it will be dynamically loaded.
Cobol program "cics_enq" undefined. Assuming it will be dynamically
loaded.
Cobol program "_U_dyn_register" undefined. Assuming it will be dynamically loaded.
Cobol program "cics_link" undefined. Assuming it will be dynamically
loaded.
Cobol program "cics_deq" undefined. Assuming it will be dynamically loaded.
Cobol program "_Uia64_init_local" undefined. Assuming it will be dynamically loaded.
Cobol program "_U_dyn_cancel" undefined. Assuming it will be dynamically loaded.
Cobol program "cics_read" undefined. Assuming it will be dynamically loaded.
Cobol program "cics_start" undefined. Assuming it will be dynamically loaded.
Cobol program "_Uia64_getcontext" undefined. Assuming it will be dynamically loaded.
5. リソース定義の登録
マップをテストするためには、OSCアプリケーション・サーバーで使用するリソース定義をOSC SDテーブルに登録する必要があります。テストに使用される端末を定義するTERMINALリソース、端末属性を定義するTYPETERMリソース、OIVP TRANSACTIONリソース、上記で作成したOIVPMAIN PROGRAMリソースを登録します。
以下は、OIVPテストのために定義するTERMINAL、TYPETERM、TRANSACTION、PROGRAM定義の例です。
DEFINE TERMINAL(TIVP) GROUP(OIVP) TYPETERM(TTRMOIVP) NETNAME(TERMOIVP) INSERVICE(YES) DEFINE TYPETERM(TTRMOIVP) GROUP(OIVP) AUDIBLEALARM(YES) COLOR(YES) HILIGHT(YES) IOAREALEN(512,4096) KATAKANA(YES) OUTLINE(YES) PROGSYMBOLS(YES) SOSI(YES) TERMMODEL(2) UCTRAN(NO) DEVICE(3270) USERAREALEN(128) LOGONMSG(NO) DEFINE PROGRAM(OIVPMAIN) GROUP(OIVP) LANGUAGE(COBOL) DEFINE TRANSACTION(OIVP) GROUP(OIVP) PROGRAM(OIVPMAIN) TWASIZE(255) RESSEC(YES) ADD GROUP(OIVP) LIST(OIVPLIST)
定義されたマクロはoscsdgenツールを利用してシステムに登録します。
$ oscsdgen -r OSCOIVP1 oivp.dat
6. TN3270エミュレーターの設定
OSCアプリケーション・サーバーに接続するため、端末エミュレーターを設定します。
以下は、PCOMを使用してサーバーに接続するための設定例です。PCOMはIBMのPersonal Communicationという製品で、OSCがサポートする端末エミュレーターの1つです。
-
PCOMメニューから[通信] > [構成]を選択します。[Customize Communication]ダイアログが表示されたら、[Link Parameters…]ボタンをクリックします。
エミュレーターの接続設定(1) -
[Telnet3270]ダイアログが表示されたら、「Host Name or IP Address」、「LU or Pool Name」、「Port Number」を入力して[OK]をクリックします。
以下は、接続するゲートウェイ・アドレスが「192.168.14.88」、ポート番号が「14100」である場合の画面です。
エミュレーターの接続設定(2)
7. テスト画面の確認
TN3270エミュレーターを使用して作成したマップを画面で確認します。
-
サーバーに接続して起動画面が表示されたら、エミュレーターのキーボード設定で<Clear>キーとして設定されたキー(デフォルト値:<Break>キー)を押します。
OSCサーバーの起動画面 -
空の画面が表示されたら、リソース定義の登録で登録したOIVPトランザクション名を入力します。
OIVPトランザクションの入力画面 -
マップおよびアプリケーションのソースコードの作成で作成したマップが画面に表示されます。
テスト画面の表示