Search in sources :

Example 51 with MTable

use of org.compiere.model.MTable in project adempiere by adempiere.

the class ModelADServiceImpl method readData.

// updateData
public WindowTabDataDocument readData(ModelCRUDRequestDocument req) throws XFireFault {
    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 = modelLogin(reqlogin, webServiceName, "readData", 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();
    int recordID = modelCRUD.getRecordID();
    // get the PO for the tablename and record ID
    MTable table = MTable.get(ctx, tableName);
    if (table == null)
        throw new XFireFault("Web service type " + m_webservicetype.getValue() + ": table " + tableName + " not found", new QName("readData"));
    PO po = table.getPO(recordID, null);
    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;
}
Also used : ADLoginRequest(pl.x3E.adInterface.ADLoginRequest) DataSet(pl.x3E.adInterface.DataSet) QName(javax.xml.namespace.QName) WindowTabData(pl.x3E.adInterface.WindowTabData) Properties(java.util.Properties) XFireFault(org.codehaus.xfire.fault.XFireFault) DataRow(pl.x3E.adInterface.DataRow) POInfo(org.compiere.model.POInfo) WindowTabDataDocument(pl.x3E.adInterface.WindowTabDataDocument) MTable(org.compiere.model.MTable) DataField(pl.x3E.adInterface.DataField) ModelCRUD(pl.x3E.adInterface.ModelCRUD) PO(org.compiere.model.PO)

Example 52 with MTable

use of org.compiere.model.MTable in project adempiere by adempiere.

the class ModelADServiceImpl method queryData.

public WindowTabDataDocument queryData(ModelCRUDRequestDocument req) throws XFireFault {
    WindowTabDataDocument ret = WindowTabDataDocument.Factory.newInstance();
    WindowTabData resp = ret.addNewWindowTabData();
    ModelCRUD modelCRUD = req.getModelCRUDRequest().getModelCRUD();
    String serviceType = modelCRUD.getServiceType();
    /** 2014-12-04 Carlos Parada Add Support for Paginate Records */
    /** Current Page*/
    int currentPage = req.getModelCRUDRequest().getModelCRUD().getPageNo();
    /** Records per Page*/
    int m_RecByPage = MSysConfig.getIntValue("WS_RECORDS_BY_PAGE", 1);
    /** Quantity Pages*/
    int qtyPages = 0;
    log.info("Current Page " + currentPage);
    /** 2014-12-04 Carlos Parada */
    ADLoginRequest reqlogin = req.getModelCRUDRequest().getADLoginRequest();
    String err = modelLogin(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();
    // get the PO for the tablename and record ID
    MTable table = MTable.get(ctx, tableName);
    if (table == null)
        throw new XFireFault("Web service type " + m_webservicetype.getValue() + ": table " + tableName + " not found", new QName("queryData"));
    int roleid = reqlogin.getRoleID();
    MRole role = new MRole(ctx, roleid, null);
    // 2014-12-04 Carlos Parada Replace ResultSet For Query  
    List<PO> records = null;
    String key = m_cs.getM_AD_User_ID() + "_" + serviceType;
    if (currentPage != 0)
        records = (List<PO>) s_cache.get(key);
    //"SELECT * FROM " + tableName;
    String sqlWhere = "";
    //sqlquery = role.addAccessSQL(sqlquery, tableName, true, true);
    for (DataField field : modelCRUD.getDataRow().getFieldList()) {
        if (m_webservicetype.isInputColumnNameAllowed(field.getColumn())) {
            sqlWhere += (sqlWhere.equals("") ? "" : " AND ") + field.getColumn() + "=?";
        } else {
            throw new XFireFault("Web service type " + m_webservicetype.getValue() + ": input column " + field.getColumn() + " not allowed", new QName("queryData"));
        }
    }
    if (modelCRUD.getFilter() != null && modelCRUD.getFilter().length() > 0)
        sqlWhere += " AND " + modelCRUD.getFilter();
    POInfo poinfo = POInfo.getPOInfo(ctx, table.getAD_Table_ID());
    int cnt = 0;
    try {
        if (records == null) {
            Query query = new Query(ctx, poinfo.getTableName(), sqlWhere, null);
            Object[] parameters = new Object[modelCRUD.getDataRow().getFieldList().size()];
            int p = 1;
            int i = 0;
            for (DataField field : modelCRUD.getDataRow().getFieldList()) {
                parameters[i] = field.getVal();
                i++;
            }
            if (parameters.length > 0)
                query.setParameters(parameters);
            records = query.setApplyAccessFilter(true).list();
        }
        // Angelo Dabala' (genied) must create just one DataSet, moved outside of the while loop
        DataSet ds = resp.addNewDataSet();
        // Set Quantity of Pages
        if (records.size() != 0)
            qtyPages = new BigDecimal(records.size()).divide(new BigDecimal(m_RecByPage)).setScale(0, BigDecimal.ROUND_UP).intValue();
        int begin = 0, end = 0;
        begin = currentPage * m_RecByPage;
        end = (((currentPage + 1) * m_RecByPage) > records.size() ? records.size() : ((currentPage + 1) * m_RecByPage));
        for (int j = begin; j < end; j++) {
            PO record = records.get(j);
            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.setLval(record.get_ValueAsString(columnName));
                }
            }
        }
    } catch (Exception e) {
        e.printStackTrace();
    // ignore this exception
    }
    resp.setSuccess(true);
    resp.setRowCount(cnt);
    resp.setNumRows(cnt);
    resp.setTotalRows(cnt);
    resp.setStartRow(1);
    resp.setQtyPages(qtyPages);
    return ret;
}
Also used : ADLoginRequest(pl.x3E.adInterface.ADLoginRequest) Query(org.compiere.model.Query) DataSet(pl.x3E.adInterface.DataSet) QName(javax.xml.namespace.QName) MRole(org.compiere.model.MRole) WindowTabData(pl.x3E.adInterface.WindowTabData) Properties(java.util.Properties) XFireFault(org.codehaus.xfire.fault.XFireFault) DataRow(pl.x3E.adInterface.DataRow) BigDecimal(java.math.BigDecimal) SQLException(java.sql.SQLException) POInfo(org.compiere.model.POInfo) WindowTabDataDocument(pl.x3E.adInterface.WindowTabDataDocument) MTable(org.compiere.model.MTable) DataField(pl.x3E.adInterface.DataField) ModelCRUD(pl.x3E.adInterface.ModelCRUD) List(java.util.List) ModelGetList(pl.x3E.adInterface.ModelGetList) ArrayList(java.util.ArrayList) PO(org.compiere.model.PO)

Example 53 with MTable

use of org.compiere.model.MTable in project adempiere by adempiere.

the class Generator method genTable.

/**
	 * Creates the nodes for the request tables in the XML-tree.
	 * 
	 * @param tableName
	 * @param whereClause
	 * @param completeXML
	 * @param ctx
	 * @param wi
	 */
private void genTable(String tableName, String whereClause, boolean completeXML, Properties ctx, WebInfo wi) {
    String l_szTrxName = null;
    StringBuffer tmpCode = new StringBuffer();
    String dataTableName = tableName;
    String l_whereClause = replaceSessionElements(wi, whereClause);
    tmpCode.append("<" + tableName + ">\n");
    // For the different AD_Ref_List tables
    if (whereClause.indexOf("AD_Reference") > -1) {
        dataTableName = "AD_Ref_List";
    }
    int[] l_nIDs = PO.getAllIDs(dataTableName, l_whereClause, l_szTrxName);
    int[] l_nTableIDs = MTable.getAllIDs("AD_Table", "TableName='" + dataTableName + "'", l_szTrxName);
    if (l_nTableIDs.length > 0) {
        MTable table = MTable.get(ctx, l_nTableIDs[0]);
        PO l_Object = null;
        // If the table should contain complete xml use the PO function get_xmlString
        if (completeXML) {
            for (int i = 0; i < l_nIDs.length; i++) {
                l_Object = table.getPO(l_nIDs[i], l_szTrxName);
                l_Object.get_xmlString(tmpCode);
            }
        // else only append ID and DisplayName
        } else {
            String sql = MLookupFactory.getLookup_TableDirEmbed(Language.getLanguage("en"), dataTableName + "_ID", dataTableName);
            sql = sql.concat(" AND " + l_whereClause);
            PreparedStatement pstm = DB.prepareStatement(sql, l_szTrxName);
            ResultSet rs = null;
            try {
                rs = pstm.executeQuery();
            } catch (Exception e) {
            }
            for (int i = 0; i < l_nIDs.length; i++) {
                l_Object = table.getPO(l_nIDs[i], l_szTrxName);
                tmpCode.append("<" + dataTableName + " AD_Table_ID=\"" + table.get_ID() + "\" Record_ID=\"" + l_Object.get_ID() + "\">\n");
                tmpCode.append("<" + dataTableName + "_ID>");
                tmpCode.append(l_Object.get_ID());
                tmpCode.append("</" + dataTableName + "_ID>\n");
                // Only AD_Ref_List works with value as reference
                if (dataTableName.equals("AD_Ref_List")) {
                    tmpCode.append("<Value>");
                    tmpCode.append("<![CDATA[" + l_Object.get_Value("Value") + "]]>\n");
                    tmpCode.append("</Value>\n");
                }
                // for these two table the BPartner is needed
                if (dataTableName.equals("AD_User") || dataTableName.equals("C_Project")) {
                    tmpCode.append("<C_BPartner_ID>");
                    tmpCode.append(l_Object.get_Value("C_BPartner_ID"));
                    tmpCode.append("</C_BPartner_ID>\n");
                }
                tmpCode.append("<DisplayName>\n");
                try {
                    if (rs.next()) {
                        tmpCode.append("<![CDATA[" + rs.getString(1) + "]]>\n");
                    }
                } catch (SQLException e) {
                    tmpCode.append("<![CDATA[" + e.getMessage() + "]]\n");
                }
                tmpCode.append("</DisplayName>\n");
                tmpCode.append("</" + dataTableName + ">\n");
            }
            try {
                rs.close();
                pstm.close();
            } catch (Exception e) {
            }
        }
    }
    tmpCode.append("</" + tableName + ">\n");
    xmlCode.append(tmpCode);
}
Also used : MTable(org.compiere.model.MTable) SQLException(java.sql.SQLException) ResultSet(java.sql.ResultSet) PreparedStatement(java.sql.PreparedStatement) SQLException(java.sql.SQLException) PO(org.compiere.model.PO)

Example 54 with MTable

use of org.compiere.model.MTable in project adempiere by adempiere.

the class FieldRecordInfo method dynInit.

//	jbInit
/**
	 * 	Dynamic Init
	 *	@param title title
	 *	@return true if table initialized
	 */
private boolean dynInit(String title) {
    //	Title
    if (AD_Table_ID != 0) {
        MTable table1 = MTable.get(Env.getCtx(), AD_Table_ID);
        setTitle(title + " - " + table1.getName());
    }
    //	Only Client Preference can view Change Log
    if (!MRole.PREFERENCETYPE_Client.equals(MRole.getDefault().getPreferenceType()))
        return false;
    if (Record_ID == 0)
        return false;
    //	Data
    String sql = "SELECT AD_Column_ID, Updated, UpdatedBy, OldValue, NewValue " + "FROM AD_ChangeLog " + "WHERE AD_Table_ID=? AND Record_ID=? AND AD_Column_ID=?" + "ORDER BY Updated DESC";
    PreparedStatement pstmt = null;
    ResultSet rs = null;
    try {
        pstmt = DB.prepareStatement(sql, null);
        pstmt.setInt(1, AD_Table_ID);
        pstmt.setInt(2, Record_ID);
        pstmt.setInt(3, AD_Column_ID);
        rs = pstmt.executeQuery();
        while (rs.next()) {
            addLine(rs.getInt(1), rs.getTimestamp(2), rs.getInt(3), rs.getString(4), rs.getString(5));
        }
    } catch (Exception e) {
        log.log(Level.SEVERE, sql, e);
    } finally {
        DB.close(rs, pstmt);
    }
    //
    Vector<String> columnNames = new Vector<String>();
    columnNames.add(Msg.translate(Env.getCtx(), "NewValue"));
    columnNames.add(Msg.translate(Env.getCtx(), "OldValue"));
    columnNames.add(Msg.translate(Env.getCtx(), "UpdatedBy"));
    columnNames.add(Msg.translate(Env.getCtx(), "Updated"));
    DefaultTableModel model = new DefaultTableModel(m_data, columnNames);
    table.setModel(model);
    table.autoSize(false);
    return true;
}
Also used : MTable(org.compiere.model.MTable) DefaultTableModel(javax.swing.table.DefaultTableModel) ResultSet(java.sql.ResultSet) PreparedStatement(java.sql.PreparedStatement) Vector(java.util.Vector)

Example 55 with MTable

use of org.compiere.model.MTable in project adempiere by adempiere.

the class QueryTest method testList.

public void testList() throws Exception {
    List<MTable> list = new Query(getCtx(), "AD_Table", "TableName IN (?,?)", getTrxName()).setParameters(new Object[] { "C_Invoice", "M_InOut" }).setOrderBy("TableName").list();
    assertEquals("Invalid list size", 2, list.size());
    assertEquals("Invalid object 1", list.get(0).getTableName(), "C_Invoice");
    assertEquals("Invalid object 2", list.get(1).getTableName(), "M_InOut");
}
Also used : MTable(org.compiere.model.MTable) Query(org.compiere.model.Query)

Aggregations

MTable (org.compiere.model.MTable)67 PO (org.compiere.model.PO)18 ResultSet (java.sql.ResultSet)16 SQLException (java.sql.SQLException)16 PreparedStatement (java.sql.PreparedStatement)15 MColumn (org.compiere.model.MColumn)15 Query (org.compiere.model.Query)13 ArrayList (java.util.ArrayList)10 Properties (java.util.Properties)9 AdempiereException (org.adempiere.exceptions.AdempiereException)7 ADLoginRequest (pl.x3E.adInterface.ADLoginRequest)7 XFireFault (org.codehaus.xfire.fault.XFireFault)5 POInfo (org.compiere.model.POInfo)5 Trx (org.compiere.util.Trx)5 DataField (pl.x3E.adInterface.DataField)5 DataRow (pl.x3E.adInterface.DataRow)5 ModelCRUD (pl.x3E.adInterface.ModelCRUD)5 List (java.util.List)4 ParserConfigurationException (javax.xml.parsers.ParserConfigurationException)4 POSaveFailedException (org.adempiere.pipo.exception.POSaveFailedException)4