2017-02-14 37 views
0

我需要在SO屏幕(SO301000)中創建聯繫人查找。我已經創建了用戶定義的自定義字段,如下所示。我列出了所有聯繫人,但不會根據選擇客戶的時間進行刷新。是否必須編寫任何CustomerID事件來刷新這些聯繫人查找?有沒有人有任何想法?基於客戶選擇的聯繫人查詢

[PXDBInt] 
 
[PXUIField(DisplayName = "Contact")] 
 
[PXSelector(typeof(Search2<Contact.contactID, 
 
\t LeftJoin<BAccount, On<BAccount.bAccountID, Equal<Contact.bAccountID>>>>), 
 
\t DescriptionField = typeof(Contact.displayName), Filterable = true, DirtyRead = true)] 
 
[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 { }

回答

1

你缺少哪裏子句和您需要使用BAccount2而不是BAccountSOOrderEntry圖中的數據視圖使用Vendor DAC進行定義,DAC在BAccount之前首先進行初始化,框架將用Vendor DAC取代DAC。爲了防止這種情況,您需要在BQL中使用BAccount2 DAC。

using System; 
    using PX.Data; 
    using PX.Objects.SO; 
    using PX.Objects.CR; 

    namespace DemoPkg 
    { 
     public class SOOrderPXExt : PXCacheExtension<SOOrder> 
     { 
      #region UsrContactID 

      public abstract class usrContactID : IBqlField { } 

      [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<CRCase.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 Int32? UsrContactID { get; set; } 

      #endregion 
     } 
    } 

並確保您有AutoRefresh設置爲true在ASPX這個領域的PXSelector控制。

+0

工作原理BAccount2在這裏做了訣竅,聯繫人查詢現在基於客戶選擇進行刷新。但是,如果我嘗試修改現有訂單並刪除客戶或更改,則應用程序就會掛起。我必須刷新我的瀏覽器。 – Krunal

+0

我在我的結尾沒有看到這樣的問題。請刪除您在本網站上可能擁有的所有其他定製功能,並嘗試使用此定製功能。 – DChhapgar

+0

謝謝Dhiren。這似乎是因爲另一種定製。 – Krunal

0

我看你沒有一個地方在您的選擇條件,根據給定的客戶。嘗試更新你的選擇,以配合這樣的事情...

[PXSelector(typeof(Search2<Contact.contactID, 
    LeftJoin<BAccount, On<BAccount.bAccountID, Equal<Contact.bAccountID>>>, 
    Where<BAccount.bAccountID, Equal<Current<SOOrder.customerID>>>>), 
DescriptionField = typeof(Contact.displayName), Filterable = true, DirtyRead = true)] 

在你的頁面還請確保您的選擇有自動刷新=「真」

例子:

<px:PXSelector ID="edWeightUOM" runat="server" 
    DataField="WeightUOM" Size="S" AutoRefresh="true" /> 
+0

以下是我已經擁有它的選擇 '''' – Krunal

+0

你需要選擇器有一個where語句..讓我看一個例子 – Brendan

+0

添加選擇器示例(沒有測試它),但是如果您希望選擇器基於另一個字段,則需要在where語句中使用它並使用Current來指向將包含當前緩存中的值的給定字段。 – Brendan