2017-08-17 128 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