You are currently browsing the tag archive for the ‘RPG’ tag.

Banyak metode yang dapat digunakan untuk mengambil source code dari AS/400 ke PC. Saya lebih sering menggunakan FTP, karena lebih mudah dapat dibaca di PC berupa text file. Kali ini akan saya coba ulas sedikit cara mengambil source code dari AS/400 ke PC (Os. Windows).

Asumsi bahwa source code yang akan diambil berada di :

AS/400 dengan IP : 10.10.1.10
Library : Eden
Source File : QRPGLESRC
Member : TST1R

Cara simple untuk mengambil code tersebut adalah menggunakan commad prompt yang tersedia di Windows. Berikut langkah-langkahnya

1. Nyalakan aplikasi command prompt. Secara default apliasi ini ada di “Program Files” -> “Accesories” -> “Command Prompt”. Tips : tekan Win+R, kemudian ketikan “cmd” (tanpa tanda kutip) dan Enter.

2. Tuju ke folder yang akan dijadikan tempat untuk menyimpan source code yang akan diambil. Misalkan saya akan menyimpan di Drive D, maka commandnya adalah “D:”.

3. Akses server AS/400 menggunakan FTP. Ketikan command FTP ip-Address, dalam hal ini : “FTP 10.10.1.10” (tanpa tanda kutip). Kemudian Log-in.

4. Set library source code sebagai current library. Gunakan command “CD nama-library”, dalam hal ini : “CD Eden” (tanpa tanda kutip).

6. Ambil source code. Gunakan command “Get nama-source-file.nama-member”, dalam hal ini : “Get QRPGLESRC.TST1R” (tanpa tanda kutip).

7. Maka source code akan ada di dirve D dengan nama file : Qrpglesrc.Tst1R. Source code ini berupa text file, bisa dibuka di notepad atau text editor lainnya.

8. Untuk keluar dari FTP dan Command Prompt, ketikan command bye – enter – exit – enter.

Kurang lebih jika step-step ini dijalankan yang muncul di layar command prompt akan seperti ini :

Microsoft Windows XP [Version 5.1.2600]
(C) Copyright 1985-2001 Microsoft Corp.
C:\Documents and Settings>d:
D:\>FTP 10.10.1.10
Connected to 10.10.1.10.
220-QTCP at AS400.
220 Connection will close if idle more than 5 minutes.
User (10.10.1.10:(none)): eden
331 Enter password.
Password:
230 EDEN logged on.
ftp> cd eden
250 "EDEN" is current library.
ftp> get qrpglesrc.tst1r
200 PORT subcommand request successful.
150 Retrieving member TST1R in file QRPGLESRC in library EDEN.
250 File transfer completed successfully.
ftp: 633 bytes received in 0.09Seconds 6.73Kbytes/sec.
ftp> bye
221 QUIT subcommand received.
D:\> exit

Untuk selanjutnya, dengan beberapa modifikasi, cara ini saya gunakan sebagai salah satu cara dalam mem-backup source code AS/400.

Bagi para pecinta indicator, mungkin ini sedikit tips untuk mempermudah membaca code dikemudian hari.

Buat variable found/not found :

D Found           S              1A   INZ('0')
D NotFound        S              1A   INZ('1')

Kemudian di kodingan bisa seperti ini :

c     DISKEY        chain     T1KEN10LR                          96
c                   if        *in96 = NotFound

atau

c     DISKEY        chain     T1AGUNAR                           98
c                   if        *in98 = NotFound or
c                             (*in98 = Found and aStaval = 'S')

Toh ini akan sama aja dengan :

c     DISKEY        chain     T1KEN10LR                          96
c                   if        *in96 = '1'

atau

c     DISKEY        chain     T1AGUNAR                           98
c                   if        *in98 = '1' or
c                             (*in98 = '0' and aStaval = 'S')

Cuma perlu diingat, untuk command LOOKUP found itu bernilai ‘1’ dan not found bernilai ‘0’ (kebalikan dari chain/reade)

 

*Nb. Tips ini didapat dari mas Prayugo ketika diskusi optimalisasi JF.

Akhirnya ada juga tentang AS400 yang bisa saya share disini, sekalian reminder juga buat sendiri… :p

klo perlu read table (PF) tapi pengen di CL kita bisa pake command RCVF (Receive File). Nah, nama file yang akan dibuka di declare dulu pake DCLF (Declare File) dibagian declare variabel. CPF0864 (End of file detected for file) bisa digunakan untuk nge-cek apakah record found or not found.

Contoh code :

* PF (SPOOL1P) :
A          R SPOOLR
A            SPOOL 133A

/*CL :*/
PGM

DCL  VAR(&STSJOB) TYPE(*CHAR) LEN(4)
DCLF FILE(SPOOL1P)

RCVF   RCDFMT(SPOOLR)
MONMSG MSGID(CPF0864) EXEC(GOTO CMDLBL(EXIT))
CHGVAR VAR(&STSJOB) VALUE(%SST(&SPOOL 111 4))

EXIT:
ENDPGM

Command ini selanjutnya saya kembangkan untuk cek status job, apakah MSGW atau tidak. Untuk bagian ini…. insya Allah saya posting lagi nanti… 😉
Semoga bermanfaat…

Udah lama sih gw nemuin kasus kaya gini, tapi ga ada salahnya gw tuangin disini. Maaf, ga maksud menggurui, hanya ingin share temuan. Atau malahan udah pada tau…. *asa ngabejaan bulu tuur*

Apa bedanya opcode MOVE, MOVEL dan EVAL di RPGLE ?
berikut contoh codenya, smoga memberikan pencerahan 😀

DName+++++++++++ETDsFrom+++To/L+++IDc.Keywords+++++++++++++++++++++++++++++Comments++++++++++++
d VAR1            s              4S 0
d VAR2            s              3S 0
d VAR3            s              4S 0
CL0N01Factor1+++++++Opcode&ExtFactor2+++++++Result++++++++Len++D+HiLoEq....Comments++++++++++++
*
C                   Z-ADD     1234          VAR1
C     VAR1          DSPLY                                                  1234
c                   MOVE      VAR1          VAR2
C     VAR2          DSPLY                                                  234
c                   MOVEL     VAR1          VAR2
C     VAR2          DSPLY                                                  123
C*                  EVAL      VAR2 = VAR1                                  MENTAL
C                   Z-ADD     1000          VAR1
C                   Z-ADD     100           VAR2
C     var1          sub       var2          var3
C     VAR3          DSPLY                                                  900
c                   SETON                                        LR

kasus ini gw temuin kemaren.

pada awalnya gw bingung knapa tabel ini ke lock. padahal di mesin yang satunya ga ada masalah untuk proses yang sama, data yang sama, dan program dari source yang sama.

solusi pertama yang gw dapet adalah dengan men-delay job utama sbelum mengupdate nilai, ketika sluruh job yang dia buat telah slesai melakukan tugasnya. ini dilakukan tuk ngeyakinin bahwa job telah me-release table sehingga bisa di update sama job utama. ternyata ini bukan solusi. tabel masih di lock. hmmm…

solusi kedua. suspect ternyata bukan job yang dibuat, tapi si job utama yang nge-lock. code gw review lagi. then, ok di CL programnya gw kasih command OVRDBF FILE(namaFileDb) SHARE(*YES) sbelum manggil RPGLE-nya dan DLTOVR FILE(namaFileDb) setelahnya. command ini berfungsi untuk mengoveride file dan membuat file tsb share for update untuk program lain -yang juga akan menggunakan file tsb- ktika dibuka oleh programnya. then, compile, run….. LCKW (lock wait)…. MSGW(mesej wait-pertanda program mental/error)… anjrit, masih nge-lock. dah stengah hari lebih nih. hmmm…

solusi ketiga. review lagi code job utama… review lagi code program yg di panggil oleh job yang dibuat job utama… telaah lagi CPF (error information) dari MSGW yang muncul… nah dapet juga jawabannya. job yang dibuat job utama ga bisa dapetin record yang akan di update karena di-lock oleh job utama tabel PF nya. padahal yang dipake job yang dibuat adalah LF nya. yo wes, gw OVRDBF aja nih LF. ini juga saran dari temen gw -juga trainer RPG gw, Pak Ardijan-. then, compile…. shalat magrib dulu…. run…. LCKW…. MSGW….(again? arghhh..)

solusi keempat. review lagi…liat MSGW nya lagi… dan… gw baru nyadar ada tulisan “can not alocate object at line xxx (gw lupa), because it’s being used by another program” kurang lebih seperti itu lah. gw liat compile-an code nya. ternyata line tersebut adalah opcode CHAIN ke LF. karena job brjalan paralel gw cek kmungkinan job utama lagi ngapain pas job yg dibuatnya nge-CHAIN. owch…lagi loop tuk opcode READ tabel PF yang LF nya di-CHAIN job yg dibuat. ini lock nya level record brarti, solusi dua dan tiga tuh untuk lock level tabel. kok READ nge-lock ya??? setau gw slama ini, meskipun file spec nya UF (bisa read, update) atau UF A (bisa read, update, insert) untuk READ baik diawali opcode KEY SETLL atau ga, ga akan nge-lock. gw simulasiin, gw bikin 2 program kecil. dan hasilnya bener ngelock. akhirnya gw kasih (N). opcode jadinya READ (N) -pada kolom (E)- klo di RPG. klo di RPGILE bisa langsung READ(N). penambahan (N) ini mengakibatkan record tidak di-lock tapi hanya di read saja. (N) ini bisa dipake juga untuk opcode READP, READE, CHAIN. Soalnya untuk file spec UF atau UF A baik READ, READE, READP ataupun CHAIN, dia akan nge-lock record. gw simulasiin….dan….sukses. gam nge-lock lg. solusi ini hasil diskusi dengan dicky. tinggal compile nih… hmmm… mba erna nya dah pulang (jam brapa ini bung???, stengah smbilan!!!), besok aja deh jadinya. -besok paginya- compile… run… pass… ok sip. dah bener akhirnya. delay dicabut lg, tp OVRDBF tetep dipake.

INGAT, klo pake file spec UF atau UF A harus pake (N) untuk tujuan read doang. tapi klo buat update, ya ga usah. karena emang harus di-lock.
hanya file spec IF yang ga nge-lock ktika pake opcode CHAIN, READ, READP, READE.