我在销售订单屏幕中创建了一个新的自定义字段(邮政编码 - 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; –