From e4367190651bd7df3cbfad3437b0b7b95f72dffe Mon Sep 17 00:00:00 2001 From: Heng Sin Low Date: Tue, 19 Feb 2013 21:25:15 +0800 Subject: [PATCH] IDEMPIERE-460 Integrate and migrate 3e services. Fixed lookup. Refactoring and cleanup. --- .../com/trekglobal/ws/CompositeService.java | 5 + .../trekglobal/ws/CompositeServiceImpl.java | 122 +- .../data/CompiereDataSourceFactory.java | 2 +- .../sf/compilo/data/ReportViewDataSource.java | 2 +- .../src/net/sf/compilo/data/sqlProcessor.java | 44 - .../src/net/sf/compilo/report/FileFilter.java | 2 +- .../src/net/sf/compilo/report/ReportInfo.java | 47 - .../src/net/sf/compilo/report/ReportPool.java | 2 +- .../sf/compilo/report/ReportProcessor.java | 29 +- .../org/idempiere/adinterface/ADLookup.java | 19 +- .../adinterface/CompiereService.java | 273 +- .../idempiere/adinterface/CompiereUtil.java | 36 +- .../adinterface/ModelADServiceImpl.java | 2239 ++++++++++------- .../org/idempiere/adinterface/Process.java | 24 +- .../webservices/AbstractService.java | 38 +- .../org/idempiere/webservices/Activator.java | 13 + .../idempiere/webservices/IWSValidator.java | 37 + .../fault/IdempiereServiceFault.java | 13 + 18 files changed, 1667 insertions(+), 1280 deletions(-) delete mode 100644 org.idempiere.webservices/WEB-INF/src/net/sf/compilo/data/sqlProcessor.java diff --git a/org.idempiere.webservices/WEB-INF/src/com/trekglobal/ws/CompositeService.java b/org.idempiere.webservices/WEB-INF/src/com/trekglobal/ws/CompositeService.java index cbe13cd555..1e20b11360 100644 --- a/org.idempiere.webservices/WEB-INF/src/com/trekglobal/ws/CompositeService.java +++ b/org.idempiere.webservices/WEB-INF/src/com/trekglobal/ws/CompositeService.java @@ -13,5 +13,10 @@ import org.idempiere.adInterface.x10.CompositeResponsesDocument; @SOAPBinding(style=Style.RPC,use=Use.LITERAL,parameterStyle=ParameterStyle.WRAPPED) public interface CompositeService { + /** + * + * @param reqs + * @return CompositeResponsesDocument + */ public CompositeResponsesDocument compositeOperation(CompositeRequestDocument reqs); } diff --git a/org.idempiere.webservices/WEB-INF/src/com/trekglobal/ws/CompositeServiceImpl.java b/org.idempiere.webservices/WEB-INF/src/com/trekglobal/ws/CompositeServiceImpl.java index 7bd57121cf..76680b8446 100644 --- a/org.idempiere.webservices/WEB-INF/src/com/trekglobal/ws/CompositeServiceImpl.java +++ b/org.idempiere.webservices/WEB-INF/src/com/trekglobal/ws/CompositeServiceImpl.java @@ -14,7 +14,7 @@ package com.trekglobal.ws; import java.util.ArrayList; -import java.util.Properties; +import java.util.logging.Level; import javax.jws.WebService; @@ -26,8 +26,6 @@ import org.idempiere.adInterface.x10.CompositeRequestDocument; import org.idempiere.adInterface.x10.CompositeResponse; import org.idempiere.adInterface.x10.CompositeResponses; import org.idempiere.adInterface.x10.CompositeResponsesDocument; -import org.idempiere.adInterface.x10.DataField; -import org.idempiere.adInterface.x10.ModelCRUD; import org.idempiere.adInterface.x10.ModelCRUDRequest; import org.idempiere.adInterface.x10.ModelCRUDRequestDocument; import org.idempiere.adInterface.x10.ModelRunProcessRequest; @@ -41,7 +39,6 @@ import org.idempiere.adInterface.x10.RunProcessResponseDocument; import org.idempiere.adInterface.x10.StandardResponse; import org.idempiere.adInterface.x10.StandardResponseDocument; import org.idempiere.adInterface.x10.WindowTabDataDocument; -import org.idempiere.adinterface.CompiereService; import org.idempiere.adinterface.ModelADServiceImpl; import org.idempiere.webservices.AbstractService; @@ -59,60 +56,71 @@ public class CompositeServiceImpl extends AbstractService implements CompositeSe private static String webServiceName = new String("CompositeInterface"); public CompositeServiceImpl() { - - log.info("Creating session object BiziInterface"); + if (log.isLoggable(Level.INFO)) + log.info("Creating session object compositeInterface"); } - + /** + * @see CompositeService#compositeOperation(CompositeRequestDocument) + */ + @Override public CompositeResponsesDocument compositeOperation(CompositeRequestDocument reqs) { - - CompiereService m_cs = getCompiereService(); - - CompositeResponsesDocument ret = CompositeResponsesDocument.Factory.newInstance(); - CompositeResponses resps = ret.addNewCompositeResponses(); - - CompositeRequest req = reqs.getCompositeRequest(); - String serviceType = req.getServiceType(); - - ADLoginRequest reqlogin = req.getADLoginRequest(); - String err = login(reqlogin, webServiceName, "composite", serviceType); - if (err != null && err.length() > 0) { - CompositeResponse resp = resps.addNewCompositeResponse(); - StandardResponse stdResp = resp.addNewStandardResponse(); - stdResp.setError(err); - stdResp.setIsError(true); - return ret; - } - - ModelADServiceImpl modelADService = new ModelADServiceImpl(ctx); - - String trxName = m_cs.getM_trx_name(); - trxName = Trx.createTrxName("ws_biziInterface"); - - Trx trx = Trx.get(trxName, true); - - modelADService.setLocalTrxName(trxName); - - Operations operationsArr[] = req.getOperationsArray(); - - for (Operations operations : operationsArr) { - Operation operationArr[] = operations.getOperationArray(); - if (operationArr.length > 0) { - CompositeResponse compResp = resps.addNewCompositeResponse(); - ArrayList respAggregator = new ArrayList(); - boolean isSuccess = performOperations(trx, operationArr, modelADService, compResp, respAggregator, reqlogin); - - // Committing after each operation set - if (isSuccess) { - commitTrx(trx, compResp, respAggregator, "Cannot commit at end of process", false); - } - + boolean connected = getCompiereService().isConnected(); + + try { + if (!connected) + getCompiereService().connect(); + + CompositeResponsesDocument ret = CompositeResponsesDocument.Factory.newInstance(); + CompositeResponses resps = ret.addNewCompositeResponses(); + + CompositeRequest req = reqs.getCompositeRequest(); + String serviceType = req.getServiceType(); + + ADLoginRequest reqlogin = req.getADLoginRequest(); + String err = login(reqlogin, webServiceName, "composite", serviceType); + if (err != null && err.length() > 0) { + CompositeResponse resp = resps.addNewCompositeResponse(); + StandardResponse stdResp = resp.addNewStandardResponse(); + stdResp.setError(err); + stdResp.setIsError(true); + return ret; } + + ModelADServiceImpl modelADService = new ModelADServiceImpl(ctx); + + String trxName = Trx.createTrxName(webServiceName); + + Trx trx = Trx.get(trxName, true); + + try { + modelADService.setLocalTrxName(trxName); + + Operations operationsArr[] = req.getOperationsArray(); + + for (Operations operations : operationsArr) { + Operation operationArr[] = operations.getOperationArray(); + if (operationArr.length > 0) { + CompositeResponse compResp = resps.addNewCompositeResponse(); + ArrayList respAggregator = new ArrayList(); + boolean isSuccess = performOperations(trx, operationArr, modelADService, compResp, respAggregator, reqlogin); + + // Committing after each operation set + if (isSuccess) { + commitTrx(trx, compResp, respAggregator, "Cannot commit at end of process", false); + } + + } + } + } finally { + trx.close(); + } + + return ret; + } finally { + if (!connected) + getCompiereService().disconnect(); } - - trx.close(); - - return ret; } /** @@ -260,6 +268,12 @@ public class CompositeServiceImpl extends AbstractService implements CompositeSe return wrapperDoc; } + /** + * + * @param ctx + * @param crud + */ + /* public void resolveContextCRUD(Properties ctx, ModelCRUD crud) { DataField fields[] = crud.getDataRow().getFieldArray(); for (DataField field : fields) { @@ -271,7 +285,7 @@ public class CompositeServiceImpl extends AbstractService implements CompositeSe field.setVal(val); } } - } + }*/ /** * Rollback and set error on response diff --git a/org.idempiere.webservices/WEB-INF/src/net/sf/compilo/data/CompiereDataSourceFactory.java b/org.idempiere.webservices/WEB-INF/src/net/sf/compilo/data/CompiereDataSourceFactory.java index 5416f8c361..518d3e2f0a 100644 --- a/org.idempiere.webservices/WEB-INF/src/net/sf/compilo/data/CompiereDataSourceFactory.java +++ b/org.idempiere.webservices/WEB-INF/src/net/sf/compilo/data/CompiereDataSourceFactory.java @@ -46,6 +46,6 @@ public class CompiereDataSourceFactory if(ri.getReportViewID() > 0) return new ReportViewDataSource(ctx, pi, params); - return new DBDataSource(ctx, ri, params); + return new DBDataSource(ctx, ri, params); } } diff --git a/org.idempiere.webservices/WEB-INF/src/net/sf/compilo/data/ReportViewDataSource.java b/org.idempiere.webservices/WEB-INF/src/net/sf/compilo/data/ReportViewDataSource.java index 734b056586..887b9d806f 100644 --- a/org.idempiere.webservices/WEB-INF/src/net/sf/compilo/data/ReportViewDataSource.java +++ b/org.idempiere.webservices/WEB-INF/src/net/sf/compilo/data/ReportViewDataSource.java @@ -76,7 +76,7 @@ public class ReportViewDataSource extends compiereDataSource public Object getFieldValue(JRField field) throws JRException { PrintDataElement pde = (PrintDataElement)m_printData.getNode(field.getName()); - if(pde == null || pde.isNull()) + if(pde == null || pde.isNull()) return null; if(pde.isDate()) diff --git a/org.idempiere.webservices/WEB-INF/src/net/sf/compilo/data/sqlProcessor.java b/org.idempiere.webservices/WEB-INF/src/net/sf/compilo/data/sqlProcessor.java deleted file mode 100644 index be70b77770..0000000000 --- a/org.idempiere.webservices/WEB-INF/src/net/sf/compilo/data/sqlProcessor.java +++ /dev/null @@ -1,44 +0,0 @@ -/** - * reportServer for JasperReport. - * Copyright (C) 2004 Peter Shen. - * Shanghai, China. - * Email: zpshen@gmail.com - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * Contributor: Marco LOMBARDO, Compilo subAdministrator. - * lombardo@mayking.com, mar9000@gmail.com - * Italy. - **/ -package net.sf.compilo.data; - -/** - * @author Peter Shen - * @version $Id: sqlProcessor.java,v 1.1 2005/07/15 10:29:40 pshen Exp $ - * - * TODO To change the template for this generated type comment go to - * Window - Preferences - Java - Code Generation - Code and Comments - */ -public class sqlProcessor -{ - /** - * - */ - public sqlProcessor() - { - super(); - // TODO Auto-generated constructor stub - } -} diff --git a/org.idempiere.webservices/WEB-INF/src/net/sf/compilo/report/FileFilter.java b/org.idempiere.webservices/WEB-INF/src/net/sf/compilo/report/FileFilter.java index 678b0dd1a2..2d554b527e 100644 --- a/org.idempiere.webservices/WEB-INF/src/net/sf/compilo/report/FileFilter.java +++ b/org.idempiere.webservices/WEB-INF/src/net/sf/compilo/report/FileFilter.java @@ -40,7 +40,7 @@ public class FileFilter implements FilenameFilter public FileFilter(String reportStart, File directory, String[] extension) { this.reportStart = reportStart; - this.directory = directory; + this.directory = directory; this.extension = extension; } diff --git a/org.idempiere.webservices/WEB-INF/src/net/sf/compilo/report/ReportInfo.java b/org.idempiere.webservices/WEB-INF/src/net/sf/compilo/report/ReportInfo.java index 5947e17e49..5f66a7dda6 100644 --- a/org.idempiere.webservices/WEB-INF/src/net/sf/compilo/report/ReportInfo.java +++ b/org.idempiere.webservices/WEB-INF/src/net/sf/compilo/report/ReportInfo.java @@ -150,10 +150,6 @@ public class ReportInfo JasperReport res = null; try { - String compiere_home = (String)System.getProperty("COMPIERE_HOME"); -// compiere_home = "C:/compiere/acompiere2/"; - //log.info( "compiere_home = "+compiere_home); - System.setProperty("jasper.reports.compile.class.path", compiere_home+"/lib/reporttools.jar;"+compiere_home+"/lib/Compiere.jar"); JasperCompileManager.compileReportToFile( reportFile.getAbsolutePath(), jasperFile.getAbsolutePath()); jasperFile.setLastModified( reportFile.lastModified()); res = (JasperReport)JRLoader.loadObjectFromFile(jasperFile.getAbsolutePath()); @@ -235,49 +231,6 @@ public class ReportInfo } log.info("Get ReportDefinition-" + this.toString()); } - /* - private void getResource() - { -// Resources - File[] resources = - reportInfo.getReportFile().getParentFile().listFiles( - new FileFilter( jasperName, reportInfo.getReportFile().getParentFile(), ".properties")); - File resFile = null; - // try baseName + "_" + language - for( int i=0; i 0) { - resp.setError(err); - resp.setIsError(true); - return ret; - } - - try { - // Validate parameters - modelSetDocAction.setTableName(validateParameter("tableName", modelSetDocAction.getTableName())); - modelSetDocAction.setRecordID(validateParameter("recordID", modelSetDocAction.getRecordID())); - modelSetDocAction.setDocAction(validateParameter("docAction", modelSetDocAction.getDocAction())); - } catch (IdempiereServiceFault e) { - resp.setError(e.getMessage()); - resp.setIsError(true); - return ret; - } - - Properties ctx = m_cs.getM_ctx(); - - // start a trx - String trxName = localTrxName; - if (trxName == null) { - trxName = Trx.createTrxName("ws_modelSetDocAction"); - manageTrx = true; - } - - Trx trx = Trx.get(trxName, true); - - Map requestCtx = getRequestCtx(); - - String tableName = modelSetDocAction.getTableName(); - - String recordIDVar = modelSetDocAction.getRecordIDVariable(); - int recordID = modelSetDocAction.getRecordID(); - - if (recordIDVar != null && recordIDVar.startsWith("@")) { - Integer retVal = (Integer) parseVariable(recordIDVar, null, null, requestCtx); - if (retVal == null) { - return rollbackAndSetError(trx, resp, ret, true, "Cannot resolve variable: " + recordIDVar); + if (!connected) + getCompiereService().connect(); + + StandardResponseDocument ret = StandardResponseDocument.Factory.newInstance(); + StandardResponse resp = ret.addNewStandardResponse(); + ModelSetDocAction modelSetDocAction = req.getModelSetDocActionRequest().getModelSetDocAction(); + String serviceType = modelSetDocAction.getServiceType(); + + ADLoginRequest reqlogin = req.getModelSetDocActionRequest().getADLoginRequest(); + + CompiereService m_cs = getCompiereService(); + + String err = login(reqlogin, webServiceName, "setDocAction", serviceType); + if (err != null && err.length() > 0) { + resp.setError(err); + resp.setIsError(true); + return ret; } - recordID=retVal; - } - - String docAction = modelSetDocAction.getDocAction(); - resp.setRecordID(recordID); - - // get the PO for the tablename and record ID - MTable table = MTable.get(ctx, tableName); - if (table == null) - return rollbackAndSetError(trx, resp, ret, true, "No table " + tableName); - - PO po = table.getPO(recordID, trxName); - if (po == null) - return rollbackAndSetError(trx, resp, ret, true, "No Record " + recordID + " in " + tableName); - - // set explicitly the column DocAction to avoid automatic process of - // default option - po.set_ValueOfColumn("DocAction", docAction); - if (!po.save()) - return rollbackAndSetError(trx, resp, ret, true, - "Cannot save before set docAction: " + CLogger.retrieveErrorString("no log message")); - - MWebServiceType m_webservicetype = getWebServiceType(); - - // For passing action to validators - requestCtx.put("DocAction", docAction); - - // Fire Event - StandardResponseDocument retResp = invokeWSValidator(m_webservicetype, IWSValidator.TIMING_BEFORE_PARSE, po, null, trx, requestCtx, - resp, ret); - if (retResp != null) - return retResp; - - // call process it - try { - if (!((org.compiere.process.DocAction) po).processIt(docAction)) + + + try { + // Validate parameters + modelSetDocAction.setTableName(validateParameter("tableName", modelSetDocAction.getTableName())); + modelSetDocAction.setRecordID(validateParameter("recordID", modelSetDocAction.getRecordID())); + modelSetDocAction.setDocAction(validateParameter("docAction", modelSetDocAction.getDocAction())); + } catch (IdempiereServiceFault e) { + resp.setError(e.getMessage()); + resp.setIsError(true); + return ret; + } + + Properties ctx = m_cs.getCtx(); + + // start a trx + String trxName = localTrxName; + if (trxName == null) { + trxName = Trx.createTrxName("ws_modelSetDocAction"); + manageTrx = true; + } + + Trx trx = Trx.get(trxName, true); + + Map requestCtx = getRequestCtx(); + + String tableName = modelSetDocAction.getTableName(); + + String recordIDVar = modelSetDocAction.getRecordIDVariable(); + int recordID = modelSetDocAction.getRecordID(); + + if (recordIDVar != null && recordIDVar.startsWith("@")) { + Integer retVal = (Integer) parseVariable(recordIDVar, null, null, requestCtx); + if (retVal == null) { + return rollbackAndSetError(trx, resp, ret, true, "Cannot resolve variable: " + recordIDVar); + } + recordID=retVal; + } + + String docAction = modelSetDocAction.getDocAction(); + resp.setRecordID(recordID); + + // get the PO for the tablename and record ID + MTable table = MTable.get(ctx, tableName); + if (table == null) + return rollbackAndSetError(trx, resp, ret, true, "No table " + tableName); + + PO po = table.getPO(recordID, trxName); + if (po == null) + return rollbackAndSetError(trx, resp, ret, true, "No Record " + recordID + " in " + tableName); + + // set explicitly the column DocAction to avoid automatic process of + // default option + po.set_ValueOfColumn("DocAction", docAction); + if (!po.save()) return rollbackAndSetError(trx, resp, ret, true, - "Couldn't set docAction: " + ((org.compiere.process.DocAction) po).getProcessMsg()); - } catch (Exception e) { - return rollbackAndSetError(trx, resp, ret, true, e.toString()); + "Cannot save before set docAction: " + CLogger.retrieveErrorString("no log message")); + + MWebServiceType m_webservicetype = getWebServiceType(); + + // For passing action to validators + requestCtx.put("DocAction", docAction); + + // Fire Event + StandardResponseDocument retResp = invokeWSValidator(m_webservicetype, IWSValidator.TIMING_BEFORE_PARSE, po, null, trx, requestCtx, + resp, ret); + if (retResp != null) + return retResp; + + // call process it + try { + if (!((org.compiere.process.DocAction) po).processIt(docAction)) + return rollbackAndSetError(trx, resp, ret, true, + "Couldn't set docAction: " + ((org.compiere.process.DocAction) po).getProcessMsg()); + } catch (Exception e) { + return rollbackAndSetError(trx, resp, ret, true, e.toString()); + } + + // Fire Event + retResp = invokeWSValidator(m_webservicetype, IWSValidator.TIMING_BEFORE_SAVE, po, null, trx, requestCtx, resp, ret); + if (retResp != null) + return retResp; + + // close the trx + if (!po.save()) + return rollbackAndSetError(trx, resp, ret, true, + "Cannot save after set docAction: " + CLogger.retrieveErrorString("no log message")); + + // Fire Event + retResp = invokeWSValidator(m_webservicetype, IWSValidator.TIMING_AFTER_SAVE, po, null, trx, requestCtx, resp, ret); + if (retResp != null) + return retResp; + + if (manageTrx && !trx.commit()) + return rollbackAndSetError(trx, resp, ret, true, "Cannot commit after docAction"); + + if (manageTrx) + trx.close(); + + // resp.setError(""); + resp.setIsError(false); + + POInfo poinfo = POInfo.getPOInfo(ctx, table.getAD_Table_ID()); + setOuputFields(resp, m_webservicetype, po, poinfo); + + + + return ret; + } finally { + if (!connected) + getCompiereService().disconnect(); } - - // Fire Event - retResp = invokeWSValidator(m_webservicetype, IWSValidator.TIMING_BEFORE_SAVE, po, null, trx, requestCtx, resp, ret); - if (retResp != null) - return retResp; - - // close the trx - if (!po.save()) - return rollbackAndSetError(trx, resp, ret, true, - "Cannot save after set docAction: " + CLogger.retrieveErrorString("no log message")); - - // Fire Event - retResp = invokeWSValidator(m_webservicetype, IWSValidator.TIMING_AFTER_SAVE, po, null, trx, requestCtx, resp, ret); - if (retResp != null) - return retResp; - - if (manageTrx && !trx.commit()) - return rollbackAndSetError(trx, resp, ret, true, "Cannot commit after docAction"); - - if (manageTrx) - trx.close(); - - // resp.setError(""); - resp.setIsError(false); - - POInfo poinfo = POInfo.getPOInfo(ctx, table.getAD_Table_ID()); - setOuputFields(resp, m_webservicetype, po, poinfo); - - - - return ret; } private String validateParameter(String parameterName, String string) { @@ -348,306 +356,336 @@ public class ModelADServiceImpl extends AbstractService implements ModelADServic public RunProcessResponseDocument runProcess(ModelRunProcessRequestDocument req) { - RunProcessResponseDocument resbadlogin = RunProcessResponseDocument.Factory.newInstance(); - RunProcessResponse rbadlogin = resbadlogin.addNewRunProcessResponse(); - ModelRunProcess modelRunProcess = req.getModelRunProcessRequest().getModelRunProcess(); - String serviceType = modelRunProcess.getServiceType(); - - ADLoginRequest reqlogin = req.getModelRunProcessRequest().getADLoginRequest(); - - String err = login(reqlogin, webServiceName, "runProcess", serviceType); - if (err != null && err.length() > 0) { - rbadlogin.setError(err); - rbadlogin.setIsError(true); - return resbadlogin; + boolean connected = getCompiereService().isConnected(); + + try { + if (!connected) + getCompiereService().connect(); + + RunProcessResponseDocument resbadlogin = RunProcessResponseDocument.Factory.newInstance(); + RunProcessResponse rbadlogin = resbadlogin.addNewRunProcessResponse(); + ModelRunProcess modelRunProcess = req.getModelRunProcessRequest().getModelRunProcess(); + String serviceType = modelRunProcess.getServiceType(); + + ADLoginRequest reqlogin = req.getModelRunProcessRequest().getADLoginRequest(); + + String err = login(reqlogin, webServiceName, "runProcess", serviceType); + if (err != null && err.length() > 0) { + rbadlogin.setError(err); + rbadlogin.setIsError(true); + return resbadlogin; + } + + // Validate parameters + modelRunProcess.setADMenuID(validateParameter("AD_Menu_ID", modelRunProcess.getADMenuID())); + modelRunProcess.setADProcessID(validateParameter("AD_Process_ID", modelRunProcess.getADProcessID())); + modelRunProcess.setADRecordID(validateParameter("AD_Record_ID", modelRunProcess.getADRecordID())); + modelRunProcess.setDocAction(validateParameter("DocAction", modelRunProcess.getDocAction())); + + RunProcessDocument docprocess = RunProcessDocument.Factory.newInstance(); + RunProcess reqprocess = docprocess.addNewRunProcess(); + reqprocess.setParamValues(modelRunProcess.getParamValues()); + reqprocess.setADProcessID(modelRunProcess.getADProcessID()); + reqprocess.setADMenuID(modelRunProcess.getADMenuID()); + reqprocess.setADRecordID(modelRunProcess.getADRecordID()); + reqprocess.setDocAction(modelRunProcess.getDocAction()); + return Process.runProcess(getCompiereService(), docprocess); + } finally { + if (!connected) + getCompiereService().disconnect(); } - - // Validate parameters - modelRunProcess.setADMenuID(validateParameter("AD_Menu_ID", modelRunProcess.getADMenuID())); - modelRunProcess.setADProcessID(validateParameter("AD_Process_ID", modelRunProcess.getADProcessID())); - modelRunProcess.setADRecordID(validateParameter("AD_Record_ID", modelRunProcess.getADRecordID())); - modelRunProcess.setDocAction(validateParameter("DocAction", modelRunProcess.getDocAction())); - - RunProcessDocument docprocess = RunProcessDocument.Factory.newInstance(); - RunProcess reqprocess = docprocess.addNewRunProcess(); - reqprocess.setParamValues(modelRunProcess.getParamValues()); - reqprocess.setADProcessID(modelRunProcess.getADProcessID()); - reqprocess.setADMenuID(modelRunProcess.getADMenuID()); - reqprocess.setADRecordID(modelRunProcess.getADRecordID()); - reqprocess.setDocAction(modelRunProcess.getDocAction()); - return Process.runProcess(getCompiereService(), docprocess); } public WindowTabDataDocument getList(ModelGetListRequestDocument req) { - WindowTabDataDocument resdoc = WindowTabDataDocument.Factory.newInstance(); - WindowTabData res = resdoc.addNewWindowTabData(); - DataSet ds = res.addNewDataSet(); - ModelGetList modelGetList = req.getModelGetListRequest().getModelGetList(); - String serviceType = modelGetList.getServiceType(); - int cnt = 0; - - ADLoginRequest reqlogin = req.getModelGetListRequest().getADLoginRequest(); - - String err = login(reqlogin, webServiceName, "getList", serviceType); - if (err != null && err.length() > 0) { - res.setError(err); - res.setErrorInfo(err); - res.setSuccess(false); - return resdoc; - } - int roleid = reqlogin.getRoleID(); - - // Validate parameters - modelGetList.setADReferenceID(validateParameter("AD_Reference_ID", modelGetList.getADReferenceID())); - modelGetList.setFilter(validateParameter("Filter", modelGetList.getFilter())); - - int ref_id = modelGetList.getADReferenceID(); - String filter = modelGetList.getFilter(); - if (filter == null || filter.length() == 0) - filter = ""; - else - filter = " AND " + filter; - - CompiereService m_cs = getCompiereService(); - - Properties ctx = m_cs.getM_ctx(); - - X_AD_Reference ref = new X_AD_Reference(ctx, ref_id, null); - - String sql = null; - ArrayList listColumnNames = new ArrayList(); - PreparedStatement pstmt = null; - ResultSet rs = null; - MWebServiceType m_webservicetype= getWebServiceType(); - if (X_AD_Reference.VALIDATIONTYPE_ListValidation.equals(ref.getValidationType())) { - // Fill List Reference - String ad_language = Env.getAD_Language(ctx); - boolean isBaseLanguage = Env.isBaseLanguage(ad_language, "AD_Ref_List"); - sql = isBaseLanguage ? - "SELECT AD_Ref_List.AD_Ref_List_ID, AD_Ref_List.Value, AD_Ref_List.Name, AD_Ref_List.Description " + - "FROM AD_Ref_List " + - "WHERE AD_Ref_List.AD_Reference_ID=? AND AD_Ref_List.IsActive='Y' " + - filter + - " ORDER BY AD_Ref_List.Name" - : - "SELECT AD_Ref_List.AD_Ref_List_ID, AD_Ref_List.Value, AD_Ref_List_Trl.Name, AD_Ref_List_Trl.Description " + - "FROM AD_Ref_List, AD_Ref_List_Trl " + - "WHERE AD_Ref_List.AD_Reference_ID=? AND AD_Ref_List.IsActive='Y' AND AD_Ref_List_Trl.AD_Language=? AND AD_Ref_List.AD_Ref_List_ID=AD_Ref_List_Trl.AD_Ref_List_ID " + - filter + - " ORDER BY AD_Ref_List_Trl.Name"; - listColumnNames.add("AD_Ref_List_ID"); - listColumnNames.add("Value"); - listColumnNames.add("Name"); - listColumnNames.add("Description"); - try { - pstmt = DB.prepareStatement(sql, null); - pstmt.setInt(1, ref_id); - if (!isBaseLanguage) - pstmt.setString(2, ad_language); - rs = pstmt.executeQuery(); - } catch (SQLException e) - { - res.setError(e.getMessage()); - res.setErrorInfo(sql); - res.setSuccess(false); - DB.close(rs, pstmt); - rs = null; pstmt = null; - throw new IdempiereServiceFault(e.getClass().toString() + " " + e.getMessage() + " sql=" + sql, e.getCause(), new QName("getList")); - } - - } else if (X_AD_Reference.VALIDATIONTYPE_TableValidation.equals(ref.getValidationType())) { - // Fill values from a reference table - MRole role = new MRole(ctx, roleid, null); - String sqlrt = "SELECT * FROM AD_Ref_Table WHERE AD_Reference_ID=?"; - MRefTable rt = null; - PreparedStatement pstmtrt = null; - ResultSet rsrt = null; - try - { - pstmtrt = DB.prepareStatement (sqlrt, null); - pstmtrt.setInt (1, ref_id); - rsrt = pstmtrt.executeQuery (); - if (rsrt.next ()) - rt = new MRefTable(ctx, rsrt, null); - } - catch (Exception e) - { - // ignore this exception - } - finally - { - DB.close(rsrt, pstmtrt); - rsrt = null; pstmtrt = null; - } - if (rt == null) - throw new IdempiereServiceFault("Web service type " - + m_webservicetype.getValue() + ": reference table " - + ref_id + " not found", - new QName("getList")); - - MTable table = new MTable(ctx, rt.getAD_Table_ID(), null); - MColumn column = new MColumn(ctx, rt.getAD_Key(), null); - - // TODO: if any value or identifier column is translated, then get them from trl table (and client has multilanguage documents enabled) - sql = "SELECT " + column.getColumnName(); - listColumnNames.add(column.getColumnName()); - if (rt.isValueDisplayed()) { - sql += ",Value"; - listColumnNames.add("Value"); - } - - String sqlident = "SELECT ColumnName FROM AD_Column WHERE AD_Table_ID=? AND IsActive='Y' AND IsIdentifier='Y' ORDER BY SeqNo"; - PreparedStatement pstmtident = null; - ResultSet rsident = null; - try - { - pstmtident = DB.prepareStatement (sqlident, null); - pstmtident.setInt (1, rt.getAD_Table_ID()); - rsident = pstmtident.executeQuery (); - while (rsident.next ()) { - String colnameident = rsident.getString("ColumnName"); - if (rt.isValueDisplayed() && colnameident.equalsIgnoreCase("Value")) { - // Value already added - } else { - sql += "," + colnameident; - listColumnNames.add(colnameident); - } - } - } - catch (Exception e) - { - // ignore this exception - } - finally - { - DB.close(rsident, pstmtident); - rsident = null; pstmtident = null; - } - - sql += " FROM " + table.getTableName() + " WHERE IsActive='Y'"; - sql = role.addAccessSQL(sql, table.getTableName(), true, true); - sql += filter; - if (rt.getWhereClause() != null && rt.getWhereClause().length() > 0) - sql += " AND " + rt.getWhereClause(); - if (rt.getOrderByClause() != null && rt.getOrderByClause().length() > 0) - sql += " ORDER BY " + rt.getOrderByClause(); - - try { - pstmt = DB.prepareStatement(sql, null); - rs = pstmt.executeQuery(); - } catch (SQLException e) { - res.setError(e.getMessage()); - res.setErrorInfo(sql); - res.setSuccess(false); - DB.close(rs, pstmt); - rs = null; pstmt = null; - throw new IdempiereServiceFault(e.getClass().toString() + " " + e.getMessage() + " sql=" + sql, e.getCause(), new QName("getList")); - } - - } else { - // Don't fill - wrong type - } - - if (rs != null) { - try - { - while (rs.next()) { - cnt++; - // Add values to the dataset - DataRow dr = ds.addNewDataRow(); - for (String listColumnName : listColumnNames) { - if (m_webservicetype.isOutputColumnNameAllowed(listColumnName)) { - DataField dfid = dr.addNewField(); - dfid.setColumn(listColumnName); - dfid.setVal(rs.getString(listColumnName)); - } - } - } - res.setSuccess(true); - } - catch (SQLException e) - { - res.setError(e.getMessage()); - res.setErrorInfo(sql); - res.setSuccess(false); - throw new IdempiereServiceFault(e.getClass().toString() + " " + e.getMessage() + " sql=" + sql, e.getCause(), new QName("getList")); - } - finally - { - DB.close(rs, pstmt); - rs = null; pstmt = null; - } - } - - res.setRowCount(cnt); - res.setNumRows(cnt); - res.setTotalRows(cnt); - res.setStartRow(1); - - return resdoc; + boolean connected = getCompiereService().isConnected(); + + try { + if (!connected) + getCompiereService().connect(); + + WindowTabDataDocument resdoc = WindowTabDataDocument.Factory.newInstance(); + WindowTabData res = resdoc.addNewWindowTabData(); + DataSet ds = res.addNewDataSet(); + ModelGetList modelGetList = req.getModelGetListRequest().getModelGetList(); + String serviceType = modelGetList.getServiceType(); + int cnt = 0; + + ADLoginRequest reqlogin = req.getModelGetListRequest().getADLoginRequest(); + + String err = login(reqlogin, webServiceName, "getList", serviceType); + if (err != null && err.length() > 0) { + res.setError(err); + res.setErrorInfo(err); + res.setSuccess(false); + return resdoc; + } + int roleid = reqlogin.getRoleID(); + + // Validate parameters + modelGetList.setADReferenceID(validateParameter("AD_Reference_ID", modelGetList.getADReferenceID())); + modelGetList.setFilter(validateParameter("Filter", modelGetList.getFilter())); + + int ref_id = modelGetList.getADReferenceID(); + String filter = modelGetList.getFilter(); + if (filter == null || filter.length() == 0) + filter = ""; + else + filter = " AND " + filter; + + CompiereService m_cs = getCompiereService(); + + Properties ctx = m_cs.getCtx(); + + X_AD_Reference ref = new X_AD_Reference(ctx, ref_id, null); + + String sql = null; + ArrayList listColumnNames = new ArrayList(); + PreparedStatement pstmt = null; + ResultSet rs = null; + MWebServiceType m_webservicetype= getWebServiceType(); + if (X_AD_Reference.VALIDATIONTYPE_ListValidation.equals(ref.getValidationType())) { + // Fill List Reference + String ad_language = Env.getAD_Language(ctx); + boolean isBaseLanguage = Env.isBaseLanguage(ad_language, "AD_Ref_List"); + sql = isBaseLanguage ? + "SELECT AD_Ref_List.AD_Ref_List_ID, AD_Ref_List.Value, AD_Ref_List.Name, AD_Ref_List.Description " + + "FROM AD_Ref_List " + + "WHERE AD_Ref_List.AD_Reference_ID=? AND AD_Ref_List.IsActive='Y' " + + filter + + " ORDER BY AD_Ref_List.Name" + : + "SELECT AD_Ref_List.AD_Ref_List_ID, AD_Ref_List.Value, AD_Ref_List_Trl.Name, AD_Ref_List_Trl.Description " + + "FROM AD_Ref_List, AD_Ref_List_Trl " + + "WHERE AD_Ref_List.AD_Reference_ID=? AND AD_Ref_List.IsActive='Y' AND AD_Ref_List_Trl.AD_Language=? AND AD_Ref_List.AD_Ref_List_ID=AD_Ref_List_Trl.AD_Ref_List_ID " + + filter + + " ORDER BY AD_Ref_List_Trl.Name"; + listColumnNames.add("AD_Ref_List_ID"); + listColumnNames.add("Value"); + listColumnNames.add("Name"); + listColumnNames.add("Description"); + try { + pstmt = DB.prepareStatement(sql, null); + pstmt.setInt(1, ref_id); + if (!isBaseLanguage) + pstmt.setString(2, ad_language); + rs = pstmt.executeQuery(); + } catch (SQLException e) + { + res.setError(e.getMessage()); + res.setErrorInfo(sql); + res.setSuccess(false); + DB.close(rs, pstmt); + rs = null; pstmt = null; + throw new IdempiereServiceFault(e.getClass().toString() + " " + e.getMessage() + " sql=" + sql, e.getCause(), new QName("getList")); + } + + } else if (X_AD_Reference.VALIDATIONTYPE_TableValidation.equals(ref.getValidationType())) { + // Fill values from a reference table + MRole role = new MRole(ctx, roleid, null); + String sqlrt = "SELECT * FROM AD_Ref_Table WHERE AD_Reference_ID=?"; + MRefTable rt = null; + PreparedStatement pstmtrt = null; + ResultSet rsrt = null; + try + { + pstmtrt = DB.prepareStatement (sqlrt, null); + pstmtrt.setInt (1, ref_id); + rsrt = pstmtrt.executeQuery (); + if (rsrt.next ()) + rt = new MRefTable(ctx, rsrt, null); + } + catch (Exception e) + { + // ignore this exception + } + finally + { + DB.close(rsrt, pstmtrt); + rsrt = null; pstmtrt = null; + } + if (rt == null) + throw new IdempiereServiceFault("Web service type " + + m_webservicetype.getValue() + ": reference table " + + ref_id + " not found", + new QName("getList")); + + MTable table = new MTable(ctx, rt.getAD_Table_ID(), null); + MColumn column = new MColumn(ctx, rt.getAD_Key(), null); + + // TODO: if any value or identifier column is translated, then get them from trl table (and client has multilanguage documents enabled) + sql = "SELECT " + column.getColumnName(); + listColumnNames.add(column.getColumnName()); + if (rt.isValueDisplayed()) { + sql += ",Value"; + listColumnNames.add("Value"); + } + + String sqlident = "SELECT ColumnName FROM AD_Column WHERE AD_Table_ID=? AND IsActive='Y' AND IsIdentifier='Y' ORDER BY SeqNo"; + PreparedStatement pstmtident = null; + ResultSet rsident = null; + try + { + pstmtident = DB.prepareStatement (sqlident, null); + pstmtident.setInt (1, rt.getAD_Table_ID()); + rsident = pstmtident.executeQuery (); + while (rsident.next ()) { + String colnameident = rsident.getString("ColumnName"); + if (rt.isValueDisplayed() && colnameident.equalsIgnoreCase("Value")) { + // Value already added + } else { + sql += "," + colnameident; + listColumnNames.add(colnameident); + } + } + } + catch (Exception e) + { + // ignore this exception + } + finally + { + DB.close(rsident, pstmtident); + rsident = null; pstmtident = null; + } + + sql += " FROM " + table.getTableName() + " WHERE IsActive='Y'"; + sql = role.addAccessSQL(sql, table.getTableName(), true, true); + sql += filter; + if (rt.getWhereClause() != null && rt.getWhereClause().length() > 0) + sql += " AND " + rt.getWhereClause(); + if (rt.getOrderByClause() != null && rt.getOrderByClause().length() > 0) + sql += " ORDER BY " + rt.getOrderByClause(); + + try { + pstmt = DB.prepareStatement(sql, null); + rs = pstmt.executeQuery(); + } catch (SQLException e) { + res.setError(e.getMessage()); + res.setErrorInfo(sql); + res.setSuccess(false); + DB.close(rs, pstmt); + rs = null; pstmt = null; + throw new IdempiereServiceFault(e.getClass().toString() + " " + e.getMessage() + " sql=" + sql, e.getCause(), new QName("getList")); + } + + } else { + // Don't fill - wrong type + } + + if (rs != null) { + try + { + while (rs.next()) { + cnt++; + // Add values to the dataset + DataRow dr = ds.addNewDataRow(); + for (String listColumnName : listColumnNames) { + if (m_webservicetype.isOutputColumnNameAllowed(listColumnName)) { + DataField dfid = dr.addNewField(); + dfid.setColumn(listColumnName); + dfid.setVal(rs.getString(listColumnName)); + } + } + } + res.setSuccess(true); + } + catch (SQLException e) + { + res.setError(e.getMessage()); + res.setErrorInfo(sql); + res.setSuccess(false); + throw new IdempiereServiceFault(e.getClass().toString() + " " + e.getMessage() + " sql=" + sql, e.getCause(), new QName("getList")); + } + finally + { + DB.close(rs, pstmt); + rs = null; pstmt = null; + } + } + + res.setRowCount(cnt); + res.setNumRows(cnt); + res.setTotalRows(cnt); + res.setStartRow(1); + + return resdoc; + } finally { + if (!connected) + getCompiereService().disconnect(); + } } // getList public StandardResponseDocument deleteData(ModelCRUDRequestDocument req) { - StandardResponseDocument ret = StandardResponseDocument.Factory.newInstance(); - StandardResponse resp = ret.addNewStandardResponse(); - ModelCRUD modelCRUD = req.getModelCRUDRequest().getModelCRUD(); - String serviceType = modelCRUD.getServiceType(); - - ADLoginRequest reqlogin = req.getModelCRUDRequest().getADLoginRequest(); - String err = login(reqlogin, webServiceName, "deleteData", serviceType); - if (err != null && err.length() > 0) { - resp.setError(err); - resp.setIsError(true); + boolean connected = getCompiereService().isConnected(); + + try { + if (!connected) + getCompiereService().connect(); + + StandardResponseDocument ret = StandardResponseDocument.Factory.newInstance(); + StandardResponse resp = ret.addNewStandardResponse(); + ModelCRUD modelCRUD = req.getModelCRUDRequest().getModelCRUD(); + String serviceType = modelCRUD.getServiceType(); + + ADLoginRequest reqlogin = req.getModelCRUDRequest().getADLoginRequest(); + String err = login(reqlogin, webServiceName, "deleteData", serviceType); + if (err != null && err.length() > 0) { + resp.setError(err); + resp.setIsError(true); + return ret; + } + + // Validate parameters vs service type + try{ + validateCRUD(modelCRUD); + } catch (IdempiereServiceFault e) { + resp.setError(e.getMessage()); + resp.setIsError(true); + return ret; + } + + String tableName = modelCRUD.getTableName(); + int recordID = modelCRUD.getRecordID(); + resp.setRecordID(recordID); + + CompiereService m_cs = getCompiereService(); + Properties ctx = m_cs.getCtx(); + + // start a trx + String trxName = localTrxName; + Trx trx = null; + if (trxName == null) { + trxName = Trx.createTrxName("ws_modelCreateData"); + manageTrx = true; + } + + trx = Trx.get(trxName, true); + + // get the PO for the tablename and record ID + MTable table = MTable.get(ctx, tableName); + if (table == null) + return rollbackAndSetError(trx, resp, ret, true, "No table " + tableName); + PO po = table.getPO(recordID, trxName); + if (po == null) + return rollbackAndSetError(trx, resp, ret, true, "No Record " + recordID + " in " + tableName); + + if (!po.delete(false)) + return rollbackAndSetError(trx, resp, ret, true, + "Cannot delete record " + recordID + " in " + tableName + ": " + CLogger.retrieveErrorString("no log message")); + + // close the trx + if (manageTrx && !trx.commit()) + return rollbackAndSetError(trx, resp, ret, true, "Cannot commit transaction after delete record " + recordID + " in " + + tableName); + + if (manageTrx) + trx.close(); + return ret; + } finally { + if (!connected) + getCompiereService().disconnect(); } - - // Validate parameters vs service type - try{ - validateCRUD(modelCRUD); - } catch (IdempiereServiceFault e) { - resp.setError(e.getMessage()); - resp.setIsError(true); - return ret; - } - - String tableName = modelCRUD.getTableName(); - int recordID = modelCRUD.getRecordID(); - resp.setRecordID(recordID); - - CompiereService m_cs = getCompiereService(); - Properties ctx = m_cs.getM_ctx(); - - // start a trx - String trxName = localTrxName; - Trx trx = null; - if (trxName == null) { - trxName = Trx.createTrxName("ws_modelCreateData"); - manageTrx = true; - } - - trx = Trx.get(trxName, true); - - // get the PO for the tablename and record ID - MTable table = MTable.get(ctx, tableName); - if (table == null) - return rollbackAndSetError(trx, resp, ret, true, "No table " + tableName); - PO po = table.getPO(recordID, trxName); - if (po == null) - return rollbackAndSetError(trx, resp, ret, true, "No Record " + recordID + " in " + tableName); - - if (!po.delete(false)) - return rollbackAndSetError(trx, resp, ret, true, - "Cannot delete record " + recordID + " in " + tableName + ": " + CLogger.retrieveErrorString("no log message")); - - // close the trx - if (manageTrx && !trx.commit()) - return rollbackAndSetError(trx, resp, ret, true, "Cannot commit transaction after delete record " + recordID + " in " - + tableName); - - if (manageTrx) - trx.close(); - - return ret; } private void validateCRUD(ModelCRUD modelCRUD) { @@ -659,295 +697,316 @@ public class ModelADServiceImpl extends AbstractService implements ModelADServic public StandardResponseDocument createData(ModelCRUDRequestDocument req){ - StandardResponseDocument ret = StandardResponseDocument.Factory.newInstance(); - StandardResponse resp = ret.addNewStandardResponse(); - ModelCRUD modelCRUD = req.getModelCRUDRequest().getModelCRUD(); - String serviceType = modelCRUD.getServiceType(); - - ADLoginRequest reqlogin = req.getModelCRUDRequest().getADLoginRequest(); - String err = login(reqlogin, webServiceName, "createData", serviceType); - if (err != null && err.length() > 0) { - resp.setError(err); - resp.setIsError(true); - return ret; - } - - // Validate parameters vs service type - try{ - validateCRUD(modelCRUD); - } catch (IdempiereServiceFault e) { - resp.setError(e.getMessage()); - resp.setIsError(true); + boolean connected = getCompiereService().isConnected(); + + try { + if (!connected) + getCompiereService().connect(); + + StandardResponseDocument ret = StandardResponseDocument.Factory.newInstance(); + StandardResponse resp = ret.addNewStandardResponse(); + ModelCRUD modelCRUD = req.getModelCRUDRequest().getModelCRUD(); + String serviceType = modelCRUD.getServiceType(); + + ADLoginRequest reqlogin = req.getModelCRUDRequest().getADLoginRequest(); + String err = login(reqlogin, webServiceName, "createData", serviceType); + if (err != null && err.length() > 0) { + resp.setError(err); + resp.setIsError(true); + return ret; + } + + // Validate parameters vs service type + try{ + validateCRUD(modelCRUD); + } catch (IdempiereServiceFault e) { + resp.setError(e.getMessage()); + resp.setIsError(true); + return ret; + } + + String tableName = modelCRUD.getTableName(); + + CompiereService m_cs= getCompiereService(); + Properties ctx = m_cs.getCtx(); + + // start a trx + String trxName = localTrxName; + Trx trx = null; + if(trxName==null){ + trxName = Trx.createTrxName("ws_modelCreateData"); + manageTrx = true; + } + + trx = Trx.get(trxName, true); + + + // get the PO for the tablename and record ID + MTable table = MTable.get(ctx, tableName); + if (table == null) + return rollbackAndSetError(trx, resp, ret, true, "No table " + tableName); + + PO po = table.getPO(0, trxName); + if (po == null) + return rollbackAndSetError(trx, resp, ret, true, "Cannot create PO for " + tableName); + POInfo poinfo = POInfo.getPOInfo(ctx, table.getAD_Table_ID()); + + DataRow dr = modelCRUD.getDataRow(); + MWebServiceType m_webservicetype= getWebServiceType(); + + Map requestCtx = getRequestCtx(); + + DataField[] fields = dr.getFieldArray(); + StandardResponseDocument retResp =invokeWSValidator(m_webservicetype, IWSValidator.TIMING_BEFORE_PARSE, po, fields,trx,requestCtx, resp, ret); + if (retResp != null) + return retResp; + + retResp= scanFields(fields, m_webservicetype, po, poinfo, trx,resp,ret); + if(retResp!=null) + return retResp; + + retResp =invokeWSValidator(m_webservicetype, IWSValidator.TIMING_AFTER_PARSE, po, fields,trx,requestCtx, resp, ret); + if (retResp != null) + return retResp; + + + retResp =invokeWSValidator(m_webservicetype, IWSValidator.TIMING_BEFORE_SAVE, po, fields,trx,requestCtx, resp, ret); + if (retResp != null) + return retResp; + + if (!po.save()) + return rollbackAndSetError(trx, resp, ret, true, "Cannot save record in " + tableName + ": " + CLogger.retrieveErrorString("no log message")); + + retResp =invokeWSValidator(m_webservicetype, IWSValidator.TIMING_AFTER_SAVE, po, fields,trx,requestCtx, resp, ret); + if (retResp != null) + return retResp; + + int recordID = po.get_ID(); + resp.setRecordID (recordID); + + //Update ctx variable for consecutive calls + if(requestCtx!=null){ + requestCtx.put(po.get_TableName(), po); + } + + // close the trx + if (manageTrx && !trx.commit()) + return rollbackAndSetError(trx, resp, ret, true, "Cannot commit transaction after create record " + recordID + " in " + tableName); + + if (manageTrx) + trx.close(); + + setOuputFields(resp, m_webservicetype,po,poinfo); + return ret; + } finally { + if (!connected) + getCompiereService().disconnect(); + } - - String tableName = modelCRUD.getTableName(); - - CompiereService m_cs= getCompiereService(); - Properties ctx = m_cs.getM_ctx(); - - // start a trx - String trxName = localTrxName; - Trx trx = null; - if(trxName==null){ - trxName = Trx.createTrxName("ws_modelCreateData"); - manageTrx = true; - } - - trx = Trx.get(trxName, true); - - - // get the PO for the tablename and record ID - MTable table = MTable.get(ctx, tableName); - if (table == null) - return rollbackAndSetError(trx, resp, ret, true, "No table " + tableName); - - PO po = table.getPO(0, trxName); - if (po == null) - return rollbackAndSetError(trx, resp, ret, true, "Cannot create PO for " + tableName); - POInfo poinfo = POInfo.getPOInfo(ctx, table.getAD_Table_ID()); - - DataRow dr = modelCRUD.getDataRow(); - MWebServiceType m_webservicetype= getWebServiceType(); - - Map requestCtx = getRequestCtx(); - - DataField[] fields = dr.getFieldArray(); - StandardResponseDocument retResp =invokeWSValidator(m_webservicetype, IWSValidator.TIMING_BEFORE_PARSE, po, fields,trx,requestCtx, resp, ret); - if (retResp != null) - return retResp; - - retResp= scanFields(fields, m_webservicetype, po, poinfo, trx,resp,ret); - if(retResp!=null) - return retResp; - - retResp =invokeWSValidator(m_webservicetype, IWSValidator.TIMING_AFTER_PARSE, po, fields,trx,requestCtx, resp, ret); - if (retResp != null) - return retResp; - - - retResp =invokeWSValidator(m_webservicetype, IWSValidator.TIMING_BEFORE_SAVE, po, fields,trx,requestCtx, resp, ret); - if (retResp != null) - return retResp; - - if (!po.save()) - return rollbackAndSetError(trx, resp, ret, true, "Cannot save record in " + tableName + ": " + CLogger.retrieveErrorString("no log message")); - - retResp =invokeWSValidator(m_webservicetype, IWSValidator.TIMING_AFTER_SAVE, po, fields,trx,requestCtx, resp, ret); - if (retResp != null) - return retResp; - - int recordID = po.get_ID(); - resp.setRecordID (recordID); - - //Update ctx variable for consecutive calls - if(requestCtx!=null){ - requestCtx.put(po.get_TableName(), po); - } - - // close the trx - if (manageTrx && !trx.commit()) - return rollbackAndSetError(trx, resp, ret, true, "Cannot commit transaction after create record " + recordID + " in " + tableName); - - if (manageTrx) - trx.close(); - - setOuputFields(resp, m_webservicetype,po,poinfo); - - return ret; } // createData public StandardResponseDocument createUpdateData(ModelCRUDRequestDocument req) { - StandardResponseDocument ret = StandardResponseDocument.Factory.newInstance(); - StandardResponse resp = ret.addNewStandardResponse(); - ModelCRUD modelCRUD = req.getModelCRUDRequest().getModelCRUD(); - String serviceType = modelCRUD.getServiceType(); - - ADLoginRequest reqlogin = req.getModelCRUDRequest().getADLoginRequest(); - String err = login(reqlogin, webServiceName, "createData", serviceType); - if (err != null && err.length() > 0) { - resp.setError(err); - resp.setIsError(true); - return ret; - } - - // Validate parameters vs service type - try{ - validateCRUD(modelCRUD); - } catch (IdempiereServiceFault e) { - resp.setError(e.getMessage()); - resp.setIsError(true); - return ret; - } - - String tableName = modelCRUD.getTableName(); - - CompiereService m_cs = getCompiereService(); - Properties ctx = m_cs.getM_ctx(); - - // start a trx - String trxName = localTrxName; - Trx trx = null; - if (trxName == null) { - trxName = Trx.createTrxName("ws_modelCreateData"); - manageTrx = true; - } - trx = Trx.get(trxName, true); - - // get the PO for the tablename and record ID - MTable table = MTable.get(ctx, tableName); - if (table == null) - return rollbackAndSetError(trx, resp, ret, true, "No table " + tableName); - - DataRow dr = modelCRUD.getDataRow(); - DataField fields[] = dr.getFieldArray(); - - PO holderPo = table.getPO(0, trxName); - POInfo poinfo = POInfo.getPOInfo(ctx, table.getAD_Table_ID()); - - MWebServiceType m_webservicetype = getWebServiceType(); - Map requestCtx = getRequestCtx(); - - StandardResponseDocument retResp = invokeWSValidator(m_webservicetype, IWSValidator.TIMING_BEFORE_PARSE, holderPo, fields, trx, - requestCtx, resp, ret); - if (retResp != null) - return retResp; - - retResp = scanFields(fields, m_webservicetype, holderPo, poinfo, trx, resp, ret); - if (retResp != null) - return retResp; - - retResp = invokeWSValidator(m_webservicetype, IWSValidator.TIMING_AFTER_PARSE, holderPo, fields, trx, requestCtx, resp, ret); - if (retResp != null) - return retResp; - - boolean isCreate = false; - boolean isUpdate = false; - - String action = modelCRUD.getAction().toString(); - if (action.equals("Create")) - isCreate = true; - if (action.equals("Update")) - isUpdate = true; - if (action.equals("CreateUpdate")) { - isCreate = true; - isUpdate = true; - } - - ArrayList identifierList = m_webservicetype.getKeyColumns(); - - // For update it is mandatory to pass key column - if (isUpdate && identifierList.size() == 0) { - return rollbackAndSetError(trx, resp, ret, true, "Web service type " + m_webservicetype.getValue() - + ": There is no key column found "); - } - - // Check for existing element - int record_id = 0; - ArrayList resovedValue = new ArrayList(); - if (identifierList.size() > 0) { - StringBuilder sqlBuilder = new StringBuilder("Select "); - sqlBuilder.append(table.getTableName()).append("_ID from ").append(table.getTableName()).append(" ot Where "); - ArrayList sqlParaList = new ArrayList(); - for (String colName : identifierList) { - X_WS_WebServiceFieldInput fieldInput = m_webservicetype.getFieldInput(colName); - if (fieldInput.getIdentifierLogic() == null) { - if (holderPo.get_Value(colName) == null && fieldInput.isNullIdentifier()) { - sqlBuilder.append(" ot.").append(colName).append(" Is Null AND "); - } else if (holderPo.get_Value(colName) == null) { - return rollbackAndSetError(trx, resp, ret, true, "Web service type " + m_webservicetype.getValue() - + ": Record Identifiier column " + colName + " must be set"); + boolean connected = getCompiereService().isConnected(); + + try { + if (!connected) + getCompiereService().connect(); + + StandardResponseDocument ret = StandardResponseDocument.Factory.newInstance(); + StandardResponse resp = ret.addNewStandardResponse(); + ModelCRUD modelCRUD = req.getModelCRUDRequest().getModelCRUD(); + String serviceType = modelCRUD.getServiceType(); + + ADLoginRequest reqlogin = req.getModelCRUDRequest().getADLoginRequest(); + String err = login(reqlogin, webServiceName, "createData", serviceType); + if (err != null && err.length() > 0) { + resp.setError(err); + resp.setIsError(true); + return ret; + } + + // Validate parameters vs service type + try{ + validateCRUD(modelCRUD); + } catch (IdempiereServiceFault e) { + resp.setError(e.getMessage()); + resp.setIsError(true); + return ret; + } + + String tableName = modelCRUD.getTableName(); + + CompiereService m_cs = getCompiereService(); + Properties ctx = m_cs.getCtx(); + + // start a trx + String trxName = localTrxName; + Trx trx = null; + if (trxName == null) { + trxName = Trx.createTrxName("ws_modelCreateData"); + manageTrx = true; + } + trx = Trx.get(trxName, true); + + // get the PO for the tablename and record ID + MTable table = MTable.get(ctx, tableName); + if (table == null) + return rollbackAndSetError(trx, resp, ret, true, "No table " + tableName); + + DataRow dr = modelCRUD.getDataRow(); + DataField fields[] = dr.getFieldArray(); + + PO holderPo = table.getPO(0, trxName); + POInfo poinfo = POInfo.getPOInfo(ctx, table.getAD_Table_ID()); + + MWebServiceType m_webservicetype = getWebServiceType(); + Map requestCtx = getRequestCtx(); + + StandardResponseDocument retResp = invokeWSValidator(m_webservicetype, IWSValidator.TIMING_BEFORE_PARSE, holderPo, fields, trx, + requestCtx, resp, ret); + if (retResp != null) + return retResp; + + retResp = scanFields(fields, m_webservicetype, holderPo, poinfo, trx, resp, ret); + if (retResp != null) + return retResp; + + retResp = invokeWSValidator(m_webservicetype, IWSValidator.TIMING_AFTER_PARSE, holderPo, fields, trx, requestCtx, resp, ret); + if (retResp != null) + return retResp; + + boolean isCreate = false; + boolean isUpdate = false; + + String action = modelCRUD.getAction().toString(); + if (action.equals("Create")) + isCreate = true; + if (action.equals("Update")) + isUpdate = true; + if (action.equals("CreateUpdate")) { + isCreate = true; + isUpdate = true; + } + + ArrayList identifierList = m_webservicetype.getKeyColumns(); + + // For update it is mandatory to pass key column + if (isUpdate && identifierList.size() == 0) { + return rollbackAndSetError(trx, resp, ret, true, "Web service type " + m_webservicetype.getValue() + + ": There is no key column found "); + } + + // Check for existing element + int record_id = 0; + ArrayList resovedValue = new ArrayList(); + if (identifierList.size() > 0) { + StringBuilder sqlBuilder = new StringBuilder("Select "); + sqlBuilder.append(table.getTableName()).append("_ID from ").append(table.getTableName()).append(" ot Where "); + ArrayList sqlParaList = new ArrayList(); + for (String colName : identifierList) { + X_WS_WebServiceFieldInput fieldInput = m_webservicetype.getFieldInput(colName); + if (fieldInput.getIdentifierLogic() == null) { + if (holderPo.get_Value(colName) == null && fieldInput.isNullIdentifier()) { + sqlBuilder.append(" ot.").append(colName).append(" Is Null AND "); + } else if (holderPo.get_Value(colName) == null) { + return rollbackAndSetError(trx, resp, ret, true, "Web service type " + m_webservicetype.getValue() + + ": Record Identifiier column " + colName + " must be set"); + } else { + sqlBuilder.append(" ot.").append(colName).append("=? AND "); + sqlParaList.add(holderPo.get_Value(colName)); + resovedValue.add(holderPo.get_Value(colName)); + } } else { - sqlBuilder.append(" ot.").append(colName).append("=? AND "); - sqlParaList.add(holderPo.get_Value(colName)); - resovedValue.add(holderPo.get_Value(colName)); + // SQL + String sql = parseSQL(fieldInput.getIdentifierLogic(), sqlParaList, holderPo, poinfo, requestCtx); + sqlBuilder.append(" ot.").append(colName).append(" = (").append(sql).append(") AND "); + resovedValue.add("DYN SQL"); } - } else { - // SQL - String sql = parseSQL(fieldInput.getIdentifierLogic(), sqlParaList, holderPo, poinfo, requestCtx); - sqlBuilder.append(" ot.").append(colName).append(" = (").append(sql).append(") AND "); - resovedValue.add("DYN SQL"); + } + sqlBuilder.append(" ot.AD_Client_ID= ?"); + sqlParaList.add(Env.getAD_Client_ID(Env.getCtx())); + + String sql = sqlBuilder.toString(); + log.info("Web service type " + m_webservicetype.getValue() + "SQL to check existing record " + sql); + try { + record_id = DB.getSQLValueEx(trxName, sql, sqlParaList); + } catch (Exception e) { + log.log(Level.SEVERE, "ExistingRecordCheck: Exception while executing SQL :" + sql); + return rollbackAndSetError(trx, resp, ret, true, "Web service type " + m_webservicetype.getValue() + + " Exception while executing sql :" + sql); } } - sqlBuilder.append(" ot.AD_Client_ID= ?"); - sqlParaList.add(Env.getAD_Client_ID(Env.getCtx())); - - String sql = sqlBuilder.toString(); - log.info("Web service type " + m_webservicetype.getValue() + "SQL to check existing record " + sql); - try { - record_id = DB.getSQLValueEx(trxName, sql, sqlParaList); - } catch (Exception e) { - log.log(Level.SEVERE, "ExistingRecordCheck: Exception while executing SQL :" + sql); - return rollbackAndSetError(trx, resp, ret, true, "Web service type " + m_webservicetype.getValue() - + " Exception while executing sql :" + sql); + if (record_id == -1) + record_id = 0; + + if (!isCreate && record_id == 0) { + resp.setError("No Record to update for " + table.getTableName() + " with (" + identifierList.toString() + ") = (" + + resovedValue.toString() + ")"); + resp.setIsError(true); + return ret; } - } - if (record_id == -1) - record_id = 0; - - if (!isCreate && record_id == 0) { - resp.setError("No Record to update for " + table.getTableName() + " with (" + identifierList.toString() + ") = (" - + resovedValue.toString() + ")"); - resp.setIsError(true); - return ret; - } - - if (record_id > 0 && !isUpdate) { - resp.setError("Record already presents with " + table.getTableName() + "_ID = " + record_id); - resp.setIsError(true); - return ret; - } - - PO po = table.getPO(record_id, trxName); - - if (po == null) - return rollbackAndSetError(trx, resp, ret, true, "Cannot create PO for " + tableName); - - if (po.get_ColumnIndex("Processed") >= 0 && po.get_ValueAsBoolean("Processed")) { - resp.setError("Record not updatable for " + table.getTableName() + "_ID = " + record_id); - resp.setIsError(true); - return ret; - } - - // Setting value back from holder to new persistent po - for (DataField field : fields) { - int indx = poinfo.getColumnIndex(field.getColumn()); - if (indx != -1) { - po.set_ValueNoCheck(field.getColumn(), holderPo.get_Value(field.getColumn())); + + if (record_id > 0 && !isUpdate) { + resp.setError("Record already presents with " + table.getTableName() + "_ID = " + record_id); + resp.setIsError(true); + return ret; } + + PO po = table.getPO(record_id, trxName); + + if (po == null) + return rollbackAndSetError(trx, resp, ret, true, "Cannot create PO for " + tableName); + + if (po.get_ColumnIndex("Processed") >= 0 && po.get_ValueAsBoolean("Processed")) { + resp.setError("Record not updatable for " + table.getTableName() + "_ID = " + record_id); + resp.setIsError(true); + return ret; + } + + // Setting value back from holder to new persistent po + for (DataField field : fields) { + int indx = poinfo.getColumnIndex(field.getColumn()); + if (indx != -1) { + po.set_ValueNoCheck(field.getColumn(), holderPo.get_Value(field.getColumn())); + } + } + + retResp = invokeWSValidator(m_webservicetype, IWSValidator.TIMING_BEFORE_SAVE, holderPo, fields, trx, requestCtx, resp, ret); + if (retResp != null) + return retResp; + + if (!po.save()) + return rollbackAndSetError(trx, resp, ret, true, + "Cannot save record in " + tableName + ": " + CLogger.retrieveErrorString("no log message")); + + retResp = invokeWSValidator(m_webservicetype, IWSValidator.TIMING_AFTER_SAVE, holderPo, fields, trx, requestCtx, resp, ret); + if (retResp != null) + return retResp; + + int recordID = po.get_ID(); + resp.setRecordID(recordID); + + // Update ctx variable for consecutive calls + if (requestCtx != null) { + requestCtx.put(po.get_TableName(), po); + } + + // close the trx + if (manageTrx && !trx.commit()) + return rollbackAndSetError(trx, resp, ret, true, "Cannot commit transaction after create record " + recordID + " in " + + tableName); + + if (manageTrx) + trx.close(); + + setOuputFields(resp, m_webservicetype, po, poinfo); + + return ret; + } finally { + if (!connected) + getCompiereService().disconnect(); } - - retResp = invokeWSValidator(m_webservicetype, IWSValidator.TIMING_BEFORE_SAVE, holderPo, fields, trx, requestCtx, resp, ret); - if (retResp != null) - return retResp; - - if (!po.save()) - return rollbackAndSetError(trx, resp, ret, true, - "Cannot save record in " + tableName + ": " + CLogger.retrieveErrorString("no log message")); - - retResp = invokeWSValidator(m_webservicetype, IWSValidator.TIMING_AFTER_SAVE, holderPo, fields, trx, requestCtx, resp, ret); - if (retResp != null) - return retResp; - - int recordID = po.get_ID(); - resp.setRecordID(recordID); - - // Update ctx variable for consecutive calls - if (requestCtx != null) { - requestCtx.put(po.get_TableName(), po); - } - - // close the trx - if (manageTrx && !trx.commit()) - return rollbackAndSetError(trx, resp, ret, true, "Cannot commit transaction after create record " + recordID + " in " - + tableName); - - if (manageTrx) - trx.close(); - - setOuputFields(resp, m_webservicetype, po, poinfo); - - return ret; } // createUpdateData private void setValueAccordingToClass(PO po, POInfo poinfo, DataField field, int idxcol) { @@ -964,25 +1023,11 @@ public class ModelADServiceImpl extends AbstractService implements ModelADServic throw new IdempiereServiceFault(field.getColumn() + " is not lookup column. Pass Value in val element ", new QName( "LookupResolutionFailed")); } - if (lookup.getSize() == 0) - lookup.refresh(); - Object[] list = lookup.getData(true, true, true, false,false).toArray(); // IDEMPIERE 90 - - for (Object pair : list) { - if (pair instanceof KeyNamePair) { - KeyNamePair p = (KeyNamePair) pair; - if (p.getName().equals(lookupValue)) { - value = p.getID(); - break; - } - } else { - ValueNamePair p = (ValueNamePair) pair; - if (p.getName().equals(lookupValue)) { - value = p.getValue(); - break; - } - } - } + + String sql = getDirectAccessSQL(lookup, lookupValue.toUpperCase()); + int id = DB.getSQLValue(localTrxName, sql); + if (id > 0) + value = id; if (value == null) { throw new IdempiereServiceFault(" Invalid Lookup value:" + lookupValue, new QName("LookupResolutionFailed")); @@ -996,7 +1041,7 @@ public class ModelADServiceImpl extends AbstractService implements ModelADServic String varName = strValue.substring(1); if (varName.charAt(0) == '#') { varName = varName.substring(1); - strValue = m_cs.getM_ctx().getProperty(varName); + strValue = m_cs.getCtx().getProperty(varName); } else { int indDot = varName.indexOf("."); if (indDot == -1) { @@ -1085,272 +1130,568 @@ public class ModelADServiceImpl extends AbstractService implements ModelADServic } public StandardResponseDocument updateData(ModelCRUDRequestDocument req){ - StandardResponseDocument ret = StandardResponseDocument.Factory.newInstance(); - StandardResponse resp = ret.addNewStandardResponse(); - ModelCRUD modelCRUD = req.getModelCRUDRequest().getModelCRUD(); - String serviceType = modelCRUD.getServiceType(); - - ADLoginRequest reqlogin = req.getModelCRUDRequest().getADLoginRequest(); - String err = login(reqlogin, webServiceName, "updateData", serviceType); - if (err != null && err.length() > 0) { - resp.setError(err); - resp.setIsError(true); - return ret; - } - - // Validate parameters vs service type - try{ - validateCRUD(modelCRUD); - } catch (IdempiereServiceFault e) { - resp.setError(e.getMessage()); - resp.setIsError(true); + boolean connected = getCompiereService().isConnected(); + + try { + if (!connected) + getCompiereService().connect(); + + StandardResponseDocument ret = StandardResponseDocument.Factory.newInstance(); + StandardResponse resp = ret.addNewStandardResponse(); + ModelCRUD modelCRUD = req.getModelCRUDRequest().getModelCRUD(); + String serviceType = modelCRUD.getServiceType(); + + ADLoginRequest reqlogin = req.getModelCRUDRequest().getADLoginRequest(); + String err = login(reqlogin, webServiceName, "updateData", serviceType); + if (err != null && err.length() > 0) { + resp.setError(err); + resp.setIsError(true); + return ret; + } + + // Validate parameters vs service type + try{ + validateCRUD(modelCRUD); + } catch (IdempiereServiceFault e) { + resp.setError(e.getMessage()); + resp.setIsError(true); + return ret; + } + + String tableName = modelCRUD.getTableName(); + int recordID = modelCRUD.getRecordID(); + resp.setRecordID (recordID); + + CompiereService m_cs = getCompiereService(); + MWebServiceType m_webservicetype= getWebServiceType(); + Properties ctx = m_cs.getCtx(); + + // start a trx + String trxName = localTrxName; + Trx trx = null; + if(trxName==null){ + trxName = Trx.createTrxName("ws_modelCreateData"); + manageTrx = true; + } + + trx = Trx.get(trxName, true); + + + + // get the PO for the tablename and record ID + MTable table = MTable.get(ctx, tableName); + if (table == null) + return rollbackAndSetError(trx, resp, ret, true, "No table " + tableName); + PO po = table.getPO(recordID, trxName); + if (po == null) + return rollbackAndSetError(trx, resp, ret, true, "No Record " + recordID + " in " + tableName); + POInfo poinfo = POInfo.getPOInfo(ctx, table.getAD_Table_ID()); + + DataRow dr = modelCRUD.getDataRow(); + + StandardResponseDocument retResp = scanFields(dr.getFieldArray(), m_webservicetype, po, poinfo, trx, resp, ret); + if (retResp != null) + return retResp; + + if(po.get_ColumnIndex("Processed")>=0 && po.get_ValueAsBoolean("Processed")){ + resp.setError("Record is processed and can not be updated"); + resp.setIsError(true); + return ret; + } + + if (!po.save()) + return rollbackAndSetError(trx, resp, ret, true, "Cannot save record in " + tableName + ": " + CLogger.retrieveErrorString("no log message")); + + // close the trx + if (manageTrx && !trx.commit()) + return rollbackAndSetError(trx, resp, ret, true, "Cannot commit transaction after create record " + recordID + " in " + + tableName); + + if (manageTrx) + trx.close(); + + setOuputFields(resp, m_webservicetype, po, poinfo); + return ret; + } finally { + if (!connected) + getCompiereService().disconnect(); } - - String tableName = modelCRUD.getTableName(); - int recordID = modelCRUD.getRecordID(); - resp.setRecordID (recordID); - - CompiereService m_cs = getCompiereService(); - MWebServiceType m_webservicetype= getWebServiceType(); - Properties ctx = m_cs.getM_ctx(); - - // start a trx - String trxName = localTrxName; - Trx trx = null; - if(trxName==null){ - trxName = Trx.createTrxName("ws_modelCreateData"); - manageTrx = true; - } - - trx = Trx.get(trxName, true); - - - - // get the PO for the tablename and record ID - MTable table = MTable.get(ctx, tableName); - if (table == null) - return rollbackAndSetError(trx, resp, ret, true, "No table " + tableName); - PO po = table.getPO(recordID, trxName); - if (po == null) - return rollbackAndSetError(trx, resp, ret, true, "No Record " + recordID + " in " + tableName); - POInfo poinfo = POInfo.getPOInfo(ctx, table.getAD_Table_ID()); - - DataRow dr = modelCRUD.getDataRow(); - - StandardResponseDocument retResp = scanFields(dr.getFieldArray(), m_webservicetype, po, poinfo, trx, resp, ret); - if (retResp != null) - return retResp; - - if(po.get_ColumnIndex("Processed")>=0 && po.get_ValueAsBoolean("Processed")){ - resp.setError("Record is processed and can not be updated"); - resp.setIsError(true); - return ret; - } - - if (!po.save()) - return rollbackAndSetError(trx, resp, ret, true, "Cannot save record in " + tableName + ": " + CLogger.retrieveErrorString("no log message")); - - // close the trx - if (manageTrx && !trx.commit()) - return rollbackAndSetError(trx, resp, ret, true, "Cannot commit transaction after create record " + recordID + " in " - + tableName); - - if (manageTrx) - trx.close(); - - setOuputFields(resp, m_webservicetype, po, poinfo); - - return ret; } // updateData public WindowTabDataDocument readData(ModelCRUDRequestDocument req) { - WindowTabDataDocument ret = WindowTabDataDocument.Factory.newInstance(); - WindowTabData resp = ret.addNewWindowTabData(); - ModelCRUD modelCRUD = req.getModelCRUDRequest().getModelCRUD(); - String serviceType = modelCRUD.getServiceType(); - int cnt = 0; - - ADLoginRequest reqlogin = req.getModelCRUDRequest().getADLoginRequest(); - String err = login(reqlogin, webServiceName, "readData", serviceType); - if (err != null && err.length() > 0) { - resp.setError(err); - return ret; - } - - // Validate parameters vs service type - try{ - validateCRUD(modelCRUD); - } catch (IdempiereServiceFault e) { - resp.setError(e.getMessage()); - return ret; - } - - CompiereService m_cs = getCompiereService(); - MWebServiceType m_webservicetype= getWebServiceType(); - - // start a trx - String trxName = localTrxName; - - - Properties ctx = m_cs.getM_ctx(); - String tableName = modelCRUD.getTableName(); - - String recordIDVar = modelCRUD.getRecordIDVariable(); - int recordID = modelCRUD.getRecordID(); - - if (recordIDVar != null && recordIDVar.startsWith("@")) { - Integer retVal = (Integer) parseVariable(recordIDVar, null, null, getRequestCtx()); - if (retVal == null) { - resp.setError("Cannot resolve variable: " + recordIDVar); + boolean connected = getCompiereService().isConnected(); + + try { + if (!connected) + getCompiereService().connect(); + + WindowTabDataDocument ret = WindowTabDataDocument.Factory.newInstance(); + WindowTabData resp = ret.addNewWindowTabData(); + ModelCRUD modelCRUD = req.getModelCRUDRequest().getModelCRUD(); + String serviceType = modelCRUD.getServiceType(); + int cnt = 0; + + ADLoginRequest reqlogin = req.getModelCRUDRequest().getADLoginRequest(); + String err = login(reqlogin, webServiceName, "readData", serviceType); + if (err != null && err.length() > 0) { + resp.setError(err); + return ret; + } + + // Validate parameters vs service type + try{ + validateCRUD(modelCRUD); + } catch (IdempiereServiceFault e) { + resp.setError(e.getMessage()); return ret; } - recordID=retVal; - } - - // get the PO for the tablename and record ID - MTable table = MTable.get(ctx, tableName); - if (table == null) - throw new IdempiereServiceFault("Web service type " - + m_webservicetype.getValue() + ": table " - + tableName + " not found", - new QName("readData")); - PO po = table.getPO(recordID, trxName); - if (po == null) { - resp.setSuccess(false); - resp.setRowCount(cnt); - resp.setNumRows(cnt); - resp.setTotalRows(cnt); - resp.setStartRow(0); - return ret; - } - cnt = 1; - - POInfo poinfo = POInfo.getPOInfo(ctx, table.getAD_Table_ID()); - - DataSet ds = resp.addNewDataSet(); - DataRow dr = ds.addNewDataRow(); - for (int i = 0; i < poinfo.getColumnCount(); i++) { - String columnName = poinfo.getColumnName(i); - if (m_webservicetype.isOutputColumnNameAllowed(columnName)) { - DataField dfid = dr.addNewField(); - dfid.setColumn(columnName); - if (po.get_Value(i) != null) - dfid.setVal(po.get_Value(i).toString()); - else - dfid.setVal(null); + + CompiereService m_cs = getCompiereService(); + MWebServiceType m_webservicetype= getWebServiceType(); + + // start a trx + String trxName = localTrxName; + + + Properties ctx = m_cs.getCtx(); + String tableName = modelCRUD.getTableName(); + + String recordIDVar = modelCRUD.getRecordIDVariable(); + int recordID = modelCRUD.getRecordID(); + + if (recordIDVar != null && recordIDVar.startsWith("@")) { + Integer retVal = (Integer) parseVariable(recordIDVar, null, null, getRequestCtx()); + if (retVal == null) { + resp.setError("Cannot resolve variable: " + recordIDVar); + return ret; + } + recordID=retVal; } - } - - resp.setSuccess(true); - resp.setRowCount(cnt); - resp.setNumRows(cnt); - resp.setTotalRows(cnt); - resp.setStartRow(1); - - return ret; + + // get the PO for the tablename and record ID + MTable table = MTable.get(ctx, tableName); + if (table == null) + throw new IdempiereServiceFault("Web service type " + + m_webservicetype.getValue() + ": table " + + tableName + " not found", + new QName("readData")); + PO po = table.getPO(recordID, trxName); + if (po == null) { + resp.setSuccess(false); + resp.setRowCount(cnt); + resp.setNumRows(cnt); + resp.setTotalRows(cnt); + resp.setStartRow(0); + return ret; + } + cnt = 1; + + POInfo poinfo = POInfo.getPOInfo(ctx, table.getAD_Table_ID()); + + DataSet ds = resp.addNewDataSet(); + DataRow dr = ds.addNewDataRow(); + for (int i = 0; i < poinfo.getColumnCount(); i++) { + String columnName = poinfo.getColumnName(i); + if (m_webservicetype.isOutputColumnNameAllowed(columnName)) { + DataField dfid = dr.addNewField(); + dfid.setColumn(columnName); + if (po.get_Value(i) != null) + dfid.setVal(po.get_Value(i).toString()); + else + dfid.setVal(null); + } + } + + resp.setSuccess(true); + resp.setRowCount(cnt); + resp.setNumRows(cnt); + resp.setTotalRows(cnt); + resp.setStartRow(1); + + return ret; + } finally { + if (!connected) + getCompiereService().disconnect(); + } } public WindowTabDataDocument queryData(ModelCRUDRequestDocument req) { - CompiereService m_cs = getCompiereService(); - WindowTabDataDocument ret = WindowTabDataDocument.Factory.newInstance(); - WindowTabData resp = ret.addNewWindowTabData(); - ModelCRUD modelCRUD = req.getModelCRUDRequest().getModelCRUD(); - String serviceType = modelCRUD.getServiceType(); - - ADLoginRequest reqlogin = req.getModelCRUDRequest().getADLoginRequest(); - String err = login(reqlogin, webServiceName, "queryData", serviceType); - if (err != null && err.length() > 0) { - resp.setError(err); - return ret; - } - - // Validate parameters vs service type - validateCRUD(modelCRUD); - - Properties ctx = m_cs.getM_ctx(); - String tableName = modelCRUD.getTableName(); - - MWebServiceType m_webservicetype = getWebServiceType(); - // get the PO for the tablename and record ID - MTable table = MTable.get(ctx, tableName); - if (table == null) - throw new IdempiereServiceFault("Web service type " - + m_webservicetype.getValue() + ": table " - + tableName + " not found", - new QName("queryData")); - - int roleid = reqlogin.getRoleID(); - MRole role = new MRole(ctx, roleid, null); - - String sqlquery = "SELECT * FROM " + tableName; - sqlquery = role.addAccessSQL(sqlquery, tableName, true, true); + boolean connected = getCompiereService().isConnected(); - for (DataField field : modelCRUD.getDataRow().getFieldArray()) { - if (m_webservicetype.isInputColumnNameAllowed(field.getColumn())) { - sqlquery += " AND " + field.getColumn() + "=?"; - } else { + try { + if (!connected) + getCompiereService().connect(); + + CompiereService m_cs = getCompiereService(); + WindowTabDataDocument ret = WindowTabDataDocument.Factory.newInstance(); + WindowTabData resp = ret.addNewWindowTabData(); + ModelCRUD modelCRUD = req.getModelCRUDRequest().getModelCRUD(); + String serviceType = modelCRUD.getServiceType(); + + ADLoginRequest reqlogin = req.getModelCRUDRequest().getADLoginRequest(); + String err = login(reqlogin, webServiceName, "queryData", serviceType); + if (err != null && err.length() > 0) { + resp.setError(err); + return ret; + } + + // Validate parameters vs service type + validateCRUD(modelCRUD); + + Properties ctx = m_cs.getCtx(); + String tableName = modelCRUD.getTableName(); + + MWebServiceType m_webservicetype = getWebServiceType(); + // get the PO for the tablename and record ID + MTable table = MTable.get(ctx, tableName); + if (table == null) throw new IdempiereServiceFault("Web service type " - + m_webservicetype.getValue() + ": input column " - + field.getColumn() + " not allowed", new QName("queryData")); - } + + m_webservicetype.getValue() + ": table " + + tableName + " not found", + new QName("queryData")); + + int roleid = reqlogin.getRoleID(); + MRole role = new MRole(ctx, roleid, null); + + String sqlquery = "SELECT * FROM " + tableName; + sqlquery = role.addAccessSQL(sqlquery, tableName, true, true); + + for (DataField field : modelCRUD.getDataRow().getFieldArray()) { + if (m_webservicetype.isInputColumnNameAllowed(field.getColumn())) { + sqlquery += " AND " + field.getColumn() + "=?"; + } else { + throw new IdempiereServiceFault("Web service type " + + m_webservicetype.getValue() + ": input column " + + field.getColumn() + " not allowed", new QName("queryData")); + } + } + + if (modelCRUD.getFilter() != null && modelCRUD.getFilter().length() > 0) + sqlquery += " AND " + modelCRUD.getFilter(); + + POInfo poinfo = POInfo.getPOInfo(ctx, table.getAD_Table_ID()); + int cnt = 0; + + PreparedStatement pstmtquery = null; + ResultSet rsquery = null; + try + { + pstmtquery = DB.prepareStatement (sqlquery, null); + int p = 1; + for (DataField field : modelCRUD.getDataRow().getFieldArray()) { + int idx = poinfo.getColumnIndex(field.getColumn()); + Class c = poinfo.getColumnClass(idx); + if (c == Integer.class) + pstmtquery.setInt(p++, Integer.valueOf(field.getVal())); + else if (c == Timestamp.class) + pstmtquery.setTimestamp(p++, Timestamp.valueOf(field.getVal())); + else if (c == Boolean.class || c == String.class) + pstmtquery.setString(p++, field.getVal()); + } + rsquery = pstmtquery.executeQuery (); + // Angelo Dabala' (genied) must create just one DataSet, moved outside of the while loop + DataSet ds = resp.addNewDataSet(); + while (rsquery.next ()) { + cnt++; + DataRow dr = ds.addNewDataRow(); + for (int i = 0; i < poinfo.getColumnCount(); i++) { + String columnName = poinfo.getColumnName(i); + if (m_webservicetype.isOutputColumnNameAllowed(columnName)) { + DataField dfid = dr.addNewField(); + dfid.setColumn(columnName); + dfid.setVal(rsquery.getString(columnName)); + } + } + } + } + catch (Exception e) + { + // ignore this exception + } + finally + { + DB.close(rsquery, pstmtquery); + rsquery = null; pstmtquery = null; + } + + resp.setSuccess(true); + resp.setRowCount(cnt); + resp.setNumRows(cnt); + resp.setTotalRows(cnt); + resp.setStartRow(1); + + return ret; + } finally { + if (!connected) + getCompiereService().disconnect(); } - - if (modelCRUD.getFilter() != null && modelCRUD.getFilter().length() > 0) - sqlquery += " AND " + modelCRUD.getFilter(); - - POInfo poinfo = POInfo.getPOInfo(ctx, table.getAD_Table_ID()); - int cnt = 0; + } - PreparedStatement pstmtquery = null; - ResultSet rsquery = null; + + /** + * Generate Access SQL for Search. + * The SQL returns the ID of the value entered + * Also sets m_tableName and m_keyColumnName + * @param text uppercase text for LIKE comparison + * @return sql or "" + * Example + * SELECT C_Payment_ID FROM C_Payment WHERE UPPER(DocumentNo) LIKE x OR ... + */ + private String getDirectAccessSQL (Lookup lookup, String text) + { + String m_columnName = lookup.getColumnName(); + + String m_tableName = null; + String m_keyColumnName = null; + StringBuffer sql = new StringBuffer(); + if (m_columnName.indexOf(".") > 0) { + m_tableName = m_columnName.substring(0, m_columnName.indexOf(".")); + m_keyColumnName = m_columnName.substring(m_columnName.indexOf(".")+1); + } else { + m_tableName = m_columnName.substring(0, m_columnName.length()-3); + m_keyColumnName = m_columnName; + } + + if (m_columnName.equals("M_Product_ID")) + { + sql.append("SELECT M_Product_ID FROM M_Product WHERE (UPPER(Value) LIKE ") + .append(DB.TO_STRING(text)) + .append(" OR UPPER(Name) LIKE ").append(DB.TO_STRING(text)) + .append(" OR UPC LIKE ").append(DB.TO_STRING(text)).append(")"); + } + else if (m_columnName.equals("C_BPartner_ID")) + { + sql.append("SELECT C_BPartner_ID FROM C_BPartner WHERE (UPPER(Value) LIKE ") + .append(DB.TO_STRING(text)) + .append(" OR UPPER(Name) LIKE ").append(DB.TO_STRING(text)).append(")"); + } + else if (m_columnName.equals("C_Order_ID")) + { + sql.append("SELECT C_Order_ID FROM C_Order WHERE UPPER(DocumentNo) LIKE ") + .append(DB.TO_STRING(text)); + } + else if (m_columnName.equals("C_Invoice_ID")) + { + sql.append("SELECT C_Invoice_ID FROM C_Invoice WHERE UPPER(DocumentNo) LIKE ") + .append(DB.TO_STRING(text)); + } + else if (m_columnName.equals("M_InOut_ID")) + { + sql.append("SELECT M_InOut_ID FROM M_InOut WHERE UPPER(DocumentNo) LIKE ") + .append(DB.TO_STRING(text)); + } + else if (m_columnName.equals("C_Payment_ID")) + { + sql.append("SELECT C_Payment_ID FROM C_Payment WHERE UPPER(DocumentNo) LIKE ") + .append(DB.TO_STRING(text)); + } + else if (m_columnName.equals("GL_JournalBatch_ID")) + { + sql.append("SELECT GL_JournalBatch_ID FROM GL_JournalBatch WHERE UPPER(DocumentNo) LIKE ") + .append(DB.TO_STRING(text)); + } + else if (m_columnName.equals("SalesRep_ID")) + { + sql.append("SELECT AD_User_ID FROM AD_User WHERE UPPER(Name) LIKE ") + .append(DB.TO_STRING(text)); + + m_tableName = "AD_User"; + m_keyColumnName = "AD_User_ID"; + } + + // Predefined + + if (sql.length() > 0) + { + String wc = getWhereClause(lookup); + + if (wc != null && wc.length() > 0) + sql.append(" AND ").append(wc); + + sql.append(" AND IsActive='Y'"); + // *** + + if (log.isLoggable(Level.FINEST)) + log.finest(m_columnName + " (predefined) " + sql.toString()); + + return MRole.getDefault().addAccessSQL(sql.toString(), + m_tableName, MRole.SQL_NOTQUALIFIED, MRole.SQL_RO); + } + + // Check if it is a Table Reference + + if (lookup != null && lookup instanceof MLookup) + { + int AD_Reference_ID = ((MLookup)lookup).getAD_Reference_Value_ID(); + + if (AD_Reference_ID != 0) + { + boolean isValueDisplayed = false; + String query = "SELECT kc.ColumnName, dc.ColumnName, t.TableName, rt.IsValueDisplayed " + + "FROM AD_Ref_Table rt" + + " INNER JOIN AD_Column kc ON (rt.AD_Key=kc.AD_Column_ID)" + + " INNER JOIN AD_Column dc ON (rt.AD_Display=dc.AD_Column_ID)" + + " INNER JOIN AD_Table t ON (rt.AD_Table_ID=t.AD_Table_ID) " + + "WHERE rt.AD_Reference_ID=?"; + + String displayColumnName = null; + PreparedStatement pstmt = null; + ResultSet rs = null; + + try + { + pstmt = DB.prepareStatement(query, null); + pstmt.setInt(1, AD_Reference_ID); + rs = pstmt.executeQuery(); + + if (rs.next()) + { + m_keyColumnName = rs.getString(1); + displayColumnName = rs.getString(2); + m_tableName = rs.getString(3); + String t = rs.getString(4); + isValueDisplayed = "Y".equalsIgnoreCase(t); + } + } + catch (Exception e) + { + log.log(Level.SEVERE, query, e); + } + finally + { + DB.close(rs, pstmt); + } + + + if (displayColumnName != null) + { + sql = new StringBuffer(); + sql.append("SELECT ").append(m_keyColumnName) + .append(" FROM ").append(m_tableName) + .append(" WHERE (UPPER(").append(displayColumnName) + .append(") LIKE ").append(DB.TO_STRING(text)); + if (isValueDisplayed) + { + sql.append(" OR UPPER(").append("Value") + .append(") LIKE ").append(DB.TO_STRING(text)); + } + sql.append(")"); + sql.append(" AND IsActive='Y'"); + + String wc = getWhereClause(lookup); + + if (wc != null && wc.length() > 0) + sql.append(" AND ").append(wc); + + // *** + + if (log.isLoggable(Level.FINEST)) + log.finest(m_columnName + " (Table) " + sql.toString()); + + return MRole.getDefault().addAccessSQL(sql.toString(), + m_tableName, MRole.SQL_NOTQUALIFIED, MRole.SQL_RO); + } + } // Table Reference + } // MLookup + + /** Check Well Known Columns of Table - assumes TableDir **/ + + String query = "SELECT t.TableName, c.ColumnName " + + "FROM AD_Column c " + + " INNER JOIN AD_Table t ON (c.AD_Table_ID=t.AD_Table_ID AND t.IsView='N') " + + "WHERE (c.ColumnName IN ('DocumentNo', 'Value', 'Name') OR c.IsIdentifier='Y')" + + " AND c.AD_Reference_ID IN (10,14)" + + " AND EXISTS (SELECT * FROM AD_Column cc WHERE cc.AD_Table_ID=t.AD_Table_ID" + + " AND cc.IsKey='Y' AND cc.ColumnName=?)"; + + sql = new StringBuffer(); + PreparedStatement pstmt = null; + ResultSet rs = null; try { - pstmtquery = DB.prepareStatement (sqlquery, null); - int p = 1; - for (DataField field : modelCRUD.getDataRow().getFieldArray()) { - int idx = poinfo.getColumnIndex(field.getColumn()); - Class c = poinfo.getColumnClass(idx); - if (c == Integer.class) - pstmtquery.setInt(p++, Integer.valueOf(field.getVal())); - else if (c == Timestamp.class) - pstmtquery.setTimestamp(p++, Timestamp.valueOf(field.getVal())); - else if (c == Boolean.class || c == String.class) - pstmtquery.setString(p++, field.getVal()); - } - rsquery = pstmtquery.executeQuery (); - // Angelo Dabala' (genied) must create just one DataSet, moved outside of the while loop - DataSet ds = resp.addNewDataSet(); - while (rsquery.next ()) { - cnt++; - DataRow dr = ds.addNewDataRow(); - for (int i = 0; i < poinfo.getColumnCount(); i++) { - String columnName = poinfo.getColumnName(i); - if (m_webservicetype.isOutputColumnNameAllowed(columnName)) { - DataField dfid = dr.addNewField(); - dfid.setColumn(columnName); - dfid.setVal(rsquery.getString(columnName)); - } - } + pstmt = DB.prepareStatement(query, null); + pstmt.setString(1, m_keyColumnName); + rs = pstmt.executeQuery(); + + while (rs.next()) + { + if (sql.length() != 0) + sql.append(" OR "); + + m_tableName = rs.getString(1); + sql.append("UPPER(").append(rs.getString(2)).append(") LIKE ").append(DB.TO_STRING(text)); } } - catch (Exception e) + catch (SQLException ex) { - // ignore this exception + log.log(Level.SEVERE, query, ex); } finally { - DB.close(rsquery, pstmtquery); - rsquery = null; pstmtquery = null; + DB.close(rs, pstmt); + rs = null; + pstmt = null; } + // + if (sql.length() == 0) + { + log.log(Level.SEVERE, m_columnName + " (TableDir) - no standard/identifier columns"); + return ""; + } + // + StringBuffer retValue = new StringBuffer ("SELECT ") + .append(m_columnName).append(" FROM ").append(m_tableName) + .append(" WHERE ").append(sql) + .append(" AND IsActive='Y'"); - resp.setSuccess(true); - resp.setRowCount(cnt); - resp.setNumRows(cnt); - resp.setTotalRows(cnt); - resp.setStartRow(1); + String wc = getWhereClause(lookup); - return ret; + if (wc != null && wc.length() > 0) + retValue.append(" AND ").append(wc); + // *** + if (log.isLoggable(Level.FINEST)) + log.finest(m_columnName + " (TableDir) " + sql.toString()); + return MRole.getDefault().addAccessSQL(retValue.toString(), + m_tableName, MRole.SQL_NOTQUALIFIED, MRole.SQL_RO); } + + private String getWhereClause(Lookup lookup) + { + String whereClause = ""; + if (lookup == null) + return ""; + + if (lookup.getZoomQuery() != null) + whereClause = lookup.getZoomQuery().getWhereClause(); + + String validation = lookup.getValidation(); + + if (validation == null) + validation = ""; + + if (whereClause.length() == 0) + whereClause = validation; + else if (validation.length() > 0) + whereClause += " AND " + validation; + + // log.finest("ZoomQuery=" + (lookup.getZoomQuery()==null ? "" : lookup.getZoomQuery().getWhereClause()) + // + ", Validation=" + lookup.getValidation()); + + if (whereClause.indexOf('@') != -1) + { + String validated = Env.parseContext(Env.getCtx(), lookup.getWindowNo(), whereClause, false); + + if (validated.length() == 0) + log.severe(lookup.getColumnName() + " - Cannot Parse=" + whereClause); + else + { + if (log.isLoggable(Level.FINE)) + log.fine(lookup.getColumnName() + " - Parsed: " + validated); + return validated; + } + } + return whereClause; + } // getWhereClause } \ No newline at end of file diff --git a/org.idempiere.webservices/WEB-INF/src/org/idempiere/adinterface/Process.java b/org.idempiere.webservices/WEB-INF/src/org/idempiere/adinterface/Process.java index 1d859f126c..c968c92573 100644 --- a/org.idempiere.webservices/WEB-INF/src/org/idempiere/adinterface/Process.java +++ b/org.idempiere.webservices/WEB-INF/src/org/idempiere/adinterface/Process.java @@ -66,10 +66,10 @@ public class Process { MProcess process = null; if (AD_Menu_ID>0 && AD_Process_ID==0 ) - process = MProcess.getFromMenu( cs.getM_ctx(), AD_Menu_ID); + process = MProcess.getFromMenu( cs.getCtx(), AD_Menu_ID); else if (AD_Menu_ID==0 && AD_Process_ID>0 ) - process = new MProcess( cs.getM_ctx(), AD_Process_ID, null); + process = new MProcess( cs.getCtx(), AD_Process_ID, null); if (process != null) { @@ -101,7 +101,7 @@ public class Process { if (para.getDefaultValue().indexOf( "@#Date@")>=0) { //Object t = Env.getContextAsDate( cs.getM_ctx(), "#Date" ); //String t = Env.getContext( cs.getM_ctx(), "#Date" ); - String t= cs.dateFormat.format( Env.getContextAsDate( cs.getM_ctx(), "#Date") ); + String t= cs.dateFormat.format( Env.getContextAsDate( cs.getCtx(), "#Date") ); p.setDefaultValue( t ); //cs.dateFormat.format( t )); } @@ -125,7 +125,7 @@ public class Process { if (para.getDefaultValue2().indexOf( "@#Date@")>=0) { //Object t = Env.getContextAsDate( cs.getM_ctx(), "#Date" ); //String t = Env.getContext( cs.getM_ctx(), "#Date" ); - String t= cs.dateFormat.format( Env.getContextAsDate( cs.getM_ctx(), "#Date") ); + String t= cs.dateFormat.format( Env.getContextAsDate( cs.getCtx(), "#Date") ); p.setDefaultValue2( t ); //cs.dateFormat.format( t ) ); } } @@ -165,7 +165,7 @@ public class Process { int m_record_id = rp.getADRecordID(); //WebSessionCtx wsc = WebSessionCtx.get (request); - MProcess process = MProcess.get (m_cs.getM_ctx() , AD_Process_ID); + MProcess process = MProcess.get (m_cs.getCtx() , AD_Process_ID); // need to check if Role can access if (process == null) { @@ -183,13 +183,13 @@ public class Process { // Requirements // - the process must be a workflow document if (process.getAD_Workflow_ID() > 0) { - MWorkflow wf = MWorkflow.get(m_cs.getM_ctx(), process.getAD_Workflow_ID()); + MWorkflow wf = MWorkflow.get(m_cs.getCtx(), process.getAD_Workflow_ID()); if (wf.getWorkflowType().equals(MWorkflow.WORKFLOWTYPE_DocumentProcess)) { // - get the table associated with the workflow document // - set DocAction in such table // get the PO for the tablename and record ID - MTable table = MTable.get(m_cs.getM_ctx(), wf.getAD_Table_ID()); + MTable table = MTable.get(m_cs.getCtx(), wf.getAD_Table_ID()); if (table != null) { PO po = table.getPO(m_record_id, null); if (po != null) { @@ -222,8 +222,8 @@ public class Process { } // ProcessInfo pi = new ProcessInfo (process.getName(), process.getAD_Process_ID()); - pi.setAD_User_ID(Env.getAD_User_ID(m_cs.getM_ctx())); - pi.setAD_Client_ID(Env.getAD_Client_ID(m_cs.getM_ctx())); + pi.setAD_User_ID(Env.getAD_User_ID(m_cs.getCtx())); + pi.setAD_Client_ID(Env.getAD_Client_ID(m_cs.getCtx())); pi.setAD_PInstance_ID(pInstance.getAD_PInstance_ID()); if (m_record_id >0) pi.setRecord_ID( m_record_id ); @@ -332,7 +332,7 @@ public class Process { if (pf.isTableBased()) { CharArrayWriter wr = new CharArrayWriter(); - ok = ReportEngineEx.createEXCEL_HTML_wr( re, m_cs.getM_ctx(), wr, false, re.getPrintFormat().getLanguage() ); + ok = ReportEngineEx.createEXCEL_HTML_wr( re, m_cs.getCtx(), wr, false, re.getPrintFormat().getLanguage() ); file_type ="xls"; String data = wr.toString(); if (data!=null) @@ -351,7 +351,7 @@ public class Process { } else { - JasperPrint jp = getJasperReportPrint( m_cs.getM_ctx(), pi); + JasperPrint jp = getJasperReportPrint( m_cs.getCtx(), pi); //file = File.createTempFile("WProcess", ".pdf"); ByteArrayOutputStream wr = new ByteArrayOutputStream(); net.sf.jasperreports.engine.JasperExportManager.exportReportToPdfStream(jp, wr); @@ -368,7 +368,7 @@ public class Process { //file.getAbsolutePath() // Marker that Process is OK - m_cs.getM_ctx().put("AD_PInstance_ID=" + pInstance.getAD_PInstance_ID(), "ok"); + m_cs.getCtx().put("AD_PInstance_ID=" + pInstance.getAD_PInstance_ID(), "ok"); } else { diff --git a/org.idempiere.webservices/WEB-INF/src/org/idempiere/webservices/AbstractService.java b/org.idempiere.webservices/WEB-INF/src/org/idempiere/webservices/AbstractService.java index 8a4130913a..a285bdc36a 100644 --- a/org.idempiere.webservices/WEB-INF/src/org/idempiere/webservices/AbstractService.java +++ b/org.idempiere.webservices/WEB-INF/src/org/idempiere/webservices/AbstractService.java @@ -25,7 +25,6 @@ import java.util.Properties; import javax.annotation.Resource; import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpSession; import javax.xml.namespace.QName; import javax.xml.ws.WebServiceContext; import javax.xml.ws.handler.MessageContext; @@ -64,6 +63,7 @@ import org.idempiere.adinterface.CompiereService; */ public class AbstractService { + private static final String COMPIERE_SERVICE = "CompiereService"; @Resource protected WebServiceContext ctx; @@ -79,16 +79,16 @@ public class AbstractService { CompiereService m_cs = getCompiereService(); - if (m_cs.isLoggedIn() && m_cs.getM_AD_Client_ID() == loginRequest.getClientID() && loginRequest.getClientID() == Env.getAD_Client_ID(Env.getCtx()) - && m_cs.getM_AD_Org_ID() == loginRequest.getOrgID() && m_cs.getM_AD_Role_ID() == loginRequest.getRoleID() - && m_cs.getM_AD_Warehouse_ID() == loginRequest.getWarehouseID() && loginRequest.getUser().equals(m_cs.getUser())) + if (m_cs.isLoggedIn() && m_cs.getAD_Client_ID() == loginRequest.getClientID() && loginRequest.getClientID() == Env.getAD_Client_ID(Env.getCtx()) + && m_cs.getAD_Org_ID() == loginRequest.getOrgID() && m_cs.getAD_Role_ID() == loginRequest.getRoleID() + && m_cs.getM_Warehouse_ID() == loginRequest.getWarehouseID() && loginRequest.getUser().equals(m_cs.getUserName())) return authenticate(webService, method, serviceType, m_cs); // already logged with same data - String ret =invokeLoginValidator(loginRequest, m_cs.getM_ctx(), null, IWSValidator.TIMING_BEFORE_LOGIN); + String ret =invokeLoginValidator(loginRequest, m_cs.getCtx(), null, IWSValidator.TIMING_BEFORE_LOGIN); if(ret!=null && ret.length()>0) return ret; - Login login = new Login(m_cs.getM_ctx()); + Login login = new Login(m_cs.getCtx()); KeyNamePair[] roles = login.getRoles(loginRequest.getUser(), loginRequest.getPass()); if (roles != null) { boolean okrole = false; @@ -112,7 +112,7 @@ public class AbstractService { if (!okclient) return "Error logging in - client not allowed for this role"; - m_cs.getM_ctx().setProperty("#AD_Client_ID", "" + loginRequest.getClientID()); + m_cs.getCtx().setProperty("#AD_Client_ID", "" + loginRequest.getClientID()); KeyNamePair[] orgs = login.getOrgs(new KeyNamePair(loginRequest.getRoleID(), "")); @@ -146,7 +146,7 @@ public class AbstractService { if (error != null && error.length() > 0) return error; - int AD_User_ID = Env.getAD_User_ID(m_cs.getM_ctx()); + int AD_User_ID = Env.getAD_User_ID(m_cs.getCtx()); if (!m_cs.login(AD_User_ID, loginRequest.getRoleID(), loginRequest.getClientID(), loginRequest.getOrgID(), loginRequest.getWarehouseID(), loginRequest.getLang())) @@ -158,7 +158,7 @@ public class AbstractService { return "Error logging in - no roles or user/pwd invalid for user " + loginRequest.getUser(); } - ret =invokeLoginValidator(loginRequest, m_cs.getM_ctx(), null, IWSValidator.TIMING_AFTER_LOGIN); + ret =invokeLoginValidator(loginRequest, m_cs.getCtx(), null, IWSValidator.TIMING_AFTER_LOGIN); if(ret!=null && ret.length()>0) return ret; @@ -177,7 +177,7 @@ public class AbstractService { HttpServletRequest req = (HttpServletRequest) ctx.getMessageContext().get(MessageContext.SERVLET_REQUEST); - MWebService m_webservice = MWebService.get(m_cs.getM_ctx(), webServiceValue); + MWebService m_webservice = MWebService.get(m_cs.getCtx(), webServiceValue); if (m_webservice == null || !m_webservice.isActive()) return "Web Service " + webServiceValue + " not registered"; @@ -192,13 +192,13 @@ public class AbstractService { ResultSet rs = null; try { pstmt = DB.prepareStatement(sql, null); - pstmt.setInt(1, m_cs.getM_AD_Client_ID()); + pstmt.setInt(1, m_cs.getAD_Client_ID()); pstmt.setInt(2, m_webservice.getWS_WebService_ID()); pstmt.setInt(3, m_webservicemethod.getWS_WebServiceMethod_ID()); pstmt.setString(4, serviceTypeValue); rs = pstmt.executeQuery(); if (rs.next()) - m_webservicetype = new MWebServiceType(m_cs.getM_ctx(), rs, null); + m_webservicetype = new MWebServiceType(m_cs.getCtx(), rs, null); } catch (Exception e) { throw new IdempiereServiceFault(e.getClass().toString() + " " + e.getMessage() + " sql=" + sql, e.getCause(), new QName( "authenticate")); @@ -213,7 +213,7 @@ public class AbstractService { req.setAttribute("MWebServiceType", m_webservicetype); - String ret=invokeLoginValidator(null, m_cs.getM_ctx(), m_webservicetype, IWSValidator.TIMING_ON_AUTHORIZATION); + String ret=invokeLoginValidator(null, m_cs.getCtx(), m_webservicetype, IWSValidator.TIMING_ON_AUTHORIZATION); if(ret!=null && ret.length()>0) return ret; @@ -240,16 +240,14 @@ public class AbstractService { /** * - * @return Compiere Service object for current session + * @return Compiere Service object for current request */ protected CompiereService getCompiereService() { HttpServletRequest req = (HttpServletRequest) ctx.getMessageContext().get(MessageContext.SERVLET_REQUEST); - HttpSession session = req.getSession(); - CompiereService m_cs = (CompiereService) session.getAttribute("CompiereServiceBean"); + CompiereService m_cs = (CompiereService) req.getAttribute(COMPIERE_SERVICE); if (m_cs == null) { m_cs = new CompiereService(); - m_cs.connect(); - session.setAttribute("CompiereServiceBean", m_cs); + req.setAttribute(COMPIERE_SERVICE, m_cs); } return m_cs; } @@ -394,10 +392,10 @@ public class AbstractService { if (indDot == -1) { if (varName.charAt(0) == '#') { varName = varName.substring(1); - val = getCompiereService().getM_ctx().getProperty(varName); + val = getCompiereService().getCtx().getProperty(varName); } else { // If there is no table name, then it should be - // premitive data type + // primitive data type if (po != null && poInfo.getColumnIndex(varName)!=-1) val = po.get_Value(varName); diff --git a/org.idempiere.webservices/WEB-INF/src/org/idempiere/webservices/Activator.java b/org.idempiere.webservices/WEB-INF/src/org/idempiere/webservices/Activator.java index 8e7700f296..a16f38f4c5 100644 --- a/org.idempiere.webservices/WEB-INF/src/org/idempiere/webservices/Activator.java +++ b/org.idempiere.webservices/WEB-INF/src/org/idempiere/webservices/Activator.java @@ -1,3 +1,16 @@ +/****************************************************************************** + * Copyright (C) 2012 Trek Global * + * Product: iDempiere ERP & CRM Smart Business Solution * + * This program is free software; you can redistribute it and/or modify it * + * under the terms version 2 of the GNU General Public License as published * + * by the Free Software Foundation. This program is distributed in the hope * + * that it will be useful, but WITHOUT ANY WARRANTY; without even the implied * + * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * + * See the GNU General Public License for more details. * + * You should have received a copy of the GNU General Public License along * + * with this program; if not, write to the Free Software Foundation, Inc., * + * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. * + *****************************************************************************/ package org.idempiere.webservices; import org.osgi.framework.BundleActivator; diff --git a/org.idempiere.webservices/WEB-INF/src/org/idempiere/webservices/IWSValidator.java b/org.idempiere.webservices/WEB-INF/src/org/idempiere/webservices/IWSValidator.java index 630fff3aaf..ff5f60ebd3 100644 --- a/org.idempiere.webservices/WEB-INF/src/org/idempiere/webservices/IWSValidator.java +++ b/org.idempiere.webservices/WEB-INF/src/org/idempiere/webservices/IWSValidator.java @@ -1,3 +1,16 @@ +/****************************************************************************** + * Copyright (C) 2012 Trek Global * + * Product: iDempiere ERP & CRM Smart Business Solution * + * This program is free software; you can redistribute it and/or modify it * + * under the terms version 2 of the GNU General Public License as published * + * by the Free Software Foundation. This program is distributed in the hope * + * that it will be useful, but WITHOUT ANY WARRANTY; without even the implied * + * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * + * See the GNU General Public License for more details. * + * You should have received a copy of the GNU General Public License along * + * with this program; if not, write to the Free Software Foundation, Inc., * + * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. * + *****************************************************************************/ package org.idempiere.webservices; import java.util.Map; @@ -10,6 +23,11 @@ import org.idempiere.webservices.fault.IdempiereServiceFault; import org.idempiere.adInterface.x10.ADLoginRequest; import org.idempiere.adInterface.x10.DataField; +/** + * + * @author deepak + * + */ public interface IWSValidator { public static final int TIMING_BEFORE_PARSE=1; public static final int TIMING_AFTER_PARSE=2; @@ -23,6 +41,25 @@ public interface IWSValidator { public static final int TIMING_BEFORE_PROCESS=8; public static final int TIMING_AFTER_PROCESS=9; + /** + * + * @param po + * @param m_webserviceType + * @param fields + * @param time + * @param trxName + * @param requestCtx + * @throws IdempiereServiceFault + */ public void validate(PO po,MWebServiceType m_webserviceType,DataField[] fields,int time,String trxName,Map requestCtx) throws IdempiereServiceFault; + + /** + * + * @param loginRequest + * @param ctx + * @param m_webserviceType + * @param time + * @throws IdempiereServiceFault + */ public void login(ADLoginRequest loginRequest,Properties ctx,MWebServiceType m_webserviceType,int time) throws IdempiereServiceFault; } diff --git a/org.idempiere.webservices/WEB-INF/src/org/idempiere/webservices/fault/IdempiereServiceFault.java b/org.idempiere.webservices/WEB-INF/src/org/idempiere/webservices/fault/IdempiereServiceFault.java index a178cc6163..cdd7176388 100644 --- a/org.idempiere.webservices/WEB-INF/src/org/idempiere/webservices/fault/IdempiereServiceFault.java +++ b/org.idempiere.webservices/WEB-INF/src/org/idempiere/webservices/fault/IdempiereServiceFault.java @@ -1,3 +1,16 @@ +/****************************************************************************** + * Copyright (C) 2012 Trek Global * + * Product: iDempiere ERP & CRM Smart Business Solution * + * This program is free software; you can redistribute it and/or modify it * + * under the terms version 2 of the GNU General Public License as published * + * by the Free Software Foundation. This program is distributed in the hope * + * that it will be useful, but WITHOUT ANY WARRANTY; without even the implied * + * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * + * See the GNU General Public License for more details. * + * You should have received a copy of the GNU General Public License along * + * with this program; if not, write to the Free Software Foundation, Inc., * + * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. * + *****************************************************************************/ package org.idempiere.webservices.fault; import javax.xml.namespace.QName;