Estou precisando de um exemplo de implementação do código gerado pelo proxyGen em Java. Alguém poderia me ajudar?
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()); } } }
Muito Obrigado, pela atenção em responder. TrombiniSP , vocês utilizam essa técnica frequentemente? Se sim, quais vantagens conseguiram?
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.
TrombiniSP, Você poderia postar o programa Progress para ajudar na entendimento das rotinas? Obrigado. Hugo