如何将订单项自定义字段值从商机传递到销售订单?

时间:2017-02-20 18:49:35

标签: acumatica

我在商机产品标签中有一个自定义行号字段,供客户重新排序所选产品,网格按自定义字段值排序。

我正在尝试将价值从机会转移到也具有类似字段的销售订单。

以下代码我尝试过但无法正常工作

            PXGraph.InstanceCreated.AddHandler<SOOrderEntry>((graph) =>
            {
                graph.RowUpdated.AddHandler<SOLine>((cache, args) =>
                    {

                        CROpportunityProducts product = (adapter.View.Graph as OpportunityMaint).Products.Current;
                        CROpportunityProductsExtNV productext = PXCache<CROpportunityProducts>.GetExtension<CROpportunityProductsExtNV>(product);
                        SOLine soline = (SOLine)args.Row;
                        SOLineExtNV solineext = PXCache<SOLine>.GetExtension<SOLineExtNV>(soline);
                        solineext.UsrLineNo = productext.UsrLineNo;

                    });
            });

以下代码为所有行号返回相同的值

2 个答案:

答案 0 :(得分:2)

您可以按如下方式实现RowInserting事件处理程序:

if ARGV[0]
  lines = File.read(ARGV[0]).lines
else
  lines = STDIN.each_line.to_a
end

puts lines.map { |c| c.unpack("M") }.join

答案 1 :(得分:1)

希望他们可以拆分调用以创建订单,并调用插入行以便于自定义。我们做了类似的事情。以下是我使用图表扩展测试并覆盖机会图表中的DoCreateSalesOrder调用的示例。 (这假设产品上的选择与销售订单上的交易插入的顺序相同。我相信可以有更好的答案,但这是一个我很方便的例子。)

public class CROpportunityMaintExtNV : PXGraphExtension<OpportunityMaint>
{
    [PXOverride]
    public virtual void DoCreateSalesOrder(Action del)
    {
        try
        {
            del();
        }
        catch (PXRedirectRequiredException redirect)
        {
            var products = this.Products.Select().ToArray();

            int rowCntr = 0;
            foreach (SOLine soLine in ((SOOrderEntry)redirect.Graph).Transactions.Select())
            {
                // Assumes inserted rows in same order as products listed (default should be the key)

                //Current product
                CROpportunityProducts currentProduct = products[rowCntr];
                var productExtension = currentProduct.GetExtension<CROpportunityProductsExtNV>();

                ((SOOrderEntry) redirect.Graph).Transactions.Cache.SetValueExt<SOLineExtNV.usrLineNo>(soLine, productExtension.UsrLineNo);

                rowCntr++;
            }

            throw redirect;
        }
    }
}

您的代码遇到的问题是,当前产品始终相同,导致相同的值。