2017-08-17 106 views
0

我在销售订单屏幕中创建了一个新的自定义字段(邮政编码 - Usrpostalcode),我试图使该字段成为必需(即使在添加[PXDefault] [PXUIField 。,Required = true)]),验证它并确保它与发货设置中的邮政编码匹配。Acumatica邮政编码验证和匹配

任何人都可以帮助我吗?

而销售订单屏幕上创建装运

enter image description here

回答

0

添加PXDefault属性应该足以使所需要的领域。如果值为空或空,则PXDefault将防止保存。它会引发错误并突出显示该字段。

添加自定义字段中SOOrder DAC: enter image description here

添加自定义字段,以销售订单屏幕: enter image description here

测试所需要的领域通过保存而不提供邮政编码值: enter image description here

使用检查元素,找到您要验证对现场: enter image description here

在代码段中,创建一个图形扩展SOOrderEntry,你会把你的验证: enter image description here

写您在该图表扩展中的验证码:

namespace PX.Objects.SO 
{ 
  public class SOOrderEntry_Extension:PXGraphExtension<SOOrderEntry> 
  { 
    public const string postalCodeErrorMessage = "Sales Order postal code must match shipping address postal code."; 

    // Validate just before saving, triggered when graph save function is called 
    public void SOOrder_RowPersisting(PXCache sender, PXRowPersistingEventArgs e) 
    { 
      if (!ValidatePostalCode(sender, e.Row as SOOrder)) 
      { 
         // Raise field error 
         PXUIFieldAttribute.SetError<SOOrderExt.usrPostalCode>(sender, e.Row, postalCodeErrorMessage); 
      } 
    } 

    // Validation function 
    public bool ValidatePostalCode(PXCache sender, SOOrder soOrder) 
    { 
      if (soOrder != null) 
      { 
        // Get SOOrder custom field Postal Code 
        SOOrderExt soOrderExt = sender.GetExtension<SOOrderExt>(soOrder); 

        if (soOrderExt != null) 
        { 
          string soPostalCode = soOrderExt.UsrPostalCode; 
   
          // Get current shipping address displayed on Sales Order 
          SOShippingAddress shippingAddress = Base.Shipping_Address.Current as SOShippingAddress; 
   
          if (shippingAddress != null) 
          { 
              // Special case to handle null values 
              if (soPostalCode == null || shippingAddress.PostalCode == null) 
              { 
                  return soPostalCode == shippingAddress.PostalCode; 
              } 
   
              // Compare postal codes 
              soPostalCode =soPostalCode.Trim().Replace(" ", ""); 
              string shippingPostalCode = shippingAddress.PostalCode.Trim().Replace(" ", ""); 
               
              return soPostalCode.Equals(shippingPostalCode, StringComparison.OrdinalIgnoreCase); 
          } 
        } 
      } 

      return false; 
    } 
  } 
} 

当保存或自定义邮政编码字段失去焦点时,验证将被触发: enter image description here

+0

使用FieldVerifying作为布伦丹建议是一个更好的选择,如果你想随时验证。如果只想在保存时进行验证,则只能使用RowPersisting并删除FieldUpdated。 –

+0

谢谢! 先生,你一直都很好帮助! – Naina

+0

我在图表扩展中对如何获得当前销售订单显示的销售订单进行了编辑,因为当我测试它时,当前的缓存项目显示为空。现在改为:Base.Shipping_Address.Current as SOShippingAddress; –

0

您可以通过增加一个选择器或实施FieldVerifying检查值收到此错误。

如果默认使用PXSelector,则选择器将在支持表中找不到时发出错误。

或者,您可以将其添加到销售订单像下面的示例中的图形扩展使用的字段FieldVerifying事件......

public class SOOrderEntryExtension : PXGraphExtension<SOOrderEntry> 
{ 
    protected virtual void SOOrder_Usrpostalcode_FieldVerifying(PXCache sender, PXFieldVerifyingEventArgs e) 
    { 
     //search for table value... 

     // if not found... 

     throw new PXSetPropertyException<SOOrder.usrpostalcode>("Invalid postal code"); 
    } 
} 
+0

哦好吧......我将使用FieldVerifying事件! 谢谢 – Naina