Acumatica 邮政编码验证和匹配
Acumatica postal code validation and match
我在销售订单屏幕中创建了一个新的自定义字段(邮政编码 - Usrpostalcode),我正在尝试使该字段成为必填字段(即使在添加 [PXDefault] 后也无法正常工作)
[PXUIField(..., Required = true)] ),验证它并确保它与运输设置中的邮政编码匹配。
谁能帮我解决这个问题?
在销售订单屏幕上创建装运时出现此错误
enter image description here
您可以通过添加选择器或实施 FieldVerifying 来检查值。
如果默认使用 PXSelector,如果在支持中找不到选择器,则选择器将抛出错误 table。
或者,您可以使用字段 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");
}
}
添加 PXDefault 属性应该足以使该字段成为必填字段。如果值为 null 或空,PXDefault 将阻止保存。它将引发错误并突出显示该字段。
在 SOOrder DAC 中添加自定义字段:
将自定义字段添加到销售订单屏幕:
通过保存而不提供邮政编码值来测试必填字段:
使用 Inspect Element,找到您要验证的字段:
在代码部分,为 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;
}
}
}
保存时或自定义邮政编码字段失去焦点时,将触发验证:
我在销售订单屏幕中创建了一个新的自定义字段(邮政编码 - Usrpostalcode),我正在尝试使该字段成为必填字段(即使在添加 [PXDefault] 后也无法正常工作) [PXUIField(..., Required = true)] ),验证它并确保它与运输设置中的邮政编码匹配。
谁能帮我解决这个问题?
在销售订单屏幕上创建装运时出现此错误
enter image description here
您可以通过添加选择器或实施 FieldVerifying 来检查值。
如果默认使用 PXSelector,如果在支持中找不到选择器,则选择器将抛出错误 table。
或者,您可以使用字段 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");
}
}
添加 PXDefault 属性应该足以使该字段成为必填字段。如果值为 null 或空,PXDefault 将阻止保存。它将引发错误并突出显示该字段。
在 SOOrder DAC 中添加自定义字段:
将自定义字段添加到销售订单屏幕:
通过保存而不提供邮政编码值来测试必填字段:
使用 Inspect Element,找到您要验证的字段:
在代码部分,为 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;
}
}
}
保存时或自定义邮政编码字段失去焦点时,将触发验证: