我在 SO 屏幕 (SO301000) 上创建了一个自定义字段“联系人”。现在,当用户从机会屏幕(CR304000)创建销售订单时,我需要填充这些字段。新的自定义字段联系人基于在机会中选择的客户。我可以看到,当我从机会创建销售订单时,客户会自动填充,因为它是设计的。但是,我如何对自定义字段执行相同的操作。
我尝试扩展现有的 CreateSalesOrder 方法,但似乎没有帮助。
联系人查找(它根据 SO 中的客户选择刷新,但当我从机会创建 SO 时则不会刷新)
[PXDBInt()]
[PXUIField(DisplayName = "Contact", Visibility = PXUIVisibility.Visible)]
[PXSelector(typeof(Search2<Contact.contactID,
LeftJoin<BAccount2, On<BAccount2.bAccountID, Equal<Contact.bAccountID>>>>),
DescriptionField = typeof(Contact.displayName), Filterable = true, DirtyRead = true)]
[PXDefault(PersistingCheck = PXPersistingCheck.Nothing)]
[PXFormula(typeof(Default<SOOrder.customerID>))]
[PXRestrictor(typeof(Where<Contact.contactType, NotEqual<ContactTypesAttribute.bAccountProperty>,
And<Where<BAccount2.bAccountID, Equal<Current<SOOrder.customerID>>,
Or<Current<SOOrder.customerID>, IsNull>>>>), PX.Objects.CR.Messages.ContactBAccountDiff)]
[PXRestrictor(typeof(Where<Contact.isActive, Equal<True>>), PX.Objects.CR.Messages.ContactInactive,
typeof(Contact.displayName))]
public virtual int? UsrCustContactID { get; set; }
public abstract class usrCustContactID : IBqlField { }
联系人查找(当我从机会创建 SO 时,它按要求工作,但不会根据客户选择进行刷新)
[PXDBInt()]
[PXDBChildIdentity(typeof(Contact.contactID))]
[PXRestrictor(typeof(Where<Contact.isActive, Equal<True>>), "Contact '{0}' is inactive or closed.", new[] { typeof(Contact.displayName) })]
[PXSelector(typeof(Search2<Contact.contactID, LeftJoin<BAccount, On<BAccount.bAccountID, Equal<Contact.bAccountID>>>, Where<Contact.contactType, Equal<ContactTypesAttribute.person>, Or<Contact.contactType, Equal<ContactTypesAttribute.lead>>>>), DescriptionField = typeof(Contact.displayName), Filterable = true)]
[PXUIField(DisplayName = "Contact")]
public virtual int? UsrCustContactID { get; set; }
public abstract class usrCustContactID : IBqlField { }
类似的答案在这里找到:如何将订单项自定义字段值从机会传递到销售订单? https://stackoverflow.com/questions/42352177/how-to-pass-line-item-custom-field-value-to-sales-order-from-opportunity
可以从 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();
}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)