首页 > 解决方案 > Acumatica - 将自定义字段内容从 SO 复制到 IN

问题描述

我有类似的问题

Acumatica 将自定义字段引用到不同屏幕上的另一个自定义字段

除了我使用自定义源字段。

我在 SO 行中创建并添加了 2 个字段,以捕获开票所需的 EDI 数据。我在 SO Invoice 表单上的发票行上创建了 2 个具有相同名称(当然是不同的数据类)的新字段。以下是每个表单上 1 个字段的代码:

SO301000(销售订单):

[PXDBString(3)]
[PXUIField(DisplayName="Cust.Invoice Line Nbr.")]
[PXFormula(typeof(Selector<SOLineExt.usrCInvLine, ARTranExt.usrCInvLine>))]

SO303000(发票):

[PXDBString(3)]
[PXUIField(DisplayName="Cust.Invoice Line Nbr.")]

它可以编译,但从发货创建时数据不会复制到发票中。我还在发货表单中添加了 1 个字段以进行测试,但它也没有捕获该值。

我有这个倒退吗?

标签: acumatica

解决方案


在查看更多详细信息后,您可以覆盖 SOOrderEntry 图上的 Prepare Invoice 方法(以及其他任何需要的地方)。

通过覆盖 SOOrderEntry 图表的 PrepareInvoice 方法,您可以将处理程序(RowInserting)添加到 SOInvoiceEntry 图表,以使用 SOOrder 上的值填充新的自定义字段。

请参阅下面的示例,其中我正在执行从 SOOrder(Header) 到 ARTran(details) 的类似操作复制值。

您可以使用此示例来实现您的目标:(在您的情况下,您可以使用 ARInvoice 而不是 ARTran)

SOOrderEntry:

public class SOOrderEntry_Extension:PXGraphExtension<SOOrderEntry>
{
    public PXAction<SOOrder> prepareInvoice;
    [PXUIField(DisplayName = "Prepare Invoice", MapEnableRights = PXCacheRights.Select, MapViewRights = PXCacheRights.Select, Visible = false)]

    [PXButton]
    public virtual IEnumerable PrepareInvoice(PXAdapter adapter)
    {
        PXGraph.InstanceCreated.AddHandler<SOInvoiceEntry>((graph) =>
        {
            graph.RowInserting.AddHandler<ARTran>((sender, e) =>
            {
                //Custom logic goes here
                var row = (ARTran)e.Row;

                if (row == null)
                    return;

                SOOrder order = Base.Document.Current;
                if (order != null)
                {
                    var tranExt = PXCache<ARTran>.GetExtension<ARTranExt>(row);

                    //Below to be change to your needs
                    //Here you can look for the SOLine of the SOOrder instead

                    var orderExt = PXCache<SOOrder>.GetExtension<SOOrderExt>(order);

                    if (orderExt != null && tranExt != null)
                    {
                        tranExt.UsrContactID = orderExt.UsrContactID;
                    }
                    //END
                }                 
            });
        });

        return Base.prepareInvoice.Press(adapter);
    }
}

您还可以在下面的 stackoverflow 链接上找到我的同事提供的更多信息和说明:

Acumatica 自定义字段 SOLine 转移到 ARTran


推荐阅读