Friday, October 22, 2004

AS/400 Üzerinde İşlem Çâğırmak (PCML)

AS/400 makinalarından veri okumayı işlediğimiz yazıda, bir AS/400 veri tabanı (DB/400) üzerinden veriyi nasıl JDBC kullanarak okuyabileceğimizi görmüştük.

Bâzen, almamız gereken ve bir tabloya yazılacak verinin "doldurulması" için bir programı tetiklememiz gerekebilir. Bu tip programlar AS/400'ü bilen sistem idarecileri tarafından yazılabilir, fakat sizin programınızın bu kodları çağırabilmesi gerecektir.

Bunun başarmanın yollarından biri Java PCML yöntemidir.

Ekteki kod bu kodlama tekniğinin örneğini veriyor. Bu yönteme göre, AS/400'teki işlemi Java'ya tanıtan bir PCML dosyası hazırlanmalıdır. Örnek programda üç paramatre tanımlanmış, bunlardan ikisi gönderilen, üçüncü parametre "okunan" parametredir. Örnek programın yaptığı, birinci tarihe ikinci parametreden gelen gün sayısını ekleyip sonucu vermektir.

Dikkat: Program çalışırken, Pcml dosyasının CLASSPATH'te olması gerekir. Pcml dosyası görüldüğü gibi bir XML dosyasıdır, ve program ismini, parametreleri tanımlar. Bundan sonra Java koduna kalan tek görev, setValue() işlevini kullanarak gereken parametreler için değerleri yerine koymaktır.

<pcml version="1.0">
<program name="program" path="/QSYS.LIB/XXMHPGM.LIB/XTRHHSP1.PGM">
  <data name="trh1" type="zoned" length="7" precision="0" usage="input"/>
  <data name="gun" type="zoned" length="4" precision="0" usage="input"/>
  <data name="trh2" type="zoned" length="7" precision="0" usage="output"/>
</program>
</pcml>

import com.ibm.as400.data.*;
import com.ibm.as400.access.*;
import java.math.BigDecimal;

public class PCMLTest
{
    public static void main(String arg[]) throws Exception
    {
        boolean rc = false;
        ProgramCallDocument pcml;

        // Arkada olan biteni gostermek icin mesaj gosterme seviyesini arttir.
        Trace.setTraceDiagnosticOn(true);
        Trace.setTraceInformationOn(true);
        Trace.setTraceWarningOn(true);
        Trace.setTraceOn(true);

        AS400 sys = new  AS400("as400.makinasi.com.tr",
                               "KULLANICI??",
                               "SIFRE??");

        pcml = new ProgramCallDocument(sys, "OrnekPcml");
        pcml.setValue("program.trh1", new BigDecimal("1122103"));
        pcml.setValue("program.gun", new BigDecimal("11"));

        rc = pcml.callProgram("program");

        if(rc == false)
        {
            // AS/400 mesajlarini al
            AS400Message[] msgs = pcml.getMessageList("program");

            // hata mesajlarinini gez ve onlari ekrana bas
            for (int m = 0; m < msgs.length; m++)
            {
                String msgId = msgs[m].getID();
                String msgText = msgs[m].getText();
                System.out.println("    " + msgId + " - " + msgText);
            }
            System.out.println("Call to PROGRAM failed. See msgs listed above");
            System.exit(0);
        }
        else
        {
            // Geri gelen veriyi isle
            String sum = (String) pcml.getValue("program.trh2");
            System.out.print(sum);
            System.exit(0);
         }
    }
}

set CLASSPATH=.\lib\composer.jar;.\lib\jt400.jar;.\lib\jt400Micro.jar;.\lib\jt400Native.jar;.\lib\jt400Proxy.jar;.\lib\jt400Servlet.jar;.\lib\jui400.jar;.\lib\outputwriters.jar;.\lib\reportwriter.jar;.\lib\tes.jar;.\lib\uitools.jar;.\lib\util400.jar;.\lib\pg72jdbc2.jar;.

C:\Progra~1\j2sdk_nb\j2sdk1.4.2\bin\javac -classpath %CLASSPATH% PCMLTest.java
C:\Progra~1\j2sdk_nb\j2sdk1.4.2\bin\java -classpath %CLASSPATH% PCMLTest


Kaynaklar




* 1. Yazı
* 2. Yazı

No comments: