无法通过API使用非活动供应商中的项目创建销售订单

时间:2017-08-09 17:43:06

标签: acumatica

尝试通过API调用创建销售订单时,如果订单上任何项目标记为默认的供应商状态为非活动,则会返回错误消息:“PX.Data.PXException:供应商状态为'无效“”

但是,通过标准屏幕创建销售订单时,使用非活动默认供应商订购商品不会出现问题。

我们希望将供应商标记为非活动,但需要为屏幕允许的项目创建销售订单。怎么办呢?

2 个答案:

答案 0 :(得分:2)

我假设错误来自Brendan评论的SOLine.VendorID。

以下是调试该问题并使用FieldVerifying事件修复它的步骤。

在SalesOrder屏幕上添加SOLine.VendorID字段: enter image description here

使用您添加的字段重现SalesOrder中的错误: enter image description here

检查跟踪错误,表示错误来自PXRestrictor属性: enter image description here

检查VendorID字段,它有一个PXRestrictor和您收到的VendorIsInStatus错误消息: enter image description here

可以使用FieldVerifying事件取消PXRestrictor属性验证,将该处理程序添加到SalesOrder for SOLine.VendorID:

public class SOOrderEntry_Extension:PXGraphExtension<SOOrderEntry>
{
    protected void SOLine_VendorID_FieldVerifying(PXCache sender, PXFieldVerifyingEventArgs e)
    {
        e.Cancel = true;
    }
}

再次测试SalesOrder,如果有效,您可以删除添加到网格中的VendorID / VendorName进行调试: enter image description here

答案 1 :(得分:0)

根据Brendan的评论,我修改了SOLine.VendorID的PXRestrictor属性以允许非活动状态:

public class SOLineExt : PXCacheExtension<PX.Objects.SO.SOLine> {
  [PXMergeAttributes(Method = MergeMethod.Merge)]
  [PXRestrictor(typeof(Where<Vendor.status, IsNull,
            Or<Vendor.status, Equal<BAccount.status.active>,
            Or<Vendor.status, Equal<BAccount.status.inactive>,
            Or<Vendor.status, Equal<BAccount.status.oneTime>>>>>), PX.Objects.AP.Messages.VendorIsInStatus, typeof(Vendor.status))]
  public virtual Int32? VendorID { get; set; }
}