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
A blog about IBM i (AS/400), MQ and other things developers or Admins need to know.
星期一, 11月 06, 2023
2003-05-14 如何跨 AS/400 系統間快速即時傳送原始檔成員(source member)?(SNDSRC)
訂閱:
張貼留言 (Atom)
沒有留言:
張貼留言