2017-02-14 59 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