You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ofbiz.apache.org by su...@apache.org on 2020/05/02 06:03:43 UTC

[ofbiz-framework] branch trunk updated: Improved: All the service level error messages for missing required field for order component (#86)

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 4facbae  Improved: All the service level error messages for missing required field for order component  (#86)
4facbae is described below

commit 4facbaed7929e887b7f767e4cc360ef2af169870
Author: Suraj Khurana <64...@users.noreply.github.com>
AuthorDate: Sat May 2 11:33:35 2020 +0530

    Improved: All the service level error messages for missing required field for order component  (#86)
    
    * Improved: All the service level error messages for missing required field for order component
    (OFBIZ-7736)
    Thanks Ratnesh Upadhyay for reporting and Ankush Upadhyay for providing the updated patch
---
 applications/order/config/OrderErrorUiLabels.xml | 141 ++++++
 applications/order/servicedef/services.xml       | 582 +++++++++++++++++++----
 applications/order/servicedef/services_quote.xml |   6 +-
 3 files changed, 631 insertions(+), 98 deletions(-)

diff --git a/applications/order/config/OrderErrorUiLabels.xml b/applications/order/config/OrderErrorUiLabels.xml
index dc3fbcf..d093fef 100644
--- a/applications/order/config/OrderErrorUiLabels.xml
+++ b/applications/order/config/OrderErrorUiLabels.xml
@@ -3313,6 +3313,147 @@
         <value xml:lang="zh">订单中的租赁订单明细,其中的人工服务没有开始/结束日期和人员数量</value>
         <value xml:lang="zh-TW">訂單中的租賃訂單明細,其中的人工服務沒有開始/結束日期和人員數量</value>
     </property>
+    <property key="OrderRequiredFieldMissingCardNumber">
+        <value xml:lang="en">Required Field Missing : Card Number.</value>
+    </property>
+    <property key="OrderRequiredFieldMissingCardType">
+        <value xml:lang="en">Required Field Missing : Card Type.</value>
+    </property>
+    <property key="OrderRequiredFieldMissingCart">
+        <value xml:lang="en">Required Field Missing : Cart.</value>
+    </property>
+    <property key="OrderRequiredFieldMissingChangeMap">
+        <value xml:lang="en">Required Field Missing : Change Map.</value>
+    </property>
+    <property key="OrderRequiredFieldMissingContactMechId">
+        <value xml:lang="en">Required Field Missing : Contact Mech Id.</value>
+    </property>
+    <property key="OrderRequiredFieldMissingContactMechPurposeTypeId">
+        <value xml:lang="en">Required Field Missing : Contact Mech Purpose Type Id.</value>
+    </property>
+    <property key="OrderRequiredFieldMissingCurrency">
+        <value xml:lang="en">Required Field Missing : Currency.</value>
+    </property>
+    <property key="OrderRequiredFieldMissingCurrencyUom">
+        <value xml:lang="en">Required Field Missing : Currency Uom.</value>
+    </property>
+    <property key="OrderRequiredFieldMissingEmailType">
+        <value xml:lang="en">Required Field Missing : Email Type.</value>
+    </property>
+    <property key="OrderRequiredFieldMissingExpMonth">
+        <value xml:lang="en">Required Field Missing : Expiry Month.</value>
+    </property>
+    <property key="OrderRequiredFieldMissingExpYear">
+        <value xml:lang="en">Required Field Missing : Expiry Year.</value>
+    </property>
+    <property key="OrderRequiredFieldMissingFacilityId">
+        <value xml:lang="en">Required Field Missing : Facility Id.</value>
+    </property>
+    <property key="OrderRequiredFieldMissingFirstNameOnCard">
+        <value xml:lang="en">Required Field Missing : First Name On Card.</value>
+    </property>
+    <property key="OrderRequiredFieldMissingInternalNote">
+        <value xml:lang="en">Required Field Missing : Internal Note.</value>
+    </property>
+    <property key="OrderRequiredFieldMissingItemMap">
+        <value xml:lang="en">Required Field Missing : Item Map.</value>
+    </property>
+    <property key="OrderRequiredFieldMissingLastNameOnCard">
+        <value xml:lang="en">Required Field Missing : Last Name On Card.</value>
+    </property>
+    <property key="OrderRequiredFieldMissingNoteId">
+        <value xml:lang="en">Required Field Missing : Note Id.</value>
+    </property>
+    <property key="OrderRequiredFieldMissingNoteInfo">
+        <value xml:lang="en">Required Field Missing : Note Info.</value>
+    </property>
+    <property key="OrderRequiredFieldMissingOldContactMechId">
+        <value xml:lang="en">Required Field Missing : Old Contact Mech Id.</value>
+    </property>
+    <property key="OrderRequiredFieldMissingOldStatusId">
+        <value xml:lang="en">Required Field Missing : Old Status Id.</value>
+    </property>
+    <property key="OrderRequiredFieldMissingOrderAdjustmentId">
+        <value xml:lang="en">Required Field Missing : Order Adjustment Id.</value>
+    </property>
+    <property key="OrderRequiredFieldMissingOrderAdjustmentTypeId">
+        <value xml:lang="en">Required Field Missing : Order Adjustment Type Id.</value>
+    </property>
+    <property key="OrderRequiredFieldMissingOrderAdjustments">
+        <value xml:lang="en">Required Field Missing : Order Adjustments.</value>
+    </property>
+    <property key="OrderRequiredFieldMissingOrderId">
+        <value xml:lang="en">Required Field Missing : Order Id.</value>
+    </property>
+    <property key="OrderRequiredFieldMissingOrderIdList">
+        <value xml:lang="en">Required Field Missing : Order Id List.</value>
+    </property>
+    <property key="OrderRequiredFieldMissingOrderItem">
+        <value xml:lang="en">Required Field Missing : Order Item.</value>
+    </property>
+    <property key="OrderRequiredFieldMissingOrderItemSeqId">
+        <value xml:lang="en">Required Field Missing : Order Item Sequence Id.</value>
+    </property>
+    <property key="OrderRequiredFieldMissingOrderItems">
+        <value xml:lang="en">Required Field Missing : Order Items.</value>
+    </property>
+    <property key="OrderRequiredFieldMissingOrderPaymentPreferenceId">
+        <value xml:lang="en">Required Field Missing : Order Payment Preference Id.</value>
+    </property>
+    <property key="OrderRequiredFieldMissingPartyId">
+        <value xml:lang="en">Required Field Missing : Party Id.</value>
+    </property>
+    <property key="OrderRequiredFieldMissingPaymentMethodId">
+        <value xml:lang="en">Required Field Missing : Payment Method Id.</value>
+    </property>
+    <property key="OrderRequiredFieldMissingProductId">
+        <value xml:lang="en">Required Field Missing : Product Id.</value>
+    </property>
+    <property key="OrderRequiredFieldMissingProductStoreId">
+        <value xml:lang="en">Required Field Missing : Product Store Id.</value>
+    </property>
+    <property key="OrderRequiredFieldMissingQuantity">
+        <value xml:lang="en">Required Field Missing : Quantity.</value>
+    </property>
+    <property key="OrderRequiredFieldMissingScreenLocation">
+        <value xml:lang="en">Required Field Missing : Screen Location.</value>
+    </property>
+    <property key="OrderRequiredFieldMissingShipGroupSeqId">
+        <value xml:lang="en">Required Field Missing : Ship Group Sequence Id.</value>
+    </property>
+    <property key="OrderRequiredFieldMissingShipToAddress1">
+        <value xml:lang="en">Required Field Missing : Ship To Address 1.</value>
+    </property>
+    <property key="OrderRequiredFieldMissingShoppingCart">
+        <value xml:lang="en">Required Field Missing : Shopping Cart.</value>
+    </property>
+    <property key="OrderRequiredFieldMissingShipToCountryGeoId">
+        <value xml:lang="en">Required Field Missing : Ship To Country Geo Id.</value>
+    </property>
+    <property key="OrderRequiredFieldMissingShipToPostalCode">
+        <value xml:lang="en">Required Field Missing : Ship To Postal Code.</value>
+    </property>
+    <property key="OrderRequiredFieldMissingShipToStateProvinceGeoId">
+        <value xml:lang="en">Required Field Missing : Ship To State Province Geo Id.</value>
+    </property>
+    <property key="OrderRequiredFieldMissingShippingAmount">
+        <value xml:lang="en">Required Field Missing : Shipping Amount.</value>
+    </property>
+    <property key="OrderRequiredFieldMissingShipmentId">
+        <value xml:lang="en">Required Field Missing : Shipment Id.</value>
+    </property>
+    <property key="OrderRequiredFieldMissingShipmentMethodAndAmount">
+        <value xml:lang="en">Required Field Missing : Shipment Method And Amount.</value>
+    </property>
+    <property key="OrderRequiredFieldMissingShipmentRouteSegmentId">
+        <value xml:lang="en">Required Field Missing : Shipment Route Segment Id.</value>
+    </property>
+    <property key="OrderRequiredFieldMissingStatusId">
+        <value xml:lang="en">Required Field Missing : Status Id.</value>
+    </property>
+    <property key="OrderRequiredFieldMissingTrackingNumber">
+        <value xml:lang="en">Required Field Missing : Tracking Number.</value>
+    </property>
     <property key="OrderRequestedReturnQuantityNotAvailablePreviousReturnsMayExist">
         <value xml:lang="ar">كمية الإرجاع المطلوبة [ ${parameters.returnQuantity} ] غير متوفرة: كميات استرجاع سابقة ربما تكون موجودة [ ${returnableQuantity} ].</value>
         <value xml:lang="de">Geforderte Retourenmenge [ ${parameters.returnQuantity} ] ist nicht verfügbar; es könnten vorherige Retouren vorhanden sein [ ${returnableQuantity} ].</value>
diff --git a/applications/order/servicedef/services.xml b/applications/order/servicedef/services.xml
index 7084e79..609489c 100644
--- a/applications/order/servicedef/services.xml
+++ b/applications/order/servicedef/services.xml
@@ -26,7 +26,11 @@ under the License.
 
     <!-- Order processing services -->
     <service name="orderNotificationInterface" engine="interface" location="" invoke="">
-        <attribute name="orderId" type="String" mode="IN" optional="false"/>
+        <attribute name="orderId" type="String" mode="IN" optional="false">
+            <type-validate>
+                <fail-property resource="OrderErrorUiLabels" property="OrderRequiredFieldMissingOrderId"/>
+            </type-validate>
+        </attribute>
         <attribute name="orderItemSeqId" type="String" mode="IN" optional="true"/>
         <attribute name="emailType" type="String" mode="OUT" optional="false"/>
         <attribute name="screenUri" type="String" mode="IN" optional="true"/>
@@ -80,15 +84,27 @@ under the License.
     <service name="createOrderNotificationLog" engine="entity-auto" default-entity-name="OrderNotification" invoke="create">
         <description>Logs when a notification was sent</description>
         <auto-attributes include="pk" mode="OUT" optional="false"/>
-        <attribute name="orderId" type="String" mode="IN" optional="false"/>
-        <attribute name="emailType" type="String" mode="IN" optional="false"/>
+        <attribute name="orderId" type="String" mode="IN" optional="false">
+            <type-validate>
+                <fail-property resource="OrderErrorUiLabels" property="OrderRequiredFieldMissingOrderId"/>
+            </type-validate>
+        </attribute>
+        <attribute name="emailType" type="String" mode="IN" optional="false">
+            <type-validate>
+                <fail-property resource="OrderErrorUiLabels" property="OrderRequiredFieldMissingEmailType"/>
+            </type-validate>
+        </attribute>
         <attribute name="comments" type="String" mode="IN" optional="true"/>
     </service>
 
     <service name="storeOrder" engine="java" validate="true" auth="true"
             location="org.apache.ofbiz.order.order.OrderServices" invoke="createOrder">
         <description>Creates order entities</description>
-        <attribute name="partyId" type="String" mode="IN" optional="false"/>
+        <attribute name="partyId" type="String" mode="IN" optional="false">
+            <type-validate>
+                <fail-property resource="OrderErrorUiLabels" property="OrderRequiredFieldMissingPartyId"/>
+            </type-validate>
+        </attribute>
         <attribute name="placingCustomerPartyId" type="String" mode="IN" optional="true"/>
         <attribute name="billToCustomerPartyId" type="String" mode="IN" optional="true"/>
         <attribute name="shipToCustomerPartyId" type="String" mode="IN" optional="true"/>
@@ -113,15 +129,27 @@ under the License.
         <attribute name="orderTypeId" type="String" mode="INOUT" optional="false"/>
         <attribute name="salesChannelEnumId" type="String" mode="IN" optional="true"/>
         <attribute name="orderItemGroups" type="List" mode="IN" optional="true"/>
-        <attribute name="orderItems" type="List" mode="IN" optional="false"/>
+        <attribute name="orderItems" type="List" mode="IN" optional="false">
+            <type-validate>
+                <fail-property resource="OrderErrorUiLabels" property="OrderRequiredFieldMissingOrderItems"/>
+            </type-validate>
+        </attribute>
         <attribute name="orderTerms" type="List" mode="IN" optional="true"/>
         <!-- workeffort contains the rental start/enddate, nbr of persons. WorkEfforts is mandatory for ordertype = RENTAL_ORDER_ITEM-->
         <attribute name="workEfforts" type="List" mode="IN" optional="true"/>
-        <attribute name="orderAdjustments" type="List" mode="IN" optional="false"/>
+        <attribute name="orderAdjustments" type="List" mode="IN" optional="false">
+            <type-validate>
+                <fail-property resource="OrderErrorUiLabels" property="OrderRequiredFieldMissingOrderAdjustments"/>
+            </type-validate>
+        </attribute>
         <attribute name="billingAccountId" type="String" mode="IN" optional="true"/>
         <attribute name="shippingAmount" type="BigDecimal" mode="IN" optional="true"/>
         <attribute name="firstAttemptOrderId" type="String" mode="IN" optional="true"/>
-        <attribute name="currencyUom" type="String" mode="IN" optional="false"/>
+        <attribute name="currencyUom" type="String" mode="IN" optional="false">
+            <type-validate>
+                <fail-property resource="OrderErrorUiLabels" property="OrderRequiredFieldMissingCurrencyUom"/>
+            </type-validate>
+        </attribute>
         <attribute name="grandTotal" type="BigDecimal" mode="IN" optional="true"/>
         <attribute name="taxAmount" type="BigDecimal" mode="IN" optional="true"/>
         <attribute name="orderDate" type="Timestamp" mode="IN" optional="true"/>
@@ -150,7 +178,11 @@ under the License.
 
     <service name="callProcessOrderPayments" engine="java"
             location="org.apache.ofbiz.order.order.OrderServices" invoke="callProcessOrderPayments" auth="false">
-        <attribute name="shoppingCart" type="org.apache.ofbiz.order.shoppingcart.ShoppingCart" mode="IN" optional="false"/>
+        <attribute name="shoppingCart" type="org.apache.ofbiz.order.shoppingcart.ShoppingCart" mode="IN" optional="false">
+            <type-validate>
+                <fail-property resource="OrderErrorUiLabels" property="OrderRequiredFieldMissingShoppingCart"/>
+            </type-validate>
+        </attribute>
         <attribute name="manualHold" type="Boolean" mode="IN" optional="true"/>
     </service>
     <service name="createOrderFromShoppingCart" engine="java"
@@ -160,11 +192,31 @@ under the License.
     </service>
     <service name="createSimpleNonProductSalesOrder" engine="java"
             location="org.apache.ofbiz.order.order.OrderServices" invoke="createSimpleNonProductSalesOrder" auth="true">
-        <attribute name="paymentMethodId" type="String" mode="IN" optional="false"/>
-        <attribute name="productStoreId" type="String" mode="IN" optional="false"/>
-        <attribute name="currency" type="String" mode="IN" optional="false"/>
-        <attribute name="partyId" type="String" mode="IN" optional="false"/>
-        <attribute name="itemMap" type="Map" mode="IN" optional="false"/>
+        <attribute name="paymentMethodId" type="String" mode="IN" optional="false">
+            <type-validate>
+                <fail-property resource="OrderErrorUiLabels" property="OrderRequiredFieldMissingPaymentMethodId"/>
+            </type-validate>
+        </attribute>
+        <attribute name="productStoreId" type="String" mode="IN" optional="false">
+            <type-validate>
+                <fail-property resource="OrderErrorUiLabels" property="OrderRequiredFieldMissingProductStoreId"/>
+            </type-validate>
+        </attribute>
+        <attribute name="currency" type="String" mode="IN" optional="false">
+            <type-validate>
+                <fail-property resource="OrderErrorUiLabels" property="OrderRequiredFieldMissingCurrency"/>
+            </type-validate>
+        </attribute>
+        <attribute name="partyId" type="String" mode="IN" optional="false">
+            <type-validate>
+                <fail-property resource="OrderErrorUiLabels" property="OrderRequiredFieldMissingPartyId"/>
+            </type-validate>
+        </attribute>
+        <attribute name="itemMap" type="Map" mode="IN" optional="false">
+            <type-validate>
+                <fail-property resource="OrderErrorUiLabels" property="OrderRequiredFieldMissingItemMap"/>
+            </type-validate>
+        </attribute>
         <attribute name="orderId" type="String" mode="OUT" optional="false"/>
     </service>
 
@@ -185,21 +237,37 @@ under the License.
         <permission-service service-name="orderAdjustmentPermissionCheck" main-action="CREATE"/>
         <auto-attributes mode="OUT" include="pk" optional="false"/>
         <auto-attributes mode="IN" include="nonpk" optional="true"/>
-        <override name="orderAdjustmentTypeId" optional="false"/>
-        <override name="orderId" optional="false"/>
+        <override name="orderAdjustmentTypeId" optional="false">
+            <type-validate>
+                <fail-property resource="OrderErrorUiLabels" property="OrderRequiredFieldMissingOrderAdjustmentTypeId"/>
+            </type-validate>
+        </override>
+        <override name="orderId" optional="false">
+            <type-validate>
+                <fail-property resource="OrderErrorUiLabels" property="OrderRequiredFieldMissingOrderId"/>
+            </type-validate>
+        </override>
     </service>
     <service name="updateOrderAdjustment" default-entity-name="OrderAdjustment" engine="entity-auto" invoke="update">
         <description>Update an order adjustment record</description>
         <permission-service service-name="orderAdjustmentPermissionCheck" main-action="UPDATE"/>
         <auto-attributes mode="IN" include="pk" optional="false"/>
         <auto-attributes mode="IN" include="nonpk" optional="true"/>
-        <override name="orderId" optional="false"/>
+        <override name="orderId" optional="false">
+            <type-validate>
+                <fail-property resource="OrderErrorUiLabels" property="OrderRequiredFieldMissingOrderId"/>
+            </type-validate>
+        </override>
     </service>
     <service name="deleteOrderAdjustment" default-entity-name="OrderAdjustment" engine="simple"
         location="component://order/minilang/order/OrderSimpleMethods.xml" invoke="deleteOrderAdjustment">
         <description>Delete an order adjustment record</description>
         <auto-attributes mode="IN" include="pk" optional="false"/>
-        <attribute name="orderId" type="String" mode="IN" optional="false"/>  <!-- needed for resetGrandTotal seca -->
+        <attribute name="orderId" type="String" mode="IN" optional="false">  <!-- needed for resetGrandTotal seca -->
+            <type-validate>
+                <fail-property resource="OrderErrorUiLabels" property="OrderRequiredFieldMissingOrderId"/>
+            </type-validate>
+        </attribute>
         <attribute name="productPromoCodeId" type="String" mode="IN" optional="true"/>
     </service>
 
@@ -212,7 +280,11 @@ under the License.
     <service name="createPaymentFromPreference" engine="java"
             location="org.apache.ofbiz.order.order.OrderServices" invoke="createPaymentFromPreference">
         <description>Creates a payment using the order payment preference</description>
-        <attribute name="orderPaymentPreferenceId" type="String" mode="IN" optional="false"/>
+        <attribute name="orderPaymentPreferenceId" type="String" mode="IN" optional="false">
+            <type-validate>
+                <fail-property resource="OrderErrorUiLabels" property="OrderRequiredFieldMissingOrderPaymentPreferenceId"/>
+            </type-validate>
+        </attribute>
         <attribute name="paymentFromId" type="String" mode="IN" optional="true"/>
         <attribute name="paymentRefNum" type="String" mode="IN" optional="true"/>
         <attribute name="comments" type="String" mode="IN" optional="true"/>
@@ -223,9 +295,21 @@ under the License.
     <service name="updateTrackingNumber" engine="java"
             location="org.apache.ofbiz.order.order.OrderServices" invoke="updateTrackingNumber">
         <description>Sets the tracking number on a shipment preference</description>
-        <attribute name="orderId" type="String" mode="IN" optional="false"/>
-        <attribute name="shipGroupSeqId" type="String" mode="IN" optional="false"/>
-        <attribute name="trackingNumber" type="String" mode="IN" optional="false"/>
+        <attribute name="orderId" type="String" mode="IN" optional="false">
+            <type-validate>
+                <fail-property resource="OrderErrorUiLabels" property="OrderRequiredFieldMissingOrderId"/>
+            </type-validate>
+        </attribute>
+        <attribute name="shipGroupSeqId" type="String" mode="IN" optional="false">
+            <type-validate>
+                <fail-property resource="OrderErrorUiLabels" property="OrderRequiredFieldMissingShipGroupSeqId"/>
+            </type-validate>
+        </attribute>
+        <attribute name="trackingNumber" type="String" mode="IN" optional="false">
+            <type-validate>
+                <fail-property resource="OrderErrorUiLabels" property="OrderRequiredFieldMissingTrackingNumber"/>
+            </type-validate>
+        </attribute>
     </service>
 
     <service name="resetGrandTotal" engine="java"
@@ -258,7 +342,11 @@ under the License.
         <attribute name="orderId" type="String" mode="IN"/>
         <attribute name="statusId" type="String" mode="IN"/>
         <attribute name="setItemStatus" type="String" mode="IN" optional="true"/>
-        <attribute name="oldStatusId" type="String" mode="OUT" optional="false"/>
+        <attribute name="oldStatusId" type="String" mode="OUT" optional="false">
+            <type-validate>
+                <fail-property resource="OrderErrorUiLabels" property="OrderRequiredFieldMissingOldStatusId"/>
+            </type-validate>
+        </attribute>
         <attribute name="orderStatusId" type="String" mode="OUT" optional="true"/>
         <attribute name="orderTypeId" type="String" mode="OUT" optional="true"/>
         <attribute name="needsInventoryIssuance" type="String" mode="OUT" optional="true"/>
@@ -269,10 +357,18 @@ under the License.
     <service name="changeOrderItemStatus" engine="java" auth="true"
             location="org.apache.ofbiz.order.order.OrderServices" invoke="setItemStatus">
         <description>Change the status of an existing order item.  If no orderItemSeqId is specified, the status of all order items will be changed.</description>
-        <attribute name="orderId" type="String" mode="IN" optional="false"/>
+        <attribute name="orderId" type="String" mode="IN" optional="false">
+            <type-validate>
+                <fail-property resource="OrderErrorUiLabels" property="OrderRequiredFieldMissingOrderId"/>
+            </type-validate>
+        </attribute>
         <attribute name="orderItemSeqId" type="String" mode="IN" optional="true"/>
         <attribute name="fromStatusId" type="String" mode="IN" optional="true"/>
-        <attribute name="statusId" type="String" mode="IN" optional="false"/>
+        <attribute name="statusId" type="String" mode="IN" optional="false">
+            <type-validate>
+                <fail-property resource="OrderErrorUiLabels" property="OrderRequiredFieldMissingStatusId"/>
+            </type-validate>
+        </attribute>
         <attribute name="statusDateTime" type="Timestamp" mode="IN" optional="true"/>
         <attribute name="changeReason" type="String" mode="IN" optional="true"/>
     </service>
@@ -280,7 +376,11 @@ under the License.
     <service name="cancelOrderItem" engine="java" auth="true" transaction-timeout="3000"
             location="org.apache.ofbiz.order.order.OrderServices" invoke="cancelOrderItem">
         <description>Cancel an Order Item Quantity</description>
-        <attribute name="orderId" type="String" mode="IN" optional="false"/>
+        <attribute name="orderId" type="String" mode="IN" optional="false">
+            <type-validate>
+                <fail-property resource="OrderErrorUiLabels" property="OrderRequiredFieldMissingOrderId"/>
+            </type-validate>
+        </attribute>
         <attribute name="orderItemSeqId" type="String" mode="IN" optional="true"/>
         <attribute name="shipGroupSeqId" type="String" mode="IN" optional="true"/>
         <attribute name="cancelQuantity" type="BigDecimal" mode="IN" optional="true"/>
@@ -291,7 +391,11 @@ under the License.
     <service name="cancelOrderItemNoActions" engine="java" auth="true"
             location="org.apache.ofbiz.order.order.OrderServices" invoke="cancelOrderItem">
         <description>Cancel an Order Item Quantity. This is equal to cancelOrderItem but no ECAs are attached to this service.</description>
-        <attribute name="orderId" type="String" mode="IN" optional="false"/>
+        <attribute name="orderId" type="String" mode="IN" optional="false">
+            <type-validate>
+                <fail-property resource="OrderErrorUiLabels" property="OrderRequiredFieldMissingOrderId"/>
+            </type-validate>
+        </attribute>
         <attribute name="orderItemSeqId" type="String" mode="IN" optional="true"/>
         <attribute name="shipGroupSeqId" type="String" mode="IN" optional="true"/>
         <attribute name="cancelQuantity" type="BigDecimal" mode="IN" optional="true"/>
@@ -327,20 +431,40 @@ under the License.
             location="org.apache.ofbiz.order.order.OrderServices" invoke="saveUpdatedCartToOrder">
         <description>Update the quantities/prices for an existing order</description>
         <attribute name="orderId" type="String" mode="INOUT" optional="false"/>
-        <attribute name="shoppingCart" type="org.apache.ofbiz.order.shoppingcart.ShoppingCart" mode="IN" optional="false"/>
+        <attribute name="shoppingCart" type="org.apache.ofbiz.order.shoppingcart.ShoppingCart" mode="IN" optional="false">
+            <type-validate>
+                <fail-property resource="OrderErrorUiLabels" property="OrderRequiredFieldMissingShoppingCart"/>
+            </type-validate>
+        </attribute>
         <attribute name="calcTax" type="Boolean" mode="IN" optional="true" default-value="true"/>
         <attribute name="deleteItems" type="Boolean" mode="IN" optional="true" default-value="false"/>
-        <attribute name="changeMap" type="Map" mode="IN" optional="false"/>
+        <attribute name="changeMap" type="Map" mode="IN" optional="false">
+            <type-validate>
+                <fail-property resource="OrderErrorUiLabels" property="OrderRequiredFieldMissingChangeMap"/>
+            </type-validate>
+        </attribute>
     </service>
     <service name="appendOrderItem" engine="java" auth="true"
             location="org.apache.ofbiz.order.order.OrderServices" invoke="addItemToApprovedOrder">
         <description>Append an item to an existing order</description>
         <attribute name="orderId" type="String" mode="INOUT" optional="false"/>
-        <attribute name="shipGroupSeqId" type="String" mode="IN" optional="false"/>
-        <attribute name="productId" type="String" mode="IN" optional="false"/>
+        <attribute name="shipGroupSeqId" type="String" mode="IN" optional="false">
+            <type-validate>
+                <fail-property resource="OrderErrorUiLabels" property="OrderRequiredFieldMissingShipGroupSeqId"/>
+            </type-validate>
+        </attribute>
+        <attribute name="productId" type="String" mode="IN" optional="false">
+            <type-validate>
+                <fail-property resource="OrderErrorUiLabels" property="OrderRequiredFieldMissingProductId"/>
+            </type-validate>
+        </attribute>
         <attribute name="prodCatalogId" type="String" mode="IN" optional="true"/>
         <attribute name="basePrice" type="BigDecimal" mode="IN" optional="true"/>
-        <attribute name="quantity" type="BigDecimal" mode="IN" optional="false"/>
+        <attribute name="quantity" type="BigDecimal" mode="IN" optional="false">
+            <type-validate>
+                <fail-property resource="OrderErrorUiLabels" property="OrderRequiredFieldMissingQuantity"/>
+            </type-validate>
+        </attribute>
         <attribute name="amount" type="BigDecimal" mode="IN" optional="true"/>
         <attribute name="overridePrice" type="String" mode="IN" optional="true"/>
         <attribute name="reasonEnumId" type="String" mode="IN" optional="true"/>
@@ -356,13 +480,21 @@ under the License.
             location="component://order/minilang/order/OrderServices.xml" invoke="recreateOrderAdjustments">
         <description>Remove all existing order adjustments, recalc them and persist in OrderAdjustment.</description>
         <permission-service service-name="orderAdjustmentPermissionCheck" main-action="UPDATE"/>
-        <attribute name="orderId" type="String" mode="IN" optional="false"/>
+        <attribute name="orderId" type="String" mode="IN" optional="false">
+            <type-validate>
+                <fail-property resource="OrderErrorUiLabels" property="OrderRequiredFieldMissingOrderId"/>
+            </type-validate>
+        </attribute>
     </service>
 
     <service name="processOrderPayments" engine="java" auth="true"
             location="org.apache.ofbiz.order.order.OrderServices" invoke="processOrderPayments">
         <description>Process payments for an order</description>
-        <attribute name="orderId" type="String" mode="IN" optional="false"/>
+        <attribute name="orderId" type="String" mode="IN" optional="false">
+            <type-validate>
+                <fail-property resource="OrderErrorUiLabels" property="OrderRequiredFieldMissingOrderId"/>
+            </type-validate>
+        </attribute>
     </service>
 
     <service name="updateOrderPaymentPreference" engine="java" auth="true" default-entity-name="OrderPaymentPreference"
@@ -375,13 +507,21 @@ under the License.
     <service name="checkOrderItemStatus" engine="java"
             location="org.apache.ofbiz.order.order.OrderServices" invoke="checkItemStatus">
       <description>Check the status of all items and cancel/approve/complete the order if we can</description>
-        <attribute name="orderId" type="String" mode="IN" optional="false"/>
+        <attribute name="orderId" type="String" mode="IN" optional="false">
+            <type-validate>
+                <fail-property resource="OrderErrorUiLabels" property="OrderRequiredFieldMissingOrderId"/>
+            </type-validate>
+        </attribute>
     </service>
 
     <service name="updateOrderStatusFromReceipt" engine="simple"
             location="component://order/minilang/order/OrderSimpleMethods.xml" invoke="updateOrderStatusFromReceipt">
         <description>Updates the (purchase) order/order item status based on receipt</description>
-        <attribute name="orderId" type="String" mode="IN" optional="false"/>
+        <attribute name="orderId" type="String" mode="IN" optional="false">
+            <type-validate>
+                <fail-property resource="OrderErrorUiLabels" property="OrderRequiredFieldMissingOrderId"/>
+            </type-validate>
+        </attribute>
         <attribute name="currentStatusId" type="String" mode="OUT" optional="false"/>
     </service>
 
@@ -401,15 +541,31 @@ under the License.
     <service name="setAllowOrderSplit" engine="java" auth="true"
             location="org.apache.ofbiz.order.order.OrderServices" invoke="allowOrderSplit">
         <description>Set the Allow Split Flag To 'Y' (true)</description>
-        <attribute name="orderId" type="String" mode="IN" optional="false"/>
-        <attribute name="shipGroupSeqId" type="String" mode="IN" optional="false"/>
+        <attribute name="orderId" type="String" mode="IN" optional="false">
+            <type-validate>
+                <fail-property resource="OrderErrorUiLabels" property="OrderRequiredFieldMissingOrderId"/>
+            </type-validate>
+        </attribute>
+        <attribute name="shipGroupSeqId" type="String" mode="IN" optional="false">
+            <type-validate>
+                <fail-property resource="OrderErrorUiLabels" property="OrderRequiredFieldMissingShipGroupSeqId"/>
+            </type-validate>
+        </attribute>
     </service>
 
     <service name="getOrderItemShipGroupEstimatedShipDate" engine="simple"
             location="component://order/minilang/order/OrderServices.xml" invoke="getOrderItemShipGroupEstimatedShipDate" auth="true">
         <description>Compute and return the OrderItemShipGroup estimated ship date based on the associated items.</description>
-        <attribute name="orderId" type="String" mode="IN" optional="false"/>
-        <attribute name="shipGroupSeqId" type="String" mode="IN" optional="false"/>
+        <attribute name="orderId" type="String" mode="IN" optional="false">
+            <type-validate>
+                <fail-property resource="OrderErrorUiLabels" property="OrderRequiredFieldMissingOrderId"/>
+            </type-validate>
+        </attribute>
+        <attribute name="shipGroupSeqId" type="String" mode="IN" optional="false">
+            <type-validate>
+                <fail-property resource="OrderErrorUiLabels" property="OrderRequiredFieldMissingShipGroupSeqId"/>
+            </type-validate>
+        </attribute>
         <attribute name="estimatedShipDate" type="Timestamp" mode="OUT" optional="true"/>
     </service>
 
@@ -448,9 +604,21 @@ under the License.
     <service name="updateOrderNote" engine="simple" default-entity-name="OrderHeaderNote"
             location="component://order/minilang/order/OrderServices.xml" invoke="updateOrderNote" auth="true">
         <description>Toggle Order Note and make it either Public or Private</description>
-        <attribute name="orderId" type="String" mode="IN" optional="false"/>
-        <attribute name="noteId" type="String" mode="IN" optional="false"/>
-        <attribute name="internalNote" type="String" mode="IN" optional="false"/>
+        <attribute name="orderId" type="String" mode="IN" optional="false">
+            <type-validate>
+                <fail-property resource="OrderErrorUiLabels" property="OrderRequiredFieldMissingOrderId"/>
+            </type-validate>
+        </attribute>
+        <attribute name="noteId" type="String" mode="IN" optional="false">
+            <type-validate>
+                <fail-property resource="OrderErrorUiLabels" property="OrderRequiredFieldMissingNoteId"/>
+            </type-validate>
+        </attribute>
+        <attribute name="internalNote" type="String" mode="IN" optional="false">
+            <type-validate>
+                <fail-property resource="OrderErrorUiLabels" property="OrderRequiredFieldMissingInternalNote"/>
+            </type-validate>
+        </attribute>
     </service>
 
     <!-- Order (digital) Fulfillment Services -->
@@ -462,12 +630,24 @@ under the License.
    <service name="fulfillDigitalItems" engine="java" require-new-transaction="true" transaction-timeout="300"
        location="org.apache.ofbiz.order.order.OrderServices" invoke="fulfillDigitalItems">
        <description>Order Fulfillment</description>
-       <attribute name="orderId" type="String" mode="IN" optional="false"/>
-       <attribute name="orderItems" type="java.util.List" mode="IN" optional="false"/>
+       <attribute name="orderId" type="String" mode="IN" optional="false">
+           <type-validate>
+               <fail-property resource="OrderErrorUiLabels" property="OrderRequiredFieldMissingOrderId"/>
+           </type-validate>
+       </attribute>
+       <attribute name="orderItems" type="java.util.List" mode="IN" optional="false">
+           <type-validate>
+               <fail-property resource="OrderErrorUiLabels" property="OrderRequiredFieldMissingOrderItems"/>
+           </type-validate>
+       </attribute>
    </service>
    <service name="itemFulfillmentInterface" engine="interface" invoke="" location="" auth="false" >
        <auto-attributes entity-name="ProductContent" include="pk" mode="IN" optional="false"/>
-       <attribute name="orderItem" type="org.apache.ofbiz.entity.GenericValue" mode="IN" optional="false"/>
+       <attribute name="orderItem" type="org.apache.ofbiz.entity.GenericValue" mode="IN" optional="false">
+           <type-validate>
+               <fail-property resource="OrderErrorUiLabels" property="OrderRequiredFieldMissingOrderItem"/>
+           </type-validate>
+       </attribute>
    </service>
     <service name="invoiceServiceItems" engine="java"
             location="org.apache.ofbiz.order.order.OrderServices" invoke="invoiceServiceItems" auth="true">
@@ -478,7 +658,11 @@ under the License.
     <service name="getOrderedSummaryInformation" engine="groovy"
             location="component://order/groovyScripts/order/OrderServices.groovy" invoke="getOrderedSummaryInformation">
         <description>Get Ordered Summary Information</description>
-        <attribute name="partyId" type="String" mode="IN" optional="false"/>
+        <attribute name="partyId" type="String" mode="IN" optional="false">
+            <type-validate>
+                <fail-property resource="OrderErrorUiLabels" property="OrderRequiredFieldMissingPartyId"/>
+            </type-validate>
+        </attribute>
         <attribute name="roleTypeId" type="String" mode="IN" optional="true"/> <!-- defaults to PLACING_CUSTOMER -->
         <attribute name="orderTypeId" type="String" mode="IN" optional="true"/> <!-- defaults to SALES_ORDER -->
         <attribute name="statusId" type="String" mode="IN" optional="true"/> <!-- defaults to ORDER_COMPLETED -->
@@ -500,14 +684,26 @@ under the License.
     <service name="getOrderShippingAmount" engine="java"
             location="org.apache.ofbiz.order.order.OrderServices" invoke="getOrderShippingAmount">
         <description>Get the total shipping for an order</description>
-        <attribute name="orderId" type="String" mode="IN" optional="false"/>
+        <attribute name="orderId" type="String" mode="IN" optional="false">
+            <type-validate>
+                <fail-property resource="OrderErrorUiLabels" property="OrderRequiredFieldMissingOrderId"/>
+            </type-validate>
+        </attribute>
         <attribute name="shippingAmount" type="BigDecimal" mode="OUT" optional="false"/>
     </service>
     <service name="getOrderStatus" engine="simple" location="component://order/minilang/order/OrderServices.xml"
             invoke="getOrderStatus" auth="false">
         <description>Gets the order status</description>
-        <attribute name="orderId" type="String" mode="IN" optional="false"/>
-        <attribute name="statusId" type="String" mode="OUT" optional="false"/>
+        <attribute name="orderId" type="String" mode="IN" optional="false">
+            <type-validate>
+                <fail-property resource="OrderErrorUiLabels" property="OrderRequiredFieldMissingOrderId"/>
+            </type-validate>
+        </attribute>
+        <attribute name="statusId" type="String" mode="OUT" optional="false">
+            <type-validate>
+                <fail-property resource="OrderErrorUiLabels" property="OrderRequiredFieldMissingStatusId"/>
+            </type-validate>
+        </attribute>
     </service>
 
     <!-- Order Delivery Services -->
@@ -527,14 +723,22 @@ under the License.
     <service name="sendOrderDeliveryScheduleNotification" engine="simple"
             location="component://order/minilang/order/OrderDeliveryServices.xml" invoke="sendOrderDeliveryScheduleNotification">
         <description>Send Order Delivery Schedule Notification</description>
-        <attribute name="orderId" type="String" mode="IN" optional="false"/>
+        <attribute name="orderId" type="String" mode="IN" optional="false">
+            <type-validate>
+                <fail-property resource="OrderErrorUiLabels" property="OrderRequiredFieldMissingOrderId"/>
+            </type-validate>
+        </attribute>
         <attribute name="orderItemSeqId" type="String" mode="IN" optional="true"/>
     </service>
 
     <service name="checkSupplierRelatedOrderPermission" engine="simple"
             location="component://order/minilang/order/OrderDeliveryServices.xml" invoke="checkSupplierRelatedOrderPermissionService">
         <description>Check Supplier Related Order Permission</description>
-        <attribute name="orderId" type="String" mode="IN" optional="false"/>
+        <attribute name="orderId" type="String" mode="IN" optional="false">
+            <type-validate>
+                <fail-property resource="OrderErrorUiLabels" property="OrderRequiredFieldMissingOrderId"/>
+            </type-validate>
+        </attribute>
         <attribute name="checkAction" type="String" mode="IN" optional="true"/>
         <attribute name="callingMethodName" type="String" mode="IN" optional="true"/>
         <attribute name="hasSupplierRelatedPermission" type="String" mode="OUT" optional="false"/>
@@ -551,7 +755,11 @@ under the License.
     <!-- serialization test -->
     <service name="shoppingCartRemoteTest" engine="java"
             location="org.apache.ofbiz.order.order.OrderServices" invoke="shoppingCartRemoteTest">
-        <attribute name="cart" type="org.apache.ofbiz.order.shoppingcart.ShoppingCart" mode="IN" optional="false"/>
+        <attribute name="cart" type="org.apache.ofbiz.order.shoppingcart.ShoppingCart" mode="IN" optional="false">
+            <type-validate>
+                <fail-property resource="OrderErrorUiLabels" property="OrderRequiredFieldMissingCart"/>
+            </type-validate>
+        </attribute>
     </service>
     <service name="shoppingCartTest" engine="java"
             location="org.apache.ofbiz.order.order.OrderServices" invoke="shoppingCartTest">
@@ -576,7 +784,11 @@ under the License.
     <!-- mass order changes -->
     <service name="massOrderChangeInterface" engine="interface" location="" invoke="">
         <description>Interface for Mass Order Change Services</description>
-        <attribute name="orderIdList" type="List" mode="IN" optional="false"/>
+        <attribute name="orderIdList" type="List" mode="IN" optional="false">
+            <type-validate>
+                <fail-property resource="OrderErrorUiLabels" property="OrderRequiredFieldMissingOrderIdList"/>
+            </type-validate>
+        </attribute>
     </service>
 
     <service name="massPickOrders" engine="java" transaction-timeout="300"
@@ -614,22 +826,38 @@ under the License.
     <service name="massPrintOrders" engine="java" transaction-timeout="300"
             location="org.apache.ofbiz.order.order.OrderServices" invoke="massPrintOrders" auth="true">
         <implements service="massOrderChangeInterface"/>
-        <attribute name="screenLocation" type="String" mode="IN" optional="false"/>
+        <attribute name="screenLocation" type="String" mode="IN" optional="false">
+            <type-validate>
+                <fail-property resource="OrderErrorUiLabels" property="OrderRequiredFieldMissingScreenLocation"/>
+            </type-validate>
+        </attribute>
         <attribute name="printerName" type="String" mode="IN" optional="true"/>
     </service>
     <service name="massCreateFileForOrders" engine="java" transaction-timeout="300"
             location="org.apache.ofbiz.order.order.OrderServices" invoke="massCreateFileForOrders" auth="true">
         <implements service="massOrderChangeInterface"/>
-        <attribute name="screenLocation" type="String" mode="IN" optional="false"/>
+        <attribute name="screenLocation" type="String" mode="IN" optional="false">
+            <type-validate>
+                <fail-property resource="OrderErrorUiLabels" property="OrderRequiredFieldMissingScreenLocation"/>
+            </type-validate>
+        </attribute>
     </service>
 
     <service name="getNextOrderId" engine="groovy"
         location="component://order/groovyScripts/order/OrderServices.groovy" invoke="getNextOrderId">
         <description>Get the Next Order ID According to Settings on the PartyAcctgPreference Entity for the given Party</description>
         <implements service="storeOrder" optional="true"/>
-        <attribute name="partyId" type="String" mode="IN" optional="false"/>
+        <attribute name="partyId" type="String" mode="IN" optional="false">
+            <type-validate>
+                <fail-property resource="OrderErrorUiLabels" property="OrderRequiredFieldMissingPartyId"/>
+            </type-validate>
+        </attribute>
         <attribute name="productStoreId" type="String" mode="IN" optional="true"/>
-        <attribute name="orderId" type="String" mode="OUT" optional="false"/>
+        <attribute name="orderId" type="String" mode="OUT" optional="false">
+            <type-validate>
+                <fail-property resource="OrderErrorUiLabels" property="OrderRequiredFieldMissingOrderId"/>
+            </type-validate>
+        </attribute>
     </service>
 
     <service name="orderSequence_enforced" engine="simple"
@@ -682,7 +910,11 @@ under the License.
             <check-permission permission="ORDERMGR" action="_CREATE"/>
         </required-permissions>
         <auto-attributes mode="IN" include="nonpk" optional="true"/>
-        <attribute name="orderId" type="String" mode="IN" optional="false"/>
+        <attribute name="orderId" type="String" mode="IN" optional="false">
+            <type-validate>
+                <fail-property resource="OrderErrorUiLabels" property="OrderRequiredFieldMissingOrderId"/>
+            </type-validate>
+        </attribute>
         <attribute name="shipGroupSeqId" type="String" mode="INOUT" optional="true"/>
     </service>
     <service name="updateOrderItemShipGroup" default-entity-name="OrderItemShipGroup" engine="simple"
@@ -747,14 +979,26 @@ under the License.
     <service name="checkCreateDropShipPurchaseOrders" engine="java"
             location="org.apache.ofbiz.order.order.OrderServices" invoke="checkCreateDropShipPurchaseOrders" auth="true">
         <description>If the order is a sales order, create purchase orders (drop shipments) for each ship group associated to a supplier</description>
-        <attribute name="orderId" type="String" mode="IN" optional="false"/>
+        <attribute name="orderId" type="String" mode="IN" optional="false">
+            <type-validate>
+                <fail-property resource="OrderErrorUiLabels" property="OrderRequiredFieldMissingOrderId"/>
+            </type-validate>
+        </attribute>
     </service>
 
     <service name="addPaymentMethodToOrder" engine="simple"
             location="component://order/minilang/order/OrderServices.xml" invoke="addPaymentMethodToOrder" auth="true">
         <description>Add Payment Method to Order.From this servicewe will call the createOrderPaymentPreference service to create OrderPaymentPreference</description>
-        <attribute type="String" mode="IN" name="orderId" optional="false"/>
-        <attribute type="String" mode="IN" name="paymentMethodId" optional="false"/>
+        <attribute type="String" mode="IN" name="orderId" optional="false">
+            <type-validate>
+                <fail-property resource="OrderErrorUiLabels" property="OrderRequiredFieldMissingOrderId"/>
+            </type-validate>
+        </attribute>
+        <attribute type="String" mode="IN" name="paymentMethodId" optional="false">
+            <type-validate>
+                <fail-property resource="OrderErrorUiLabels" property="OrderRequiredFieldMissingPaymentMethodId"/>
+            </type-validate>
+        </attribute>
         <attribute type="BigDecimal" mode="IN" name="maxAmount"/>
         <attribute type="String" mode="OUT" name="orderPaymentPreferenceId"/>
     </service>
@@ -772,14 +1016,26 @@ under the License.
     <service name="cancelRemainingPurchaseOrderItems" engine="java"
             location="org.apache.ofbiz.order.order.OrderServices" invoke="cancelRemainingPurchaseOrderItems" auth="true">
         <description>Cancels remaining (unreceived) quantities for items of an order. Does not consider received-but-rejected quantities.</description>
-        <attribute name="orderId" type="String" mode="IN" optional="false"/>
+        <attribute name="orderId" type="String" mode="IN" optional="false">
+            <type-validate>
+                <fail-property resource="OrderErrorUiLabels" property="OrderRequiredFieldMissingOrderId"/>
+            </type-validate>
+        </attribute>
     </service>
 
     <service name="generateReqsFromCancelledPOItems" engine="java"
             location="org.apache.ofbiz.order.order.OrderServices" invoke="generateReqsFromCancelledPOItems" auth="true">
         <description>Generates a product requirement for the total cancelled quantity over all order items for each product</description>
-        <attribute name="orderId" type="String" mode="IN" optional="false"/>
-        <attribute name="facilityId" type="String" mode="IN" optional="false"/>
+        <attribute name="orderId" type="String" mode="IN" optional="false">
+            <type-validate>
+                <fail-property resource="OrderErrorUiLabels" property="OrderRequiredFieldMissingOrderId"/>
+            </type-validate>
+        </attribute>
+        <attribute name="facilityId" type="String" mode="IN" optional="false">
+            <type-validate>
+                <fail-property resource="OrderErrorUiLabels" property="OrderRequiredFieldMissingFacilityId"/>
+            </type-validate>
+        </attribute>
     </service>
 
     <service name="getOrderItemInvoicedAmountAndQuantity" engine="java"
@@ -789,8 +1045,16 @@ under the License.
             share of any order-level adjustments (that calculated by applying the percentage of the items total that the item represents
             to the order-level adjustments total (also via OrderAdjustmentBilling). Also returns the quantity invoiced for the item over
             all invoices, to aid in prorating.</description>
-        <attribute name="orderId" type="String" mode="IN" optional="false"/>
-        <attribute name="orderItemSeqId" type="String" mode="IN" optional="false"/>
+        <attribute name="orderId" type="String" mode="IN" optional="false">
+            <type-validate>
+                <fail-property resource="OrderErrorUiLabels" property="OrderRequiredFieldMissingOrderId"/>
+            </type-validate>
+        </attribute>
+        <attribute name="orderItemSeqId" type="String" mode="IN" optional="false">
+            <type-validate>
+                <fail-property resource="OrderErrorUiLabels" property="OrderRequiredFieldMissingOrderItemSeqId"/>
+            </type-validate>
+        </attribute>
         <attribute name="invoicedAmount" type="BigDecimal" mode="OUT" optional="false"/>
         <attribute name="invoicedQuantity" type="BigDecimal" mode="OUT" optional="false"/>
     </service>
@@ -884,7 +1148,11 @@ under the License.
     <service name="checkOrderIsOnBackOrder" engine="simple" auth="false"
             location="component://order/minilang/order/OrderServices.xml" invoke="checkOrderIsOnBackOrder">
         <description>Check if an Order is on Back Order</description>
-        <attribute name="orderId" type="String" mode="IN" optional="false"/>
+        <attribute name="orderId" type="String" mode="IN" optional="false">
+            <type-validate>
+                <fail-property resource="OrderErrorUiLabels" property="OrderRequiredFieldMissingOrderId"/>
+            </type-validate>
+        </attribute>
         <attribute name="isBackOrder" type="Boolean" mode="OUT" optional="false"/>
     </service>
 
@@ -918,7 +1186,11 @@ under the License.
     <service name="changeOrderPaymentStatus" engine="java" auth="true"
             location="org.apache.ofbiz.order.order.OrderServices" invoke="setOrderPaymentStatus">
         <description>Change the payment status of an existing order</description>
-        <attribute name="orderPaymentPreferenceId" type="String" mode="IN" optional="false"/>
+        <attribute name="orderPaymentPreferenceId" type="String" mode="IN" optional="false">
+            <type-validate>
+                <fail-property resource="OrderErrorUiLabels" property="OrderRequiredFieldMissingOrderPaymentPreferenceId"/>
+            </type-validate>
+        </attribute>
         <attribute name="changeReason" type="String" mode="IN" optional="true"/>
     </service>
 
@@ -947,12 +1219,32 @@ under the License.
         <attribute name="userLogin" mode="IN" type="org.apache.ofbiz.entity.GenericValue" optional="true"/>
         <attribute name="shipToAttnName" mode="IN" type="String" optional="true"/>
         <attribute name="shipToName" mode="IN" type="String" optional="true"/>
-        <attribute name="shipToAddress1" mode="IN" type="String" optional="false"/>
+        <attribute name="shipToAddress1" mode="IN" type="String" optional="false">
+            <type-validate>
+                <fail-property resource="OrderErrorUiLabels" property="OrderRequiredFieldMissingShipToAddress1"/>
+            </type-validate>
+        </attribute>
         <attribute name="shipToAddress2" mode="IN" type="String" optional="true"/>
-        <attribute name="shipToCity" mode="IN" type="String" optional="false"/>
-        <attribute name="shipToStateProvinceGeoId" mode="IN" type="String" optional="false"/>
-        <attribute name="shipToPostalCode" mode="IN" type="String" optional="false"/>
-        <attribute name="shipToCountryGeoId" mode="IN" type="String" optional="false"/>
+        <attribute name="shipToCity" mode="IN" type="String" optional="false">
+            <type-validate>
+                <fail-property resource="OrderErrorUiLabels" property="OrderRequiredFieldMissingShipToCity"/>
+            </type-validate>
+        </attribute>
+        <attribute name="shipToStateProvinceGeoId" mode="IN" type="String" optional="false">
+            <type-validate>
+                <fail-property resource="OrderErrorUiLabels" property="OrderRequiredFieldMissingShipToStateProvinceGeoId"/>
+            </type-validate>
+        </attribute>
+        <attribute name="shipToPostalCode" mode="IN" type="String" optional="false">
+            <type-validate>
+                <fail-property resource="OrderErrorUiLabels" property="OrderRequiredFieldMissingShipToPostalCode"/>
+            </type-validate>
+        </attribute>
+        <attribute name="shipToCountryGeoId" mode="IN" type="String" optional="false">
+            <type-validate>
+                <fail-property resource="OrderErrorUiLabels" property="OrderRequiredFieldMissingShipToCountryGeoId"/>
+            </type-validate>
+        </attribute>
         <attribute name="shipToContactMechId" mode="IN" type="String" optional="true"/>
         <attribute name="contactMechId" mode="OUT" type="String" optional="false"/>
         <attribute name="billToContactMechId" mode="IN" type="String" optional="true"/>
@@ -983,16 +1275,40 @@ under the License.
     <service name="createUpdateCreditCard" engine="simple" auth="true" default-entity-name="CreditCard"
             location="component://order/minilang/order/OrderServices.xml" invoke="createUpdateCreditCard">
         <description>Create/Update credit card</description>
-        <attribute name="expMonth" type="String" mode="IN" optional="false"/>
-        <attribute name="expYear" type="String" mode="IN" optional="false"/>
-        <attribute name="cardType" type="String" mode="IN" optional="false"/>
-        <attribute name="cardNumber" type="String" mode="IN" optional="false"/>
+        <attribute name="expMonth" type="String" mode="IN" optional="false">
+            <type-validate>
+                <fail-property resource="OrderErrorUiLabels" property="OrderRequiredFieldMissingExpMonth"/>
+            </type-validate>
+        </attribute>
+        <attribute name="expYear" type="String" mode="IN" optional="false">
+            <type-validate>
+                <fail-property resource="OrderErrorUiLabels" property="OrderRequiredFieldMissingExpYear"/>
+            </type-validate>
+        </attribute>
+        <attribute name="cardType" type="String" mode="IN" optional="false">
+            <type-validate>
+                <fail-property resource="OrderErrorUiLabels" property="OrderRequiredFieldMissingCardType"/>
+            </type-validate>
+        </attribute>
+        <attribute name="cardNumber" type="String" mode="IN" optional="false">
+            <type-validate>
+                <fail-property resource="OrderErrorUiLabels" property="OrderRequiredFieldMissingCardNumber"/>
+            </type-validate>
+        </attribute>
         <attribute name="partyId" type="String" mode="IN" optional="true"/>
         <attribute name="companyNameOnCard" type="String" mode="IN" optional="true"/>
         <attribute name="titleOnCard" type="String" mode="IN" optional="true"/>
-        <attribute name="firstNameOnCard" type="String" mode="IN" optional="false"/>
+        <attribute name="firstNameOnCard" type="String" mode="IN" optional="false">
+            <type-validate>
+                <fail-property resource="OrderErrorUiLabels" property="OrderRequiredFieldMissingFirstNameOnCard"/>
+            </type-validate>
+        </attribute>
         <attribute name="middleNameOnCard" type="String" mode="IN" optional="true"/>
-        <attribute name="lastNameOnCard" type="String" mode="IN" optional="false"/>
+        <attribute name="lastNameOnCard" type="String" mode="IN" optional="false">
+            <type-validate>
+                <fail-property resource="OrderErrorUiLabels" property="OrderRequiredFieldMissingLastNameOnCard"/>
+            </type-validate>
+        </attribute>
         <attribute name="suffixOnCard" type="String" mode="IN" optional="true"/>
         <attribute name="contactMechId" type="String" mode="IN" optional="true"/>
         <attribute name="paymentMethodId" type="String" mode="IN" optional="true"/>
@@ -1022,29 +1338,81 @@ under the License.
     <service name="updateShippingMethodAndCharges" engine="simple" 
             location="component://order/minilang/order/OrderServices.xml" invoke="updateShippingMethodAndCharges">
         <description>Compare order's shipping amount and new shipping amount(based on weight and dimension of packages).If new shipping amount is more then or less than default percentage (defined in shipment.properties) of Order's shipping amount, then shipping method and shipping charges are updated. And if new shipping amount is not more then or less than default percentage (defined in shipment.properties)% of Order's shipping amount then only shipping method is updated.Also updates r [...]
-        <attribute name="orderId" type="String" mode="IN" optional="false"/>
-        <attribute name="shipGroupSeqId" type="String" mode="IN" optional="false"/>
-        <attribute name="oldContactMechId" type="String" mode="IN" optional="false"/>
-        <attribute name="shipmentMethodAndAmount" type="String" mode="IN" optional="false"/>
-        <attribute name="contactMechPurposeTypeId" type="String" mode="IN" optional="false"/>
-        <attribute name="orderAdjustmentId" type="String" mode="IN" optional="false"/>
-        <attribute name="shippingAmount" type="String" mode="IN" optional="false"/>
-        <attribute name="shipmentId" type="String" mode="IN" optional="false"/>
-        <attribute name="shipmentRouteSegmentId" type="String" mode="IN" optional="false"/>
+        <attribute name="orderId" type="String" mode="IN" optional="false">
+            <type-validate>
+                <fail-property resource="OrderErrorUiLabels" property="OrderRequiredFieldMissingOrderId"/>
+            </type-validate>
+        </attribute>
+        <attribute name="shipGroupSeqId" type="String" mode="IN" optional="false">
+            <type-validate>
+                <fail-property resource="OrderErrorUiLabels" property="OrderRequiredFieldMissingShipGroupSeqId"/>
+            </type-validate>
+        </attribute>
+        <attribute name="oldContactMechId" type="String" mode="IN" optional="false">
+            <type-validate>
+                <fail-property resource="OrderErrorUiLabels" property="OrderRequiredFieldMissingOldContactMechId"/>
+            </type-validate>
+        </attribute>
+        <attribute name="shipmentMethodAndAmount" type="String" mode="IN" optional="false">
+            <type-validate>
+                <fail-property resource="OrderErrorUiLabels" property="OrderRequiredFieldMissingShipmentMethodAndAmount"/>
+            </type-validate>
+        </attribute>
+        <attribute name="contactMechPurposeTypeId" type="String" mode="IN" optional="false">
+            <type-validate>
+                <fail-property resource="OrderErrorUiLabels" property="OrderRequiredFieldMissingContactMechPurposeTypeId"/>
+            </type-validate>
+        </attribute>
+        <attribute name="orderAdjustmentId" type="String" mode="IN" optional="false">
+            <type-validate>
+                <fail-property resource="OrderErrorUiLabels" property="OrderRequiredFieldMissingOrderAdjustmentId"/>
+            </type-validate>
+        </attribute>
+        <attribute name="shippingAmount" type="String" mode="IN" optional="false">
+            <type-validate>
+                <fail-property resource="OrderErrorUiLabels" property="OrderRequiredFieldMissingShippingAmount"/>
+            </type-validate>
+        </attribute>
+        <attribute name="shipmentId" type="String" mode="IN" optional="false">
+            <type-validate>
+                <fail-property resource="OrderErrorUiLabels" property="OrderRequiredFieldMissingShipmentId"/>
+            </type-validate>
+        </attribute>
+        <attribute name="shipmentRouteSegmentId" type="String" mode="IN" optional="false">
+            <type-validate>
+                <fail-property resource="OrderErrorUiLabels" property="OrderRequiredFieldMissingShipmentRouteSegmentId"/>
+            </type-validate>
+        </attribute>
     </service>
 
     <service name="setShippingInstructions" engine="java" auth="true"
             location="org.apache.ofbiz.order.order.OrderServices" invoke="setShippingInstructions">
         <description>Set the shipping instructions for an order</description>
-        <attribute name="orderId" type="String" mode="IN" optional="false"/>
-        <attribute name="shipGroupSeqId" type="String" mode="IN" optional="false"/>
+        <attribute name="orderId" type="String" mode="IN" optional="false">
+            <type-validate>
+                <fail-property resource="OrderErrorUiLabels" property="OrderRequiredFieldMissingOrderId"/>
+            </type-validate>
+        </attribute>
+        <attribute name="shipGroupSeqId" type="String" mode="IN" optional="false">
+            <type-validate>
+                <fail-property resource="OrderErrorUiLabels" property="OrderRequiredFieldMissingShipGroupSeqId"/>
+            </type-validate>
+        </attribute>
         <attribute name="shippingInstructions" type="String" mode="IN" optional="true"/>
     </service>
     <service name="setGiftMessage" engine="java" auth="true"
             location="org.apache.ofbiz.order.order.OrderServices" invoke="setGiftMessage">
         <description>Set Gift message for an order</description>
-        <attribute name="orderId" type="String" mode="IN" optional="false"/>
-        <attribute name="shipGroupSeqId" type="String" mode="IN" optional="false"/>
+        <attribute name="orderId" type="String" mode="IN" optional="false">
+            <type-validate>
+                <fail-property resource="OrderErrorUiLabels" property="OrderRequiredFieldMissingOrderId"/>
+            </type-validate>
+        </attribute>
+        <attribute name="shipGroupSeqId" type="String" mode="IN" optional="false">
+            <type-validate>
+                <fail-property resource="OrderErrorUiLabels" property="OrderRequiredFieldMissingShipGroupSeqId"/>
+            </type-validate>
+        </attribute>
         <attribute name="giftMessage" type="String" mode="IN" optional="true"/>
     </service>
     <service name="createAlsoBoughtProductAssocs" engine="java" auth="true" 
@@ -1066,14 +1434,22 @@ under the License.
             Creates ProductAssoc records (of type ALSO_BOUGHT) for products that were purchased together in the Order.  If a ProductAssoc record already exists then the quantity field is incremented by one.  If a variant product has
             been ordered then the association is made to its parent product.
         </description>
-        <attribute name="orderId" mode="IN" type="String" optional="false"/>
+        <attribute name="orderId" mode="IN" type="String" optional="false">
+            <type-validate>
+                <fail-property resource="OrderErrorUiLabels" property="OrderRequiredFieldMissingOrderId"/>
+            </type-validate>
+        </attribute>
     </service>
     <service name="productAvailabalityByFacility" engine="simple" location="component://order/minilang/order/OrderServices.xml"
             invoke="productAvailabalityByFacility" auth="true">
         <description>
             Calculate ATP and QOH According For each facility
         </description>
-        <attribute name="productId" type="String" mode="IN" optional="false"/>
+        <attribute name="productId" type="String" mode="IN" optional="false">
+            <type-validate>
+                <fail-property resource="OrderErrorUiLabels" property="OrderRequiredFieldMissingProductId"/>
+            </type-validate>
+        </attribute>
         <attribute name="ownerPartyId" type="String" mode="IN" optional="true"/>
         <attribute name="availabalityList" type="List" mode="OUT"/>
     </service>
@@ -1179,8 +1555,16 @@ under the License.
     <service name="countProductQuantityOrdered" engine="java"
         location="org.apache.ofbiz.order.order.OrderServices" invoke="countProductQuantityOrdered" auth="true">
         <description>count Product Quantity Ordered</description>
-        <attribute name="productId" type="String" mode="IN" optional="false"/>
-        <attribute name="quantity" type="BigDecimal" mode="IN" optional="false"/>
+        <attribute name="productId" type="String" mode="IN" optional="false">
+            <type-validate>
+                <fail-property resource="OrderErrorUiLabels" property="OrderRequiredFieldMissingProductId"/>
+            </type-validate>
+        </attribute>
+        <attribute name="quantity" type="BigDecimal" mode="IN" optional="false">
+            <type-validate>
+                <fail-property resource="OrderErrorUiLabels" property="OrderRequiredFieldMissingQuantity"/>
+            </type-validate>
+        </attribute>
     </service>
     
     <service name="MoveItemBetweenShipGroups" engine="simple" 
@@ -1195,7 +1579,11 @@ under the License.
     
     <service name="updateShipGroupShipInfo" engine="java" location="org.apache.ofbiz.order.order.OrderServices" invoke="updateShipGroupShipInfo" auth="true">
             <description>Update Shipping Information on Order View</description>
-         <attribute name="contactMechId" type="String" mode="IN" optional="false"/>
+         <attribute name="contactMechId" type="String" mode="IN" optional="false">
+             <type-validate>
+                 <fail-property resource="OrderErrorUiLabels" property="OrderRequiredFieldMissingContactMechId"/>
+             </type-validate>
+         </attribute>
          <attribute name="orderId" type="String" mode="IN" optional="true"/>
          <attribute name="oldContactMechId" type="String" mode="IN" optional="true"/>
          <attribute name="shipGroupSeqId" type="String" mode="IN" optional="true"/>
diff --git a/applications/order/servicedef/services_quote.xml b/applications/order/servicedef/services_quote.xml
index 71946cd..9c578a3 100644
--- a/applications/order/servicedef/services_quote.xml
+++ b/applications/order/servicedef/services_quote.xml
@@ -309,7 +309,11 @@ under the License.
             location="component://order/groovyScripts/quote/QuoteServices.groovy" invoke="createQuoteNote" auth="true">
         <description>Create a note item and associate with a quote</description>
         <attribute name="quoteId" type="String" mode="IN"/>
-        <attribute name="noteInfo" type="String" mode="IN" allow-html="safe"/>
+        <attribute name="noteInfo" type="String" mode="IN" allow-html="safe">
+            <type-validate>
+                <fail-property resource="OrderErrorUiLabels" property="OrderRequiredFieldMissingNoteInfo"/>
+            </type-validate>
+        </attribute>
         <attribute name="noteName" type="String" mode="IN" optional="true"/>
     </service>