Re: [ofbiz-framework] branch trunk updated: Improved: All the service level error messages for missing required field for party component. (OFBIZ-7735) Thanks Ratnesh Upadhyay for reporting and Kirti Arora for providing the updated patch.

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
2 messages Options
Reply | Threaded
Open this post in threaded view
|

Re: [ofbiz-framework] branch trunk updated: Improved: All the service level error messages for missing required field for party component. (OFBIZ-7735) Thanks Ratnesh Upadhyay for reporting and Kirti Arora for providing the updated patch.

Pawan Verma-2
Hi Suraj,

In this commit, we got unintentional '+' character
in applications/party/servicedef/services.xml file which was causing error
on the console.

I've corrected it at f195e68.
--
Thanks & Regards
Pawan Verma
ofbiz.apache.org


On Sat, Apr 25, 2020 at 7:07 PM <[hidden email]> wrote:

> This is an automated email from the ASF dual-hosted git repository.
>
> surajk pushed a commit to branch trunk
> in repository https://gitbox.apache.org/repos/asf/ofbiz-framework.git
>
>
> The following commit(s) were added to refs/heads/trunk by this push:
>      new d21bb75  Improved: All the service level error messages for
> missing required field for party component. (OFBIZ-7735) Thanks Ratnesh
> Upadhyay for reporting and Kirti Arora for providing the updated patch.
> d21bb75 is described below
>
> commit d21bb752f0b1e1691f67b3205fbcb84ddaccf28e
> Author: Suraj Khurana <[hidden email]>
> AuthorDate: Sat Apr 25 18:50:22 2020 +0530
>
>     Improved: All the service level error messages for missing required
> field for party component.
>     (OFBIZ-7735)
>     Thanks Ratnesh Upadhyay for reporting and Kirti Arora for providing
> the updated patch.
> ---
>  applications/party/config/PartyErrorUiLabels.xml |  72 +++++++
>  applications/party/servicedef/services.xml       | 228
> +++++++++++++++++++----
>  applications/party/servicedef/services_view.xml  |  42 ++++-
>  3 files changed, 297 insertions(+), 45 deletions(-)
>
> diff --git a/applications/party/config/PartyErrorUiLabels.xml
> b/applications/party/config/PartyErrorUiLabels.xml
> index b01c812..86db4ae 100644
> --- a/applications/party/config/PartyErrorUiLabels.xml
> +++ b/applications/party/config/PartyErrorUiLabels.xml
> @@ -53,6 +53,78 @@
>      <property key="PartyRequiredFieldMissingWorkEffortTypeId">
>          <value xml:lang="en">Required Field Missing : WorkEffort Type
> Id.</value>
>      </property>
> +    <property key="PartyRequiredFieldMissingAddress">
> +            <value xml:lang="en">Required Field Missing : Address</value>
> +        </property>
> +    <property key="PartyRequiredFieldMissingChildRoleTypeIdList">
> +        <value xml:lang="en">Required Field Missing : ChildRole Type Id
> List</value>
> +    </property>
> +    <property key="PartyRequiredFieldMissingContactMechId">
> +        <value xml:lang="en">Required Field Missing : Contact Mech
> Id</value>
> +    </property>
> +    <property key="PartyRequiredFieldMissingContactMechPurposeTypeId">
> +        <value xml:lang="en">Required Field Missing : Contact Mech
> Purpose Type Id</value>
> +    </property>
> +    <property key="PartyRequiredFieldMissingContactMechTypeId">
> +        <value xml:lang="en">Required Field Missing : Contact Mech Type
> Id</value>
> +    </property>
> +    <property key="PartyRequiredFieldMissingEmailAddress">
> +        <value xml:lang="en">Required Field Missing : Email
> Address</value>
> +    </property>
> +    <property key="PartyRequiredFieldMissingFirstName">
> +        <value xml:lang="en">Required Field Missing : First Name</value>
> +    </property>
> +    <property key="PartyRequiredFieldMissingLastName">
> +        <value xml:lang="en">Required Field Missing : Last Name</value>
> +    </property>
> +    <property key="PartyRequiredFieldMissingLookupResult">
> +        <value xml:lang="en">Required Field Missing : Lookup
> Result</value>
> +    </property>
> +    <property key="PartyRequiredFieldMissingNewUserLogin">
> +        <value xml:lang="en">Required Field Missing : New User
> Login</value>
> +    </property>
> +    <property key="PartyRequiredFieldMissingOldContactMechId">
> +        <value xml:lang="en">Required Field Missing : Old Contact Mech
> Id</value>
> +    </property>
> +    <property key="PartyRequiredFieldMissingOrganizationPartyId">
> +        <value xml:lang="en">Required Field Missing : Organization Party
> Id</value>
> +    </property>
> +    <property
> key="PartyRequiredFieldMissingParentOrganizationPartyIdList">
> +        <value xml:lang="en">Required Field Missing : Organization Party
> Id List</value>
> +    </property>
> +    <property key="PartyRequiredFieldMissingPartyId">
> +        <value xml:lang="en">Required Field Missing : Party Id</value>
> +    </property>
> +    <property key="PartyRequiredFieldMissingPartyIdFrom">
> +        <value xml:lang="en">Required Field Missing : Party Id
> From</value>
> +    </property>
> +    <property key="PartyRequiredFieldMissingPartyIdTo">
> +        <value xml:lang="en">Required Field Missing : Party Id To</value>
> +    </property>
> +    <property key="PartyRequiredFieldMissingPartyInvitationId">
> +        <value xml:lang="en">Required Field Missing : Party Invitation
> Id</value>
> +    </property>
> +    <property key="PartyRequiredFieldMissingProductStoreId">
> +        <value xml:lang="en">Required Field Missing : Product Store
> Id</value>
> +    </property>
> +    <property key="PartyRequiredFieldMissingRelatedPartyIdList">
> +        <value xml:lang="en">Required Field Missing : Related Party Id
> List</value>
> +    </property>
> +    <property key="PartyRequiredFieldMissingRoleTypeId">
> +        <value xml:lang="en">Required Field Missing : Role Type Id</value>
> +    </property>
> +    <property key="PartyRequiredFieldMissingStatusId">
> +        <value xml:lang="en">Required Field Missing : Status Id</value>
> +    </property>
> +    <property key="PartyRequiredFieldMissingTelno">
> +        <value xml:lang="en">Required Field Missing : Tel no.</value>
> +    </property>
> +    <property key="PartyRequiredFieldMissingUserLoginId">
> +        <value xml:lang="en">Required Field Missing : User Login
> Id</value>
> +    </property>
> +    <property key="PartyRequiredFieldMissingVerifyHash">
> +        <value xml:lang="en">Required Field Missing : Verify Hash</value>
> +    </property>
>      <property key="PartyUploadedFileDataNotFound">
>          <value xml:lang="en">Uploaded file data not found</value>
>      </property>
> diff --git a/applications/party/servicedef/services.xml
> b/applications/party/servicedef/services.xml
> index fc71f8e..39fe18c 100644
> --- a/applications/party/servicedef/services.xml
> +++ b/applications/party/servicedef/services.xml
> @@ -85,7 +85,11 @@ under the License.
>          <auto-attributes entity-name="Person" mode="IN" include="nonpk"
> optional="true"/>
>          <auto-attributes entity-name="Party" mode="IN" include="nonpk"
> optional="true"/>
>          <attribute name="partyId" type="String" mode="INOUT"
> optional="true" entity-name="Person"/>
> -        <attribute name="newUserLogin" type="Map" mode="OUT"
> optional="false"/>
> +        <attribute name="newUserLogin" type="Map" mode="OUT"
> optional="false">
> +            <type-validate>
> +                <fail-property resource="PartyErrorUiLabels"
> property="PartyRequiredFieldMissingNewUserLogin"/>
> +            </type-validate>
> +        </attribute>
>      </service>
>      <service name="updatePerson" engine="java"
> default-entity-name="Person"
>              location="org.apache.ofbiz.party.party.PartyServices"
> invoke="updatePerson" auth="true">
> @@ -144,7 +148,11 @@ under the License.
>      <service name="getPartyNameForDate" engine="groovy"
>
>  location="component://party/groovyScripts/party/PartyServices.groovy"
> invoke="getPartyNameForDate" auth="true">
>          <description>Get Party Name For Date</description>
> -        <attribute name="partyId" type="String" mode="IN"
> optional="false"/>
> +        <attribute name="partyId" type="String" mode="IN"
> optional="false">
> +            <type-validate>
> +                <fail-property resource="PartyErrorUiLabels"
> property="PartyRequiredFieldMissingPartyId"/>
> +            </type-validate>
> +        </attribute>
>          <attribute name="compareDate" type="Timestamp" mode="IN"
> optional="true"><!-- defaults to now --></attribute>
>          <attribute name="lastNameFirst" type="String" mode="IN"
> optional="true"><!-- Y or N, defaults to N --></attribute>
>          <attribute name="groupName" type="String" mode="OUT"
> optional="true"/>
> @@ -242,7 +250,11 @@ under the License.
>          </deprecated>
>          <attribute name="firstName" type="String" form-display="true"
> form-label="First name" mode="IN" optional="true"/>
>          <attribute name="lastName" type="String" form-display="true"
> form-label="Last name" mode="IN" optional="true"/>
> -        <attribute name="lookupResult" type="List" mode="OUT"
> optional="false"/>
> +        <attribute name="lookupResult" type="List" mode="OUT"
> optional="false">
> +            <type-validate>
> +                <fail-property resource="PartyErrorUiLabels"
> property="PartyRequiredFieldMissingLookupResult"/>
> +            </type-validate>
> +        </attribute>
>      </service>
>
>      <service name="findPartiesById" engine="java"  auth="true"
> @@ -272,24 +284,44 @@ under the License.
>      <service name="ensurePartyRole" engine="simple"
>
>  location="component://party/minilang/party/PartySimpleMethods.xml"
> invoke="ensureNaPartyRole" auth="false">
>          <description>Ensure that the party is in the specified
> role.</description>
> -        <attribute name="partyId" type="String" mode="IN"
> optional="false"/>
> -        <attribute name="roleTypeId" type="String" mode="IN"
> optional="false"/>
> +        <attribute name="partyId" type="String" mode="IN"
> optional="false">
> +            <type-validate>
> +                <fail-property resource="PartyErrorUiLabels"
> property="PartyRequiredFieldMissingPartyId"/>
> +            </type-validate>
> +        </attribute>
> +        <attribute name="roleTypeId" type="String" mode="IN"
> optional="false">
> +            <type-validate>
> +                <fail-property resource="PartyErrorUiLabels"
> property="PartyRequiredFieldMissingRoleTypeId"/>
> +            </type-validate>
> +        </attribute>
>      </service>
>      <service name="ensureNaPartyRole" engine="simple"
>
>  location="component://party/minilang/party/PartySimpleMethods.xml"
> invoke="ensureNaPartyRole" auth="false">
>          <description>Ensure that the party is in the _NA_
> role.</description>
> -        <attribute name="partyId" type="String" mode="IN"
> optional="false"/>
> +        <attribute name="partyId" type="String" mode="IN"
> optional="false">
> +            <type-validate>
> +                <fail-property resource="PartyErrorUiLabels"
> property="PartyRequiredFieldMissingPartyId"/>
> +            </type-validate>
> +        </attribute>
>      </service>
>      <service name="ensurePartyRoleFrom" engine="simple"
>
>  location="component://party/minilang/party/PartySimpleMethods.xml"
> invoke="ensureNaPartyRole" auth="true">
>          <description>Ensure that the party indicate by partyIdFrom is in
> the roleTypeIdFrom specifc role. If roleTypeIdFrom isn't present use
> _NA_</description>
> -        <attribute name="partyIdFrom" type="String" mode="IN"
> optional="false"/>
> +        <attribute name="partyIdFrom" type="String" mode="IN"
> optional="false">
> +            <type-validate>
> +                <fail-property resource="PartyErrorUiLabels"
> property="PartyRequiredFieldMissingPartyIdFrom"/>
> +            </type-validate>
> +        </attribute>
>          <attribute name="roleTypeIdFrom" type="String" mode="IN"
> optional="true"/>
>      </service>
>      <service name="ensurePartyRoleTo" engine="simple"
>
>  location="component://party/minilang/party/PartySimpleMethods.xml"
> invoke="ensureNaPartyRole" auth="true">
>          <description>Ensure that the party indicate by partyIdTo is in
> the roleTypeIdTo specific role. If roleTypeIdTo isn't present use
> _NA_</description>
> -        <attribute name="partyIdTo" type="String" mode="IN"
> optional="false"/>
> +        <attribute name="partyIdTo" type="String" mode="IN"
> optional="false">
> +            <type-validate>
> +                <fail-property resource="PartyErrorUiLabels"
> property="PartyRequiredFieldMissingPartyIdTo"/>
> +            </type-validate>
> +        </attribute>
>          <attribute name="roleTypeIdTo" type="String" mode="IN"
> optional="true"/>
>      </service>
>
> @@ -395,8 +427,16 @@ under the License.
>          <description>Update a PartyContactMech</description>
>          <permission-service
> service-name="partyContactMechPermissionCheck" main-action="UPDATE"/>
>          <auto-attributes entity-name="PartyContactMech" include="all"
> mode="IN" optional="true"/>
> -        <attribute name="contactMechId" type="String" mode="INOUT"
> optional="false"/>
> -        <attribute name="contactMechTypeId" type="String" mode="IN"
> optional="false"/>
> +        <attribute name="contactMechId" type="String" mode="INOUT"
> optional="false">
> +            <type-validate>
> +                <fail-property resource="PartyErrorUiLabels"
> property="PartyRequiredFieldMissingContactMechId"/>
> +            </type-validate>
> +        </attribute>
> +        <attribute name="contactMechTypeId" type="String" mode="IN"
> optional="false">
> +            <type-validate>
> +                <fail-property resource="PartyErrorUiLabels"
> property="PartyRequiredFieldMissingContactMechTypeId"/>
> +            </type-validate>
> +        </attribute>
>          <attribute name="infoString" type="String" mode="IN"
> optional="true"/>
>          <attribute name="newContactMechId" type="String" mode="IN"
> optional="true"/>
>      </service>
> @@ -405,13 +445,21 @@ under the License.
>          <description>Delete a PartyContactMech</description>
>          <permission-service
> service-name="partyContactMechPermissionCheck" main-action="DELETE"/>
>          <attribute name="partyId" type="String" mode="IN"
> optional="true"/>
> -        <attribute name="contactMechId" type="String" mode="IN"
> optional="false"/>
> +        <attribute name="contactMechId" type="String" mode="IN"
> optional="false">
> +            <type-validate>
> +                <fail-property resource="PartyErrorUiLabels"
> property="PartyRequiredFieldMissingContactMechId"/>
> +            </type-validate>
> +        </attribute>
>      </service>
>      <!-- Party ContachMech reverse find -->
>      <service name="findPartyFromEmailAddress" engine="simple"
>
>  location="component://party/minilang/contact/PartyContactMechServices.xml"
> invoke="findPartyFromEmailAddress" auth="true">
>          <description>Find the partyId/contactMechId for a specific email
> address, if not found do not return a value</description>
> -        <attribute name="address" type="String" mode="IN"
> optional="false"/>
> +        <attribute name="address" type="String" mode="IN"
> optional="false">
> +            <type-validate>
> +                <fail-property resource="PartyErrorUiLabels"
> property="PartyRequiredFieldMissingAddress"/>
> +            </type-validate>
> +        </attribute>
>          <attribute name="caseInsensitive" type="String" mode="IN"
> optional="true"/>
>          <attribute name="personal" type="String" mode="IN"
> optional="true"/><!-- field not used -->
>          <attribute name="fromDate" type="Timestamp" mode="IN"
> optional="true"/>
> @@ -421,7 +469,11 @@ under the License.
>      <service name="findPartyFromTelephone" engine="simple"
>
>  location="component://party/minilang/contact/PartyContactMechServices.xml"
> invoke="findPartyFromTelephone" auth="true">
>          <description>Find the partyId/contactMechId for a specific
> telephone number, if not found do not return a value</description>
> -        <attribute name="telno" type="String" mode="IN" optional="false"/>
> +        <attribute name="telno" type="String" mode="IN" optional="false">
> +            <type-validate>
> +                <fail-property resource="PartyErrorUiLabels"
> property="PartyRequiredFieldMissingTelno"/>
> +            </type-validate>
> +        </attribute>
>          <attribute name="partyId" type="String" mode="OUT"
> optional="true"/>
>          <attribute name="contactMechId" type="String" mode="OUT"
> optional="true"/>
>      </service>
> @@ -431,7 +483,11 @@ under the License.
>              Find the partyId/contactMechId for a specific telephone
> number, if not found do not return a value.
>              Same than above but keep the number complete internally.
>          </description>
> -        <attribute name="telno" type="String" mode="IN" optional="false"/>
> +        <attribute name="telno" type="String" mode="IN" optional="false">
> +            <type-validate>
> +                <fail-property resource="PartyErrorUiLabels"
> property="PartyRequiredFieldMissingTelno"/>
> +            </type-validate>
> +        </attribute>
>          <attribute name="partyId" type="String" mode="OUT"
> optional="true"/>
>          <attribute name="contactMechId" type="String" mode="OUT"
> optional="true"/>
>      </service>
> @@ -443,7 +499,11 @@ under the License.
>          <auto-attributes entity-name="PostalAddress" include="nonpk"
> mode="IN" optional="true"/>
>          <attribute name="paymentMethodId" type="String" mode="IN"
> optional="true"/>
>          <attribute name="contactMechPurposeTypeId" type="String"
> mode="IN" optional="true"/>
> -        <attribute name="contactMechId" type="String" mode="OUT"
> optional="false"/>
> +        <attribute name="contactMechId" type="String" mode="OUT"
> optional="false">
> +            <type-validate>
> +                <fail-property resource="PartyErrorUiLabels"
> property="PartyRequiredFieldMissingContactMechId"/>
> +            </type-validate>
> +        </attribute>
>          <attribute name="latitude" type="String" mode="IN"
> optional="true"/>
>          <attribute name="longitude" type="String" mode="IN"
> optional="true"/>
>          <override name="address1" optional="false"/>
> @@ -494,9 +554,21 @@ under the License.
>          <description>Update an Email Address</description>
>          <permission-service
> service-name="partyContactMechPermissionCheck" main-action="UPDATE"/>
>          <auto-attributes entity-name="PartyContactMech" include="all"
> mode="IN" optional="true"/>
> -        <attribute name="contactMechId" type="String" mode="INOUT"
> optional="false"/> <!-- the out paramater is the id of the new address -->
> -        <attribute name="emailAddress" type="String" mode="IN"
> optional="false"/>
> -        <attribute name="oldContactMechId" type="String" mode="OUT"
> optional="false"/> <!-- this is the id of the old address -->
> +        <attribute name="contactMechId" type="String" mode="INOUT"
> optional="false"> <!-- the out paramater is the id of the new address -->
> +            <type-validate>
> +                    <fail-property resource="PartyErrorUiLabels"
> property="PartyRequiredFieldMissingContactMechId"/>
> +            </type-validate>
> ++        </attribute>
> ++        <attribute name="emailAddress" type="String" mode="IN"
> optional="false">
> ++            <type-validate>
> ++                <fail-property resource="PartyErrorUiLabels"
> property="PartyRequiredFieldMissingEmailAddress"/>
> ++            </type-validate>
> ++        </attribute>
> ++        <attribute name="oldContactMechId" type="String" mode="OUT"
> optional="false">
> ++            <type-validate>
> ++                <fail-property resource="PartyErrorUiLabels"
> property="PartyRequiredFieldMissingOldContactMechId"/>
> ++            </type-validate>
> ++        </attribute>
>      </service>
>      <service name="copyPartyContactMechs" engine="java"
>          location="org.apache.ofbiz.party.contact.ContactMechServices"
> invoke="copyPartyContactMechs" auth="true">
> @@ -966,8 +1038,16 @@ under the License.
>      <service name="getPartyEmail" engine="groovy"
>
>  location="component://party/groovyScripts/party/PartyServices.groovy"
> invoke="getPartyEmail" auth="false">
>          <description>Get the main party Email address</description>
> -        <attribute name="partyId" type="String" mode="IN"
> optional="false"/>
> -        <attribute name="contactMechPurposeTypeId" type="String"
> mode="IN" optional="false" default-value="PRIMARY_EMAIL"/>
> +        <attribute name="partyId" type="String" mode="IN"
> optional="false">
> ++                <type-validate>
> ++                    <fail-property resource="PartyErrorUiLabels"
> property="PartyRequiredFieldMissingPartyId"/>
> ++                </type-validate>
> ++            </attribute>
> ++        <attribute name="contactMechPurposeTypeId" type="String"
> mode="IN" optional="false" default-value="PRIMARY_EMAIL">
> ++            <type-validate>
> ++                <fail-property resource="PartyErrorUiLabels"
> property="PartyRequiredFieldMissingContactMechPurposeTypeId"/>
> ++            </type-validate>
> ++        </attribute>
>          <attribute name="emailAddress" type="String" mode="OUT"
> optional="true"/>
>          <attribute name="contactMechId" type="String" mode="OUT"
> optional="true"/>
>      </service>
> @@ -987,7 +1067,11 @@ under the License.
>      <service name="getPartyPostalAddress" engine="groovy"
>
>  location="component://party/groovyScripts/party/PartyServices.groovy"
> invoke="getPartyPostalAddress" auth="false">
>          <description>Get the party postal address</description>
> -        <attribute name="partyId" type="String" mode="IN"
> optional="false"/>
> +        <attribute name="partyId" type="String" mode="IN"
> optional="false">
> +            <type-validate>
> +                <fail-property resource="PartyErrorUiLabels"
> property="PartyRequiredFieldMissingPartyId"/>
> +            </type-validate>
> +        </attribute>
>          <attribute name="contactMechPurposeTypeId" type="String"
> mode="INOUT" optional="true"/>
>          <attribute name="contactMechId" type="String" mode="OUT"
> optional="true"/>
>          <attribute name="address1" type="String" mode="OUT"
> optional="true"/>
> @@ -1022,9 +1106,21 @@ under the License.
>      </service>
>      <service name="sendCreatePartyEmailNotification" engine="groovy"
>
>  location="component://party/groovyScripts/party/PartyServices.groovy"
> invoke="sendCreatePartyEmailNotification" auth="false">
> -        <attribute name="partyId" type="String" mode="IN"
> optional="false"/>
> -        <attribute name="emailAddress" type="String" mode="IN"
> optional="false"/>
> -        <attribute name="productStoreId" type="String" mode="IN"
> optional="false"/>
> +        <attribute name="partyId" type="String" mode="IN"
> optional="false">
> ++            <type-validate>
> ++                <fail-property resource="PartyErrorUiLabels"
> property="PartyRequiredFieldMissingPartyId"/>
> ++            </type-validate>
> ++        </attribute>
> ++        <attribute name="emailAddress" type="String" mode="IN"
> optional="false">
> ++            <type-validate>
> ++                <fail-property resource="PartyErrorUiLabels"
> property="PartyRequiredFieldMissingEmailAddress"/>
> ++            </type-validate>
> ++        </attribute>
> ++        <attribute name="productStoreId" type="String" mode="IN"
> optional="false">
> ++            <type-validate>
> ++                <fail-property resource="PartyErrorUiLabels"
> property="PartyRequiredFieldMissingProductStoreId"/>
> ++            </type-validate>
> ++        </attribute>
>      </service>
>
>      <!-- Email address verification services-->
> @@ -1036,11 +1132,19 @@ under the License.
>      </service>
>      <service name="sendVerifyEmailAddressNotification" engine="groovy"
>
> location="component://party/groovyScripts/contact/ContactMechServices.groovy"
> invoke="sendVerifyEmailAddressNotification">
> -        <attribute name="emailAddress" type="String" mode="IN"
> optional="false"/>
> +        <attribute name="emailAddress" type="String" mode="IN"
> optional="false">
> ++            <type-validate>
> ++                <fail-property resource="PartyErrorUiLabels"
> property="PartyRequiredFieldMissingEmailAddress"/>
> ++            </type-validate>
> ++        </attribute>
>      </service>
>      <service name="verifyEmailAddress" engine="groovy"
>
> location="component://party/groovyScripts/contact/ContactMechServices.groovy"
> invoke="verifyEmailAddress">
> -        <attribute name="verifyHash" type="String" mode="IN"
> optional="false"/>
> +        <attribute name="verifyHash" type="String" mode="IN"
> optional="false">
> ++            <type-validate>
> ++                <fail-property resource="PartyErrorUiLabels"
> property="PartyRequiredFieldMissingVerifyHash"/>
> ++            </type-validate>
> ++        </attribute>
>      </service>
>
>      <!-- Party Invitation Services -->
> @@ -1085,13 +1189,25 @@ under the License.
>      <service name="acceptPartyInvitation" engine="groovy"
>
>  location="component://party/groovyScripts/party/PartyInvitationServices.groovy"
> invoke="acceptPartyInvitation">
>          <permission-service
> service-name="accAndDecPartyInvitationPermissionCheck"/>
> -        <attribute name="partyInvitationId" type="String" mode="IN"/>
> -        <attribute name="partyId" type="String" mode="IN"/>
> +        <attribute name="partyInvitationId" type="String" mode="IN"
> optional="false">
> ++            <type-validate>
> ++                <fail-property resource="PartyErrorUiLabels"
> property="PartyRequiredFieldMissingPartyInvitationId"/>
> ++            </type-validate>
> ++        </attribute>
> ++        <attribute name="partyId" type="String" mode="IN"
> optional="false">
> ++            <type-validate>
> ++                <fail-property resource="PartyErrorUiLabels"
> property="PartyRequiredFieldMissingPartyId"/>
> ++            </type-validate>
> ++        </attribute>
>      </service>
>      <service name="declinePartyInvitation" engine="groovy"
>
>  location="component://party/groovyScripts/party/PartyInvitationServices.groovy"
> invoke="updatePartyInvitation">
>          <permission-service
> service-name="accAndDecPartyInvitationPermissionCheck"/>
> -        <attribute name="partyInvitationId" type="String" mode="IN"/>
> +        <attribute name="partyInvitationId" type="String" mode="IN"
> optional="false">
> +            <type-validate>
> +                <fail-property resource="PartyErrorUiLabels"
> property="PartyRequiredFieldMissingPartyInvitationId"/>
> +            </type-validate>
> +        </attribute>
>          <attribute name="statusId" type="String" mode="IN"
> optional="true" default-value="PARTYINV_DECLINED"/>
>      </service>
>      <service name="cancelPartyInvitation" engine="groovy"
> @@ -1188,7 +1304,11 @@ under the License.
>              The user with PARTYMGR_UPDATE permission can also perform
> this function.
>          </description>
>          <implements service="permissionInterface"/>
> -        <attribute name="partyInvitationId" type="String" mode="IN"
> optional="false"/>
> +        <attribute name="partyInvitationId" type="String" mode="IN"
> optional="false">
> ++            <type-validate>
> ++                <fail-property resource="PartyErrorUiLabels"
> property="PartyRequiredFieldMissingPartyInvitationId"/>
> ++            </type-validate>
> ++        </attribute>
>      </service>
>      <service name="cancelPartyInvitationPermissionCheck" engine="groovy"
>
>  location="component://party/groovyScripts/party/PartyPermissionServices.groovy"
> invoke="cancelPartyInvitationPermissionCheck">
> @@ -1198,7 +1318,11 @@ under the License.
>              The user with PARTYMGR_UPDATE permission can also perform
> this function.
>          </description>
>          <implements service="permissionInterface"/>
> -        <attribute name="partyInvitationId" type="String" mode="IN"
> optional="false"/>
> +        <attribute name="partyInvitationId" type="String" mode="IN"
> optional="false">
> ++            <type-validate>
> ++                <fail-property resource="PartyErrorUiLabels"
> property="PartyRequiredFieldMissingPartyInvitationId"/>
> ++            </type-validate>
> ++        </attribute>
>      </service>
>      <service name="partyCommunicationEventPermissionCheck" engine="groovy"
>
>  location="component://party/groovyScripts/party/PartyPermissionServices.groovy"
> invoke="partyCommunicationEventPermissionCheck">
> @@ -1299,10 +1423,26 @@ under the License.
>      <service name="quickCreateCustomer" engine="groovy"
>
>  location="component://party/groovyScripts/party/PartyServices.groovy"
> invoke="quickCreateCustomer">
>          <description>Create customer profile on basis of First Name ,Last
> Name and Email Address</description>
> -        <attribute name="firstName" type="String" mode="IN"
> optional="false"/>
> -        <attribute name="lastName" type="String" mode="IN"
> optional="false"/>
> -        <attribute name="emailAddress" type="String" mode="IN"
> optional="false"/>
> -        <attribute name="partyId" type="String" mode="OUT"
> optional="false"/>
> +        <attribute name="firstName" type="String" mode="IN"
> optional="false">
> +            <type-validate>
> +                <fail-property resource="PartyErrorUiLabels"
> property="PartyRequiredFieldMissingFirstName"/>
> +            </type-validate>
> +        </attribute>
> +        <attribute name="lastName" type="String" mode="IN"
> optional="false">
> +            <type-validate>
> +                <fail-property resource="PartyErrorUiLabels"
> property="PartyRequiredFieldMissingLastName"/>
> +            </type-validate>
> +        </attribute>
> +        <attribute name="emailAddress" type="String" mode="IN"
> optional="false">
> +            <type-validate>
> +                <fail-property resource="PartyErrorUiLabels"
> property="PartyRequiredFieldMissingEmailAddress"/>
> +            </type-validate>
> +        </attribute>
> +        <attribute name="partyId" type="String" mode="OUT"
> optional="false">
> +            <type-validate>
> +                <fail-property resource="PartyErrorUiLabels"
> property="PartyRequiredFieldMissingPartyId"/>
> +            </type-validate>
> +        </attribute>
>          <attribute name="contactListId" type="String" mode="IN"
> optional="true"/>
>          <attribute name="subscribeContactList" type="String" mode="IN"
> optional="true"/>
>      </service>
> @@ -1310,7 +1450,11 @@ under the License.
>      <service name="getPartyMainRole" engine="groovy"
>
>  location="component://party/groovyScripts/party/PartyServices.groovy"
> invoke="getPartyMainRole">
>          <description>Get the main role of this party which is a child of
> the MAIN_ROLE roletypeId</description>
> -        <attribute name="partyId" type="String" mode="IN"
> optional="false"/>
> +        <attribute name="partyId" type="String" mode="IN"
> optional="false">
> +            <type-validate>
> +                <fail-property resource="PartyErrorUiLabels"
> property="PartyRequiredFieldMissingPartyId"/>
> +            </type-validate>
> +        </attribute>
>          <attribute name="roleTypeId" type="String" mode="OUT"
> optional="true"/>
>          <attribute name="description" type="String" mode="OUT"
> optional="true"/>
>      </service>
> @@ -1336,8 +1480,16 @@ under the License.
>      <!-- send account activated email notification -->
>      <service name="sendAccountActivatedEmailNotification" engine="groovy"
>
>  location="component://party/groovyScripts/party/PartyServices.groovy"
> invoke="sendAccountActivatedEmailNotification" auth="false">
> -        <attribute name="userLoginId" type="String" mode="IN"
> optional="false"/>
> -        <attribute name="productStoreId" type="String" mode="IN"
> optional="false"/>
> +        <attribute name="userLoginId" type="String" mode="IN"
> optional="false">
> +            <type-validate>
> +                <fail-property resource="PartyErrorUiLabels"
> property="PartyRequiredFieldMissingUserLoginId"/>
> +            </type-validate>
> +        </attribute>
> +        <attribute name="productStoreId" type="String" mode="IN"
> optional="false">
> +            <type-validate>
> +                <fail-property resource="PartyErrorUiLabels"
> property="PartyRequiredFieldMissingProductStoreId"/>
> +            </type-validate>
> +        </attribute>
>      </service>
>      <service name="createAgreementAttribute"
> default-entity-name="AgreementAttribute" engine="entity-auto"
> invoke="create" auth="true">
>          <description>Create a AgreementAttribute entry</description>
> diff --git a/applications/party/servicedef/services_view.xml
> b/applications/party/servicedef/services_view.xml
> index 8b8c05c..46f6689 100644
> --- a/applications/party/servicedef/services_view.xml
> +++ b/applications/party/servicedef/services_view.xml
> @@ -184,7 +184,11 @@ under the License.
>              - The includeFromToSwitched and recurse attributes should by
> "Y" or "N" and default to N.
>              - The useCache attribute should be "true" or "false",
> defaults to "false"
>          </description>
> -        <attribute name="partyIdFrom" type="String" mode="IN"
> optional="false"/>
> +        <attribute name="partyIdFrom" type="String" mode="IN"
> optional="false">
> +            <type-validate>
> +                <fail-property resource="PartyErrorUiLabels"
> property="PartyRequiredFieldMissingPartyIdFrom"/>
> +            </type-validate>
> +        </attribute>
>          <attribute name="partyRelationshipTypeId" type="String" mode="IN"
> optional="true"/>
>          <attribute name="roleTypeIdFrom" type="String" mode="IN"
> optional="true"/>
>          <attribute name="roleTypeIdFromInclueAllChildTypes" type="String"
> mode="IN" optional="true"/>
> @@ -206,9 +210,17 @@ under the License.
>              The getParentsOfParents attribute defaults to Y.
>              The parentOrganizationPartyIdList coming out will contain the
> original organizationPartyId.
>          </description>
> -        <attribute name="organizationPartyId" type="String" mode="IN"
> optional="false"/>
> +        <attribute name="organizationPartyId" type="String" mode="IN"
> optional="false">
> +            <type-validate>
> +                <fail-property resource="PartyErrorUiLabels"
> property="PartyRequiredFieldMissingOrganizationPartyId"/>
> +            </type-validate>
> +        </attribute>
>          <attribute name="getParentsOfParents" type="String" mode="IN"
> optional="true"/>
> -        <attribute name="parentOrganizationPartyIdList" type="List"
> mode="OUT" optional="false"/>
> +        <attribute name="parentOrganizationPartyIdList" type="List"
> mode="OUT" optional="false">
> +            <type-validate>
> +                <fail-property resource="PartyErrorUiLabels"
> property="PartyRequiredFieldMissingParentOrganizationPartyIdList"/>
> +            </type-validate>
> +        </attribute>
>      </service>
>
>      <service name="getChildRoleTypes" engine="groovy"
> @@ -217,8 +229,16 @@ under the License.
>              Get Child RoleTypes.
>              The childRoleTypeIdList coming out will contain the original
> roleTypeId.
>          </description>
> -        <attribute name="roleTypeId" type="String" mode="IN"
> optional="false"/>
> -        <attribute name="childRoleTypeIdList" type="List" mode="OUT"
> optional="false"/>
> +        <attribute name="roleTypeId" type="String" mode="IN"
> optional="false">
> +            <type-validate>
> +                <fail-property resource="PartyErrorUiLabels"
> property="PartyRequiredFieldMissingRoleTypeId"/>
> +            </type-validate>
> +        </attribute>
> +        <attribute name="childRoleTypeIdList" type="List" mode="OUT"
> optional="false">
> +            <type-validate>
> +                <fail-property resource="PartyErrorUiLabels"
> property="PartyRequiredFieldMissingChildRoleTypeIdList"/>
> +            </type-validate>
> +        </attribute>
>      </service>
>
>      <!-- PostalAddressBoundary -->
> @@ -226,7 +246,11 @@ under the License.
>
>  location="component://party/groovyScripts/party/PartyServices.groovy"
> invoke="getPostalAddressBoundary">
>          <description>Get all Postal Address Boundaries</description>
>          <permission-service service-name="partyBasePermissionCheck"
> main-action="VIEW"/>
> -        <attribute name="contactMechId" type="String" mode="IN"
> optional="false"/>
> +        <attribute name="contactMechId" type="String" mode="IN"
> optional="false">
> +            <type-validate>
> +                <fail-property resource="PartyErrorUiLabels"
> property="PartyRequiredFieldMissingContactMechId"/>
> +            </type-validate>
> +        </attribute>
>          <attribute name="geos" type="java.util.List" mode="OUT"
> optional="true"/>
>      </service>
>
> @@ -247,6 +271,10 @@ under the License.
>          <attribute name="includeFromToSwitched" type="String" mode="IN"
> optional="true"/>
>          <attribute name="recurse" type="String" mode="IN"
> optional="true"/>
>          <attribute name="useCache" type="String" mode="IN"
> optional="true"/>
> -        <attribute name="relatedPartyIdList" type="List" mode="OUT"
> optional="false"/>
> +        <attribute name="relatedPartyIdList" type="List" mode="OUT"
> optional="false">
> +            <type-validate>
> +                <fail-property resource="PartyErrorUiLabels"
> property="PartyRequiredFieldMissingRelatedPartyIdList"/>
> +            </type-validate>
> +        </attribute>
>      </service>
>  </services>
>
>
Reply | Threaded
Open this post in threaded view
|

Re: [ofbiz-framework] branch trunk updated: Improved: All the service level error messages for missing required field for party component. (OFBIZ-7735) Thanks Ratnesh Upadhyay for reporting and Kirti Arora for providing the updated patch.

Suraj Khurana-2
Oops ! Thanks Pawan for taking care of this.

--
Best Regards,
Suraj Khurana
Senior Technical Consultant

On Tue, Apr 28, 2020 at 1:23 PM Pawan Verma <[hidden email]> wrote:

> Hi Suraj,
>
> In this commit, we got unintentional '+' character
> in applications/party/servicedef/services.xml file which was causing error
> on the console.
>
> I've corrected it at f195e68.
> --
> Thanks & Regards
> Pawan Verma
> ofbiz.apache.org
>
>
> On Sat, Apr 25, 2020 at 7:07 PM <[hidden email]> wrote:
>
> > This is an automated email from the ASF dual-hosted git repository.
> >
> > surajk pushed a commit to branch trunk
> > in repository https://gitbox.apache.org/repos/asf/ofbiz-framework.git
> >
> >
> > The following commit(s) were added to refs/heads/trunk by this push:
> >      new d21bb75  Improved: All the service level error messages for
> > missing required field for party component. (OFBIZ-7735) Thanks Ratnesh
> > Upadhyay for reporting and Kirti Arora for providing the updated patch.
> > d21bb75 is described below
> >
> > commit d21bb752f0b1e1691f67b3205fbcb84ddaccf28e
> > Author: Suraj Khurana <[hidden email]>
> > AuthorDate: Sat Apr 25 18:50:22 2020 +0530
> >
> >     Improved: All the service level error messages for missing required
> > field for party component.
> >     (OFBIZ-7735)
> >     Thanks Ratnesh Upadhyay for reporting and Kirti Arora for providing
> > the updated patch.
> > ---
> >  applications/party/config/PartyErrorUiLabels.xml |  72 +++++++
> >  applications/party/servicedef/services.xml       | 228
> > +++++++++++++++++++----
> >  applications/party/servicedef/services_view.xml  |  42 ++++-
> >  3 files changed, 297 insertions(+), 45 deletions(-)
> >
> > diff --git a/applications/party/config/PartyErrorUiLabels.xml
> > b/applications/party/config/PartyErrorUiLabels.xml
> > index b01c812..86db4ae 100644
> > --- a/applications/party/config/PartyErrorUiLabels.xml
> > +++ b/applications/party/config/PartyErrorUiLabels.xml
> > @@ -53,6 +53,78 @@
> >      <property key="PartyRequiredFieldMissingWorkEffortTypeId">
> >          <value xml:lang="en">Required Field Missing : WorkEffort Type
> > Id.</value>
> >      </property>
> > +    <property key="PartyRequiredFieldMissingAddress">
> > +            <value xml:lang="en">Required Field Missing :
> Address</value>
> > +        </property>
> > +    <property key="PartyRequiredFieldMissingChildRoleTypeIdList">
> > +        <value xml:lang="en">Required Field Missing : ChildRole Type Id
> > List</value>
> > +    </property>
> > +    <property key="PartyRequiredFieldMissingContactMechId">
> > +        <value xml:lang="en">Required Field Missing : Contact Mech
> > Id</value>
> > +    </property>
> > +    <property key="PartyRequiredFieldMissingContactMechPurposeTypeId">
> > +        <value xml:lang="en">Required Field Missing : Contact Mech
> > Purpose Type Id</value>
> > +    </property>
> > +    <property key="PartyRequiredFieldMissingContactMechTypeId">
> > +        <value xml:lang="en">Required Field Missing : Contact Mech Type
> > Id</value>
> > +    </property>
> > +    <property key="PartyRequiredFieldMissingEmailAddress">
> > +        <value xml:lang="en">Required Field Missing : Email
> > Address</value>
> > +    </property>
> > +    <property key="PartyRequiredFieldMissingFirstName">
> > +        <value xml:lang="en">Required Field Missing : First Name</value>
> > +    </property>
> > +    <property key="PartyRequiredFieldMissingLastName">
> > +        <value xml:lang="en">Required Field Missing : Last Name</value>
> > +    </property>
> > +    <property key="PartyRequiredFieldMissingLookupResult">
> > +        <value xml:lang="en">Required Field Missing : Lookup
> > Result</value>
> > +    </property>
> > +    <property key="PartyRequiredFieldMissingNewUserLogin">
> > +        <value xml:lang="en">Required Field Missing : New User
> > Login</value>
> > +    </property>
> > +    <property key="PartyRequiredFieldMissingOldContactMechId">
> > +        <value xml:lang="en">Required Field Missing : Old Contact Mech
> > Id</value>
> > +    </property>
> > +    <property key="PartyRequiredFieldMissingOrganizationPartyId">
> > +        <value xml:lang="en">Required Field Missing : Organization Party
> > Id</value>
> > +    </property>
> > +    <property
> > key="PartyRequiredFieldMissingParentOrganizationPartyIdList">
> > +        <value xml:lang="en">Required Field Missing : Organization Party
> > Id List</value>
> > +    </property>
> > +    <property key="PartyRequiredFieldMissingPartyId">
> > +        <value xml:lang="en">Required Field Missing : Party Id</value>
> > +    </property>
> > +    <property key="PartyRequiredFieldMissingPartyIdFrom">
> > +        <value xml:lang="en">Required Field Missing : Party Id
> > From</value>
> > +    </property>
> > +    <property key="PartyRequiredFieldMissingPartyIdTo">
> > +        <value xml:lang="en">Required Field Missing : Party Id
> To</value>
> > +    </property>
> > +    <property key="PartyRequiredFieldMissingPartyInvitationId">
> > +        <value xml:lang="en">Required Field Missing : Party Invitation
> > Id</value>
> > +    </property>
> > +    <property key="PartyRequiredFieldMissingProductStoreId">
> > +        <value xml:lang="en">Required Field Missing : Product Store
> > Id</value>
> > +    </property>
> > +    <property key="PartyRequiredFieldMissingRelatedPartyIdList">
> > +        <value xml:lang="en">Required Field Missing : Related Party Id
> > List</value>
> > +    </property>
> > +    <property key="PartyRequiredFieldMissingRoleTypeId">
> > +        <value xml:lang="en">Required Field Missing : Role Type
> Id</value>
> > +    </property>
> > +    <property key="PartyRequiredFieldMissingStatusId">
> > +        <value xml:lang="en">Required Field Missing : Status Id</value>
> > +    </property>
> > +    <property key="PartyRequiredFieldMissingTelno">
> > +        <value xml:lang="en">Required Field Missing : Tel no.</value>
> > +    </property>
> > +    <property key="PartyRequiredFieldMissingUserLoginId">
> > +        <value xml:lang="en">Required Field Missing : User Login
> > Id</value>
> > +    </property>
> > +    <property key="PartyRequiredFieldMissingVerifyHash">
> > +        <value xml:lang="en">Required Field Missing : Verify
> Hash</value>
> > +    </property>
> >      <property key="PartyUploadedFileDataNotFound">
> >          <value xml:lang="en">Uploaded file data not found</value>
> >      </property>
> > diff --git a/applications/party/servicedef/services.xml
> > b/applications/party/servicedef/services.xml
> > index fc71f8e..39fe18c 100644
> > --- a/applications/party/servicedef/services.xml
> > +++ b/applications/party/servicedef/services.xml
> > @@ -85,7 +85,11 @@ under the License.
> >          <auto-attributes entity-name="Person" mode="IN" include="nonpk"
> > optional="true"/>
> >          <auto-attributes entity-name="Party" mode="IN" include="nonpk"
> > optional="true"/>
> >          <attribute name="partyId" type="String" mode="INOUT"
> > optional="true" entity-name="Person"/>
> > -        <attribute name="newUserLogin" type="Map" mode="OUT"
> > optional="false"/>
> > +        <attribute name="newUserLogin" type="Map" mode="OUT"
> > optional="false">
> > +            <type-validate>
> > +                <fail-property resource="PartyErrorUiLabels"
> > property="PartyRequiredFieldMissingNewUserLogin"/>
> > +            </type-validate>
> > +        </attribute>
> >      </service>
> >      <service name="updatePerson" engine="java"
> > default-entity-name="Person"
> >              location="org.apache.ofbiz.party.party.PartyServices"
> > invoke="updatePerson" auth="true">
> > @@ -144,7 +148,11 @@ under the License.
> >      <service name="getPartyNameForDate" engine="groovy"
> >
> >  location="component://party/groovyScripts/party/PartyServices.groovy"
> > invoke="getPartyNameForDate" auth="true">
> >          <description>Get Party Name For Date</description>
> > -        <attribute name="partyId" type="String" mode="IN"
> > optional="false"/>
> > +        <attribute name="partyId" type="String" mode="IN"
> > optional="false">
> > +            <type-validate>
> > +                <fail-property resource="PartyErrorUiLabels"
> > property="PartyRequiredFieldMissingPartyId"/>
> > +            </type-validate>
> > +        </attribute>
> >          <attribute name="compareDate" type="Timestamp" mode="IN"
> > optional="true"><!-- defaults to now --></attribute>
> >          <attribute name="lastNameFirst" type="String" mode="IN"
> > optional="true"><!-- Y or N, defaults to N --></attribute>
> >          <attribute name="groupName" type="String" mode="OUT"
> > optional="true"/>
> > @@ -242,7 +250,11 @@ under the License.
> >          </deprecated>
> >          <attribute name="firstName" type="String" form-display="true"
> > form-label="First name" mode="IN" optional="true"/>
> >          <attribute name="lastName" type="String" form-display="true"
> > form-label="Last name" mode="IN" optional="true"/>
> > -        <attribute name="lookupResult" type="List" mode="OUT"
> > optional="false"/>
> > +        <attribute name="lookupResult" type="List" mode="OUT"
> > optional="false">
> > +            <type-validate>
> > +                <fail-property resource="PartyErrorUiLabels"
> > property="PartyRequiredFieldMissingLookupResult"/>
> > +            </type-validate>
> > +        </attribute>
> >      </service>
> >
> >      <service name="findPartiesById" engine="java"  auth="true"
> > @@ -272,24 +284,44 @@ under the License.
> >      <service name="ensurePartyRole" engine="simple"
> >
> >  location="component://party/minilang/party/PartySimpleMethods.xml"
> > invoke="ensureNaPartyRole" auth="false">
> >          <description>Ensure that the party is in the specified
> > role.</description>
> > -        <attribute name="partyId" type="String" mode="IN"
> > optional="false"/>
> > -        <attribute name="roleTypeId" type="String" mode="IN"
> > optional="false"/>
> > +        <attribute name="partyId" type="String" mode="IN"
> > optional="false">
> > +            <type-validate>
> > +                <fail-property resource="PartyErrorUiLabels"
> > property="PartyRequiredFieldMissingPartyId"/>
> > +            </type-validate>
> > +        </attribute>
> > +        <attribute name="roleTypeId" type="String" mode="IN"
> > optional="false">
> > +            <type-validate>
> > +                <fail-property resource="PartyErrorUiLabels"
> > property="PartyRequiredFieldMissingRoleTypeId"/>
> > +            </type-validate>
> > +        </attribute>
> >      </service>
> >      <service name="ensureNaPartyRole" engine="simple"
> >
> >  location="component://party/minilang/party/PartySimpleMethods.xml"
> > invoke="ensureNaPartyRole" auth="false">
> >          <description>Ensure that the party is in the _NA_
> > role.</description>
> > -        <attribute name="partyId" type="String" mode="IN"
> > optional="false"/>
> > +        <attribute name="partyId" type="String" mode="IN"
> > optional="false">
> > +            <type-validate>
> > +                <fail-property resource="PartyErrorUiLabels"
> > property="PartyRequiredFieldMissingPartyId"/>
> > +            </type-validate>
> > +        </attribute>
> >      </service>
> >      <service name="ensurePartyRoleFrom" engine="simple"
> >
> >  location="component://party/minilang/party/PartySimpleMethods.xml"
> > invoke="ensureNaPartyRole" auth="true">
> >          <description>Ensure that the party indicate by partyIdFrom is in
> > the roleTypeIdFrom specifc role. If roleTypeIdFrom isn't present use
> > _NA_</description>
> > -        <attribute name="partyIdFrom" type="String" mode="IN"
> > optional="false"/>
> > +        <attribute name="partyIdFrom" type="String" mode="IN"
> > optional="false">
> > +            <type-validate>
> > +                <fail-property resource="PartyErrorUiLabels"
> > property="PartyRequiredFieldMissingPartyIdFrom"/>
> > +            </type-validate>
> > +        </attribute>
> >          <attribute name="roleTypeIdFrom" type="String" mode="IN"
> > optional="true"/>
> >      </service>
> >      <service name="ensurePartyRoleTo" engine="simple"
> >
> >  location="component://party/minilang/party/PartySimpleMethods.xml"
> > invoke="ensureNaPartyRole" auth="true">
> >          <description>Ensure that the party indicate by partyIdTo is in
> > the roleTypeIdTo specific role. If roleTypeIdTo isn't present use
> > _NA_</description>
> > -        <attribute name="partyIdTo" type="String" mode="IN"
> > optional="false"/>
> > +        <attribute name="partyIdTo" type="String" mode="IN"
> > optional="false">
> > +            <type-validate>
> > +                <fail-property resource="PartyErrorUiLabels"
> > property="PartyRequiredFieldMissingPartyIdTo"/>
> > +            </type-validate>
> > +        </attribute>
> >          <attribute name="roleTypeIdTo" type="String" mode="IN"
> > optional="true"/>
> >      </service>
> >
> > @@ -395,8 +427,16 @@ under the License.
> >          <description>Update a PartyContactMech</description>
> >          <permission-service
> > service-name="partyContactMechPermissionCheck" main-action="UPDATE"/>
> >          <auto-attributes entity-name="PartyContactMech" include="all"
> > mode="IN" optional="true"/>
> > -        <attribute name="contactMechId" type="String" mode="INOUT"
> > optional="false"/>
> > -        <attribute name="contactMechTypeId" type="String" mode="IN"
> > optional="false"/>
> > +        <attribute name="contactMechId" type="String" mode="INOUT"
> > optional="false">
> > +            <type-validate>
> > +                <fail-property resource="PartyErrorUiLabels"
> > property="PartyRequiredFieldMissingContactMechId"/>
> > +            </type-validate>
> > +        </attribute>
> > +        <attribute name="contactMechTypeId" type="String" mode="IN"
> > optional="false">
> > +            <type-validate>
> > +                <fail-property resource="PartyErrorUiLabels"
> > property="PartyRequiredFieldMissingContactMechTypeId"/>
> > +            </type-validate>
> > +        </attribute>
> >          <attribute name="infoString" type="String" mode="IN"
> > optional="true"/>
> >          <attribute name="newContactMechId" type="String" mode="IN"
> > optional="true"/>
> >      </service>
> > @@ -405,13 +445,21 @@ under the License.
> >          <description>Delete a PartyContactMech</description>
> >          <permission-service
> > service-name="partyContactMechPermissionCheck" main-action="DELETE"/>
> >          <attribute name="partyId" type="String" mode="IN"
> > optional="true"/>
> > -        <attribute name="contactMechId" type="String" mode="IN"
> > optional="false"/>
> > +        <attribute name="contactMechId" type="String" mode="IN"
> > optional="false">
> > +            <type-validate>
> > +                <fail-property resource="PartyErrorUiLabels"
> > property="PartyRequiredFieldMissingContactMechId"/>
> > +            </type-validate>
> > +        </attribute>
> >      </service>
> >      <!-- Party ContachMech reverse find -->
> >      <service name="findPartyFromEmailAddress" engine="simple"
> >
> >
> location="component://party/minilang/contact/PartyContactMechServices.xml"
> > invoke="findPartyFromEmailAddress" auth="true">
> >          <description>Find the partyId/contactMechId for a specific email
> > address, if not found do not return a value</description>
> > -        <attribute name="address" type="String" mode="IN"
> > optional="false"/>
> > +        <attribute name="address" type="String" mode="IN"
> > optional="false">
> > +            <type-validate>
> > +                <fail-property resource="PartyErrorUiLabels"
> > property="PartyRequiredFieldMissingAddress"/>
> > +            </type-validate>
> > +        </attribute>
> >          <attribute name="caseInsensitive" type="String" mode="IN"
> > optional="true"/>
> >          <attribute name="personal" type="String" mode="IN"
> > optional="true"/><!-- field not used -->
> >          <attribute name="fromDate" type="Timestamp" mode="IN"
> > optional="true"/>
> > @@ -421,7 +469,11 @@ under the License.
> >      <service name="findPartyFromTelephone" engine="simple"
> >
> >
> location="component://party/minilang/contact/PartyContactMechServices.xml"
> > invoke="findPartyFromTelephone" auth="true">
> >          <description>Find the partyId/contactMechId for a specific
> > telephone number, if not found do not return a value</description>
> > -        <attribute name="telno" type="String" mode="IN"
> optional="false"/>
> > +        <attribute name="telno" type="String" mode="IN"
> optional="false">
> > +            <type-validate>
> > +                <fail-property resource="PartyErrorUiLabels"
> > property="PartyRequiredFieldMissingTelno"/>
> > +            </type-validate>
> > +        </attribute>
> >          <attribute name="partyId" type="String" mode="OUT"
> > optional="true"/>
> >          <attribute name="contactMechId" type="String" mode="OUT"
> > optional="true"/>
> >      </service>
> > @@ -431,7 +483,11 @@ under the License.
> >              Find the partyId/contactMechId for a specific telephone
> > number, if not found do not return a value.
> >              Same than above but keep the number complete internally.
> >          </description>
> > -        <attribute name="telno" type="String" mode="IN"
> optional="false"/>
> > +        <attribute name="telno" type="String" mode="IN"
> optional="false">
> > +            <type-validate>
> > +                <fail-property resource="PartyErrorUiLabels"
> > property="PartyRequiredFieldMissingTelno"/>
> > +            </type-validate>
> > +        </attribute>
> >          <attribute name="partyId" type="String" mode="OUT"
> > optional="true"/>
> >          <attribute name="contactMechId" type="String" mode="OUT"
> > optional="true"/>
> >      </service>
> > @@ -443,7 +499,11 @@ under the License.
> >          <auto-attributes entity-name="PostalAddress" include="nonpk"
> > mode="IN" optional="true"/>
> >          <attribute name="paymentMethodId" type="String" mode="IN"
> > optional="true"/>
> >          <attribute name="contactMechPurposeTypeId" type="String"
> > mode="IN" optional="true"/>
> > -        <attribute name="contactMechId" type="String" mode="OUT"
> > optional="false"/>
> > +        <attribute name="contactMechId" type="String" mode="OUT"
> > optional="false">
> > +            <type-validate>
> > +                <fail-property resource="PartyErrorUiLabels"
> > property="PartyRequiredFieldMissingContactMechId"/>
> > +            </type-validate>
> > +        </attribute>
> >          <attribute name="latitude" type="String" mode="IN"
> > optional="true"/>
> >          <attribute name="longitude" type="String" mode="IN"
> > optional="true"/>
> >          <override name="address1" optional="false"/>
> > @@ -494,9 +554,21 @@ under the License.
> >          <description>Update an Email Address</description>
> >          <permission-service
> > service-name="partyContactMechPermissionCheck" main-action="UPDATE"/>
> >          <auto-attributes entity-name="PartyContactMech" include="all"
> > mode="IN" optional="true"/>
> > -        <attribute name="contactMechId" type="String" mode="INOUT"
> > optional="false"/> <!-- the out paramater is the id of the new address
> -->
> > -        <attribute name="emailAddress" type="String" mode="IN"
> > optional="false"/>
> > -        <attribute name="oldContactMechId" type="String" mode="OUT"
> > optional="false"/> <!-- this is the id of the old address -->
> > +        <attribute name="contactMechId" type="String" mode="INOUT"
> > optional="false"> <!-- the out paramater is the id of the new address -->
> > +            <type-validate>
> > +                    <fail-property resource="PartyErrorUiLabels"
> > property="PartyRequiredFieldMissingContactMechId"/>
> > +            </type-validate>
> > ++        </attribute>
> > ++        <attribute name="emailAddress" type="String" mode="IN"
> > optional="false">
> > ++            <type-validate>
> > ++                <fail-property resource="PartyErrorUiLabels"
> > property="PartyRequiredFieldMissingEmailAddress"/>
> > ++            </type-validate>
> > ++        </attribute>
> > ++        <attribute name="oldContactMechId" type="String" mode="OUT"
> > optional="false">
> > ++            <type-validate>
> > ++                <fail-property resource="PartyErrorUiLabels"
> > property="PartyRequiredFieldMissingOldContactMechId"/>
> > ++            </type-validate>
> > ++        </attribute>
> >      </service>
> >      <service name="copyPartyContactMechs" engine="java"
> >          location="org.apache.ofbiz.party.contact.ContactMechServices"
> > invoke="copyPartyContactMechs" auth="true">
> > @@ -966,8 +1038,16 @@ under the License.
> >      <service name="getPartyEmail" engine="groovy"
> >
> >  location="component://party/groovyScripts/party/PartyServices.groovy"
> > invoke="getPartyEmail" auth="false">
> >          <description>Get the main party Email address</description>
> > -        <attribute name="partyId" type="String" mode="IN"
> > optional="false"/>
> > -        <attribute name="contactMechPurposeTypeId" type="String"
> > mode="IN" optional="false" default-value="PRIMARY_EMAIL"/>
> > +        <attribute name="partyId" type="String" mode="IN"
> > optional="false">
> > ++                <type-validate>
> > ++                    <fail-property resource="PartyErrorUiLabels"
> > property="PartyRequiredFieldMissingPartyId"/>
> > ++                </type-validate>
> > ++            </attribute>
> > ++        <attribute name="contactMechPurposeTypeId" type="String"
> > mode="IN" optional="false" default-value="PRIMARY_EMAIL">
> > ++            <type-validate>
> > ++                <fail-property resource="PartyErrorUiLabels"
> > property="PartyRequiredFieldMissingContactMechPurposeTypeId"/>
> > ++            </type-validate>
> > ++        </attribute>
> >          <attribute name="emailAddress" type="String" mode="OUT"
> > optional="true"/>
> >          <attribute name="contactMechId" type="String" mode="OUT"
> > optional="true"/>
> >      </service>
> > @@ -987,7 +1067,11 @@ under the License.
> >      <service name="getPartyPostalAddress" engine="groovy"
> >
> >  location="component://party/groovyScripts/party/PartyServices.groovy"
> > invoke="getPartyPostalAddress" auth="false">
> >          <description>Get the party postal address</description>
> > -        <attribute name="partyId" type="String" mode="IN"
> > optional="false"/>
> > +        <attribute name="partyId" type="String" mode="IN"
> > optional="false">
> > +            <type-validate>
> > +                <fail-property resource="PartyErrorUiLabels"
> > property="PartyRequiredFieldMissingPartyId"/>
> > +            </type-validate>
> > +        </attribute>
> >          <attribute name="contactMechPurposeTypeId" type="String"
> > mode="INOUT" optional="true"/>
> >          <attribute name="contactMechId" type="String" mode="OUT"
> > optional="true"/>
> >          <attribute name="address1" type="String" mode="OUT"
> > optional="true"/>
> > @@ -1022,9 +1106,21 @@ under the License.
> >      </service>
> >      <service name="sendCreatePartyEmailNotification" engine="groovy"
> >
> >  location="component://party/groovyScripts/party/PartyServices.groovy"
> > invoke="sendCreatePartyEmailNotification" auth="false">
> > -        <attribute name="partyId" type="String" mode="IN"
> > optional="false"/>
> > -        <attribute name="emailAddress" type="String" mode="IN"
> > optional="false"/>
> > -        <attribute name="productStoreId" type="String" mode="IN"
> > optional="false"/>
> > +        <attribute name="partyId" type="String" mode="IN"
> > optional="false">
> > ++            <type-validate>
> > ++                <fail-property resource="PartyErrorUiLabels"
> > property="PartyRequiredFieldMissingPartyId"/>
> > ++            </type-validate>
> > ++        </attribute>
> > ++        <attribute name="emailAddress" type="String" mode="IN"
> > optional="false">
> > ++            <type-validate>
> > ++                <fail-property resource="PartyErrorUiLabels"
> > property="PartyRequiredFieldMissingEmailAddress"/>
> > ++            </type-validate>
> > ++        </attribute>
> > ++        <attribute name="productStoreId" type="String" mode="IN"
> > optional="false">
> > ++            <type-validate>
> > ++                <fail-property resource="PartyErrorUiLabels"
> > property="PartyRequiredFieldMissingProductStoreId"/>
> > ++            </type-validate>
> > ++        </attribute>
> >      </service>
> >
> >      <!-- Email address verification services-->
> > @@ -1036,11 +1132,19 @@ under the License.
> >      </service>
> >      <service name="sendVerifyEmailAddressNotification" engine="groovy"
> >
> >
> location="component://party/groovyScripts/contact/ContactMechServices.groovy"
> > invoke="sendVerifyEmailAddressNotification">
> > -        <attribute name="emailAddress" type="String" mode="IN"
> > optional="false"/>
> > +        <attribute name="emailAddress" type="String" mode="IN"
> > optional="false">
> > ++            <type-validate>
> > ++                <fail-property resource="PartyErrorUiLabels"
> > property="PartyRequiredFieldMissingEmailAddress"/>
> > ++            </type-validate>
> > ++        </attribute>
> >      </service>
> >      <service name="verifyEmailAddress" engine="groovy"
> >
> >
> location="component://party/groovyScripts/contact/ContactMechServices.groovy"
> > invoke="verifyEmailAddress">
> > -        <attribute name="verifyHash" type="String" mode="IN"
> > optional="false"/>
> > +        <attribute name="verifyHash" type="String" mode="IN"
> > optional="false">
> > ++            <type-validate>
> > ++                <fail-property resource="PartyErrorUiLabels"
> > property="PartyRequiredFieldMissingVerifyHash"/>
> > ++            </type-validate>
> > ++        </attribute>
> >      </service>
> >
> >      <!-- Party Invitation Services -->
> > @@ -1085,13 +1189,25 @@ under the License.
> >      <service name="acceptPartyInvitation" engine="groovy"
> >
> >
> location="component://party/groovyScripts/party/PartyInvitationServices.groovy"
> > invoke="acceptPartyInvitation">
> >          <permission-service
> > service-name="accAndDecPartyInvitationPermissionCheck"/>
> > -        <attribute name="partyInvitationId" type="String" mode="IN"/>
> > -        <attribute name="partyId" type="String" mode="IN"/>
> > +        <attribute name="partyInvitationId" type="String" mode="IN"
> > optional="false">
> > ++            <type-validate>
> > ++                <fail-property resource="PartyErrorUiLabels"
> > property="PartyRequiredFieldMissingPartyInvitationId"/>
> > ++            </type-validate>
> > ++        </attribute>
> > ++        <attribute name="partyId" type="String" mode="IN"
> > optional="false">
> > ++            <type-validate>
> > ++                <fail-property resource="PartyErrorUiLabels"
> > property="PartyRequiredFieldMissingPartyId"/>
> > ++            </type-validate>
> > ++        </attribute>
> >      </service>
> >      <service name="declinePartyInvitation" engine="groovy"
> >
> >
> location="component://party/groovyScripts/party/PartyInvitationServices.groovy"
> > invoke="updatePartyInvitation">
> >          <permission-service
> > service-name="accAndDecPartyInvitationPermissionCheck"/>
> > -        <attribute name="partyInvitationId" type="String" mode="IN"/>
> > +        <attribute name="partyInvitationId" type="String" mode="IN"
> > optional="false">
> > +            <type-validate>
> > +                <fail-property resource="PartyErrorUiLabels"
> > property="PartyRequiredFieldMissingPartyInvitationId"/>
> > +            </type-validate>
> > +        </attribute>
> >          <attribute name="statusId" type="String" mode="IN"
> > optional="true" default-value="PARTYINV_DECLINED"/>
> >      </service>
> >      <service name="cancelPartyInvitation" engine="groovy"
> > @@ -1188,7 +1304,11 @@ under the License.
> >              The user with PARTYMGR_UPDATE permission can also perform
> > this function.
> >          </description>
> >          <implements service="permissionInterface"/>
> > -        <attribute name="partyInvitationId" type="String" mode="IN"
> > optional="false"/>
> > +        <attribute name="partyInvitationId" type="String" mode="IN"
> > optional="false">
> > ++            <type-validate>
> > ++                <fail-property resource="PartyErrorUiLabels"
> > property="PartyRequiredFieldMissingPartyInvitationId"/>
> > ++            </type-validate>
> > ++        </attribute>
> >      </service>
> >      <service name="cancelPartyInvitationPermissionCheck" engine="groovy"
> >
> >
> location="component://party/groovyScripts/party/PartyPermissionServices.groovy"
> > invoke="cancelPartyInvitationPermissionCheck">
> > @@ -1198,7 +1318,11 @@ under the License.
> >              The user with PARTYMGR_UPDATE permission can also perform
> > this function.
> >          </description>
> >          <implements service="permissionInterface"/>
> > -        <attribute name="partyInvitationId" type="String" mode="IN"
> > optional="false"/>
> > +        <attribute name="partyInvitationId" type="String" mode="IN"
> > optional="false">
> > ++            <type-validate>
> > ++                <fail-property resource="PartyErrorUiLabels"
> > property="PartyRequiredFieldMissingPartyInvitationId"/>
> > ++            </type-validate>
> > ++        </attribute>
> >      </service>
> >      <service name="partyCommunicationEventPermissionCheck"
> engine="groovy"
> >
> >
> location="component://party/groovyScripts/party/PartyPermissionServices.groovy"
> > invoke="partyCommunicationEventPermissionCheck">
> > @@ -1299,10 +1423,26 @@ under the License.
> >      <service name="quickCreateCustomer" engine="groovy"
> >
> >  location="component://party/groovyScripts/party/PartyServices.groovy"
> > invoke="quickCreateCustomer">
> >          <description>Create customer profile on basis of First Name
> ,Last
> > Name and Email Address</description>
> > -        <attribute name="firstName" type="String" mode="IN"
> > optional="false"/>
> > -        <attribute name="lastName" type="String" mode="IN"
> > optional="false"/>
> > -        <attribute name="emailAddress" type="String" mode="IN"
> > optional="false"/>
> > -        <attribute name="partyId" type="String" mode="OUT"
> > optional="false"/>
> > +        <attribute name="firstName" type="String" mode="IN"
> > optional="false">
> > +            <type-validate>
> > +                <fail-property resource="PartyErrorUiLabels"
> > property="PartyRequiredFieldMissingFirstName"/>
> > +            </type-validate>
> > +        </attribute>
> > +        <attribute name="lastName" type="String" mode="IN"
> > optional="false">
> > +            <type-validate>
> > +                <fail-property resource="PartyErrorUiLabels"
> > property="PartyRequiredFieldMissingLastName"/>
> > +            </type-validate>
> > +        </attribute>
> > +        <attribute name="emailAddress" type="String" mode="IN"
> > optional="false">
> > +            <type-validate>
> > +                <fail-property resource="PartyErrorUiLabels"
> > property="PartyRequiredFieldMissingEmailAddress"/>
> > +            </type-validate>
> > +        </attribute>
> > +        <attribute name="partyId" type="String" mode="OUT"
> > optional="false">
> > +            <type-validate>
> > +                <fail-property resource="PartyErrorUiLabels"
> > property="PartyRequiredFieldMissingPartyId"/>
> > +            </type-validate>
> > +        </attribute>
> >          <attribute name="contactListId" type="String" mode="IN"
> > optional="true"/>
> >          <attribute name="subscribeContactList" type="String" mode="IN"
> > optional="true"/>
> >      </service>
> > @@ -1310,7 +1450,11 @@ under the License.
> >      <service name="getPartyMainRole" engine="groovy"
> >
> >  location="component://party/groovyScripts/party/PartyServices.groovy"
> > invoke="getPartyMainRole">
> >          <description>Get the main role of this party which is a child of
> > the MAIN_ROLE roletypeId</description>
> > -        <attribute name="partyId" type="String" mode="IN"
> > optional="false"/>
> > +        <attribute name="partyId" type="String" mode="IN"
> > optional="false">
> > +            <type-validate>
> > +                <fail-property resource="PartyErrorUiLabels"
> > property="PartyRequiredFieldMissingPartyId"/>
> > +            </type-validate>
> > +        </attribute>
> >          <attribute name="roleTypeId" type="String" mode="OUT"
> > optional="true"/>
> >          <attribute name="description" type="String" mode="OUT"
> > optional="true"/>
> >      </service>
> > @@ -1336,8 +1480,16 @@ under the License.
> >      <!-- send account activated email notification -->
> >      <service name="sendAccountActivatedEmailNotification"
> engine="groovy"
> >
> >  location="component://party/groovyScripts/party/PartyServices.groovy"
> > invoke="sendAccountActivatedEmailNotification" auth="false">
> > -        <attribute name="userLoginId" type="String" mode="IN"
> > optional="false"/>
> > -        <attribute name="productStoreId" type="String" mode="IN"
> > optional="false"/>
> > +        <attribute name="userLoginId" type="String" mode="IN"
> > optional="false">
> > +            <type-validate>
> > +                <fail-property resource="PartyErrorUiLabels"
> > property="PartyRequiredFieldMissingUserLoginId"/>
> > +            </type-validate>
> > +        </attribute>
> > +        <attribute name="productStoreId" type="String" mode="IN"
> > optional="false">
> > +            <type-validate>
> > +                <fail-property resource="PartyErrorUiLabels"
> > property="PartyRequiredFieldMissingProductStoreId"/>
> > +            </type-validate>
> > +        </attribute>
> >      </service>
> >      <service name="createAgreementAttribute"
> > default-entity-name="AgreementAttribute" engine="entity-auto"
> > invoke="create" auth="true">
> >          <description>Create a AgreementAttribute entry</description>
> > diff --git a/applications/party/servicedef/services_view.xml
> > b/applications/party/servicedef/services_view.xml
> > index 8b8c05c..46f6689 100644
> > --- a/applications/party/servicedef/services_view.xml
> > +++ b/applications/party/servicedef/services_view.xml
> > @@ -184,7 +184,11 @@ under the License.
> >              - The includeFromToSwitched and recurse attributes should by
> > "Y" or "N" and default to N.
> >              - The useCache attribute should be "true" or "false",
> > defaults to "false"
> >          </description>
> > -        <attribute name="partyIdFrom" type="String" mode="IN"
> > optional="false"/>
> > +        <attribute name="partyIdFrom" type="String" mode="IN"
> > optional="false">
> > +            <type-validate>
> > +                <fail-property resource="PartyErrorUiLabels"
> > property="PartyRequiredFieldMissingPartyIdFrom"/>
> > +            </type-validate>
> > +        </attribute>
> >          <attribute name="partyRelationshipTypeId" type="String"
> mode="IN"
> > optional="true"/>
> >          <attribute name="roleTypeIdFrom" type="String" mode="IN"
> > optional="true"/>
> >          <attribute name="roleTypeIdFromInclueAllChildTypes"
> type="String"
> > mode="IN" optional="true"/>
> > @@ -206,9 +210,17 @@ under the License.
> >              The getParentsOfParents attribute defaults to Y.
> >              The parentOrganizationPartyIdList coming out will contain
> the
> > original organizationPartyId.
> >          </description>
> > -        <attribute name="organizationPartyId" type="String" mode="IN"
> > optional="false"/>
> > +        <attribute name="organizationPartyId" type="String" mode="IN"
> > optional="false">
> > +            <type-validate>
> > +                <fail-property resource="PartyErrorUiLabels"
> > property="PartyRequiredFieldMissingOrganizationPartyId"/>
> > +            </type-validate>
> > +        </attribute>
> >          <attribute name="getParentsOfParents" type="String" mode="IN"
> > optional="true"/>
> > -        <attribute name="parentOrganizationPartyIdList" type="List"
> > mode="OUT" optional="false"/>
> > +        <attribute name="parentOrganizationPartyIdList" type="List"
> > mode="OUT" optional="false">
> > +            <type-validate>
> > +                <fail-property resource="PartyErrorUiLabels"
> > property="PartyRequiredFieldMissingParentOrganizationPartyIdList"/>
> > +            </type-validate>
> > +        </attribute>
> >      </service>
> >
> >      <service name="getChildRoleTypes" engine="groovy"
> > @@ -217,8 +229,16 @@ under the License.
> >              Get Child RoleTypes.
> >              The childRoleTypeIdList coming out will contain the original
> > roleTypeId.
> >          </description>
> > -        <attribute name="roleTypeId" type="String" mode="IN"
> > optional="false"/>
> > -        <attribute name="childRoleTypeIdList" type="List" mode="OUT"
> > optional="false"/>
> > +        <attribute name="roleTypeId" type="String" mode="IN"
> > optional="false">
> > +            <type-validate>
> > +                <fail-property resource="PartyErrorUiLabels"
> > property="PartyRequiredFieldMissingRoleTypeId"/>
> > +            </type-validate>
> > +        </attribute>
> > +        <attribute name="childRoleTypeIdList" type="List" mode="OUT"
> > optional="false">
> > +            <type-validate>
> > +                <fail-property resource="PartyErrorUiLabels"
> > property="PartyRequiredFieldMissingChildRoleTypeIdList"/>
> > +            </type-validate>
> > +        </attribute>
> >      </service>
> >
> >      <!-- PostalAddressBoundary -->
> > @@ -226,7 +246,11 @@ under the License.
> >
> >  location="component://party/groovyScripts/party/PartyServices.groovy"
> > invoke="getPostalAddressBoundary">
> >          <description>Get all Postal Address Boundaries</description>
> >          <permission-service service-name="partyBasePermissionCheck"
> > main-action="VIEW"/>
> > -        <attribute name="contactMechId" type="String" mode="IN"
> > optional="false"/>
> > +        <attribute name="contactMechId" type="String" mode="IN"
> > optional="false">
> > +            <type-validate>
> > +                <fail-property resource="PartyErrorUiLabels"
> > property="PartyRequiredFieldMissingContactMechId"/>
> > +            </type-validate>
> > +        </attribute>
> >          <attribute name="geos" type="java.util.List" mode="OUT"
> > optional="true"/>
> >      </service>
> >
> > @@ -247,6 +271,10 @@ under the License.
> >          <attribute name="includeFromToSwitched" type="String" mode="IN"
> > optional="true"/>
> >          <attribute name="recurse" type="String" mode="IN"
> > optional="true"/>
> >          <attribute name="useCache" type="String" mode="IN"
> > optional="true"/>
> > -        <attribute name="relatedPartyIdList" type="List" mode="OUT"
> > optional="false"/>
> > +        <attribute name="relatedPartyIdList" type="List" mode="OUT"
> > optional="false">
> > +            <type-validate>
> > +                <fail-property resource="PartyErrorUiLabels"
> > property="PartyRequiredFieldMissingRelatedPartyIdList"/>
> > +            </type-validate>
> > +        </attribute>
> >      </service>
> >  </services>
> >
> >
>