Acumatica 从opportunity创建销售订单时填充自定义字段

Acumatica 从opportunity创建销售订单时填充自定义字段,acumatica,Acumatica,我已经在SO屏幕(SO301000)上创建了一个自定义字段联系人。现在,当用户从Opportunity屏幕(CR304000)创建销售订单时,我需要填充这些字段。新的自定义字段联系人基于在Opportunity中选择的客户。我可以看到,当我从Opportunity创建销售订单时,客户会自动填充,因为它是按设计的。但是,如何对自定义字段执行相同的操作 我曾尝试扩展现有的CreateSalesOrder方法,但似乎没有帮助 联系人查找(根据SO中的客户选择进行刷新,但不是在我从Opportunity

我已经在SO屏幕(SO301000)上创建了一个自定义字段联系人。现在,当用户从Opportunity屏幕(CR304000)创建销售订单时,我需要填充这些字段。新的自定义字段联系人基于在Opportunity中选择的客户。我可以看到,当我从Opportunity创建销售订单时,客户会自动填充,因为它是按设计的。但是,如何对自定义字段执行相同的操作

我曾尝试扩展现有的CreateSalesOrder方法,但似乎没有帮助

联系人查找(根据SO中的客户选择进行刷新,但不是在我从Opportunity创建SO时进行刷新)

[PXDBInt()]
[PXUIField(DisplayName=“Contact”,Visibility=PXUIVisibility.Visible)]
[PX选择器(类型)(搜索2),
DescriptionField=typeof(Contact.displayName),Filterable=true,DirtyRead=true)]
[PXDefault(PersistingCheck=PXPersistingCheck.Nothing)]
[PXFormula(typeof(默认))]
[PXRestrictor(typeof(Where),PX.Objects.CR.Messages.ContactBAccountDiff)]
[PX限流器(类型)(其中),PX.Objects.CR.Messages.ContactInactive,
typeof(Contact.displayName))]
公共虚拟整数?UsrCustContactID{get;set;}

公共抽象类usrCustContactID:IBqlField{}
类似的答案如下:

从CROpportunity到SOOrder可以翻译成这样的东西

public class CROpportunityMaintExtension : PXGraphExtension<OpportunityMaint>
{
    [PXOverride]
    public virtual void DoCreateSalesOrder(Action del)
    {
        PXGraph.InstanceCreated.AddHandler<SOOrderEntry>(graph =>
        {
            graph.RowInserting.AddHandler<SOOrder>((cache, args) =>
            {
                var soOrder = (SOOrder)args.Row;
                CROpportunity opportunity = PXResult<CROpportunity>.Current;

                // Copy logic here...

            });
        });

        del();
    }
}
公共类CropportUnityIntextension:PXGrapherExtension
{
[PXOverride]
公共虚拟作废DoCreateSalesOrder(操作del)
{
PXGraph.InstanceCreated.AddHandler(图形=>
{
graph.RowInserting.AddHandler((缓存,参数)=>
{
var soOrder=(soOrder)args.Row;
CROpportunity opportunity=PXResult.Current;
//在这里复制逻辑。。。
});
});
del();
}
}

您应该能够执行与此处类似的操作:我应该将代码写入OpportunityMaintExtension的哪个事件处理程序。我尝试了CROpportunity_Row持久化和DoCreateSalesOrder方法。但是,当我单击Actions>CreateSalesOrder时,所有这些都不会影响代码。基于响应的长度,我将添加一个answerDoCreateSalesOrder作为我们无法覆盖的应答。我将代码保存在CROpportunity_row Selected事件处理程序中,但它似乎不起作用。还有其他想法吗?为什么你不能超越?答案显示您已经覆盖了,我在定制项目中使用相同的逻辑将opportunity中的数据添加到今天的销售订单中。您在使用包含的答案时遇到了什么问题?我可以按照您的建议进行覆盖,并且它正在工作。但是,正如我所提到的,联系人字段是SO中的自定义字段,是根据下面链接中的解决方案根据客户选择进行刷新的查找。我在原始帖子中包含了查找代码。让我知道你的建议。这听起来是另一个问题,但如果我理解正确,当从Opportunity创建订单时,您不希望该值基于客户而更改?我希望在从Opportunity创建订单时,联系人应正确填充,但同时如果我的联系人查找仅显示基于客户的相关联系人。所以,若用户直接去创建So,当他们选择客户时,联系人查找应该相应地刷新,并且只显示与所选客户相关的联系人。