Hi Nico, Did not read it all, but sounds promising. Going to bed anyway :D
Jacques Le 30/06/2017 à 23:33, Nicolas Malin a écrit :
Hello I found some idea to improve the groovy DSL during my first try to convert mini-lang. I don't know if it's possible or logical at this time but I just sharing my mind :) **** entity-one : with the minilang is really usefull to call directly a entity like that <entity-one entity-name="Product" value-name="product"/> currently with groovy GenericValue product = from("Product").where([productId: productId).findOne() we lose the automapping so I imagine a syntax like that : GenericValue product = from("Product").autoMap(groovyCtx).findOne() or GenericValue product = from("Product").findOne(groovyCtx) or GenericValue product = from("Product").resolveOne(groovyCtx) or something like that Make valid service context : in minilang <set-service-fields service-name="createProduct" map="context" to-map="createProductMap"/> Currently with groovy we need to call the dispatchcontext Map createProductMap = dispatcher.getDispatchContext().makeValidContext('createProduct', 'IN', parameters) My idea would be like that Map createProductMap = prepare service: 'createProduct' //to pool from groovyCtx or Map createProductMap = prepare service: 'createProduct' with: parameters //to pool from parameters or Map createProductMap = prepare service: 'createProduct' with: parameters mode: 'IN' //to pool from parameters and indicate the mode It's would be the same to prepare a genericValue: GenericValue product = prepare entity: 'Product' with: parameters Resolve a label in minilang <fail-property resource="AccountingUiLabels" property="AccountingCreatePaymentPermissionError"/> in groovy String message = UtilProperties.getMessage('AccountingErrorUiLabels', 'AccountingUpdateRateAmountAlreadyExist', locale) My idea String message = message: 'AccountingUpdateRateAmountAlreadyExist', from: 'AccountingErrorUiLabels', with: 'messageCtx' Security control in minilang <if-has-permission permission="ACCOUNTING" action="_CREATE"/> in groovy if (security.hasPermission("ACCOUNTING_CREATE", userLogin)) My idea if (has permission: 'ACCOUNTING_CREATE') ******* I tried to implement "prepapre" for fun with success below :) Index: framework/service/src/main/java/org/apache/ofbiz/service/engine/GroovyBaseScript.groovy =================================================================== --- framework/service/src/main/java/org/apache/ofbiz/service/engine/GroovyBaseScript.groovy (révision 1800195) +++ framework/service/src/main/java/org/apache/ofbiz/service/engine/GroovyBaseScript.groovy (copie de travail) @@ -19,6 +19,8 @@ package org.apache.ofbiz.service.engine import org.apache.ofbiz.base.util.Debug +import org.apache.ofbiz.entity.finder.PrimaryKeyFinder +import org.apache.ofbiz.entity.model.ModelEntity import org.apache.ofbiz.entity.util.EntityQuery import org.apache.ofbiz.service.ServiceUtil import org.apache.ofbiz.service.ExecutionServiceException @@ -47,6 +49,15 @@ return runService((String)args.get('service'), (Map)args.get('with', new HashMap())) } + Map prepare(Map args) throws ExecutionServiceException { + if ((String)args.get('service')) {+ return result = binding.getVariable('dispatcher').getDispatchContext().makeValidContext((String) args.get('service'), "IN", (Map) args.get('with', binding.getVariable('parameters')))+ } + if ((String)args.get('entity')) {+ return result = binding.getVariable('delegator').makeValidValue((String) args.get('entity'), (Map) args.get('with', binding.getVariable('parameters')))+ } + } + Map makeValue(String entityName) throws ExecutionServiceException { return result = binding.getVariable('delegator').makeValue(entityName) } @@ -63,6 +74,13 @@ return EntityQuery.use(binding.getVariable('delegator')).select(fields) } + Map fromOneAuto(def entity) { + Debug.logError( ' ' + binding.getVariables(), '######') + return result = PrimaryKeyFinder.runFind(binding.getVariable('delegator').getModelEntity(entity), + binding.getVariables(), binding.getVariable('delegator'), true, true, null, null) + + } + def success(String message) { // TODO: implement some clever i18n mechanism based on the userLogin and locale in the binding if (this.binding.hasVariable('request')) { Index: applications/accounting/groovyScripts/payment/FindInvoicesByDueDate.groovy =================================================================== --- applications/accounting/groovyScripts/payment/FindInvoicesByDueDate.groovy (révision 1800195) +++ applications/accounting/groovyScripts/payment/FindInvoicesByDueDate.groovy (copie de travail) @@ -20,7 +20,7 @@ context.invoicePaymentInfoList = [] if (parameters.invoiceTypeId) { // it's not the initialisation but a real search request - serviceCtx = dispatcher.getDispatchContext().makeValidContext("getInvoicePaymentInfoListByDueDateOffset", "IN", parameters) + serviceCtx = prepare service: 'getInvoicePaymentInfoListByDueDateOffset' result = runService("getInvoicePaymentInfoListByDueDateOffset", serviceCtx) context.invoicePaymentInfoList = result.invoicePaymentInfoList } Index: applications/accounting/groovyScripts/rate/RateServices.groovy =================================================================== --- applications/accounting/groovyScripts/rate/RateServices.groovy (révision 1800245) +++ applications/accounting/groovyScripts/rate/RateServices.groovy (copie de travail) @@ -31,7 +31,7 @@ * Service to create a rate amount value, if a existing value is present expire it before */ def updateRateAmount() { - GenericValue newEntity = delegator.makeValidValue('RateAmount', parameters) + GenericValue newEntity = prepare entity: 'RateAmount' if (!newEntity.rateCurrencyUomId) { newEntity.rateCurrencyUomId = UtilProperties.getPropertyValue('general.properties', 'currency.uom.id.default') } @@ -65,11 +65,11 @@ * Service to expire a rate amount value */ def expireRateAmount() { - GenericValue lookedUpValue = delegator.makeValidValue('RateAmount', parameters) + GenericValue lookedUpValue = prepare entity: 'RateAmount' if (!lookedUpValue.rateCurrencyUomId) { lookedUpValue.rateCurrencyUomId = UtilProperties.getPropertyValue('general.properties', 'currency.uom.id.default') } - lookedUpValue = from('RateAmount').where(lookedUpValue.getFields(lookedUpValue.getModelEntity().getPkFieldNames())).queryOne() + lookedUpValue = fromOneAuto('RateAmount') if (lookedUpValue) { Timestamp previousDay = UtilDateTime.adjustTimestamp(UtilDateTime.nowTimestamp(), 5, -1) lookedUpValue.thruDate = UtilDateTime.getDayEnd(previousDay) @@ -93,7 +93,7 @@ GenericValue partyRate = EntityUtil.getFirst(partyRates) partyRate.thruDate = UtilDateTime.nowTimestamp() } - GenericValue newEntity = delegator.makeValidValue('PartyRate', parameters) + GenericValue newEntity = prepare entity: 'PartyRate' if (!newEntity.fromDate) newEntity.fromDate = UtilDateTime.nowTimestamp() newEntity.create() Index: framework/base/src/main/java/org/apache/ofbiz/base/OfbizDslDescriptorForIntelliJ.gdsl =================================================================== --- framework/base/src/main/java/org/apache/ofbiz/base/OfbizDslDescriptorForIntelliJ.gdsl (révision 1800195) +++ framework/base/src/main/java/org/apache/ofbiz/base/OfbizDslDescriptorForIntelliJ.gdsl (copie de travail) @@ -29,6 +29,7 @@ method name: 'runService', type: 'java.util.Map', params: [serviceName: 'String', inputMap: 'java.util.Map'] method name: 'run', type: 'java.util.Map', params: [args: 'java.util.Map'] + method name: 'prepare', type: 'java.util.Map', params: [args: 'java.util.Map'] method name: 'makeValue', type: 'java.util.Map', params: [entityName: 'String'] method name: 'select', type: 'org.apache.ofbiz.entity.util.EntityQuery', params: [entity: 'java.util.Set'] method name: 'select', type: 'org.apache.ofbiz.entity.util.EntityQuery', params: [entity: 'String...']
