我在SOOrder摘要上創建了自定義聯繫人字段,以便用戶可以根據所選客戶選擇客戶聯繫人。在貨運設置選項卡上的SOOrder屏幕上覆蓋發貨電子郵件
這裏是SOOrder擴展 - 自定義聯繫人字段定義現在
[PXDBInt]
[PXUIField(DisplayName = "Contact", Visibility = PXUIVisibility.Visible)]
[PXDefault(PersistingCheck = PXPersistingCheck.Nothing)]
[PXSelector(typeof(Search2<Contact.contactID,
\t LeftJoin<BAccount2, On<BAccount2.bAccountID, Equal<Contact.bAccountID>>>,
\t Where<Contact.contactType, Equal<ContactTypesAttribute.person>,
\t \t \t \t \t \t \t Or<Contact.contactType, Equal<ContactTypesAttribute.lead>>>>),
\t DescriptionField = typeof(Contact.displayName), Filterable = true)]
[PXRestrictor(typeof(Where<Contact.contactType, NotEqual<ContactTypesAttribute.bAccountProperty>,
\t \t And<Where<BAccount2.bAccountID, Equal<Current<SOOrder.customerID>>,
\t \t \t \t Or<Current<SOOrder.customerID>, IsNull>>>>), PX.Objects.CR.Messages.ContactBAccountDiff)]
[PXRestrictor(typeof(Where2<Where2<
\t \t \t \t Where<Contact.contactType, Equal<ContactTypesAttribute.person>,
\t \t \t \t \t \t Or<Contact.contactType, Equal<ContactTypesAttribute.lead>>>,
\t \t \t \t \t And<
\t \t \t \t \t \t Where<BAccount2.type, IsNull,
\t \t \t \t \t \t \t Or<BAccount2.type, Equal<BAccountType.customerType>,
\t \t \t \t \t \t \t \t Or<BAccount2.type, Equal<BAccountType.prospectType>,
\t \t \t \t \t \t \t \t Or<BAccount2.type, Equal<BAccountType.combinedType>>>>>>>,
\t \t And<WhereEqualNotNull<BAccount2.bAccountID, SOOrder.customerID>>>), "Contact '{0}' ({1}) has sales order for another business account.", typeof(Contact.displayName), typeof(Contact.contactID))]
[PXRestrictor(typeof(Where<Contact.isActive, Equal<True>>), PX.Objects.CR.Messages.ContactInactive, typeof(Contact.displayName))]
[PXDBChildIdentity(typeof(Contact.contactID))]
public virtual int? UsrCustContactID { get; set; }
public abstract class usrCustContactID : IBqlField { }
,我必須重寫與自定義聯繫人字段選擇聯繫人的電子郵件的電子郵件,在出廠設置每當用戶選擇任何聯繫人時,SOOrder屏幕的標籤。我已經爲它編寫了下面的代碼,但似乎不起作用。
protected virtual void SOOrder_UsrCustContactID_FieldUpdated(PXCache sender, PXFieldUpdatedEventArgs e)
{
\t SOOrderEntry graph = PXGraph.CreateInstance<SOOrderEntry>();
\t SOOrderExtension ext = PXCache<SOOrder>.GetExtension<SOOrderExtension>(Base.Document.Current);
\t Contact custContact = PXSelect<Contact,
\t \t Where<Contact.contactID, Equal<Required<Contact.contactID>>>>.Select(graph, ext.UsrCustContactID);
\t if (custContact != null && !string.IsNullOrEmpty(custContact.EMail))
\t {
\t \t graph.Document.Current = Base.Document.Current;
\t \t Base.Shipping_Contact.Current.OverrideContact = true;
\t \t Base.Shipping_Contact.Current.Email = custContact.EMail;
\t \t graph.Shipping_Contact.Current = Base.Shipping_Contact.Current;
\t \t graph.Shipping_Contact.Current.OverrideContact = true;
\t \t graph.Shipping_Contact.Current.Email = custContact.EMail;
\t \t Base.Shipping_Contact.Update(graph.Shipping_Contact.Current);
\t \t
\t \t graph.Actions.PressSave();
\t }
}
有這兩個問題。
它確實表明填充當我選擇聯繫人的電子郵件,但是當我保存,它有一個默認的客戶覆蓋。
如果我正在創建新的銷售訂單並選擇聯繫人。在保存如果我錯過任何必填字段或任何其他錯誤(如Avalara錯誤)時,則它會再次覆蓋來自客戶的默認字段。
請建議。
有什麼建議嗎? – Krunal