You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ofbiz.apache.org by nm...@apache.org on 2020/05/15 12:42:08 UTC

[ofbiz-framework] 01/02: Improved: Converted AccountServices from mini lang to groovy

This is an automated email from the ASF dual-hosted git repository.

nmalin pushed a commit to branch trunk
in repository https://gitbox.apache.org/repos/asf/ofbiz-framework.git

commit 8af7cf877583acf100d1229260e62fe7f4c92563
Author: Wiebke Pätzold <Wi...@ecomify.de>
AuthorDate: Thu Apr 16 09:08:36 2020 +0200

    Improved: Converted AccountServices from mini lang to groovy
    
    (OFBIZ-11413)
    
    Added ServiceDefs createPartyContactMechs and createPartyGroupRoleAndContactMechs.
    Also converted createPartyGroupRoleAndContactMechs because it is used in AccountServies and needed more return values.
---
 .../sfa/account/AccountServices.groovy             | 44 ++++++++++
 .../minilang/sfa/account/AccountServices.xml       | 36 --------
 applications/marketing/servicedef/services.xml     |  4 +-
 .../groovyScripts/party/PartySimpleMethods.groovy  | 97 ++++++++++++++++++++++
 applications/party/servicedef/services.xml         | 37 +++++++++
 5 files changed, 180 insertions(+), 38 deletions(-)

diff --git a/applications/marketing/groovyScripts/sfa/account/AccountServices.groovy b/applications/marketing/groovyScripts/sfa/account/AccountServices.groovy
new file mode 100644
index 0000000..d659bd2
--- /dev/null
+++ b/applications/marketing/groovyScripts/sfa/account/AccountServices.groovy
@@ -0,0 +1,44 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+
+/**
+ * create Account Group
+ */
+def createAccount() {
+    parameters.roleTypeId = "ACCOUNT"
+
+    Map serviceResult = run service: "createPartyGroupRoleAndContactMechs", with: parameters
+    String partyId = serviceResult.partyId
+
+    Map result = success()
+    result.successMessage = serviceResult.successMessage
+    result.partyId = partyId
+
+    run service: "ensurePartyRole", with: [partyId: userLogin.partyId,
+                                           roleTypeId: "OWNER"]
+
+    run service: "createPartyRelationship", with: [partyIdFrom: userLogin.partyId,
+                                                   partyIdTo: partyId,
+                                                   roleTypeIdFrom: "OWNER",
+                                                   roleTypeIdTo: "ACCOUNT",
+                                                   partyRelationshipTypeId: "ACCOUNT"]
+
+    return result
+}
diff --git a/applications/marketing/minilang/sfa/account/AccountServices.xml b/applications/marketing/minilang/sfa/account/AccountServices.xml
deleted file mode 100644
index b4284f8..0000000
--- a/applications/marketing/minilang/sfa/account/AccountServices.xml
+++ /dev/null
@@ -1,36 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-    Licensed to the Apache Software Foundation (ASF) under one
-    or more contributor license agreements.  See the NOTICE file
-    distributed with this work for additional information
-    regarding copyright ownership.  The ASF licenses this file
-    to you under the Apache License, Version 2.0 (the
-    "License"); you may not use this file except in compliance
-    with the License.  You may obtain a copy of the License at
-
-    http://www.apache.org/licenses/LICENSE-2.0
-
-    Unless required by applicable law or agreed to in writing,
-    software distributed under the License is distributed on an
-    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-    KIND, either express or implied.  See the License for the
-    specific language governing permissions and limitations
-    under the License.
--->
-<simple-methods xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-    xmlns="http://ofbiz.apache.org/Simple-Method" xsi:schemaLocation="http://ofbiz.apache.org/Simple-Method http://ofbiz.apache.org/dtds/simple-methods.xsd">
-    <simple-method method-name="createAccount"  short-description="create Account Group">
-        <set field="parameters.roleTypeId" value="ACCOUNT"/>
-        <call-simple-method method-name="createPartyGroupRoleAndContactMechs" xml-resource="component://party/minilang/party/PartySimpleMethods.xml"/>
-        <field-to-result field="partyId"/>
-        <set field="ensurePartyRoleCtx.partyId" from-field="userLogin.partyId"/>
-        <set field="ensurePartyRoleCtx.roleTypeId" value="OWNER"/>
-        <call-service service-name="ensurePartyRole" in-map-name="ensurePartyRoleCtx"/>
-        <set field="partyRelationshipCtx.partyIdFrom" from-field="userLogin.partyId"/>
-        <set field="partyRelationshipCtx.partyIdTo" from-field="partyId"/>
-        <set field="partyRelationshipCtx.roleTypeIdFrom" value="OWNER"/>
-        <set field="partyRelationshipCtx.roleTypeIdTo" value="ACCOUNT"/>
-        <set field="partyRelationshipCtx.partyRelationshipTypeId" value="ACCOUNT"/>
-        <call-service service-name="createPartyRelationship" in-map-name="partyRelationshipCtx"/>
-    </simple-method>
-</simple-methods>
diff --git a/applications/marketing/servicedef/services.xml b/applications/marketing/servicedef/services.xml
index 7825290..ec5d244 100644
--- a/applications/marketing/servicedef/services.xml
+++ b/applications/marketing/servicedef/services.xml
@@ -547,8 +547,8 @@ under the License.
         <attribute name="useEmail2" type="String" mode="IN" optional="true"/>
     </service>
     <!-- Account services  -->
-    <service name="createAccount" engine="simple"
-        location="component://marketing/minilang/sfa/account/AccountServices.xml" invoke="createAccount">
+    <service name="createAccount" engine="groovy"
+        location="component://marketing/groovyScripts/sfa/account/AccountServices.groovy" invoke="createAccount">
         <description>Create an Account Group</description>
         <auto-attributes entity-name="PartyGroup" mode="IN" optional="true">
             <exclude field-name="partyId"/>
diff --git a/applications/party/groovyScripts/party/PartySimpleMethods.groovy b/applications/party/groovyScripts/party/PartySimpleMethods.groovy
new file mode 100644
index 0000000..7e934ec
--- /dev/null
+++ b/applications/party/groovyScripts/party/PartySimpleMethods.groovy
@@ -0,0 +1,97 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.ofbiz.base.util.UtilProperties
+import org.apache.ofbiz.base.util.UtilValidate
+import org.apache.ofbiz.minilang.SimpleMapProcessor
+import org.apache.ofbiz.service.GenericServiceException
+import org.apache.ofbiz.service.ServiceUtil
+
+// Simple method to create a party group, its role and basic contact mechs
+
+/**
+ * Creates a party group, role and contactMechs
+ * @return
+ */
+def createPartyGroupRoleAndContactMechs() {
+    try {
+        parameters.partyGroupContext = resolvePartyGroupMap(parameters)
+        if (parameters.address1) {
+            parameters.postalAddressContext = resolvePostalAddressMap()
+        }
+        if (parameters.contactNumber) {
+            parameters.telecomNumberContext = resolveTelecomNumberMap()
+        }
+    } catch (GenericServiceException e) {
+        return error(e.toString())
+    }
+
+    if (parameters.emailAddress) {
+        Map emailAddressContext = [:]
+        if  (!UtilValidate.isEmail(parameters.emailAddress)) {
+            return error(UtilProperties.getMessage('PartyUiLabels',
+                    'PartyEmailAddressNotFormattedCorrectly', parameters.locale))
+        } else {
+            emailAddressContext.emailAddress = parameters.emailAddress
+        }
+        parameters.emailAddressContext = emailAddressContext
+    }
+
+    parameters.partyGroupContext.partyTypeId = "PARTY_GROUP"
+    Map serviceResult = run service: "createPartyGroup", with: parameters.partyGroupContext
+    if (ServiceUtil.isError(serviceResult)) {
+        return serviceResult
+    }
+    Map result = success()
+    result.partyId = serviceResult.partyId
+
+    if (parameters.roleTypeId) {
+        Map serviceResultCPR = run service: "createPartyRole", with: [partyId: serviceResult.partyId,
+                                                                     roleTypeId: parameters.roleTypeId]
+        if (ServiceUtil.isError(serviceResultCPR)) {
+            return serviceResultCPR
+        }
+    }
+
+    run service:"createPartyContactMechs", with: parameters
+
+    return result
+}
+
+// TODO need to convert from MapProcessor
+def resolvePartyGroupMap() {
+    return resolvePartyProcessMap('partyGroup')
+}
+def resolvePostalAddressMap() {
+    return resolvePartyProcessMap('postalAddress')
+}
+def resolveTelecomNumberMap() {
+    return resolvePartyProcessMap('telecomNumber')
+}
+def resolvePartyProcessMap(String processMapName) {
+    List messages = []
+    Map resultMap = [:]
+    SimpleMapProcessor.runSimpleMapProcessor('component://party/minilang/party/PartyMapProcs.xml',
+            processMapName, parameters, resultMap, messages, context.locale)
+    // Check errors
+    if (messages) {
+        throw new GenericServiceException(messages.join(','))
+    }
+    return resultMap
+}
\ No newline at end of file
diff --git a/applications/party/servicedef/services.xml b/applications/party/servicedef/services.xml
index c3c15ed..07337ec 100644
--- a/applications/party/servicedef/services.xml
+++ b/applications/party/servicedef/services.xml
@@ -91,6 +91,43 @@ under the License.
             </type-validate>
         </attribute>
     </service>
+
+    <service name="createPartyGroupRoleAndContactMechs" engine="groovy" default-entity-name="PartyGroupRoleAndContactMechs"
+            location="component://party/groovyScripts/party/PartySimpleMethods.groovy" invoke="createPartyGroupRoleAndContactMechs">
+        <description>Create Party Group Role and Contact Mechs</description>
+        <auto-attributes entity-name="PartyGroup" mode="IN" optional="true">
+            <exclude field-name="partyId"/>
+        </auto-attributes>
+        <auto-attributes entity-name="PostalAddress" mode="IN" optional="true">
+            <exclude field-name="contactMechId"/>
+        </auto-attributes>
+        <auto-attributes entity-name="TelecomNumber" mode="IN" optional="true">
+            <exclude field-name="contactMechId"/>
+        </auto-attributes>
+        <attribute name="groupName" type="String" mode="IN" optional="false"/>
+        <attribute name="address1" type="String" mode="IN" optional="true"/>
+        <attribute name="contactNumber" type="String" mode="IN" optional="true"/>
+        <attribute name="emailAddress" type="String" mode="IN" optional="true"/>
+        <attribute name="postalAddContactMechPurpTypeId" type="String" mode="IN" optional="true"/>
+        <attribute name="phoneContactMechPurpTypeId" type="String" mode="IN" optional="true"/>
+        <attribute name="emailContactMechPurpTypeId" type="String" mode="IN" optional="true"/>
+        <attribute name="roleTypeId" type="String" mode="IN" optional="true"/>
+        <attribute name="partyId" type="String" mode="OUT" optional="false"/>
+    </service>
+
+    <service name="createPartyContactMechs" engine="simple" default-entity-name="createPartyContactMechs"
+            location="component://party/minilang/party/PartySimpleMethods.xml" invoke="createPartyContactMechs">
+        <description>Create Party Group Role and Contact Mechs</description>
+        <attribute name="partyGroupContext" type="Map" mode="IN" optional="true"/>
+        <attribute name="postalAddressContext" type="Map" mode="IN" optional="true"/>
+        <attribute name="telecomNumberContext" type="Map" mode="IN" optional="true"/>
+        <attribute name="postalAddContactMechPurpTypeId" type="String" mode="IN" optional="true"/>
+        <attribute name="contactNumber" type="String" mode="IN" optional="true"/>
+        <attribute name="phoneContactMechPurpTypeId" type="String" mode="IN" optional="true"/>
+        <attribute name="emailAddress" type="String" mode="IN" optional="true"/>
+        <attribute name="emailContactMechPurpTypeId" type="String" mode="IN" optional="true"/>
+    </service>
+
     <service name="updatePerson" engine="java" default-entity-name="Person"
             location="org.apache.ofbiz.party.party.PartyServices" invoke="updatePerson" auth="true">
         <description>Update a Person</description>