我在銷售訂單屏幕中創建了一個新的自定義字段(郵政編碼 - Usrpostalcode),我試圖使該字段成爲必需(即使在添加[PXDefault] [PXUIField 。,Required = true)]),驗證它並確保它與發貨設置中的郵政編碼匹配。Acumatica郵政編碼驗證和匹配
任何人都可以幫助我嗎?
而銷售訂單屏幕上創建裝運
我在銷售訂單屏幕中創建了一個新的自定義字段(郵政編碼 - Usrpostalcode),我試圖使該字段成爲必需(即使在添加[PXDefault] [PXUIField 。,Required = true)]),驗證它並確保它與發貨設置中的郵政編碼匹配。Acumatica郵政編碼驗證和匹配
任何人都可以幫助我嗎?
而銷售訂單屏幕上創建裝運
添加PXDefault屬性應該足以使所需要的領域。如果值爲空或空,則PXDefault將防止保存。它會引發錯誤並突出顯示該字段。
在代碼段中,創建一個圖形擴展SOOrderEntry,你會把你的驗證:
寫您在該圖表擴展中的驗證碼:
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;
}
}
}
您可以通過增加一個選擇器或實施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");
}
}
哦好吧......我將使用FieldVerifying事件! 謝謝 – Naina
使用FieldVerifying作爲布倫丹建議是一個更好的選擇,如果你想隨時驗證。如果只想在保存時進行驗證,則只能使用RowPersisting並刪除FieldUpdated。 –
謝謝! 先生,你一直都很好幫助! – Naina
我在圖表擴展中對如何獲得當前銷售訂單顯示的銷售訂單進行了編輯,因爲當我測試它時,當前的緩存項目顯示爲空。現在改爲:Base.Shipping_Address.Current as SOShippingAddress; –