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

How to pass custom field vales from Opportunity to sales Order?

我必须在将商机转换为销售订单时将自定义字段值从商机复制到销售订单。 我遇到了一个示例代码,用于将自定义字段从销售订单传递到装运,并且我尝试使用该代码来覆盖“创建销售订单”操作。 我在 OpportunityMaint 扩展 class

中使用的以下代码片段

public PXAction动作; [PX按钮] [PXUIField(DisplayName="Actions",MapEnableRights=PXCacheRights.Select,MapViewRights=PXCacheRights.Select)] 受保护的 IEnumerable 操作(PXAdapter 适配器, [PXIntList(new int[] {1,2,3}, new string[] {"Create Account","Create Sales order","Create Invoice"}),PXInt] 诠释?动作编号, [PXString] 字符串动作名称) { 如果(actionId == 2) { // 实现 So Order 行插入处理程序 } return Base.Action.Press(适配器); }

这段代码没有触发。 期待更好的解决方案来实施此选项 问候, R.Muralidharan

您将需要覆盖 CreateSalesOrder 操作。下面是一段代码,我不得不将机会下推到销售订单。

public class OpportunityMaint_Extension : PXGraphExtension<OpportunityMaint>
{
    public PXAction<CROpportunity> createSalesOrder;
    [PXUIField(DisplayName = Messages.CreateSalesOrder, MapEnableRights = PXCacheRights.Update, MapViewRights = PXCacheRights.Select)]
    [PXButton(ImageKey = PX.Web.UI.Sprite.Main.DataEntry)]
    public virtual IEnumerable CreateSalesOrder(PXAdapter adapter)
    {
        PXGraph.InstanceCreated.AddHandler<SOOrderEntry>((graph) =>
        {
            graph.RowInserted.AddHandler<SOOrder>((cache, args) =>
            {
                var soOrder = (SOOrder)args.Row;
                var soOrderExt = PXCache<SOOrder>.GetExtension<SOOrderExt>(soOrder);

                foreach (CROpportunity opportunity in adapter.Get())
                {
                    soOrderExt.UsrOpportunityID = opportunity.OpportunityID;
                }
            });
        });
        return Base.createSalesOrder.Press(adapter);
    }
}