You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ofbiz.apache.org by as...@apache.org on 2017/07/22 09:20:33 UTC

svn commit: r1802663 - in /ofbiz/ofbiz-framework/trunk/applications/product: config/ProductErrorUiLabels.xml servicedef/services_facility.xml

Author: ashish
Date: Sat Jul 22 09:20:33 2017
New Revision: 1802663

URL: http://svn.apache.org/viewvc?rev=1802663&view=rev
Log:
Improved: OFBIZ-7471: Improve all the service level error messages for missing required field for facility component(OFBIZ-8714)
Thanks Jagpreet and Lalit for the contribution.

Modified:
    ofbiz/ofbiz-framework/trunk/applications/product/config/ProductErrorUiLabels.xml
    ofbiz/ofbiz-framework/trunk/applications/product/servicedef/services_facility.xml

Modified: ofbiz/ofbiz-framework/trunk/applications/product/config/ProductErrorUiLabels.xml
URL: http://svn.apache.org/viewvc/ofbiz/ofbiz-framework/trunk/applications/product/config/ProductErrorUiLabels.xml?rev=1802663&r1=1802662&r2=1802663&view=diff
==============================================================================
--- ofbiz/ofbiz-framework/trunk/applications/product/config/ProductErrorUiLabels.xml (original)
+++ ofbiz/ofbiz-framework/trunk/applications/product/config/ProductErrorUiLabels.xml Sat Jul 22 09:20:33 2017
@@ -53,6 +53,97 @@
         <value xml:lang="zh">在当前分类中没有找到产品。</value>
         <value xml:lang="zh-TW">在當前分類中沒有找到產品.</value>
     </property>
+    <property key="facility.assocProducts">
+        <value xml:lang="en">Required Field Missing : Assoc Products</value>
+    </property>
+    <property key="facility.contactMechId">
+        <value xml:lang="en">Required Field Missing : Contact Mech Id.</value>
+    </property>
+    <property key="facility.contactMechTypeId">
+        <value xml:lang="en">Required Field Missing : Contact Mech Type Id.</value>
+    </property>
+    <property key="facility.containerId">
+        <value xml:lang="en">Required Field Missing : Container Id</value>
+    </property>
+    <property key="facility.emailAddress">
+        <value xml:lang="en">Required Field Missing : Email Address.</value>
+    </property>
+    <property key="facility.fromDate">
+        <value xml:lang="en">Required Field Missing : From Date.</value>
+    </property>
+    <property key="facility.facilityId">
+        <value xml:lang="en">Required Field Missing : Facility Id.</value>
+    </property>
+    <property key="facility.facilityIdTo">
+        <value xml:lang="en">Required Field Missing : Facility Id To.</value>
+    </property>
+    <property key="facility.inventoryCountDate">
+        <value xml:lang="en">Required Fied Missing : Inventory Count Date.</value>
+    </property>
+    <property key="facility.inventoryItemId">
+        <value xml:lang="en">Required Field Missing : Inventory Item Id.</value>
+    </property>
+    <property key="facility.inventoryItemVariance">
+        <value xml:lang="en">Required Field Missing : Inventory Item Variance.</value>
+    </property>
+    <property key="facility.itemIssuanceId">
+        <value xml:lang="en">Required Field Missing : Item Issuance Id.</value>
+    </property>
+    <property key="facility.inventoryTransferId">
+        <value xml:lang="en">Required Field Missing : Inventory Transfer Id.</value>
+    </property>
+    <property key="facility.locationSeqId">
+        <value xml:lang="en">Required Field Missing : Location Sequence Id.</value>
+    </property>
+    <property key="facility.orderId">
+        <value xml:lang="en">Required Field Missing : Order Id.</value>
+    </property>
+    <property key="facility.orderItems">
+        <value xml:lang="en">Required Field Missing: Order Items.</value>
+    </property>
+    <property key="facility.orderItemSeqId">
+        <value xml:lang="en">Required Field Missing : Order Item Sequence Id.</value>
+    </property>
+    <property key="facility.OrderItemShipGrpInvRes">
+        <value xml:lang="en">Required Field Missing : Order Item Ship Grp Inv Res.</value>
+    </property>
+    <property key="facility.partyId">
+        <value xml:lang="en">Requied Field Missing : Party Id.</value>
+    </property>
+    <property key="facility.productId">
+        <value xml:lang="en">Required Field Missing : Product Id.</value>
+    </property>
+    <property key="facility.promisedDatetime">
+        <value xml:lang="en">Required Field Missing : Promised Date Time.</value>
+    </property>
+    <property key="facility.quantity">
+        <value xml:lang="en">Required Field Missing : Quantity.</value>
+    </property>
+    <property key="facility.quantityMoved">
+        <value xml:lang="en">Required Field Missing : Quantity Moved.</value>
+    </property>
+    <property key="facility.requireInventory">
+        <value xml:lang="en">Required Field Missing : Require Inventory.</value>
+    </property>
+    <property key="facility.reservedDatetime">
+        <value xml:lang="en">Required Field Missing : Reserved Date Time</value>
+    </property>
+    <property key="facility.reserveOrderEnumId">
+        <value xml:lang="en">Required Field Missing : Reserve Order Enum Id.</value>
+    </property>
+
+    <property key="facility.shipGroupSeqId">
+        <value xml:lang="en">Required Field Missing : Ship Group Sequence Id.</value>
+    </property>
+    <property key="facility.statusId">
+        <value xml:lang="en">Required Field Missing : Status Id.</value>
+    </property>
+    <property key="facility.targetLocationSeqId">
+        <value xml:lang="en">Required Field Missing : Target Location Sequence Id.</value>
+    </property>
+    <property key="facility.xferQty">
+        <value xml:lang="en">Required Field Missing : xferQty</value>
+    </property>
     <property key="ImageManagementErrorRmoveDefaultImage">
         <value xml:lang="de">Kann Bild nicht entfernen, es ist das Standardbild.</value>
         <value xml:lang="en">Unable to remove an image. It is the defualt image.</value>

Modified: ofbiz/ofbiz-framework/trunk/applications/product/servicedef/services_facility.xml
URL: http://svn.apache.org/viewvc/ofbiz/ofbiz-framework/trunk/applications/product/servicedef/services_facility.xml?rev=1802663&r1=1802662&r2=1802663&view=diff
==============================================================================
--- ofbiz/ofbiz-framework/trunk/applications/product/servicedef/services_facility.xml (original)
+++ ofbiz/ofbiz-framework/trunk/applications/product/servicedef/services_facility.xml Sat Jul 22 09:20:33 2017
@@ -49,15 +49,21 @@ under the License.
         <override name="productId" optional="false"/>
         <override name="facilityId" optional="false"/>
     </service>
+
     <service name="createInventoryItemCheckSetAtpQoh" engine="simple"
                 location="component://product/minilang/product/inventory/InventoryServices.xml" invoke="createInventoryItemCheckSetAtpQoh" auth="false">
         <description>
         </description>
-        <attribute name="inventoryItemId" type="String" mode="IN" optional="false"/>
+        <attribute name="inventoryItemId" type="String" mode="IN" optional="false">
+            <type-validate>
+                <fail-property resource="ProductErrorUiLabels" property="facility.inventoryItemId"/>
+            </type-validate>
+        </attribute>
         <attribute name="availableToPromiseTotal" type="BigDecimal" mode="IN" optional="true"/>
         <attribute name="quantityOnHandTotal" type="BigDecimal" mode="IN" optional="true"/>
     </service>
 
+
     <service name="updateInventoryItem" default-entity-name="InventoryItem" engine="simple"
                 location="component://product/minilang/product/inventory/InventoryServices.xml" invoke="updateInventoryItem" auth="true">
         <description>Update an InventoryItem</description>
@@ -74,7 +80,12 @@ under the License.
     <service name="changeOwnerUponIssuance" engine="simple"  auth="true"
         location="component://product/minilang/product/inventory/InventoryServices.xml" invoke="changeOwnerUponIssuance">
         <description>If product store setOwnerUponIssuance is Y or empty, set the inventory item owner upon issuance.</description>
-        <attribute name="itemIssuanceId" type="String" mode="IN" optional="false"/>
+        <attribute name="itemIssuanceId" type="String" mode="IN" optional="false">
+        <type-validate>
+            <fail-property resource="ProductErrorUiLabels" property="facility.itemIssuanceId"/>
+        </type-validate>
+        </attribute>
+
     </service>
     <service name="createInventoryItemStatus" engine="simple" default-entity-name="InventoryItemStatus"
             location="component://product/minilang/product/inventory/InventoryServices.xml" invoke="createInventoryItemStatus">
@@ -87,7 +98,12 @@ under the License.
     <service name="checkProductInventoryDiscontinuation" engine="simple"
                 location="component://product/minilang/product/inventory/InventoryServices.xml" invoke="checkProductInventoryDiscontinuation" auth="false">
         <description>Check Product Inventory Discontinuation</description>
-        <attribute name="productId" mode="IN" optional="false" type="String"/>
+        <attribute name="productId" mode="IN" optional="false" type="String">
+        <type-validate>
+            <fail-property resource="ProductErrorUiLabels" property="facility.productId"/>
+        </type-validate>
+        </attribute>
+
     </service>
     <service name="inventoryItemCheckSetDefaultValues" default-entity-name="InventoryItem" engine="simple"
                 location="component://product/minilang/product/inventory/InventoryServices.xml" invoke="inventoryItemCheckSetDefaultValues" auth="false">
@@ -110,12 +126,20 @@ under the License.
             Sums all availableToPromiseDiff and quantityOnHandDiff elements for the inventoryItemId and sets the availableToPromise and quantityOnHand fields on the corresponding InventoryItem.
             Meant to be run as an Entity ECA triggered on any modify operation on the InventoryItemDetail entity.
         </description>
-        <attribute name="inventoryItemId" type="String" mode="IN" optional="false"/>
+        <attribute name="inventoryItemId" type="String" mode="IN" optional="false">
+        <type-validate>
+            <fail-property resource="ProductErrorUiLabels" property="facility.inventoryItemId"/>
+        </type-validate>
+        </attribute>
     </service>
     <service name="updateSerializedInventoryTotals" default-entity-name="InventoryItem" engine="simple"
                 location="component://product/minilang/product/inventory/InventoryServices.xml" invoke="updateSerializedInventoryTotals" auth="false">
         <description>Sets the ATP/QOH totals for serialized inventory items</description>
-        <attribute name="inventoryItemId" type="String" mode="IN" optional="false"/>
+        <attribute name="inventoryItemId" type="String" mode="IN" optional="false">
+        <type-validate>
+            <fail-property resource="ProductErrorUiLabels" property="facility.inventoryItemId"/>
+        </type-validate>
+        </attribute>
     </service>
 
     <service name="createInventoryItemVariance" default-entity-name="InventoryItemVariance" engine="simple"
@@ -134,7 +158,11 @@ under the License.
     <service name="createPhysicalInventoryAndVariance" engine="simple" auth="true" transaction-timeout="600"
             location="component://product/minilang/product/inventory/InventoryServices.xml" invoke="createPhysicalInventoryAndVariance">
         <description>Create a PhysicalInventory and an InventoryItemVariance</description>
-        <auto-attributes entity-name="InventoryItemVariance" include="pk" mode="IN" optional="false"/>
+        <auto-attributes entity-name="InventoryItemVariance" include="pk" mode="IN" optional="false">
+        <type-validate>
+            <fail-property resource="ProductErrorUiLabels" property="facility.inventoryItemVariance"/>
+        </type-validate>
+        </auto-attributes>
         <auto-attributes entity-name="PhysicalInventory" include="nonpk" mode="IN" optional="true"/>
         <auto-attributes entity-name="InventoryItemVariance" include="nonpk" mode="IN" optional="true"/>
         <override name="physicalInventoryId" mode="OUT"/>
@@ -143,7 +171,12 @@ under the License.
     <service name="getMktgPackagesAvailable" engine="simple"
                 location="component://product/minilang/product/inventory/InventoryServices.xml" invoke="getMktgPackagesAvailable" auth="false" use-transaction="false">
         <description>Get Marketing Packages Available From Components In Inventory</description>
-        <attribute name="productId" type="String" mode="IN" optional="false"/>
+        <attribute name="productId" type="String" mode="IN" optional="false">
+        <type-validate>
+            <fail-property resource="ProductErrorUiLabels" property="facility.productId"/>
+        </type-validate>
+        </attribute>
+
         <attribute name="facilityId" type="String" mode="IN" optional="true"/>
         <attribute name="statusId" type="String" mode="IN" optional="true"/>
         <attribute name="quantityOnHandTotal" type="BigDecimal" mode="OUT" optional="false"/>
@@ -152,7 +185,11 @@ under the License.
     <service name="getProductInventoryAvailable" engine="simple"
                 location="component://product/minilang/product/inventory/InventoryServices.xml" invoke="getProductInventoryAvailable" auth="false" use-transaction="false">
         <description>Get Inventory Availability for a Product</description>
-        <attribute name="productId" type="String" mode="IN" optional="false"/>
+        <attribute name="productId" type="String" mode="IN" optional="false">
+        <type-validate>
+            <fail-property resource="ProductErrorUiLabels" property="facility.productId"/>
+        </type-validate>
+        </attribute>
         <attribute name="statusId" type="String" mode="IN" optional="true"/>
         <attribute name="quantityOnHandTotal" type="BigDecimal" mode="OUT" optional="false"/>
         <attribute name="availableToPromiseTotal" type="BigDecimal" mode="OUT" optional="false"/>
@@ -161,8 +198,16 @@ under the License.
     <service name="getInventoryAvailableByFacility" engine="simple"
                 location="component://product/minilang/product/inventory/InventoryServices.xml" invoke="getProductInventoryAvailable" auth="false" use-transaction="false">
         <description>Get Inventory Availability for a Product constrained by a facilityId</description>
-        <attribute name="productId" type="String" mode="IN" optional="false"/>
-        <attribute name="facilityId" type="String" mode="IN" optional="false"/>
+        <attribute name="productId" type="String" mode="IN" optional="false">
+        <type-validate>
+            <fail-property resource="ProductErrorUiLabels" property="facility.productId"/>
+        </type-validate>
+        </attribute>
+        <attribute name="facilityId" type="String" mode="IN" optional="false">
+        <type-validate>
+            <fail-property resource="ProductErrorUiLabels" property="facility.facilityId"/>
+        </type-validate>
+        </attribute>
         <attribute name="statusId" type="String" mode="IN" optional="true"/>
         <attribute name="lotId" mode="IN" type="String" optional="true"/>
         <attribute name="quantityOnHandTotal" type="BigDecimal" mode="OUT" optional="false"/>
@@ -172,9 +217,21 @@ under the License.
     <service name="getInventoryAvailableByLocation" engine="simple"
                 location="component://product/minilang/product/inventory/InventoryServices.xml" invoke="getProductInventoryAvailable" auth="false">
         <description>Get Inventory Availability for a Product constrained by a facility and location</description>
-        <attribute name="productId" type="String" mode="IN" optional="false"/>
-        <attribute name="facilityId" type="String" mode="IN" optional="false"/>
-        <attribute name="locationSeqId" type="String" mode="IN" optional="false"/>
+        <attribute name="productId" type="String" mode="IN" optional="false">
+        <type-validate>
+            <fail-property resource="ProductErrorUiLabels" property="facility.productId"/>
+        </type-validate>
+        </attribute>
+        <attribute name="facilityId" type="String" mode="IN" optional="false">
+        <type-validate>
+            <fail-property resource="ProductErrorUiLabels" property="facility.facilityId"/>
+        </type-validate>
+        </attribute>
+        <attribute name="locationSeqId" type="String" mode="IN" optional="false">
+        <type-validate>
+            <fail-property resource="ProductErrorUiLabels" property="facility.locationSeqId"/>
+        </type-validate>
+        </attribute>
         <attribute name="statusId" type="String" mode="IN" optional="true"/>
         <attribute name="quantityOnHandTotal" type="BigDecimal" mode="OUT" optional="false"/>
         <attribute name="availableToPromiseTotal" type="BigDecimal" mode="OUT" optional="false"/>
@@ -183,8 +240,16 @@ under the License.
     <service name="getInventoryAvailableByContainer" engine="simple"
                 location="component://product/minilang/product/inventory/InventoryServices.xml" invoke="getProductInventoryAvailable" auth="false" use-transaction="false">
         <description>Get Inventory Availability for a Product constrained by a containerId</description>
-        <attribute name="productId" type="String" mode="IN" optional="false"/>
-        <attribute name="containerId" type="String" mode="IN" optional="false"/>
+        <attribute name="productId" type="String" mode="IN" optional="false">
+        <type-validate>
+            <fail-property resource="ProductErrorUiLabels" property="facility.productId"/>
+        </type-validate>
+        </attribute>
+        <attribute name="containerId" type="String" mode="IN" optional="false">
+        <type-validate>
+            <fail-property resource="ProductErrorUiLabels" property="facility.containerId"/>
+        </type-validate>
+        </attribute>
         <attribute name="statusId" type="String" mode="IN" optional="true"/>
         <attribute name="quantityOnHandTotal" type="BigDecimal" mode="OUT" optional="false"/>
         <attribute name="availableToPromiseTotal" type="BigDecimal" mode="OUT" optional="false"/>
@@ -192,7 +257,11 @@ under the License.
     <service name="getInventoryAvailableByItem" engine="simple"
              location="component://product/minilang/product/inventory/InventoryServices.xml" invoke="getProductInventoryAvailable" auth="false" use-transaction="false">
         <description>Get Inventory Availability for an InventoryItem</description>
-        <attribute name="inventoryItemId" type="String" mode="IN" optional="false"/>
+        <attribute name="inventoryItemId" type="String" mode="IN" optional="false">
+        <type-validate>
+            <fail-property resource="ProductErrorUiLabels" property="facility.inventoryItemId"/>
+        </type-validate>
+        </attribute>
         <attribute name="quantityOnHandTotal" type="BigDecimal" mode="OUT" optional="false"/>
         <attribute name="availableToPromiseTotal" type="BigDecimal" mode="OUT" optional="false"/>
         <attribute name="useCache" type="Boolean" mode="IN" optional="true"/>
@@ -204,7 +273,11 @@ under the License.
             usually marketing package components.
         </description>
         <attribute name="facilityId" type="String" mode="IN" optional="true"/>
-        <attribute name="assocProducts" type="List" mode="IN" optional="false"/>
+        <attribute name="assocProducts" type="List" mode="IN" optional="false">
+        <type-validate>
+            <fail-property resource="ProductErrorUiLabels" property="facility.assocProducts"/>
+        </type-validate>
+        </attribute>
         <attribute name="statusId" type="String" mode="IN" optional="true"/>
         <attribute name="quantityOnHandTotal" type="BigDecimal" mode="OUT" optional="false"/>
         <attribute name="availableToPromiseTotal" type="BigDecimal" mode="OUT" optional="false"/>
@@ -212,8 +285,16 @@ under the License.
     <service name="getProductInventoryAvailableBySupplier" engine="simple"
                 location="component://product/minilang/product/inventory/InventoryServices.xml" invoke="getProductInventoryAvailable" auth="false" use-transaction="false">
         <description>Get Inventory Availability for a Product by a Supplier</description>
-        <attribute name="productId" type="String" mode="IN" optional="false"/>
-        <attribute name="partyId" type="String" mode="IN" optional="false"/>
+        <attribute name="productId" type="String" mode="IN" optional="false">
+        <type-validate>
+            <fail-property resource="ProductErrorUiLabels" property="facility.productId"/>
+        </type-validate>
+        </attribute>
+        <attribute name="partyId" type="String" mode="IN" optional="false">
+        <type-validate>
+            <fail-property resource="ProductErrorUiLabels" property="facility.partyId"/>
+        </type-validate>
+        </attribute>
         <attribute name="statusId" type="String" mode="IN" optional="true"/>
         <attribute name="quantityOnHandTotal" type="BigDecimal" mode="OUT" optional="false"/>
         <attribute name="availableToPromiseTotal" type="BigDecimal" mode="OUT" optional="false"/>
@@ -222,19 +303,47 @@ under the License.
     <service name="countProductInventoryOnHand" engine="simple"
                 location="component://product/minilang/product/inventory/InventoryServices.xml" invoke="countProductInventoryOnHand" auth="true" use-transaction="false">
         <description>Count Inventory On Hand for a Product constrained by a facilityId at a given date.</description>
-        <attribute name="productId" type="String" mode="IN" optional="false"/>
-        <attribute name="facilityId" type="String" mode="IN" optional="false"/>
-        <attribute name="statusId" type="String" mode="IN" optional="true"/>
-        <attribute name="inventoryCountDate" type="Timestamp" mode="IN" optional="false"/>
+        <attribute name="productId" type="String" mode="IN" optional="false">
+        <type-validate>
+            <fail-property resource="ProductErrorUiLabels" property="facility.productId"/>
+        </type-validate>
+        </attribute>
+        <attribute name="facilityId" type="String" mode="IN" optional="false">
+        <type-validate>
+            <fail-property resource="ProductErrorUiLabels" property="facility.facilityId"/>
+        </type-validate>
+        </attribute>
+        <attribute name="statusId" type="String" mode="IN" optional="true">
+        <type-validate>
+            <fail-property resource="ProductErrorUiLabels" property="facility.statusId"/>
+        </type-validate>
+        </attribute>
+        <attribute name="inventoryCountDate" type="Timestamp" mode="IN" optional="false">
+        <type-validate>
+            <fail-property resource="ProductErrorUiLabels" property="facility.inventoryCountDate"/>
+        </type-validate>
+        </attribute>
         <attribute name="quantityOnHandTotal" type="BigDecimal" mode="OUT" optional="true"/>
     </service>
     <service name="countProductInventoryShippedForSales" engine="simple"
                 location="component://product/minilang/product/inventory/InventoryServices.xml" invoke="countProductInventoryShippedForSales" auth="true" use-transaction="false">
         <description>Count Inventory Shipped for Sales Orders for a Product constrained by a facilityId in a given date range.</description>
-        <attribute name="productId" type="String" mode="IN" optional="false"/>
-        <attribute name="facilityId" type="String" mode="IN" optional="false"/>
+        <attribute name="productId" type="String" mode="IN" optional="false">
+        <type-validate>
+            <fail-property resource="ProductErrorUiLabels" property="facility.productId"/>
+        </type-validate>
+        </attribute>
+        <attribute name="facilityId" type="String" mode="IN" optional="false">
+        <type-validate>
+            <fail-property resource="ProductErrorUiLabels" property="facility.facilityId"/>
+        </type-validate>
+        </attribute>
         <attribute name="statusId" type="String" mode="IN" optional="true"/>
-        <attribute name="fromDate" type="Timestamp" mode="IN" optional="false"/>
+        <attribute name="fromDate" type="Timestamp" mode="IN" optional="false">
+        <type-validate>
+            <fail-property resource="ProductErrorUiLabels" property="facility.fromDate"/>
+        </type-validate>
+        </attribute>
         <attribute name="thruDate" type="Timestamp" mode="IN" optional="true"/>
         <attribute name="quantityOnHandTotal" type="BigDecimal" mode="OUT" optional="true"/>
     </service>
@@ -242,7 +351,11 @@ under the License.
                 location="org.apache.ofbiz.product.inventory.InventoryServices" invoke="getProductInventorySummaryForItems" auth="false" use-transaction="false">
         <description>Get ATP/QOH Availability for a list of OrderItems by summing over all facilities.  If the item is a MARKETING_PKG_AUTO/PICK, then put its quantity available from components
             in the mktgPkgATPMap and mktgPkgQOHMap.</description>
-        <attribute name="orderItems" type="List" mode="IN" optional="false"/>
+        <attribute name="orderItems" type="List" mode="IN" optional="false">
+        <type-validate>
+            <fail-property resource="ProductErrorUiLabels" property="facility.orderItems"/>
+        </type-validate>
+        </attribute>
         <attribute name="facilityId" type="String" mode="IN" optional="true"/>
         <attribute name="quantityOnHandMap" type="Map" mode="OUT" optional="false"/>
         <attribute name="availableToPromiseMap" type="Map" mode="OUT" optional="false"/>
@@ -254,8 +367,16 @@ under the License.
         <description>Get ATP/QOH Availability for a list of OrderItems by summing over all facilities.  If the item is a MARKETING_PKG_AUTO/PICK, then put its quantity available from components
             in the mktgPkgATPMap and mktgPkgQOHMap.</description>
         <attribute name="checkTime" type="Timestamp" mode="IN" optional="true"/>
-        <attribute name="facilityId" type="String" mode="IN" optional="false"/>
-        <attribute name="productId" type="String" mode="IN" optional="false"/>
+        <attribute name="facilityId" type="String" mode="IN" optional="false">
+        <type-validate>
+            <fail-property resource="ProductErrorUiLabels" property="facility.facilityId"/>
+        </type-validate>
+        </attribute>
+        <attribute name="productId" type="String" mode="IN" optional="false">
+        <type-validate>
+            <fail-property resource="ProductErrorUiLabels" property="facility.productId"/>
+        </type-validate>
+        </attribute>
         <attribute name="minimumStock" mode="IN" type="BigDecimal" optional="true"/>
         <attribute name="statusId" type="String" mode="IN" optional="true"/>
         <attribute name="quantityUomId" type="String" mode="OUT" optional="true"/>
@@ -280,7 +401,11 @@ under the License.
     <service name="balanceInventoryItems" engine="simple" transaction-timeout="600"
             location="component://product/minilang/product/inventory/InventoryServices.xml" invoke="balanceInventoryItems" auth="true">
         <description>Balance inventory items based on the new item specified which will have available inventory that back-order (negative ATP) reservations can be reassigned to.</description>
-        <attribute name="inventoryItemId" type="String" mode="IN" optional="false"/>
+        <attribute name="inventoryItemId" type="String" mode="IN" optional="false">
+        <type-validate>
+            <fail-property resource="ProductErrorUiLabels" property="facility.inventoryItemId"/>
+        </type-validate>
+        </attribute>
         <attribute name="priorityOrderId" type="String" mode="IN" optional="true"/>
         <attribute name="priorityOrderItemSeqId" type="String" mode="IN" optional="true"/>
         <attribute name="noLongerOnBackOrderIdSet" type="Set" mode="OUT" optional="true"/>
@@ -289,8 +414,16 @@ under the License.
     <service name="reassignInventoryReservations" engine="simple" transaction-timeout="600"
             location="component://product/minilang/product/inventory/InventoryServices.xml" invoke="reassignInventoryReservations" auth="true">
         <description>Balance inventory reservations for a given product/facility, considering all the reservations with promised date greater than fromDate.</description>
-        <attribute name="productId" type="String" mode="IN" optional="false"/>
-        <attribute name="facilityId" type="String" mode="IN" optional="false"/>
+        <attribute name="productId" type="String" mode="IN" optional="false">
+        <type-validate>
+            <fail-property resource="ProductErrorUiLabels" property="facility.productId"/>
+        </type-validate>
+        </attribute>
+        <attribute name="facilityId" type="String" mode="IN" optional="false">
+        <type-validate>
+            <fail-property resource="ProductErrorUiLabels" property="facility.facilityId"/>
+        </type-validate>
+        </attribute>
         <attribute name="fromDate" type="Timestamp" mode="IN" optional="true"/>
         <attribute name="noLongerOnBackOrderIdSet" type="Set" mode="OUT" optional="true"/>
         <attribute name="priority" type="String" mode="IN"  optional="true"/>
@@ -298,23 +431,59 @@ under the License.
     <service name="balanceOrderItemsWithNegativeReservations" engine="simple"
                 location="component://product/minilang/product/inventory/InventoryServices.xml" invoke="balanceOrderItemsWithNegativeReservations">
         <description>For each product with a negative reservation in the order, calls reassignInventoryReservations</description>
-        <attribute name="orderId" type="String" mode="IN" optional="false"/>
+        <attribute name="orderId" type="String" mode="IN" optional="false">
+        <type-validate>
+            <fail-property resource="ProductErrorUiLabels" property="facility.orderId"/>
+        </type-validate>
+        </attribute>
     </service>
 
     <service name="reserveAnInventoryItem" engine="simple"
             location="component://product/minilang/product/inventory/InventoryReserveServices.xml" invoke="reserveAnInventoryItem" auth="true">
         <description></description>
-        <attribute name="inventoryItemId" type="String" mode="INOUT" optional="false"/>
-        <attribute name="productId" type="String" mode="IN" optional="false"/>
-        <attribute name="orderId" type="String" mode="IN" optional="false"/>
-        <attribute name="orderItemSeqId" type="String" mode="IN" optional="false"/>
-        <attribute name="shipGroupSeqId" type="String" mode="IN" optional="false"/>
-        <attribute name="quantity" type="BigDecimal" mode="IN" optional="false"/>
+        <attribute name="inventoryItemId" type="String" mode="INOUT" optional="false">
+            <type-validate>
+                <fail-property resource="ProductErrorUiLabels" property="facility.inventoryItemId"/>
+            </type-validate>
+        </attribute>
+        <attribute name="productId" type="String" mode="IN" optional="false">
+        <type-validate>
+            <fail-property resource="ProductErrorUiLabels" property="facility.productId"/>
+        </type-validate>
+        </attribute>
+        <attribute name="orderId" type="String" mode="IN" optional="false">
+        <type-validate>
+            <fail-property resource="ProductErrorUiLabels" property="facility.orderId"/>
+        </type-validate>
+        </attribute>
+        <attribute name="orderItemSeqId" type="String" mode="IN" optional="false">
+        <type-validate>
+            <fail-property resource="ProductErrorUiLabels" property="facility.orderItemSeqId"/>
+        </type-validate>
+        </attribute>
+        <attribute name="shipGroupSeqId" type="String" mode="IN" optional="false">
+        <type-validate>
+            <fail-property resource="ProductErrorUiLabels" property="facility.shipGroupSeqId"/>
+        </type-validate>
+        </attribute>
+        <attribute name="quantity" type="BigDecimal" mode="IN" optional="false">
+        <type-validate>
+            <fail-property resource="ProductErrorUiLabels" property="facility.quantity"/>
+        </type-validate>
+        </attribute>
         <attribute name="reservedDatetime" type="Timestamp" mode="IN" optional="true"/>
-        <attribute name="requireInventory" type="String" mode="IN" optional="false"/>
+        <attribute name="requireInventory" type="String" mode="IN" optional="false">
+        <type-validate>
+            <fail-property resource="ProductErrorUiLabels" property="facility.requireInventory"/>
+        </type-validate>
+        </attribute>
         <attribute name="serialNumber" type="String" mode="IN" optional="true"/>
         <attribute name="sequenceId" type="Long" mode="IN" optional="true"/>
-        <attribute name="promisedDatetime" type="Timestamp" mode="IN" optional="false"/>
+        <attribute name="promisedDatetime" type="Timestamp" mode="IN" optional="false">
+        <type-validate>
+            <fail-property resource="ProductErrorUiLabels" property="facility.promisedDatetime"/>
+        </type-validate>
+        </attribute>
         <attribute name="priority" type="String" mode="IN" optional="true"/>
     </service>
 
@@ -324,14 +493,42 @@ under the License.
             If requireInventory is Y the quantity not reserved is returned, if N then a negative
             availableToPromise will be used to track quantity ordered beyond what is in stock.
         </description>
-        <attribute name="productId" type="String" mode="IN" optional="false"/>
-        <attribute name="orderId" type="String" mode="IN" optional="false"/>
-        <attribute name="orderItemSeqId" type="String" mode="IN" optional="false"/>
-        <attribute name="shipGroupSeqId" 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="ProductErrorUiLabels" property="facility.productId"/>
+        </type-validate>
+        </attribute>
+        <attribute name="orderId" type="String" mode="IN" optional="false">
+        <type-validate>
+            <fail-property resource="ProductErrorUiLabels" property="facility.orderId"/>
+        </type-validate>
+        </attribute>
+        <attribute name="orderItemSeqId" type="String" mode="IN" optional="false">
+        <type-validate>
+            <fail-property resource="ProductErrorUiLabels" property="facility.orderItemSeqId"/>
+        </type-validate>
+        </attribute>
+        <attribute name="shipGroupSeqId" type="String" mode="IN" optional="false">
+        <type-validate>
+            <fail-property resource="ProductErrorUiLabels" property="facility.shipGroupSeqId"/>
+        </type-validate>
+        </attribute>
+        <attribute name="quantity" type="BigDecimal" mode="IN" optional="false">
+        <type-validate>
+            <fail-property resource="ProductErrorUiLabels" property="facility.quantity"/>
+        </type-validate>
+        </attribute>
         <attribute name="reservedDatetime" type="Timestamp" mode="IN" optional="true"/>
-        <attribute name="requireInventory" type="String" mode="IN" optional="false"/>
-        <attribute name="reserveOrderEnumId" type="String" mode="IN" optional="false"/>
+        <attribute name="requireInventory" type="String" mode="IN" optional="false">
+        <type-validate>
+            <fail-property resource="ProductErrorUiLabels" property="facility.requireInventory"/>
+        </type-validate>
+        </attribute>
+        <attribute name="reserveOrderEnumId" type="String" mode="IN" optional="false">
+        <type-validate>
+            <fail-property resource="ProductErrorUiLabels" property="facility.reserveOrderEnumId"/>
+        </type-validate>
+        </attribute>
         <attribute name="sequenceId" type="Long" mode="IN" optional="true"/>
         <attribute name="lotId" mode="IN" type="String" optional="true" />
         <attribute name="priority" type="String" mode="IN" optional="true"/>
@@ -343,14 +540,45 @@ under the License.
             If requireInventory is Y the quantity not reserved is returned, if N then a negative
             availableToPromise will be used to track quantity ordered beyond what is in stock.
         </description>
-        <attribute name="productId" type="String" mode="IN" optional="false"/>
-        <attribute name="facilityId" type="String" mode="IN" optional="false"/>
-        <attribute name="orderId" type="String" mode="IN" optional="false"/>
-        <attribute name="orderItemSeqId" type="String" mode="IN" optional="false"/>
-        <attribute name="shipGroupSeqId" 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="ProductErrorUiLabels" property="facility.productId"/>
+        </type-validate>
+        </attribute>
+        <attribute name="facilityId" type="String" mode="IN" optional="false">
+        <type-validate>
+            <fail-property resource="ProductErrorUiLabels" property="facility.facilityId"/>
+        </type-validate>
+        </attribute>
+        <attribute name="orderId" type="String" mode="IN" optional="false">
+        <type-validate>
+            <fail-property resource="ProductErrorUiLabels" property="facility.orderId"/>
+        </type-validate>
+        </attribute>
+        <attribute name="orderItemSeqId" type="String" mode="IN" optional="false">
+        <type-validate>
+            <fail-property resource="ProductErrorUiLabels" property="facility.orderItemSeqId"/>
+        </type-validate>
+        </attribute>
+        <attribute name="shipGroupSeqId" type="String" mode="IN" optional="false">
+        <type-validate>
+            <fail-property resource="ProductErrorUiLabels" property="facility.shipGroupSeqId"/>
+        </type-validate>
+        </attribute>
+        <attribute name="quantity" type="BigDecimal" mode="IN" optional="false">
+        <type-validate>
+            <fail-property resource="ProductErrorUiLabels" property="facility.quantity"/>
+        </type-validate>
+        </attribute>
         <attribute name="reservedDatetime" type="Timestamp" mode="IN" optional="true"/>
-        <attribute name="requireInventory" type="String" mode="IN" optional="false"/>
+        <type-validate>
+            <fail-property resource="ProductErrorUiLabels" property="facility.reservedDatetime"/>
+        </type-validate>
+        <attribute name="requireInventory" type="String" mode="IN" optional="false">
+        <type-validate>
+            <fail-property resource="ProductErrorUiLabels" property="facility.requireInventory"/>
+        </type-validate>
+        </attribute>
         <attribute name="reserveOrderEnumId" type="String" mode="IN" optional="true"/>
         <attribute name="sequenceId" type="Long" mode="IN" optional="true"/>
         <attribute name="quantityNotReserved" type="BigDecimal" mode="OUT" optional="false"/>
@@ -363,14 +591,42 @@ under the License.
             If requireInventory is Y the quantity not reserved is returned, if N then a negative
             availableToPromise will be used to track quantity ordered beyond what is in stock.
         </description>
-        <attribute name="productId" type="String" mode="IN" optional="false"/>
-        <attribute name="containerId" type="String" mode="IN" optional="false"/>
-        <attribute name="orderId" type="String" mode="IN" optional="false"/>
-        <attribute name="orderItemSeqId" type="String" mode="IN" optional="false"/>
-        <attribute name="shipGroupSeqId" 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="ProductErrorUiLabels" property="facility.productId"/>
+        </type-validate>
+        </attribute>
+        <attribute name="containerId" type="String" mode="IN" optional="false">
+        <type-validate>
+            <fail-property resource="ProductErrorUiLabels" property="facility.containerId"/>
+        </type-validate>
+        </attribute>
+        <attribute name="orderId" type="String" mode="IN" optional="false">
+        <type-validate>
+            <fail-property resource="ProductErrorUiLabels" property="facility.orderId"/>
+        </type-validate>
+        </attribute>
+        <attribute name="orderItemSeqId" type="String" mode="IN" optional="false">
+        <type-validate>
+            <fail-property resource="ProductErrorUiLabels" property="facility.orderItemSeqId"/>
+        </type-validate>
+        </attribute>
+        <attribute name="shipGroupSeqId" type="String" mode="IN" optional="false">
+        <type-validate>
+            <fail-property resource="ProductErrorUiLabels" property="facility.shipGroupSeqId"/>
+        </type-validate>
+        </attribute>
+        <attribute name="quantity" type="BigDecimal" mode="IN" optional="false">
+        <type-validate>
+            <fail-property resource="ProductErrorUiLabels" property="facility.quantity"/>
+        </type-validate>
+        </attribute>
         <attribute name="reservedDatetime" type="Timestamp" mode="IN" optional="true"/>
-        <attribute name="requireInventory" type="String" mode="IN" optional="false"/>
+        <attribute name="requireInventory" type="String" mode="IN" optional="false">
+        <type-validate>
+            <fail-property resource="ProductErrorUiLabels" property="facility.requireInventory"/>
+        </type-validate>
+        </attribute>
         <attribute name="reserveOrderEnumId" type="String" mode="IN" optional="true"/>
         <attribute name="sequenceId" type="Long" mode="IN" optional="true"/>
         <attribute name="quantityNotReserved" type="BigDecimal" mode="OUT" optional="false"/>
@@ -394,29 +650,53 @@ under the License.
             inventoryItem's availableToPromise quantity, or setting the status of the
             corresponding serialized inventoryItem to available.
         </description>
-        <attribute name="orderId" type="String" mode="IN" optional="false"/>
+        <attribute name="orderId" type="String" mode="IN" optional="false">
+        <type-validate>
+            <fail-property resource="ProductErrorUiLabels" property="facility.orderId"/>
+        </type-validate>
+        </attribute>
         <attribute name="orderItemSeqId" type="String" mode="IN" optional="true"/>
         <attribute name="shipGroupSeqId" type="String" mode="IN" optional="true"/>
     </service>
     <service name="cancelOrderItemInvResQty" engine="simple"
             location="component://product/minilang/product/inventory/InventoryReserveServices.xml" invoke="cancelOrderItemInvResQty" auth="true">
         <description>Cancel a specific quantity for an order item</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="ProductErrorUiLabels" property="facility.orderId"/>
+        </type-validate>
+        </attribute>
+        <attribute name="orderItemSeqId" type="String" mode="IN" optional="false">
+        <type-validate>
+            <fail-property resource="ProductErrorUiLabels" property="facility.orderItemSeqId"/>
+        </type-validate>
+        </attribute>
         <attribute name="shipGroupSeqId" type="String" mode="IN" optional="true"/>
         <attribute name="cancelQuantity" type="BigDecimal" mode="IN" optional="true"/>
     </service>
     <service name="cancelOrderItemShipGrpInvRes" engine="simple"
                 location="component://product/minilang/product/inventory/InventoryReserveServices.xml" invoke="cancelOrderItemShipGrpInvRes" auth="true">
         <description>Cancels an inventory reservation</description>
-        <auto-attributes entity-name="OrderItemShipGrpInvRes" include="pk" mode="IN" optional="false"/>
+        <auto-attributes entity-name="OrderItemShipGrpInvRes" include="pk" mode="IN" optional="false">
+        <type-validate>
+            <fail-property resource="ProductErrorUiLabels" property="facility.OrderItemShipGrpInvRes"/>
+        </type-validate>
+        </auto-attributes>
         <attribute name="cancelQuantity" type="BigDecimal" mode="IN" optional="true"/>
     </service>
 
     <service name="interfaceInventoryTransfer" engine="interface" location="" invoke="">
         <description>Inventory Transfer Interface</description>
-        <attribute name="inventoryItemId" type="String" mode="IN" optional="false"/>
-        <attribute name="statusId" type="String" mode="IN" optional="false"/>
+        <attribute name="inventoryItemId" type="String" mode="IN" optional="false">
+        <type-validate>
+            <fail-property resource="ProductErrorUiLabels" property="facility.inventoryItemId"/>
+        </type-validate>
+        </attribute>
+        <attribute name="statusId" type="String" mode="IN" optional="false">
+        <type-validate>
+            <fail-property resource="ProductErrorUiLabels" property="facility.statusId"/>
+        </type-validate>
+        </attribute>
         <attribute name="facilityId" type="String" mode="IN" optional="true"/>
         <attribute name="locationSeqId" type="String" mode="IN" optional="true"/>
         <attribute name="containerId" type="String" mode="IN" optional="true"/>
@@ -433,7 +713,11 @@ under the License.
         <description>Create an inventory transfer.  Uses the prepareInventoryTransfer service; see comments there about transfer quantities and inventory items.</description>
         <permission-service service-name="facilityGenericPermission" main-action="CREATE"/>
         <implements service="interfaceInventoryTransfer"/>
-        <attribute name="xferQty" type="BigDecimal" mode="IN" optional="false"/>
+        <attribute name="xferQty" type="BigDecimal" mode="IN" optional="false">
+        <type-validate>
+            <fail-property resource="ProductErrorUiLabels" property="facility.xferQty"/>
+        </type-validate>
+        </attribute>
         <attribute name="inventoryTransferId" type="String" mode="OUT" optional="false"/>
     </service>
     <service name="updateInventoryTransfer" engine="simple"
@@ -441,37 +725,75 @@ under the License.
         <description>Update an inventory transfer record</description>
         <permission-service service-name="facilityGenericPermission" main-action="UPDATE"/>
         <implements service="interfaceInventoryTransfer"/>
-        <attribute name="inventoryTransferId" type="String" mode="IN" optional="false"/>
+        <attribute name="inventoryTransferId" type="String" mode="IN" optional="false">
+        <type-validate>
+            <fail-property resource="ProductErrorUiLabels" property="facility.inventoryTransferId"/>
+        </type-validate>
+        </attribute>
     </service>
     <service name="prepareInventoryTransfer" engine="java"
             location="org.apache.ofbiz.product.inventory.InventoryServices" invoke="prepareInventoryTransfer">
         <description>Prepares inventory item for transfer.  If the xferQty is less than quantityOnHandTotal of the inventory item, then the inventory
                 item is "split," and an new inventory item will be created with xferQty and used for the inventory transfer.</description> 
         <attribute name="inventoryItemId" type="String" mode="INOUT" optional="false"/>
-        <attribute name="xferQty" type="BigDecimal" mode="IN" optional="false"/>
+        <attribute name="xferQty" type="BigDecimal" mode="IN" optional="false">
+        <type-validate>
+            <fail-property resource="ProductErrorUiLabels" property="facility.xferQty"/>
+        </type-validate>
+        </attribute>
     </service>
     <service name="completeInventoryTransfer" engine="java"
             location="org.apache.ofbiz.product.inventory.InventoryServices" invoke="completeInventoryTransfer">
         <description>Completes the inventory transfer</description>
-        <attribute name="inventoryTransferId" type="String" mode="IN" optional="false"/>
+        <attribute name="inventoryTransferId" type="String" mode="IN" optional="false">
+        <type-validate>
+            <fail-property resource="ProductErrorUiLabels" property="facility.inventoryTransferId"/>
+        </type-validate>
+        </attribute>
         <attribute name="receiveDate" type="Timestamp" mode="IN" optional="true"/>
     </service>
     <service name="cancelInventoryTransfer" engine="java"
             location="org.apache.ofbiz.product.inventory.InventoryServices" invoke="cancelInventoryTransfer">
         <description>Cancel the inventory transfer</description>
-        <attribute name="inventoryTransferId" type="String" mode="IN" optional="false"/>
+        <attribute name="inventoryTransferId" type="String" mode="IN" optional="false">
+        <type-validate>
+            <fail-property resource="ProductErrorUiLabels" property="facility.inventoryTransferId"/>
+        </type-validate>
+        </attribute>
     </service>
 
     <service name="createInventoryTransfersForProduct" engine="simple"
             location="component://product/minilang/product/inventory/InventoryServices.xml" invoke="createInventoryTransfersForProduct" auth="true">
         <description>Create inventory transfers for the given product and quantity. Return the units not available for transfers.</description>
         <permission-service service-name="facilityGenericPermission" main-action="CREATE"/>
-        <attribute name="facilityId" type="String" mode="IN" optional="false"/>
+        <attribute name="facilityId" type="String" mode="IN" optional="false">
+        <type-validate>
+            <fail-property resource="ProductErrorUiLabels" property="facility.facilityId"/>
+        </type-validate>
+        </attribute>
         <attribute name="containerId" type="String" mode="IN" optional="true"/>
-        <attribute name="facilityIdTo" type="String" mode="IN" optional="false"/>
+        <attribute name="facilityIdTo" type="String" mode="IN" optional="false">
+        <type-validate>
+            <fail-property resource="ProductErrorUiLabels" property="facility.facilityIdTo"/>
+        </type-validate>
+        </attribute>
         <attribute name="sendDate" type="Timestamp" mode="IN" optional="true"/>
-        <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="ProductErrorUiLabels" property="facility.productId"/>
+        </type-validate>
+        </attribute>
+        <type-validate>
+            <fail-property resource="ProductErrorUiLabels" property="facility.productId"/>
+        </type-validate>
+        <attribute name="quantity" type="BigDecimal" mode="IN" optional="false">
+        <type-validate>
+            <fail-property resource="ProductErrorUiLabels" property="facility.quantity"/>
+        </type-validate>
+        </attribute>
+        <type-validate>
+            <fail-property resource="ProductErrorUiLabels" property="facility.quantity"/>
+        </type-validate>
         <attribute name="reserveOrderEnumId" type="String" mode="IN" optional="true"/>
         <attribute name="quantityNotTransferred" type="BigDecimal" mode="OUT" optional="false"/>
         <attribute name="statusId" type="String" mode="IN" optional="true"/>
@@ -483,15 +805,27 @@ under the License.
             Issues the Inventory for an Order that was Immediately Fulfilled.
             Note that this skips the normal inventory reservation process, and the shipment process (no shipment is created).
         </description>
-        <attribute name="orderId" type="String" mode="IN" optional="false"/>
+        <attribute name="orderId" type="String" mode="IN" optional="false">
+        <type-validate>
+            <fail-property resource="ProductErrorUiLabels" property="facility.orderId"/>
+        </type-validate>
+        </attribute>
     </service>
     <service name="issueImmediatelyFulfilledOrderItem" engine="simple"
                 location="component://product/minilang/product/inventory/InventoryIssueServices.xml" invoke="issueImmediatelyFulfilledOrderItem" auth="false">
         <description>
             Issues the Inventory for an Order Item that was Immediately Fulfilled for more info see the issueImmediatelyFulfilledOrder service.
         </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="ProductErrorUiLabels" property="facility.orderId"/>
+        </type-validate>
+        </attribute>
+        <attribute name="orderItemSeqId" type="String" mode="IN" optional="false">
+        <type-validate>
+            <fail-property resource="ProductErrorUiLabels" property="facility.orderItemSeqId"/>
+        </type-validate>
+        </attribute>
         <attribute name="orderHeader" type="org.apache.ofbiz.entity.GenericValue" mode="IN" optional="true"/>
         <attribute name="orderItem" type="org.apache.ofbiz.entity.GenericValue" mode="IN" optional="true"/>
         <attribute name="productStore" type="org.apache.ofbiz.entity.GenericValue" mode="IN" optional="true"/>
@@ -576,7 +910,12 @@ under the License.
         <description>Create a Facility Location</description>
         <permission-service service-name="facilityGenericPermission" main-action="CREATE"/>
         <auto-attributes include="nonpk" mode="IN" optional="true"/>
-        <attribute name="facilityId" type="String" mode="IN" optional="false"/>
+        <attribute name="facilityId" type="String" mode="IN" optional="false">
+            <type-validate>
+                <fail-property resource="ProductErrorUiLabels" property="facility.facilityId"/>
+            </type-validate>
+        </attribute>
+
         <attribute name="locationSeqId" type="String" mode="OUT" optional="false"/>
     </service>
     <service name="updateFacilityLocation" default-entity-name="FacilityLocation" engine="entity-auto" invoke="update" auth="true">
@@ -627,7 +966,13 @@ under the License.
         <permission-service service-name="facilityPermissionCheck" main-action="UPDATE"/>
         <auto-attributes entity-name="FacilityContactMech" 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="contactMechTypeId" type="String" mode="IN" optional="false">
+                <type-validate>
+                    <fail-property resource="ProductErrorUiLabels" property="facility.contactMechTypeId"/>
+                </type-validate>
+        </attribute>
+
+
         <attribute name="infoString" type="String" mode="IN" optional="true"/>
         <attribute name="newContactMechId" type="String" mode="IN" optional="true"/>
     </service>
@@ -635,8 +980,16 @@ under the License.
             location="component://product/minilang/product/storage/FacilityContactMechServices.xml" invoke="deleteFacilityContactMech" auth="true">
         <description>Delete a FacilityContactMech</description>
         <permission-service service-name="facilityPermissionCheck" main-action="DELETE"/>
-        <attribute name="facilityId" type="String" mode="IN" optional="false"/>
-        <attribute name="contactMechId" type="String" mode="IN" optional="false"/>
+        <attribute name="facilityId" type="String" mode="IN" optional="false">
+        <type-validate>
+            <fail-property resource="ProductErrorUiLabels" property="facility.facilityId"/>
+        </type-validate>
+        </attribute>
+        <attribute name="contactMechId" type="String" mode="IN" optional="false">
+        <type-validate>
+            <fail-property resource="ProductErrorUiLabels" property="facility.contactMechId"/>
+        </type-validate>
+        </attribute>
     </service>
     <service name="createFacilityPostalAddress" engine="simple"
             location="component://product/minilang/product/storage/FacilityContactMechServices.xml" invoke="createFacilityPostalAddress" auth="true">
@@ -685,7 +1038,11 @@ under the License.
         <auto-attributes entity-name="FacilityContactMech" include="all" mode="IN" optional="true"/>
         <attribute name="contactMechPurposeTypeId" type="String" mode="IN" optional="true"/>
         <attribute name="contactMechId" type="String" mode="INOUT" optional="true"/>
-        <attribute name="emailAddress" type="String" mode="IN" optional="false"/>
+        <attribute name="emailAddress" type="String" mode="IN" optional="false">
+        <type-validate>
+            <fail-property resource="ProductErrorUiLabels" property="facility.emailAddress"/>
+        </type-validate>
+        </attribute>
     </service>
     <service name="updateFacilityEmailAddress" engine="simple"
             location="component://product/minilang/product/storage/FacilityContactMechServices.xml" invoke="updateFacilityEmailAddress" auth="true">
@@ -693,7 +1050,11 @@ under the License.
         <permission-service service-name="facilityPermissionCheck" main-action="UPDATE"/>
         <auto-attributes entity-name="FacilityContactMech" include="all" mode="IN" optional="true"/>
         <attribute name="contactMechId" type="String" mode="INOUT" optional="false"/>
-        <attribute name="emailAddress" type="String" mode="IN" optional="false"/>
+        <attribute name="emailAddress" type="String" mode="IN" optional="false">
+            <type-validate>
+                <fail-property resource="ProductErrorUiLabels" property="facility.emailAddress"/>
+            </type-validate>
+        </attribute>
     </service>
 
     <service name="createFacilityContactMechPurpose" engine="simple"
@@ -810,7 +1171,11 @@ under the License.
             some promised inventory is in a bulk location and needs to be moved to a pick location.
         </description>
         <permission-service service-name="facilityPermissionCheck" main-action="VIEW"/>
-        <attribute name="facilityId" type="String" mode="IN" optional="false"/>
+        <attribute name="facilityId" type="String" mode="IN" optional="false">
+            <type-validate>
+                <fail-property resource="ProductErrorUiLabels" property="facility.facilityId"/>
+            </type-validate>
+        </attribute>
         <attribute name="moveByOisgirInfoList" type="List" mode="OUT" optional="true"/>
         <attribute name="stockMoveHandled" type="Map" mode="OUT" optional="true"/>
         <attribute name="warningMessageList" type="List" mode="OUT" optional="true"/>
@@ -821,7 +1186,11 @@ under the License.
             Find all Stock Moves that should be done based on minimum quantities on each Pick/Primary ProductFacilityLocation.
         </description>
         <permission-service service-name="facilityPermissionCheck" main-action="VIEW"/>
-        <attribute name="facilityId" type="String" mode="IN" optional="false"/>
+        <attribute name="facilityId" type="String" mode="IN" optional="false">
+            <type-validate>
+                <fail-property resource="ProductErrorUiLabels" property="facility.facilityId"/>
+            </type-validate>
+        </attribute>
         <attribute name="stockMoveHandled" type="Map" mode="IN" optional="true"/>
         <attribute name="moveByPflInfoList" type="List" mode="OUT" optional="true"/>
         <attribute name="warningMessageList" type="List" mode="OUT" optional="true"/>
@@ -833,11 +1202,31 @@ under the License.
             This service will not only move quantities from one InventoryItem to another but it will
             also reassign any existing OrderItemShipGrpInvRes records to the new InventoryItem.
         </description>
-        <attribute name="productId" type="String" mode="IN" optional="false"/>
-        <attribute name="facilityId" type="String" mode="IN" optional="false"/>
-        <attribute name="locationSeqId" type="String" mode="IN" optional="false"/>
-        <attribute name="targetLocationSeqId" type="String" mode="IN" optional="false"/>
-        <attribute name="quantityMoved" type="BigDecimal" mode="IN" optional="false"/>
+        <attribute name="productId" type="String" mode="IN" optional="false">
+            <type-validate>
+                <fail-property resource="ProductErrorUiLabels" property="facility.productId"/>
+            </type-validate>
+        </attribute>
+        <attribute name="facilityId" type="String" mode="IN" optional="false">
+            <type-validate>
+                <fail-property resource="ProductErrorUiLabels" property="facility.facilityId"/>
+            </type-validate>
+        </attribute>
+        <attribute name="locationSeqId" type="String" mode="IN" optional="false">
+            <type-validate>
+                <fail-property resource="ProductErrorUiLabels" property="facility.locationSeqId"/>
+            </type-validate>
+        </attribute>
+        <attribute name="targetLocationSeqId" type="String" mode="IN" optional="false">
+            <type-validate>
+                <fail-property resource="ProductErrorUiLabels" property="facility.targetLocationSeqId"/>
+            </type-validate>
+        </attribute>
+        <attribute name="quantityMoved" type="BigDecimal" mode="IN" optional="false">
+            <type-validate>
+                <fail-property resource="ProductErrorUiLabels" property="facility.quantityMoved"/>
+            </type-validate>
+        </attribute>
         <attribute name="warningMessageList" type="List" mode="INOUT" optional="true"/>
     </service>
     <!-- Inventory Label Services -->
@@ -911,8 +1300,16 @@ under the License.
                 location="component://product/minilang/product/inventory/StockMoveServices.xml" invoke="findProductInventorylocations">
        <description>Find Product's inventory locations from facility</description>
        <permission-service service-name="facilityGenericPermission" main-action="VIEW"/>
-       <attribute name="facilityId" type="String" mode="IN" optional="false"/>
-       <attribute name="productId" type="String" mode="IN" optional="false"/>
+       <attribute name="facilityId" type="String" mode="IN" optional="false">
+        <type-validate>
+            <fail-property resource="ProductErrorUiLabels" property="facility.facilityId"/>
+        </type-validate>
+       </attribute>
+       <attribute name="productId" type="String" mode="IN" optional="false">
+        <type-validate>
+            <fail-property resource="ProductErrorUiLabels" property="facility.productId"/>
+        </type-validate>
+       </attribute>
        <attribute name="LocationList" type="List" mode="OUT" optional="true"/>
     </service>
     <service name="setLastInventoryCount" engine="simple"