From 86668972d0310c90ab4005894f11c71a28e4f5d9 Mon Sep 17 00:00:00 2001 From: Carlos Ruiz Date: Wed, 10 Jul 2013 22:34:24 -0500 Subject: [PATCH] 1002538 fitnesse improvements: - validate ID is valid in client - validate process parameter is valid - improve updaterecord logic --- .../TestCashPosOrder/content.txt | 1 - .../FitNesseRoot/RecentChanges/content.txt | 2 +- .../src/org/compiere/model/MColumn.java | 22 ++- .../fitnesse/fixture/AssertRecord.java | 42 +++-- .../fitnesse/fixture/CreateRecord.java | 38 +++- .../fitnesse/fixture/DeleteRecord.java | 11 +- .../fitnesse/fixture/ReadRecord.java | 24 ++- .../fitnesse/fixture/RunProcess.java | 27 ++- .../fitnesse/fixture/UpdateRecord.java | 162 +++++++++++++++--- .../org/idempiere/fitnesse/fixture/Util.java | 2 + 10 files changed, 269 insertions(+), 62 deletions(-) diff --git a/fitnesse/FitNesseRoot/IdempiereSuite/TestCashPosOrder/content.txt b/fitnesse/FitNesseRoot/IdempiereSuite/TestCashPosOrder/content.txt index a46f1c1336..9402f28b2a 100644 --- a/fitnesse/FitNesseRoot/IdempiereSuite/TestCashPosOrder/content.txt +++ b/fitnesse/FitNesseRoot/IdempiereSuite/TestCashPosOrder/content.txt @@ -131,6 +131,5 @@ Check existance of cash payment (now on payment table) |*Read* | | |documentno | | |description | | -|amount | | |processed | | diff --git a/fitnesse/FitNesseRoot/RecentChanges/content.txt b/fitnesse/FitNesseRoot/RecentChanges/content.txt index 60b5d36182..6a71f1d334 100644 --- a/fitnesse/FitNesseRoot/RecentChanges/content.txt +++ b/fitnesse/FitNesseRoot/RecentChanges/content.txt @@ -1,7 +1,7 @@ +|IdempiereSuite.TestCashPosOrder||22:32:07 miƩ, jul 10, 2013| |IdempiereSuite.TestInitialClientSetup||17:03:35 vie, jun 28, 2013| |IdempiereSuite.TestPostInternalInventory||15:31:05 vie, jun 28, 2013| |IdempiereSuite.TestCreateReference||14:44:52 vie, jun 28, 2013| -|IdempiereSuite.TestCashPosOrder||14:42:20 vie, jun 28, 2013| |ZkSuite.ZkGardenAdminLogin||13:02:13 vie, jun 28, 2013| |ZkSuite.ZkSystemAdminLogin||13:00:38 vie, jun 28, 2013| |||12:04:00 jue, dic 20, 2012| diff --git a/org.adempiere.base/src/org/compiere/model/MColumn.java b/org.adempiere.base/src/org/compiere/model/MColumn.java index 7fe700c099..8e41f62b01 100644 --- a/org.adempiere.base/src/org/compiere/model/MColumn.java +++ b/org.adempiere.base/src/org/compiere/model/MColumn.java @@ -681,18 +681,32 @@ public class MColumn extends X_AD_Column public String getReferenceTableName() { String foreignTable = null; - if (DisplayType.TableDir == getAD_Reference_ID() - || (DisplayType.Search == getAD_Reference_ID() && getAD_Reference_Value_ID() == 0)) { + int refid = getAD_Reference_ID(); + if (DisplayType.TableDir == refid || (DisplayType.Search == refid && getAD_Reference_Value_ID() == 0)) { foreignTable = getColumnName().substring(0, getColumnName().length()-3); - } else if (DisplayType.Table == getAD_Reference_ID() || DisplayType.Search == getAD_Reference_ID()) { + } else if (DisplayType.Table == refid || DisplayType.Search == refid) { X_AD_Reference ref = new X_AD_Reference(getCtx(), getAD_Reference_Value_ID(), get_TrxName()); if (X_AD_Reference.VALIDATIONTYPE_TableValidation.equals(ref.getValidationType())) { MRefTable rt = new MRefTable(getCtx(), getAD_Reference_Value_ID(), get_TrxName()); if (rt != null) foreignTable = rt.getAD_Table().getTableName(); } - } else if (DisplayType.List == getAD_Reference_ID()) { + } else if (DisplayType.List == refid) { foreignTable = "AD_Ref_List"; + } else if (DisplayType.Location == refid) { + foreignTable = "C_Location"; + } else if (DisplayType.Account == refid) { + foreignTable = "C_ValidCombination"; + } else if (DisplayType.Locator == refid) { + foreignTable = "M_Locator"; + } else if (DisplayType.PAttribute == refid) { + foreignTable = "M_AttributeSetInstance"; + } else if (DisplayType.Assignment == refid) { + foreignTable = "S_ResourceAssignment"; + } else if (DisplayType.Image == refid) { + foreignTable = "AD_Image"; + } else if (DisplayType.Color == refid) { + foreignTable = "AD_Color"; } return foreignTable; diff --git a/org.idempiere.fitnesse.fixture/src/org/idempiere/fitnesse/fixture/AssertRecord.java b/org.idempiere.fitnesse.fixture/src/org/idempiere/fitnesse/fixture/AssertRecord.java index 56c7ed33b2..99349e0c8f 100644 --- a/org.idempiere.fitnesse.fixture/src/org/idempiere/fitnesse/fixture/AssertRecord.java +++ b/org.idempiere.fitnesse.fixture/src/org/idempiere/fitnesse/fixture/AssertRecord.java @@ -66,7 +66,7 @@ public class AssertRecord extends TableFixture { MTable table = null; POInfo poinfo = null; boolean alreadyread = false; - StringBuilder whereclause = new StringBuilder(""); + StringBuilder whereclause = new StringBuilder(); boolean isErrorExpected = false; for (int i = 0; i < rows; i++) { String cell_title = getText(i, 0); @@ -104,6 +104,8 @@ public class AssertRecord extends TableFixture { wrong(i, 1); return; } + whereclause.insert(0, "("); + whereclause.append(") AND AD_Client_ID IN (0,").append(Env.getAD_Client_ID(ctx)).append(")"); String sql = "SELECT * FROM " + tableName + " WHERE " + whereclause; PreparedStatement pstmt = null; ResultSet rs = null; @@ -166,28 +168,34 @@ public class AssertRecord extends TableFixture { if (! alreadyread) { // not read yet - add value to where clause String value_evaluated = Util.evaluate(ctx, windowNo, cell_value, getCell(i, 1)); - if (whereclause.length() > 0) - whereclause.append(" AND "); + if (whereclause.length() > 0) { + whereclause.insert(0, "("); + whereclause.append(") AND "); + } whereclause.append(cell_title).append("=").append(value_evaluated); } else { // already read, compare the value of db with the context variable or formula String title_evaluated = ""; if (gpo != null) { - Object result = gpo.get_Value(cell_title); - if (result != null) { - getCell(i, 0).addToBody("
" + result.toString()); - title_evaluated = result.toString(); - } - - String value_evaluated = cell_value; - if (cell_value.startsWith("@")) { - value_evaluated = Util.evaluate(ctx, windowNo,cell_value, getCell(i, 1)); - } - - if (title_evaluated.equals(value_evaluated)) { - right(i, 1); + if (poinfo.getColumnIndex(cell_title) < 0) { + wrong(i, 0); } else { - wrong(i, 1); + Object result = gpo.get_Value(cell_title); + if (result != null) { + getCell(i, 0).addToBody("
" + result.toString()); + title_evaluated = result.toString(); + } + + String value_evaluated = cell_value; + if (cell_value.startsWith("@")) { + value_evaluated = Util.evaluate(ctx, windowNo,cell_value, getCell(i, 1)); + } + + if (title_evaluated.equals(value_evaluated)) { + right(i, 1); + } else { + wrong(i, 1); + } } } } diff --git a/org.idempiere.fitnesse.fixture/src/org/idempiere/fitnesse/fixture/CreateRecord.java b/org.idempiere.fitnesse.fixture/src/org/idempiere/fitnesse/fixture/CreateRecord.java index f1a34b5201..ebed4bd806 100644 --- a/org.idempiere.fitnesse.fixture/src/org/idempiere/fitnesse/fixture/CreateRecord.java +++ b/org.idempiere.fitnesse.fixture/src/org/idempiere/fitnesse/fixture/CreateRecord.java @@ -30,9 +30,12 @@ import java.math.BigDecimal; import java.sql.Timestamp; import java.util.Properties; +import org.compiere.model.MColumn; import org.compiere.model.MTable; import org.compiere.model.PO; import org.compiere.model.POInfo; +import org.compiere.util.DB; +import org.compiere.util.DisplayType; import org.compiere.util.Env; import org.compiere.util.ValueNamePair; @@ -65,6 +68,7 @@ public class CreateRecord extends TableFixture { boolean tableOK = false; boolean columnsOK = true; boolean isErrorExpected = "*Save*Error*".equalsIgnoreCase(getText(rows-1, 0)); + String msgerror1 = getText(rows-1, 1); MTable table = null; POInfo poinfo = null; @@ -145,7 +149,7 @@ public class CreateRecord extends TableFixture { columnName = cell_title; int idxcol = gpo.get_ColumnIndex(columnName); if (idxcol < 0) { - wrong(i,1); + wrong(i,0); // column does not exist in dictionary - anyways try custom column in case it exists in table gpo.set_CustomColumnReturningBoolean(columnName, cell_value); } else { @@ -153,8 +157,16 @@ public class CreateRecord extends TableFixture { String value_evaluated = Util.evaluate(ctx, windowNo, cell_value, getCell(i, 1)); // set value according to class Object value = null; - if (value_evaluated == null || value_evaluated.length() == 0) { + if (org.compiere.util.Util.isEmpty(cell_value)) { value = null; + } else if (org.compiere.util.Util.isEmpty(value_evaluated)) { + boolean ok = Util.evaluateError("Data not found",msgerror1,isErrorExpected); + if (ok) + right(i,1); + else + wrong(i,1); + columnsOK = false; + continue; } else if (columnClass == Boolean.class) { if ("Y".equalsIgnoreCase(value_evaluated) || "true".equalsIgnoreCase(value_evaluated)) value = new Boolean(true); @@ -166,7 +178,27 @@ public class CreateRecord extends TableFixture { } } else if (columnClass == Integer.class) { try { - value = Integer.parseInt(value_evaluated); + Integer intid = Integer.parseInt(value_evaluated); + MColumn column = table.getColumn(cell_title); + if (intid > 0 && (DisplayType.isID(column.getAD_Reference_ID()) || column.getAD_Reference_ID() != DisplayType.ID)) { + // Evaluate the ID is from the actual client or system + String foreignTable = column.getReferenceTableName(); + if (foreignTable != null) { + int foreignClient = DB.getSQLValueEx(null, + "SELECT AD_Client_ID FROM " + foreignTable + " WHERE " + foreignTable + "_ID=?", + intid); + if (foreignClient != 0 && foreignClient != Env.getAD_Client_ID(ctx)) { + boolean ok = Util.evaluateError("Data not found", msgerror1, isErrorExpected); + if (ok) + right(i, 1); + else + wrong(i, 1); + columnsOK = false; + continue; + } + } + } + value = intid; } catch (NumberFormatException e) { exception(getCell(i, 1), e); continue; diff --git a/org.idempiere.fitnesse.fixture/src/org/idempiere/fitnesse/fixture/DeleteRecord.java b/org.idempiere.fitnesse.fixture/src/org/idempiere/fitnesse/fixture/DeleteRecord.java index 5b279938ce..ed0b4e7761 100644 --- a/org.idempiere.fitnesse.fixture/src/org/idempiere/fitnesse/fixture/DeleteRecord.java +++ b/org.idempiere.fitnesse.fixture/src/org/idempiere/fitnesse/fixture/DeleteRecord.java @@ -30,6 +30,7 @@ import java.util.Properties; import org.compiere.model.MTable; import org.compiere.model.PO; import org.compiere.util.DB; +import org.compiere.util.Env; import fitnesse.fixtures.TableFixture; @@ -65,7 +66,7 @@ public class DeleteRecord extends TableFixture { MTable table = null; boolean alreadyread = false; - StringBuilder whereclause = new StringBuilder(""); + StringBuilder whereclause = new StringBuilder(); boolean isErrorExpected = false; String msgerror = null; @@ -105,6 +106,8 @@ public class DeleteRecord extends TableFixture { wrong(i, 1); return; } + whereclause.insert(0, "("); + whereclause = whereclause.append(") AND AD_Client_ID=").append(Env.getAD_Client_ID(ctx)); String sql = "SELECT * FROM " + tableName + " WHERE "+ whereclause; PreparedStatement pstmt = null; ResultSet rs = null; @@ -159,8 +162,10 @@ public class DeleteRecord extends TableFixture { String value_evaluated = Util.evaluate(ctx, windowNo,cell_value, getCell(i, 1)); if (!alreadyread) { // not read yet - add value to where clause - if (whereclause.length() > 0) - whereclause.append(" AND "); + if (whereclause.length() > 0) { + whereclause.insert(0, "("); + whereclause.append(") AND "); + } whereclause.append(cell_title).append("=").append(value_evaluated); } } diff --git a/org.idempiere.fitnesse.fixture/src/org/idempiere/fitnesse/fixture/ReadRecord.java b/org.idempiere.fitnesse.fixture/src/org/idempiere/fitnesse/fixture/ReadRecord.java index e6f281d0ed..4abe3e0719 100644 --- a/org.idempiere.fitnesse.fixture/src/org/idempiere/fitnesse/fixture/ReadRecord.java +++ b/org.idempiere.fitnesse.fixture/src/org/idempiere/fitnesse/fixture/ReadRecord.java @@ -66,7 +66,7 @@ public class ReadRecord extends TableFixture { MTable table = null; POInfo poinfo = null; boolean alreadyread = false; - String whereclause = new String(""); + StringBuilder whereclause = new StringBuilder(); boolean isErrorExpected = false; for (int i = 0; i < rows; i++) { String cell_title = getText(i, 0); @@ -90,7 +90,7 @@ public class ReadRecord extends TableFixture { exception(getCell(i, 1), new Exception("*Where* must be defined in second row")); return; } - whereclause = cell_value; + whereclause.append(cell_value); } else if (cell_title.equalsIgnoreCase("*Read*") || cell_title.equalsIgnoreCase("*Read*Error*")) { if (! tableOK) { getCell(i, 1).addToBody("Table " + tableName + " does not exist"); @@ -103,6 +103,8 @@ public class ReadRecord extends TableFixture { wrong(i, 1); return; } + whereclause.insert(0, "("); + whereclause.append(") AND AD_Client_ID IN (0,").append(Env.getAD_Client_ID(ctx)).append(")"); String sql = "SELECT * FROM " + tableName + " WHERE " + whereclause; PreparedStatement pstmt = null; ResultSet rs = null; @@ -170,15 +172,21 @@ public class ReadRecord extends TableFixture { if (! alreadyread) { // not read yet - add value to where clause String value_evaluated = Util.evaluate(ctx, windowNo, cell_value, getCell(i, 1)); - if (whereclause.length() > 0) - whereclause = whereclause + " AND "; - whereclause = whereclause + cell_title + "=" + value_evaluated; + if (whereclause.length() > 0) { + whereclause.insert(0, "("); + whereclause.append(") AND "); + } + whereclause.append(cell_title).append("=").append(value_evaluated); } else { // already read, show the value of context variable if (gpo != null) { - Object result = gpo.get_Value(cell_title); - if (result != null) - getCell(i, 1).addToBody(result.toString()); + if (poinfo.getColumnIndex(cell_title) < 0) { + wrong(i, 0); + } else { + Object result = gpo.get_Value(cell_title); + if (result != null) + getCell(i, 1).addToBody(result.toString()); + } } } } diff --git a/org.idempiere.fitnesse.fixture/src/org/idempiere/fitnesse/fixture/RunProcess.java b/org.idempiere.fitnesse.fixture/src/org/idempiere/fitnesse/fixture/RunProcess.java index dc2f9b6e9f..4c1fa28c42 100644 --- a/org.idempiere.fitnesse.fixture/src/org/idempiere/fitnesse/fixture/RunProcess.java +++ b/org.idempiere.fitnesse.fixture/src/org/idempiere/fitnesse/fixture/RunProcess.java @@ -44,6 +44,7 @@ import org.compiere.model.MTable; import org.compiere.model.PO; import org.compiere.process.ProcessInfo; import org.compiere.util.CLogger; +import org.compiere.util.DB; import org.compiere.util.DisplayType; import org.compiere.util.Env; import org.compiere.util.Msg; @@ -293,11 +294,27 @@ public class RunProcess extends TableFixture { exception(getCell(i, 1), e); continue; } - } - else if (parameterName.equalsIgnoreCase("*DocAction*")) - docAction = value_evaluated; - else - fmap.put(parameterName, value_evaluated); + } else { + if (parameterName.equalsIgnoreCase("*DocAction*")) { + docAction = value_evaluated; + } else { + String param = DB.getSQLValueStringEx(null, + "SELECT ColumnName " + + "FROM AD_Process_Para " + + "WHERE IsActive='Y' AND AD_Process_ID=? AND LOWER(ColumnName)=?", + process.getAD_Process_ID(), parameterName.toLowerCase()); + if (param == null) { + boolean ok = Util.evaluateError(msgerror1,"Parameter Not Found", isErrorExpected); + if (ok) { + right(getCell(i, 1)); + } else { + exception(getCell(i, 1), new Exception("Parameter Not Found")); + } + } else { + fmap.put(param, value_evaluated); + } + } + } } } diff --git a/org.idempiere.fitnesse.fixture/src/org/idempiere/fitnesse/fixture/UpdateRecord.java b/org.idempiere.fitnesse.fixture/src/org/idempiere/fitnesse/fixture/UpdateRecord.java index 91968bd5d4..0f318fd28c 100644 --- a/org.idempiere.fitnesse.fixture/src/org/idempiere/fitnesse/fixture/UpdateRecord.java +++ b/org.idempiere.fitnesse.fixture/src/org/idempiere/fitnesse/fixture/UpdateRecord.java @@ -23,14 +23,21 @@ package org.idempiere.fitnesse.fixture; +import java.math.BigDecimal; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; +import java.sql.Timestamp; import java.util.Properties; +import org.compiere.model.MColumn; import org.compiere.model.MTable; import org.compiere.model.PO; +import org.compiere.model.POInfo; import org.compiere.util.DB; +import org.compiere.util.DisplayType; +import org.compiere.util.Env; +import org.compiere.util.ValueNamePair; import fitnesse.fixtures.TableFixture; @@ -66,10 +73,12 @@ public class UpdateRecord extends TableFixture { PO gpo = null; String tableName = new String(""); boolean tableOK = false; + boolean columnsOK = true; MTable table = null; + POInfo poinfo = null; boolean alreadyread = false; - StringBuilder whereclause = new StringBuilder(""); + StringBuilder whereclause = new StringBuilder(); boolean isErrorExpected = false; String msgerror = null; for (int i = 0; i < rows; i++) { @@ -88,6 +97,7 @@ public class UpdateRecord extends TableFixture { } else { tableOK = true; } + poinfo = POInfo.getPOInfo(ctx, table!=null ? table.getAD_Table_ID() : 0); } else if (cell_title.equalsIgnoreCase("*Where*")) { if (i != 1) { @@ -108,6 +118,7 @@ public class UpdateRecord extends TableFixture { wrong(i, 1); return; } + whereclause = whereclause.append(" AND AD_Client_ID=").append(Env.getAD_Client_ID(ctx)); String sql = "SELECT * FROM " + tableName + " WHERE "+ whereclause; PreparedStatement pstmt = null; ResultSet rs = null; @@ -160,34 +171,145 @@ public class UpdateRecord extends TableFixture { String value_evaluated = Util.evaluate(ctx, windowNo,cell_value, getCell(i, 1)); if (!alreadyread) { // not read yet - add value to where clause - if (whereclause.length() > 0) - whereclause.append(" AND "); + if (whereclause.length() > 0) { + whereclause.insert(0, "("); + whereclause.append(") AND "); + } whereclause.append(cell_title).append("=").append(value_evaluated); } else { if (gpo != null) { - if (gpo.set_ValueOfColumnReturningBoolean(cell_title, value_evaluated)) { - if (isErrorExpected) { - wrong(getCell(i, 1)); - } else { - right(getCell(i, 1)); + String columnName = cell_title; + int idxcol = gpo.get_ColumnIndex(columnName); + if (idxcol < 0) { + wrong(i,0); + // column does not exist in dictionary - anyways try custom column in case it exists in table + gpo.set_CustomColumnReturningBoolean(columnName, cell_value); + } else { + Class columnClass = poinfo.getColumnClass(idxcol); + // set value according to class + Object value = null; + if (org.compiere.util.Util.isEmpty(cell_value)) { + value = null; + } else if (org.compiere.util.Util.isEmpty(value_evaluated)) { + boolean ok = Util.evaluateError("Data not found",msgerror,isErrorExpected); + if (ok) + right(i,1); + else + wrong(i,1); + columnsOK = false; + continue; + } else if (columnClass == Boolean.class) { + if ("Y".equalsIgnoreCase(value_evaluated) || "true".equalsIgnoreCase(value_evaluated)) + value = new Boolean(true); + else if ("N".equalsIgnoreCase(value_evaluated) || "false".equalsIgnoreCase(value_evaluated)) + value = new Boolean(false); + else { + exception(getCell(i, 1), new Exception("Wrong value for boolean, allowed Y/N/true/false")); + continue; + } + } else if (columnClass == Integer.class) { + try { + Integer intid = Integer.parseInt(value_evaluated); + MColumn column = table.getColumn(cell_title); + if (intid > 0 && (DisplayType.isID(column.getAD_Reference_ID()) || column.getAD_Reference_ID() != DisplayType.ID)) { + // Evaluate the ID is from the actual client or system + String foreignTable = column.getReferenceTableName(); + if (foreignTable != null) { + int foreignClient = DB.getSQLValueEx(null, + "SELECT AD_Client_ID FROM " + foreignTable + " WHERE " + foreignTable + "_ID=?", + intid); + if (foreignClient != 0 && foreignClient != Env.getAD_Client_ID(ctx)) { + boolean ok = Util.evaluateError("Data not found", msgerror, isErrorExpected); + if (ok) + right(i, 1); + else + wrong(i, 1); + columnsOK = false; + continue; + } + } + } + value = intid; + } catch (NumberFormatException e) { + exception(getCell(i, 1), e); + continue; + } + } else if (columnClass == BigDecimal.class) { + try { + value = new BigDecimal(value_evaluated); + } catch (Exception e) { + exception(getCell(i, 1), e); + continue; + } + } else if (columnClass == Timestamp.class) { + try { + value = Timestamp.valueOf(value_evaluated); + } catch (Exception e) { + exception(getCell(i, 1), e); + continue; + } + } else if (columnClass == byte[].class) { + exception(getCell(i, 1), new Exception("LOB not supported")); + continue; + } else { + value = value_evaluated; + } + try { + if (!gpo.set_ValueOfColumnReturningBoolean(columnName, value)) { + columnsOK = false; + boolean ok = Util.evaluateError("Cannot set value of column", cell_value, isErrorExpected); + if (ok) + right(getCell(i, 1)); + else + exception(getCell(i, 1), new Exception("Cannot set value of column")); + } + } catch (Exception e) { + columnsOK = false; + boolean ok = Util.evaluateError(e.getMessage(), cell_value, isErrorExpected); + if (ok) + right(getCell(i, 1)); + else + exception(getCell(i, 1), e); } } - - try { - gpo.saveEx(); - } catch (Exception e) { - boolean ok = Util.evaluateError(e.getMessage(),msgerror, isErrorExpected); - if (ok) - right(getCell(i, 1)); - else - exception(getCell(i, 1),e); - } - } } } } - }//end while + } //end for + if (tableOK && columnsOK && gpo != null) { + int i = rows-1; + if (!gpo.save()) { + StringBuilder msg = new StringBuilder(); + Exception e = (Exception) ctx.get("org.compiere.util.CLogger.lastException"); + if (e != null) + msg.append("Exception: "+ e.getMessage()); + else { + ValueNamePair vnp = (ValueNamePair) ctx.get("org.compiere.util.CLogger.lastError"); + if (vnp != null) + msg.append("Error: " + vnp.getName()); + } + getCell(i, 1).addToBody(msg.toString()); + boolean ok = Util.evaluateError(msg.toString(),msgerror,isErrorExpected); + if (ok) + right(i,1); + else + wrong(i,1); + } else { + if (isErrorExpected) { + wrong(i,1); + } else { + right(i, 1); + } + getCell(i, 1).addToBody(gpo.toString()); + for (int idx = 0; idx < poinfo.getColumnCount(); idx++) { + String colname = poinfo.getColumnName(idx); + Object result = gpo.get_Value(colname); + if (result != null) + Env.setContext(ctx, windowNo, poinfo.getTableName().toLowerCase() + "." + colname.toLowerCase(), result.toString()); + } + } + } } diff --git a/org.idempiere.fitnesse.fixture/src/org/idempiere/fitnesse/fixture/Util.java b/org.idempiere.fitnesse.fixture/src/org/idempiere/fitnesse/fixture/Util.java index eb6b46f419..e222e02372 100644 --- a/org.idempiere.fitnesse.fixture/src/org/idempiere/fitnesse/fixture/Util.java +++ b/org.idempiere.fitnesse.fixture/src/org/idempiere/fitnesse/fixture/Util.java @@ -119,6 +119,8 @@ public class Util { String tablename = cell_value.substring(5, pos_opsqb); String where = cell_value.substring(pos_opsqb+1, pos_clsqb); String whereParsed = Env.parseContext(ctx, windowNo, where, false); + if (ctx != null) + whereParsed = "(" + whereParsed + ") AND AD_Client_ID IN (0,"+Env.getAD_Client_ID(ctx)+")"; String columnname = cell_value.substring(pos_clsqb+2); String newval = DB.getSQLValueStringEx(null, "SELECT " + columnname + " FROM " + tablename + " WHERE " + whereParsed); if (parse != null)