星期一, 11月 06, 2023

2003-05-14 如何跨 AS/400 系統間快速即時傳送原始檔成員(source member)?(SNDSRC)


2003-05-14 如何跨 AS/400 系統間快速即時傳送原始檔成員(source member)?(SNDSRC)

由於一般公司有可能將開發測試與應用軟體正式運行的環境分成不同的機器,所以時常
會有傳送程式或畫面原始檔需求,一般若是要傳送的原始檔成員很多時均是使用磁帶,Send
 Network File(SNA網路) 或 FTP(TCP/IP網路)方式,但是若要傳送的原始檔成員不多時,
可考慮使用 DDMF 方式,DDMF 支援 SNA(適合所有 OS/400 版本) 及 TCP/IP網路(適合
所有 OS/400 V4R4 以後版本) 。 您可依自己系統的需求設定採用哪一種方式。在此範例
採用 TCP/IP 網路。


File  : QCLSRC
Member: SNDSRCD
Type  : DSPF
Usage : CRTDSPF SNDSRCD


     A                                      DSPSIZ(24 80 *DS3)
     A                                      PRINT
     A          R SNDFMT
     A                                      CF03(03 'EXIT')
     A                                      CF12(12 'CANCEL')
     A                                      OVERLAY
     A                                  1 32'Send Source Member'
     A                                      DSPATR(HI)
     A                                  3  2'From File . . . . . . . :'
     A            FRMFIL        10A  O  3 30
     A                                  4  4'From Library. . . . . :'
     A            FRMLIB        10A  O  4 32
     A                                  7  2'Type the file name, library, and s-
     A                                      ystem to receive the source member.'
     A                                      COLOR(BLU)
     A                                  9  4'To File . . . . . . . :'
     A            TOFIL         10A  B  9 30
     A  50                                  DSPATR(PC)
     A  50                                  DSPATR(RI)
     A                                 10  6'To Library  . . . . :'
     A            TOLIB         10A  B 10 32
     A  51                                  DSPATR(RI)
     A  51                                  DSPATR(PC)
     A                                  5  8'From System . . . :'
     A            TOSYS          8A  B 11 34
     A  52                                  DSPATR(RI)
     A  52                                  DSPATR(PC)
     A                                 13  2'To rename copied member, type New -
     A                                      Name, press Enter.'
     A                                      COLOR(BLU)
     A                                 15  2'Member'
     A                                      DSPATR(HI)
     A                                 15 17'New Name'
     A                                      DSPATR(HI)
     A            FRMMBR        10A  O 16  2
     A            TOMBR         10A  B 16 17
     A  53                                  DSPATR(RI)
     A  53                                  DSPATR(PC)
     A                                 11  8'To System . . . . :'
     A            FRMSYS         8A  O  5 34
     A          R MSGSFL                    SFL
     A                                      SFLMSGRCD(24)
     A            MSGKEY                    SFLMSGKEY
     A            PGMQ                      SFLPGMQ(10)
     A*/
     A          R MSGCTL                    SFLCTL(MSGSFL)
     A                                      OVERLAY
     A                                      SFLSIZ(0050)
     A                                      SFLPAG(0001)
     A                                      SFLDSP
     A                                      SFLDSPCTL
     A                                      SFLINZ
     A N99                                  SFLEND
     A            PGMQ                      SFLPGMQ(10)
     A                                 23  2'F3=Exit'
     A                                      COLOR(BLU)
     A                                 23 11'F12=Cancel'
     A                                      COLOR(BLU)


File  : QCLSRC
Member: SNDSRCC
Type  : CLP
Usage : 
1. 修改此程式參數 SYSTEM1 及 SYSTEM2 為 AS/400 的系統名稱(SNA device remote location)
   或 IP 主機名稱或 IP 位址。此範例是使用 IP IP 主機名稱(定義於 CFGTCP 選項 10 中)

2. CRTCLPGM SNDSRCC
3. STRPDM 選 9 --> 執行鍵 --> 執行鍵 --> 按 F6 --> 指定
    Option  : SS
    Command : CALL SNDSRCC (&F &L &N) --> 執行鍵儲存。
    即可於 PDM 中直接於選項處輸入 SS 集會出現以下畫面:

                               Send Source Member                              
                                                                               
 From File . . . . . . . :   QDDSSRC                                           
   From Library. . . . . :     VENGOAL                                         
       From System . . . :       SYSTEM1                                       
                                                                               
 Type the file name, library, and system to receive the source member.         
                                                                               
   To File . . . . . . . :   QDDSSRC                                           
     To Library  . . . . :     VENGOAL                                         
       To System . . . . :       SYSTEM2                                       
                                                                               
 To rename copied member, type New Name, press Enter.                          
                                                                               
 Member         New Name                                                       
 GETDSPX        GETDSPX                                                        
                                                                               
                                                                               
                                                                               
                                                                               
                                                                               
                                                                               
 F3=Exit  F12=Cancel                                                           

程式原始碼如下,記得要更改原始及目的主機名稱。



/*------------------------------------------------------------------*/
/* PROGRAM NAME: SNDSRCC                                             */
/* DATE WRITTEN: 05/14/2003                                         */
/* FUNCTION....: THIS IS USED TO SEND A SOURCE FILE FROM A          */
/*               SOURCE SYSTEM TO A TARGET SYSEM                    */
/*                                                                  */
/* NOTE........: THIS IS CALLED FROM PDM USER OPTION.               */
/*                   EX: CALL PGM(QGPL/SNDSRC) PARM(&F &L &N)       */
/*               THE TARGET SOURCE FILE MUST HAVE QUSER *AUTHORITY  */
/*------------------------------------------------------------------*/

             PGM        PARM(&FRMFIL &FRMLIB &FRMMBR)

             DCLF       FILE(SNDSRCD) RCDFMT(*ALL)

/*------------------------------------------------------------------*/
/* DEFINE ERROR VARIABLES                                           */
/*------------------------------------------------------------------*/
             DCL        VAR(&ERRORSW) TYPE(*LGL)
             DCL        VAR(&MSGID)   TYPE(*CHAR) LEN(7)
             DCL        VAR(&MSGDTA)  TYPE(*CHAR) LEN(100)
             DCL        VAR(&MSGF)    TYPE(*CHAR) LEN(10)
             DCL        VAR(&MSGFLIB) TYPE(*CHAR) LEN(10)
             /* Variables needed to determine program name */
             DCL        VAR(&MSGKEY) TYPE(*CHAR) LEN(4)
             DCL        VAR(&SENDER) TYPE(*CHAR) LEN(80)

/*------------------------------------------------------------------*/
/* DEFINE AS400 SYSTEM NAMES VARIABLES (PUT YOUR AS400 SYSTEM NAMES HERE)*/
/*------------------------------------------------------------------*/
             DCL        VAR(&SYSNM1) TYPE(*CHAR) LEN(8) +
                          VALUE('SYSTEM1')

             DCL        VAR(&SYSNM2) TYPE(*CHAR) LEN(8) +
                          VALUE('SYSTEM2')

/*------------------------------------------------------------------*/
/* GLOBAL MESSAGE MONITOR TO TRAP ANY UNMONITORED ERRORS            */
/*------------------------------------------------------------------*/
             MONMSG     (CPF9999 CPF0000 MCH0000) EXEC(GOTO ERROR)

/*------------------------------------------------------------------*/
/* SET DEFAULT VALUES                                               */
/*------------------------------------------------------------------*/
             CHGVAR     VAR(&TOFIL) VALUE(&FRMFIL)
             CHGVAR     VAR(&TOLIB) VALUE(&FRMLIB)
             CHGVAR     VAR(&TOMBR) VALUE(&FRMMBR)

             RTVNETA    SYSNAME(&FRMSYS)

             IF         COND(&FRMSYS *EQ &SYSNM1) THEN(CHGVAR +
                          VAR(&TOSYS) VALUE(&SYSNM2))

             IF         COND(&FRMSYS *EQ &SYSNM2) THEN(CHGVAR +
                          VAR(&TOSYS) VALUE(&SYSNM1))

/*------------------------------------------------------------------*/
/* BEGIN PROGRAM LOGIC                                              */
/*------------------------------------------------------------------*/
             /* Determine the name of the program */
             SNDPGMMSG  MSG('Dummy message') TOPGMQ(*SAME) +
                          MSGTYPE(*INFO) KEYVAR(&MSGKEY)
             RCVMSG     PGMQ(*SAME) MSGTYPE(*INFO) MSGKEY(&MSGKEY) +
                          RMV(*YES) SENDER(&SENDER)
             CHGVAR     VAR(&PGMQ) VALUE(%SST(&SENDER 27 10))
 /*          CHGVAR     VAR(&PGMQ) VALUE('SNDSRCC')     */
             RMVMSG     PGMQ(*SAME (&PGMQ)) CLEAR(*ALL)

 LOOP:       SNDF       RCDFMT(MSGCTL)
             SNDRCVF    RCDFMT(SNDFMT)
             RMVMSG     PGMQ(*SAME (&PGMQ)) CLEAR(*ALL)

             IF         COND((&IN03 *EQ '1') *OR (&IN12 *EQ '1')) +
                          THEN(GOTO CMDLBL(ENDPGM))

/*------------------------------------------------------------------*/
/* CREATE DDMF TO REMOTE SYSTEM                                     */
/*------------------------------------------------------------------*/
             CRTDDMF    FILE(QTEMP/DDMF) RMTFILE(&TOLIB/&TOFIL) +
                          RMTLOCNAME(&TOSYS *IP)

/*------------------------------------------------------------------*/
/* COPY SOURCE MEMBER TO DDMF                                       */
/*------------------------------------------------------------------*/
             CPYF       FROMFILE(&FRMLIB/&FRMFIL) TOFILE(QTEMP/DDMF) +
                          FROMMBR(&FRMMBR) TOMBR(&TOMBR) +
                          MBROPT(*REPLACE) FMTOPT(*NOCHK)

/*------------------------------------------------------------------*/
/* DELETE THE TEMPORARY DDMFILE                                     */
/*------------------------------------------------------------------*/
             DLTF       FILE(QTEMP/DDMF)

             GOTO       CMDLBL(ENDPGM)

/*-------------------------------------------------------------------*/
/* GLOBAL ERROR HANDLING ROUTINE                                     */
/*-------------------------------------------------------------------*/
ERROR:

 STDERR1:
             IF         COND(&ERRORSW) THEN(SNDPGMMSG MSGID(CPF9999) +
                          MSGF(QCPFMSG) MSGTYPE(*ESCAPE))
             CHGVAR     VAR(&ERRORSW) VALUE('1')
 STDERR2:    RCVMSG     MSGTYPE(*DIAG) MSGDTA(&MSGDTA) MSGID(&MSGID) +
                          MSGF(&MSGF) MSGFLIB(&MSGFLIB)
             IF         COND(&MSGID *EQ '       ') THEN(GOTO +
                          CMDLBL(STDERR3))
             SNDPGMMSG  MSGID(&MSGID) MSGF(&MSGFLIB/&MSGF) +
                          MSGDTA(&MSGDTA) MSGTYPE(*DIAG)
             GOTO       CMDLBL(LOOP)
 STDERR3:    RCVMSG     MSGTYPE(*EXCP) MSGDTA(&MSGDTA) MSGID(&MSGID) +
                          MSGF(&MSGF) MSGFLIB(&MSGFLIB)
             SNDPGMMSG  MSGID(&MSGID) MSGF(&MSGFLIB/&MSGF) +
                          MSGDTA(&MSGDTA) MSGTYPE(*ESCAPE)
             GOTO       CMDLBL(LOOP)
/*-------------------------------------------------------------------*/
/* END PROGRAM                                                       */
/*-------------------------------------------------------------------*/
 ENDPGM:     RETURN
             ENDPGM



沒有留言: