diff --git a/src/main/java/de/metas/ui/web/board/BoardDescriptorRepository.java b/src/main/java/de/metas/ui/web/board/BoardDescriptorRepository.java index 64402ec5b..5d08120b8 100644 --- a/src/main/java/de/metas/ui/web/board/BoardDescriptorRepository.java +++ b/src/main/java/de/metas/ui/web/board/BoardDescriptorRepository.java @@ -157,7 +157,7 @@ private BoardDescriptor createBoardDescriptor(final int boardId) { throw new EntityNotFoundException("No board found for ID=" + boardId); } - + // // Board document mappings final String tableName = Services.get(IADTableDAO.class).retrieveTableName(boardPO.getAD_Table_ID()); @@ -181,7 +181,6 @@ private BoardDescriptor createBoardDescriptor(final int boardId) // Board document lookup provider final int adValRuleId = boardPO.getAD_Val_Rule_ID(); final LookupDescriptorProvider documentLookupDescriptorProvider = SqlLookupDescriptor.builder() - .setColumnName(keyColumnName) .setDisplayType(DisplayType.Search) .setWidgetType(DocumentFieldWidgetType.Lookup) .setAD_Val_Rule_ID(adValRuleId) @@ -208,7 +207,12 @@ private BoardDescriptor createBoardDescriptor(final int boardId) // Source document filters: AD_Val_Rule_ID if (adValRuleId > 0) { - final IValidationRule validationRule = Services.get(IValidationRuleFactory.class).create(tableName, adValRuleId); + final IValidationRule validationRule = Services.get(IValidationRuleFactory.class).create( + tableName + , adValRuleId + , null // ctx table name + , null // ctx column name + ); final String sqlWhereClause = validationRule.getPrefilterWhereClause() .evaluate(Evaluatees.ofCtx(Env.getCtx()), OnVariableNotFound.Fail); diff --git a/src/main/java/de/metas/ui/web/handlingunits/process/WEBUI_M_HU_Pick_ParametersFiller.java b/src/main/java/de/metas/ui/web/handlingunits/process/WEBUI_M_HU_Pick_ParametersFiller.java index 16e42d797..5ca471ddc 100644 --- a/src/main/java/de/metas/ui/web/handlingunits/process/WEBUI_M_HU_Pick_ParametersFiller.java +++ b/src/main/java/de/metas/ui/web/handlingunits/process/WEBUI_M_HU_Pick_ParametersFiller.java @@ -76,7 +76,8 @@ public LookupValuesList getShipmentScheduleValues(final LookupDataSourceContext private static final LookupDataSource createShipmentScheduleDataSource(final int huId) { final LookupDescriptor lookupDescriptor = SqlLookupDescriptor.builder() - .setColumnName(I_M_ShipmentSchedule.COLUMNNAME_M_ShipmentSchedule_ID) + .setCtxTableName(I_M_ShipmentSchedule.Table_Name) + .setCtxColumnName(I_M_ShipmentSchedule.COLUMNNAME_M_ShipmentSchedule_ID) .setDisplayType(DisplayType.Search) .addValidationRule(createShipmentSchedulesValidationRule(huId)) .buildForDefaultScope(); @@ -131,7 +132,8 @@ public LookupValuesList getPickingSlotValues(final LookupDataSourceContext conte private static final LookupDataSource createPickingSlotDataSource() { final LookupDescriptor lookupDescriptor = SqlLookupDescriptor.builder() - .setColumnName(I_M_PickingSlot.COLUMNNAME_M_PickingSlot_ID) + .setCtxTableName(I_M_PickingSlot.Table_Name) + .setCtxColumnName(I_M_PickingSlot.COLUMNNAME_M_PickingSlot_ID) .setDisplayType(DisplayType.Search) .buildForDefaultScope(); diff --git a/src/main/java/de/metas/ui/web/handlingunits/process/WebuiHUTransformParametersFiller.java b/src/main/java/de/metas/ui/web/handlingunits/process/WebuiHUTransformParametersFiller.java index 95508a054..5f66b6514 100644 --- a/src/main/java/de/metas/ui/web/handlingunits/process/WebuiHUTransformParametersFiller.java +++ b/src/main/java/de/metas/ui/web/handlingunits/process/WebuiHUTransformParametersFiller.java @@ -312,7 +312,8 @@ private LookupValuesList getTUsLookupValues_All(final LookupDataSourceContext co // TODO: filter by TUs // TODO: search by barcode too final LookupDescriptor lookupDescriptor = SqlLookupDescriptor.builder() - .setColumnName("M_HU_ID") + .setCtxTableName(null) // ctxTableName + .setCtxColumnName("M_HU_ID") .setDisplayType(DisplayType.Search) .buildForDefaultScope(); LookupDataSource dataSource = LookupDataSourceFactory.instance.getLookupDataSource(lookupDescriptor); @@ -367,7 +368,8 @@ private LookupValuesList getLUsLookupValues_All(final LookupDataSourceContext co // TODO: filter by LUs // TODO: search by barcode too final LookupDescriptor lookupDescriptor = SqlLookupDescriptor.builder() - .setColumnName("M_HU_ID") + .setCtxTableName(null) //ctxTableName + .setCtxColumnName("M_HU_ID") .setDisplayType(DisplayType.Search) .buildForDefaultScope(); LookupDataSource dataSource = LookupDataSourceFactory.instance.getLookupDataSource(lookupDescriptor); diff --git a/src/main/java/de/metas/ui/web/mail/WebuiMailRepository.java b/src/main/java/de/metas/ui/web/mail/WebuiMailRepository.java index 010f83a7f..05a40cb46 100644 --- a/src/main/java/de/metas/ui/web/mail/WebuiMailRepository.java +++ b/src/main/java/de/metas/ui/web/mail/WebuiMailRepository.java @@ -4,6 +4,7 @@ import java.util.concurrent.atomic.AtomicInteger; import java.util.function.UnaryOperator; +import org.compiere.model.I_AD_User; import org.compiere.util.DisplayType; import org.compiere.util.Evaluatee; import org.compiere.util.Evaluatees; @@ -69,7 +70,8 @@ public class WebuiMailRepository public WebuiMailRepository() { final LookupDescriptor emailToLookupDescriptor = SqlLookupDescriptor.builder() - .setColumnName(org.compiere.model.I_AD_User.COLUMNNAME_AD_User_ID) + .setCtxTableName(I_AD_User.Table_Name) + .setCtxColumnName(org.compiere.model.I_AD_User.COLUMNNAME_AD_User_ID) .setDisplayType(DisplayType.Search) .setWidgetType(DocumentFieldWidgetType.Lookup) .buildProvider() diff --git a/src/main/java/de/metas/ui/web/picking/packageable/PackageableViewRepository.java b/src/main/java/de/metas/ui/web/picking/packageable/PackageableViewRepository.java index fa3de0262..f0ebdb239 100644 --- a/src/main/java/de/metas/ui/web/picking/packageable/PackageableViewRepository.java +++ b/src/main/java/de/metas/ui/web/picking/packageable/PackageableViewRepository.java @@ -66,14 +66,16 @@ public PackageableViewRepository() // and also to allow it to be unit-tested (when the lookups are not part of the test), I use those suppliers. orderLookup = Suppliers.memoize(() -> LookupDataSourceFactory.instance.getLookupDataSource(SqlLookupDescriptor.builder() - .setColumnName(I_M_Packageable_V.COLUMNNAME_C_Order_ID) + .setCtxTableName(I_M_Packageable_V.Table_Name) + .setCtxColumnName(I_M_Packageable_V.COLUMNNAME_C_Order_ID) .setDisplayType(DisplayType.Search) .setWidgetType(DocumentFieldWidgetType.Lookup) .buildProvider() .provideForScope(LookupScope.DocumentField))); productLookup = Suppliers.memoize(() -> LookupDataSourceFactory.instance.getLookupDataSource(SqlLookupDescriptor.builder() - .setColumnName(I_M_Packageable_V.COLUMNNAME_M_Product_ID) + .setCtxTableName(I_M_Packageable_V.Table_Name) + .setCtxColumnName(I_M_Packageable_V.COLUMNNAME_M_Product_ID) .setDisplayType(DisplayType.Search) .setWidgetType(DocumentFieldWidgetType.Lookup) .buildProvider() diff --git a/src/main/java/de/metas/ui/web/picking/pickingslot/PickingSlotViewRepository.java b/src/main/java/de/metas/ui/web/picking/pickingslot/PickingSlotViewRepository.java index be7d5327f..c82ca3bce 100644 --- a/src/main/java/de/metas/ui/web/picking/pickingslot/PickingSlotViewRepository.java +++ b/src/main/java/de/metas/ui/web/picking/pickingslot/PickingSlotViewRepository.java @@ -88,7 +88,8 @@ private static Supplier createWarehouseLookup() { return Suppliers.memoize(() -> LookupDataSourceFactory.instance .getLookupDataSource(SqlLookupDescriptor.builder() - .setColumnName(I_M_PickingSlot.COLUMNNAME_M_Warehouse_ID) + .setCtxTableName(I_M_PickingSlot.Table_Name) + .setCtxColumnName(I_M_PickingSlot.COLUMNNAME_M_Warehouse_ID) .setDisplayType(DisplayType.Search) .setWidgetType(DocumentFieldWidgetType.Lookup) .buildProvider() @@ -99,7 +100,8 @@ private static Supplier createBPartnerLookup() { return Suppliers.memoize(() -> LookupDataSourceFactory.instance .getLookupDataSource(SqlLookupDescriptor.builder() - .setColumnName(I_M_PickingSlot.COLUMNNAME_C_BPartner_ID) + .setCtxTableName(I_M_PickingSlot.Table_Name) + .setCtxColumnName(I_M_PickingSlot.COLUMNNAME_C_BPartner_ID) .setDisplayType(DisplayType.Search) .setWidgetType(DocumentFieldWidgetType.Lookup) .buildProvider() @@ -110,7 +112,8 @@ private static Supplier createBPartnerLocationLookup() { return Suppliers.memoize(() -> LookupDataSourceFactory.instance .getLookupDataSource(SqlLookupDescriptor.builder() - .setColumnName(I_M_PickingSlot.COLUMNNAME_C_BPartner_Location_ID) + .setCtxTableName(I_M_PickingSlot.Table_Name) + .setCtxColumnName(I_M_PickingSlot.COLUMNNAME_C_BPartner_Location_ID) .setDisplayType(DisplayType.Search) .setWidgetType(DocumentFieldWidgetType.Lookup) .buildProvider() diff --git a/src/main/java/de/metas/ui/web/process/adprocess/ADProcessDescriptorsFactory.java b/src/main/java/de/metas/ui/web/process/adprocess/ADProcessDescriptorsFactory.java index 7d88c9b89..c88a32c52 100644 --- a/src/main/java/de/metas/ui/web/process/adprocess/ADProcessDescriptorsFactory.java +++ b/src/main/java/de/metas/ui/web/process/adprocess/ADProcessDescriptorsFactory.java @@ -203,7 +203,8 @@ private DocumentFieldDescriptor.Builder createProcessParaDescriptor(final WebuiP if (lookupDescriptorProvider == null) { lookupDescriptorProvider = SqlLookupDescriptor.builder() - .setColumnName(parameterName) + .setCtxTableName(null) + .setCtxColumnName(parameterName) .setDisplayType(adProcessParam.getAD_Reference_ID()) .setAD_Reference_Value_ID(adProcessParam.getAD_Reference_Value_ID()) .setAD_Val_Rule_ID(adProcessParam.getAD_Val_Rule_ID()) diff --git a/src/main/java/de/metas/ui/web/process/view/ViewActionParamDescriptor.java b/src/main/java/de/metas/ui/web/process/view/ViewActionParamDescriptor.java index 3c2e087bc..3bccdf35c 100644 --- a/src/main/java/de/metas/ui/web/process/view/ViewActionParamDescriptor.java +++ b/src/main/java/de/metas/ui/web/process/view/ViewActionParamDescriptor.java @@ -71,7 +71,8 @@ public DocumentFieldDescriptor.Builder createParameterFieldDescriptor() else { lookupDescriptorProvider = SqlLookupDescriptor.builder() - .setColumnName(InterfaceWrapperHelper.getKeyColumnName(parameterAnnotation.sqlLookupTableName())) + .setCtxTableName(null) // tableName + .setCtxColumnName(InterfaceWrapperHelper.getKeyColumnName(parameterAnnotation.sqlLookupTableName())) .setDisplayType(DisplayType.Search) .setReadOnlyAccess() .buildProvider(); diff --git a/src/main/java/de/metas/ui/web/quickinput/inout/EmptiesQuickInputDescriptorFactory.java b/src/main/java/de/metas/ui/web/quickinput/inout/EmptiesQuickInputDescriptorFactory.java index 4dee7fea1..c8e16d2e4 100644 --- a/src/main/java/de/metas/ui/web/quickinput/inout/EmptiesQuickInputDescriptorFactory.java +++ b/src/main/java/de/metas/ui/web/quickinput/inout/EmptiesQuickInputDescriptorFactory.java @@ -87,7 +87,8 @@ private DocumentEntityDescriptor createEntityDescriptor(final DocumentId documen // .setWidgetType(DocumentFieldWidgetType.Lookup) .setLookupDescriptorProvider(SqlLookupDescriptor.builder() - .setColumnName(IEmptiesQuickInput.COLUMNNAME_M_HU_PackingMaterial_ID) + .setCtxTableName(null) // ctxTableName + .setCtxColumnName(IEmptiesQuickInput.COLUMNNAME_M_HU_PackingMaterial_ID) .setDisplayType(DisplayType.Search) .buildProvider()) .setValueClass(IntegerLookupValue.class) diff --git a/src/main/java/de/metas/ui/web/quickinput/orderline/OrderLineQuickInputDescriptorFactory.java b/src/main/java/de/metas/ui/web/quickinput/orderline/OrderLineQuickInputDescriptorFactory.java index 7e2e89544..5e6addd0c 100644 --- a/src/main/java/de/metas/ui/web/quickinput/orderline/OrderLineQuickInputDescriptorFactory.java +++ b/src/main/java/de/metas/ui/web/quickinput/orderline/OrderLineQuickInputDescriptorFactory.java @@ -139,7 +139,8 @@ private static Builder createPackingInstructionFieldBuilder() // .setWidgetType(DocumentFieldWidgetType.Lookup) .setLookupDescriptorProvider(SqlLookupDescriptor.builder() - .setColumnName(IOrderLineQuickInput.COLUMNNAME_M_HU_PI_Item_Product_ID) + .setCtxTableName(null) // ctxTableName + .setCtxColumnName(IOrderLineQuickInput.COLUMNNAME_M_HU_PI_Item_Product_ID) .setDisplayType(DisplayType.TableDir) .setAD_Val_Rule_ID(540199) // FIXME: hardcoded "M_HU_PI_Item_Product_For_Org_and_Product_and_DateOrdered" .buildProvider()) diff --git a/src/main/java/de/metas/ui/web/window/descriptor/factory/standard/GridTabVOBasedDocumentEntityDescriptorFactory.java b/src/main/java/de/metas/ui/web/window/descriptor/factory/standard/GridTabVOBasedDocumentEntityDescriptorFactory.java index 342e868de..6ae22e2e4 100644 --- a/src/main/java/de/metas/ui/web/window/descriptor/factory/standard/GridTabVOBasedDocumentEntityDescriptorFactory.java +++ b/src/main/java/de/metas/ui/web/window/descriptor/factory/standard/GridTabVOBasedDocumentEntityDescriptorFactory.java @@ -9,6 +9,7 @@ import org.adempiere.ad.expression.api.ConstantLogicExpression; import org.adempiere.ad.expression.api.IExpression; import org.adempiere.ad.expression.api.ILogicExpression; +import org.adempiere.ad.table.api.IADTableDAO; import org.adempiere.model.InterfaceWrapperHelper; import org.adempiere.util.Check; import org.adempiere.util.Services; @@ -275,8 +276,11 @@ private final void createAndAddDocumentField(final DocumentEntityDescriptor.Buil alwaysUpdateable = extractAlwaysUpdateable(gridFieldVO); + final String ctxTableName = Services.get(IADTableDAO.class).retrieveTableName(gridFieldVO.getAD_Table_ID()); + lookupDescriptorProvider = SqlLookupDescriptor.builder() - .setColumnName(sqlColumnName) + .setCtxTableName(ctxTableName) + .setCtxColumnName(sqlColumnName) .setWidgetType(widgetType) .setDisplayType(displayType) .setAD_Reference_Value_ID(gridFieldVO.getAD_Reference_Value_ID()) diff --git a/src/main/java/de/metas/ui/web/window/descriptor/sql/SqlLookupDescriptor.java b/src/main/java/de/metas/ui/web/window/descriptor/sql/SqlLookupDescriptor.java index ac04fd125..7482a5870 100644 --- a/src/main/java/de/metas/ui/web/window/descriptor/sql/SqlLookupDescriptor.java +++ b/src/main/java/de/metas/ui/web/window/descriptor/sql/SqlLookupDescriptor.java @@ -267,7 +267,9 @@ public LookupSource getLookupSourceType() public static final class Builder { // Parameters - private String columnName; + private String ctxColumnName; + private String ctxTableName; + private DocumentFieldWidgetType widgetType; private Integer displayType; private int AD_Reference_Value_ID = -1; @@ -298,7 +300,7 @@ public LookupDescriptorProvider buildProvider() { Check.assumeNotNull(displayType, "Parameter displayType is not null"); - return buildProvider(columnName, widgetType, displayType, AD_Reference_Value_ID, AD_Val_Rule_ID, validationRules); + return buildProvider( ctxTableName, ctxColumnName, widgetType, displayType, AD_Reference_Value_ID, AD_Val_Rule_ID, validationRules); } public LookupDescriptor buildForScope(final LookupScope scope) @@ -312,6 +314,7 @@ public LookupDescriptor buildForDefaultScope() } private static LookupDescriptorProvider buildProvider( + final String sqlTableName, final String sqlColumnName, final DocumentFieldWidgetType widgetType, final int displayType, final int AD_Reference_Value_ID, @@ -327,7 +330,8 @@ private static LookupDescriptorProvider buildProvider( || DisplayType.Button == displayType && AD_Reference_Value_ID > 0) { return LookupDescriptorProvider.fromMemoizingFunction(scope -> SqlLookupDescriptor.builder() - .setColumnName(sqlColumnName) + .setCtxTableName(sqlTableName) + .setCtxColumnName(sqlColumnName) .setDisplayType(displayType) .setAD_Reference_Value_ID(AD_Reference_Value_ID) .setAD_Val_Rule_ID(AD_Val_Rule_ID) @@ -340,7 +344,7 @@ private static LookupDescriptorProvider buildProvider( private SqlLookupDescriptor build() { - Check.assumeNotEmpty(columnName, "columnName is not empty"); + Check.assumeNotEmpty(ctxColumnName, "columnName is not empty"); final boolean IsParent = false; @@ -353,7 +357,7 @@ private SqlLookupDescriptor build() } else { - final MLookupInfo lookupInfo = MLookupFactory.getLookupInfo(WINDOWNO_Dummy, displayType, columnName, AD_Reference_Value_ID, IsParent, AD_Val_Rule_ID); + final MLookupInfo lookupInfo = MLookupFactory.getLookupInfo(WINDOWNO_Dummy, displayType, ctxTableName, ctxColumnName, AD_Reference_Value_ID, IsParent, AD_Val_Rule_ID); numericKey = lookupInfo.isNumericKey(); validationRuleEffective = extractValidationRule(lookupInfo); @@ -375,7 +379,7 @@ private IValidationRule extractValidationRule(final MLookupInfo lookupInfo) // // Case: DocAction button => inject the DocActionValidationRule // FIXME: hardcoded - if (displayType == DisplayType.Button && WindowConstants.FIELDNAME_DocAction.equals(columnName)) + if (displayType == DisplayType.Button && WindowConstants.FIELDNAME_DocAction.equals(ctxColumnName)) { validationRuleBuilder.add(DocActionValidationRule.instance); } @@ -584,9 +588,15 @@ private INamePairPredicate getPostQueryPredicate() return postQueryPredicate; } - public Builder setColumnName(final String columnName) + public Builder setCtxColumnName(final String columnName) + { + this.ctxColumnName = columnName; + return this; + } + + public Builder setCtxTableName(final String tableName) { - this.columnName = columnName; + this.ctxTableName = tableName; return this; }