Acumatica: Мой присоединенный селектор плохо написан? - PullRequest
2 голосов
/ 10 марта 2020

Я только начинаю кодировать в Acumatica и пытаюсь добавить Секторы на экран клиента. Я создал таблицу секторов SQL (TRSector) с именами и кодами 18 различных секторов. Я также создал другую таблицу SQL (TRCustSectorActive), которая содержит все комбинации учетных записей клиентов и кодов секторов с дополнительной информацией (активна она или нет, даты и т. Д. c). Идея состоит в том, что каждый клиент будет иметь информацию о каждом секторе.

Я пытаюсь добавить селектор для секторов на странице клиента (AR303000). Проблема, с которой я сталкиваюсь, заключается в том, что даже если мой селектор показывает правильно, если я пытаюсь изменить сектор, мой выбор автоматически возвращается к первой строке. Я предполагаю, что я делаю что-то не так при соединении двух моих столов? Или я должен иметь CurrentSector представление на моем графике?

Вот более подробная информация о моем коде. Селектор в моем TRCustSectorActive DA C выглядит следующим образом:

#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 DA C, чтобы я мог отображать названия секторов в выделении.

Вид в расширении 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>

Ответы [ 2 ]

1 голос
/ 11 марта 2020
  1. С вашим селектором все в порядке
  2. Проблема в объявлении вашего представления.

Это представление возвращает несколько записей для текущего клиента. В результате метод Search займет только первую строку.

Customer1 Sector1
Customer1 Sector2
Customer1 Sector3
...

Далее, в зависимости от того, что вам нужно, есть несколько возможных вариантов решения проблемы:

  1. Используйте сетку для отображения всех доступных секторов для текущего клиента (см., Например, вкладку «Места размещения» или «Способы оплаты») enter image description here

  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>

0 голосов
/ 10 марта 2020

Не могли бы вы включить ваше полное определение свойства (не только атрибут селектора)? Убедитесь, что вы правильно определили свое поле, включая определение класса BqlField.

Кроме того, чтобы начать устранение неполадок с вашей проблемой, я бы начал с более простого селектора, такого как ниже, чтобы вы могли исключить, является ли оно связано с присоединением или нет.

[PXSelector(
    typeof(TRCustSectorActive.sectorCD),
    typeof(TRCustSectorActive.sectorCD),
    typeof(TRSector.name),
    typeof(TRCustSectorActive.active)
)]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...