ProxyGen

Discussão em 'Progress 4GL' iniciado por tadeu.parreiras, Março 13, 2009.

  1. tadeu.parreiras

    tadeu.parreiras Sem Pontuação

    Estou precisando de um exemplo de implementação do código gerado pelo proxyGen em Java.
    Alguém poderia me ajudar?
  2. TrombiniSP

    TrombiniSP Membro Participativo

    Usar o ProxyGen não nada complicado. Antes vc deve conhecer o conceito do mesmo. É simples, ele cria a partir do seu programa Progress class java que devem ser instanciadas no seu programa Java.

    Para tanto: Vc deve cconfigurar o ambinhente tendo, AppServer, JRE e se possivél uma IDE para programar em Java.

    O ProxyGen gera uma class que se conecta no AppServer e este sim executa o programa Progress (visto ques este deve estar no propath do AppServer) e retorna os dados também através da class.

    Segue um exemplo de programa Java que acessa base Progress usando estas class:

    Código:
    
    
    
    
    /** CustomerOrdersClient.java **/
    
    
    
    /* Static Temp-Table into a ResultSet */
    
    
    
    
    
    import java.sql.ResultSet;
    
    import java.sql.SQLException;
    
    import com.progress.open4gl.*;
    
    import com.progress.open4gl.javaproxy.*;
    
    import java.util.GregorianCalendar;
    
    import java.util.Calendar;
    
    import java.io.*;
    
    
    
    import CustomerOrdersProxy.*;
    
    
    
    public class CustomerOrdersClient { 
    
    
    
        // CustomerOrdersClient constsructor
    
        public CustomerOrdersClient() {}
    
        
    
        // Main method
    
        public static void main(String[] args) {
    
    
    
            System.out.println("Output will be written to CustomerOrders.out");
    
            try {
    
        
    
                // set Customer Number - default to 6
    
                //String strCustNum = System.getProperty("CustNum");
    
                String strCustNum = "6";
    
                Integer intCustNum = new Integer(strCustNum);
    
                int CustNum = intCustNum.intValue();
    
               
    
                // establish output file
    
                FileWriter outfile = new FileWriter("CustomerOrders.out");
    
                outfile.write("Orders for Customer " + CustNum + " \n\n");
    
                    
    
                // Create a connection object
    
                //String AppSrvUrl = System.getProperty("AppSrvUrl");
    
                String AppSrvUrl = "AppServer://localhost/asbroker1";
    
                Connection connobj = new Connection(AppSrvUrl, "", "", null);
    
    
    
                // this is the AppObject --> contains external procedure CustomerOrders.p
    
                CustomerOrders appobj = new CustomerOrders(connobj);
    
                boolean appconn = true;
    
    
    
                // Create a ResultSetHolder to hold the OUTPUT temp-table
    
                ResultSetHolder CustOrder = new ResultSetHolder();
    
                DateHolder AsOf = new DateHolder();
    
    
    
                // Call the external procedure passing it the Customer Number and the ResultSetHolder
    
                appobj.CustomerOrders(CustNum, CustOrder, AsOf);
    
    
    
                // Extract the records from the ProResultSet
    
                GregorianCalendar asof = AsOf.getDateValue();
    
                ProResultSet custorder = (ProResultSet) CustOrder.getResultSetValue();
    
    
    
                outfile.write("Data as of " + (asof.get(Calendar.MONTH) + 1) + "/" + asof.get(Calendar.DAY_OF_MONTH)
    
                   + "/" + asof.get(Calendar.YEAR) + " " + asof.get(Calendar.HOUR_OF_DAY)
    
                   + ":" + asof.get(Calendar.MINUTE) + ":" + asof.get(Calendar.SECOND) + " "
    
                   + ((asof.get(Calendar.ZONE_OFFSET) / 60000) + (asof.get(Calendar.DST_OFFSET) / 60000)) + "\n\n");
    
    
    
                // Prints all elements of the record
    
                while (custorder.next()) {
    
       
    
                    int OrderNum = custorder.getInt(1);
    
                    outfile.write("OrderNum: " + OrderNum + "\n");
    
    
    
                    GregorianCalendar OrdDate = custorder.getGregorianCalendar(2);
    
                    if (OrdDate == null){
    
                        outfile.write("OrdDate: \n");
    
                    }
    
                    else {
    
                        outfile.write("OrdDate: " + (OrdDate.get(Calendar.MONTH) + 1) 
    
                                                           + "/" + OrdDate.get(Calendar.DAY_OF_MONTH)
    
                                                           + "/" + OrdDate.get(Calendar.YEAR) + "\n");
    
                    }
    
    
    
                    GregorianCalendar ShipDate = custorder.getGregorianCalendar(3);
    
                    if (ShipDate == null) {
    
                        outfile.write("ShipDate: \n");
    
                    }
    
                    else {
    
                        outfile.write("ShipDate: " + (ShipDate.get(Calendar.MONTH) + 1) 
    
                                                            + "/" + ShipDate.get(Calendar.DAY_OF_MONTH)
    
                                                            + "/" + ShipDate.get(Calendar.YEAR) + "\n");
    
                    }
    
    
    
                    GregorianCalendar PromiseDate = custorder.getGregorianCalendar(4);
    
                    if (PromiseDate == null) {
    
                        outfile.write("PromiseDate: \n");
    
                    }
    
                    else {
    
                        outfile.write("PromiseDate: " + (PromiseDate.get(Calendar.MONTH) + 1) 
    
                                                                  + "/" + PromiseDate.get(Calendar.DAY_OF_MONTH)
    
                                                                  + "/" + PromiseDate.get(Calendar.YEAR) + "\n");
    
                    }
    
    
    
                    String Carrier = custorder.getString(5);
    
                    if (Carrier == null) {
    
                        outfile.write("Carrier:" + " \n");
    
                    }
    
                    else {
    
                        outfile.write("Carrier: " + Carrier + "\n");
    
                    }
    
    
    
                    String Instructions = custorder.getString(6);
    
                    if (Instructions == null) {
    
                        outfile.write("Instrustctions:" + " \n");
    
                    }
    
                    else {
    
                        outfile.write("Instructions: " + Instructions + "\n");
    
                    }
    
    
    
                    String Po = custorder.getString(7);
    
                    if (Po == null) {
    
                        outfile.write("Po:" + " \n");
    
                    }
    
                    else {
    
                        outfile.write("Po: " + Po + "\n");
    
                    }
    
    
    
                    String Terms = custorder.getString(8);
    
                    if (Terms == null) {
    
                        outfile.write("Terms:" + " \n");
    
                    }
    
                    else {
    
                        outfile.write("Terms: " + Terms + "\n");
    
                    }
    
    
    
                    String SalesRep = custorder.getString(9);
    
                    if (SalesRep == null) {
    
                        outfile.write("SalesRep:" + " \n");
    
                    }
    
                    else {
    
                        outfile.write("SalesRep: " + SalesRep + "\n");
    
                    }
    
    
    
                    String OrderStatus = custorder.getString(10);
    
                    if (OrderStatus == null) {
    
                        outfile.write("OrderStatus:" + " \n");
    
                    }
    
                    else {
    
                        outfile.write("OrderStatus: " + OrderStatus + "\n");
    
                    }
    
    
    
                    int WarehouseNum = custorder.getInt(11);
    
                    outfile.write("WarehouseNum: " + WarehouseNum + "\n");
    
            
    
                    String CreditCard = custorder.getString(12);
    
                    if (CreditCard == null) {
    
                        outfile.write("CreditCard:" + " \n");
    
                    }
    
                    else {
    
                        outfile.write("CreditCard: " + CreditCard + "\n");
    
                    }
    
    
    
                    outfile.write("\n\n");
    
                }
    
                outfile.close();
    
    
    
                // Release the AppObject.
    
                if (appconn) {
    
                    try {
    
                        appobj._release();
    
                    } 
    
                    catch(Exception e){
    
                        System.out.println(e.toString());
    
                    }
    
                }
    
            }
    
            catch(Exception e){
    
                System.out.println(e.toString());
    
            }
    
        }
    
    }   
    
    
    
  3. tadeu.parreiras

    tadeu.parreiras Sem Pontuação

    Muito Obrigado, pela atenção em responder.
    TrombiniSP , vocês utilizam essa técnica frequentemente?
    Se sim, quais vantagens conseguiram?
  4. TrombiniSP

    TrombiniSP Membro Participativo

    Sim hoje em dia é muito utilizada. Se vc tem um sistema Java ou .NET que precisa acessar dados em um sistema em Progress esta é a melhor maneira.

    1 - Vc deixa de usar ODBC ou coisas piores como troca de arquivos
    2 - Desta forma além do acesso a dados vc economiza em código fonte, uma vez que vc pode executar regras de negocio em Progress, por exemplo uma Api da Datasul, não tendo que rescrever tal regra e mantendo-a sempre atualizada.
    3 - Estará usando a forma que mais lhe da performance, controle dos fontes e práticas de programação, pois, isso é Orientação a Objetos, além de não necessitar de alterações nos servidores por motivos de segurança, o OpenClient não abre portas para vulnerabilidades.

    Abs.
  5. hugonasc

    hugonasc Sem Pontuação

    TrombiniSP,

    Você poderia postar o programa Progress para ajudar na entendimento das rotinas?
    Obrigado.

    Hugo

Compartilhe esta Página