Acumatica:我加入的选择器写得不好吗?

Acumatica : Is my joined selector badly written?

我刚开始在 Acumatica 中编码,我正在尝试将部门添加到客户屏幕。我用 18 个不同扇区的名称和代码创建了一个 SQL 扇区 table (TRSector)。我还创建了另一个 SQL table (TRCustSectorActive),其中包含客户帐户和部门代码的所有组合以及附加信息(是否有效、日期等)。 这个想法是每个客户都会有关于每个部门的信息。

我正在尝试为客户页面 (AR303000) 上的扇区添加选择器。 我面临的问题是,即使我尝试更改扇区时我的选择器显示正确,我的选择也会自动返回到第一行。 我猜我在加入我的两个 table 时做错了什么? 或者我应该在我的图表中有一个 CurrentSector 视图吗?

以下是有关我的代码的更多详细信息。 我的 TRCustSectorActive DAC 中的选择器如下所示:

#region SectorCD
[PXDBString(20, IsKey = true, IsFixed = true, IsUnicode = true, InputMask = "")]
[PXUIField(DisplayName = "Filière")]
[PXSelector(
  typeof(Search2<TRCustSectorActive.sectorCD, LeftJoin<TRSector, On<TRCustSectorActive.sectorCD, Equal<TRSector.sectorCD>>>, Where<TRCustSectorActive.bAccountID, Equal<Current<Customer.bAccountID>>>>),
  typeof(TRCustSectorActive.sectorCD),
  typeof(TRSector.name),
  typeof(TRCustSectorActive.active)
)]
public virtual string SectorCD { get; set; }
public abstract class sectorCD : IBqlField { }
#endregion

我加入了TRSector DAC,这样我就可以在选择中显示扇区的名称。

CustomerMaint 扩展中的视图如下所示:

public PXSelect<TRCustSectorActive, Where<TRCustSectorActive.bAccountID, Equal<Current<Customer.bAccountID>>>> Sector;

并且在页面中,我添加了这一点:

<px:PXFormView ID="DefFiliere" runat="server" Caption="Activation Filières" DataMember="Sector" RenderStyle="Fieldset" DataSourceID="ds" TabIndex="2100">
    <Template>
       <px:PXLayoutRule runat="server" ControlSize="SM" LabelsWidth="SM" StartColumn="True" />
       <px:PXSelector runat="server" ID="edSector" DataField="SectorCD"/>
       <px:PXLayoutRule runat="server" StartColumn="True" LabelsWidth="SM" ControlSize="SM" />
       <px:PXCheckBox runat="server" ID="edActive" DataField="Active"/>
    </Template>
</px:PXFormView>

能否包含您的整个 属性 定义(不仅仅是选择器属性)? 确保您已正确定义字段,包括 BqlField class 定义。

此外,要开始解决您的问题,我会从一个更简单的选择器开始,例如下面的选择器,这样您就可以排除它是否与联接相关。

[PXSelector(
    typeof(TRCustSectorActive.sectorCD),
    typeof(TRCustSectorActive.sectorCD),
    typeof(TRSector.name),
    typeof(TRCustSectorActive.active)
)]
  1. 你的选择器没问题
  2. 问题出在你的视图声明中。

此视图 returns 当前客户的几条记录。结果,Search 方法将只采用第一行。

Customer1 Sector1
Customer1 Sector2
Customer1 Sector3
...

此外,根据您的需要,有几种可能的选择来解决问题:

  1. 使用网格显示当前客户的所有可用扇区(参见 "Locations" 或 "Payment Methods" 选项卡作为示例)

  2. 添加一个新过滤器(例如SectorFilter)以仅显示所选部门的Sector数据

查看下面的代码

public PXFilter<SectorFilter> sectorFilter;

[Serializable]
public partial class SectorFilter : IBqlTable
{
    #region SectorCD
    public abstract class sectorCD : IBqlField { }

    [PXDBString(20, IsFixed = true, IsUnicode = true, InputMask = "")]
    [PXUIField(DisplayName = "Filière")]
    [PXSelector(
        typeof(Search2<TRCustSectorActive.sectorCD, LeftJoin<TRSector, On<TRCustSectorActive.sectorCD, Equal<TRSector.sectorCD>>>, Where<TRCustSectorActive.bAccountID, Equal<Current<Customer.bAccountID>>>>),
        typeof(TRCustSectorActive.sectorCD),
        typeof(TRSector.name),
        typeof(TRCustSectorActive.active)
    )]
    public virtual string SectorCD { get; set; }
    #endregion
}

public PXSelect<TRCustSectorActive, 
    Where<TRCustSectorActive.bAccountID, Equal<Current<Customer.bAccountID>>, 
        And<TRCustSectorActive.sectorCD, Equal<Current<SectorFilter.sectorCD>>>>> Sector;

和aspx

<px:PXFormView ID="formSectorFilter" runat="server" DataSourceID="ds" Style="z-index: 100" Width="100%" CaptionVisible="False"
    DataMember="sectorFilter" SkinID="Transparent">
    <Template>
        <px:PXLayoutRule runat="server" StartColumn="True" LabelsWidth="S" ControlSize="XM" />
        <px:PXSelector CommitChanges="True" ID="edSectorCD" runat="server" DataField="SectorCD" AutoRefresh="True"/>
    </Template>
</px:PXFormView>

<px:PXFormView ID="DefFiliere" runat="server" Caption="Activation Filières" DataMember="Sector" RenderStyle="Fieldset" DataSourceID="ds" TabIndex="2100">
<Template>
   <px:PXLayoutRule runat="server" ControlSize="SM" LabelsWidth="SM" StartColumn="True" />
   <px:PXLayoutRule runat="server" StartColumn="True" LabelsWidth="SM" ControlSize="SM" />
   <px:PXCheckBox runat="server" ID="edActive" DataField="Active"/>
</Template>