diff --git a/framework/default/fflib/default/classes/common/fflib_QueryFactory.cls b/framework/default/fflib/default/classes/common/fflib_QueryFactory.cls index e82f2cda6ef..ce7035c12f8 100644 --- a/framework/default/fflib/default/classes/common/fflib_QueryFactory.cls +++ b/framework/default/fflib/default/classes/common/fflib_QueryFactory.cls @@ -62,7 +62,21 @@ public class fflib_QueryFactory { //No explicit sharing declaration - inherit fr public Schema.SObjectType table {get; private set;} @TestVisible private Set fields; - private String conditionExpression; + private String conditionExpression { + get { + if ( conditionCriteria != null && String.isNotBlank( conditionExpression ) ) { + throw new fflib_Application.DeveloperException( 'Both criteria and expression were set on the query factory : ' + conditionExpression + ' + ' + conditionCriteria ); + } + else { + if ( conditionCriteria != null ) { + return conditionCriteria.toSOQL(); + } + } + return conditionExpression; + } + set; + } + private ISearchCriteria conditionCriteria; private Integer limitCount; private Integer offsetCount; private List order; @@ -299,6 +313,15 @@ public class fflib_QueryFactory { //No explicit sharing declaration - inherit fr this.conditionExpression = conditionExpression; return this; } + + /** + * @param conditionExpression Sets the WHERE clause to the string provided by the given ISearchCriteria + **/ + public fflib_QueryFactory setCondition(ISearchCriteria criteria){ + this.conditionCriteria = criteria; + return this; + } + /** * @returns the current value of the WHERE clause, if any, as set by {@link #setCondition} **/ diff --git a/framework/default/ortoo-core/default/classes/fflib-extension/ortoo_DynamicSobjectSelector.cls b/framework/default/ortoo-core/default/classes/fflib-extension/ortoo_DynamicSobjectSelector.cls index 3a2a87d5155..6ad8c8c45a4 100644 --- a/framework/default/ortoo-core/default/classes/fflib-extension/ortoo_DynamicSobjectSelector.cls +++ b/framework/default/ortoo-core/default/classes/fflib-extension/ortoo_DynamicSobjectSelector.cls @@ -175,6 +175,6 @@ public inherited sharing class ortoo_DynamicSobjectSelector extends ortoo_Sobjec @testVisible private String generateSoqlByCriteria( ortoo_Criteria criteria ) { - return newQueryFactory().selectFields( fieldList ).setCondition( criteria.toSOQL() ).toSOQL(); + return newQueryFactory().selectFields( fieldList ).setCondition( criteria ).toSOQL(); } } \ No newline at end of file diff --git a/framework/default/ortoo-core/default/classes/fflib-extension/ortoo_SobjectSelector.cls b/framework/default/ortoo-core/default/classes/fflib-extension/ortoo_SobjectSelector.cls index e7047275ab4..24ec260784a 100644 --- a/framework/default/ortoo-core/default/classes/fflib-extension/ortoo_SobjectSelector.cls +++ b/framework/default/ortoo-core/default/classes/fflib-extension/ortoo_SobjectSelector.cls @@ -52,7 +52,7 @@ public abstract inherited sharing class ortoo_SobjectSelector extends fflib_Sobj if ( countOfRecords > 0 ) { - fflib_QueryFactory queryFactory = newQueryFactory().setCondition( criteria.toSOQL() ); + fflib_QueryFactory queryFactory = newQueryFactory().setCondition( criteria ); queryFactory.selectFields( searchConfiguration.getRequiredFields() ); queryFactory.setOffset( window.offset );