невозможно запустить событие с полевым или массовым обновлением на экране GL404000 - PullRequest
0 голосов
/ 05 октября 2018

Я пытаюсь расширить бизнес-логику AccountByPeriodEnq, но сталкиваюсь со следующей проблемой:

Кажется, я не могу запустить события GLTranR_RowUpdated или GLTranR_Selected_FieldUpdated.(Если я не нажму кнопку обновления, события будут запущены)

Вот мой код:

  #region EventHandler
        protected void GLTranR_Selected_FieldUpdated(PXCache cache, PXFieldUpdatedEventArgs e, PXFieldUpdated del)
        {
            del?.Invoke(cache, e);
            var row = (GLTranR)e.Row;
        }

        protected void GLTranR_RowUpdated(PXCache cache, PXRowUpdatedEventArgs e)
        {
            var row = (GLTranR)e.Row;
        }

        #endregion 

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

Кажется, что исходное событие также никогда не запускается (находится на графике AccountByPeriodEnq.cs), так как я никогда не вижу отключенной кнопки переклассификации.

protected virtual void GLTranR_Selected_FieldUpdated(PXCache sender, PXFieldUpdatedEventArgs e)
        {
            reclassify.SetEnabled(GetSelectedTrans().Any());
        }

Я проверил в aspx иcommitchanges = true установлен для поля «Выбрано».

Вот aspx:

<%@ Page Language="C#" MasterPageFile="~/MasterPages/FormDetail.master" AutoEventWireup="true"
  ValidateRequest="false" CodeFile="GL404000.aspx.cs" Inherits="Page_GL404000"
  Title="Untitled Page" %>

<%@ MasterType VirtualPath="~/MasterPages/FormDetail.master" %>
<asp:Content ID="Content1" ContentPlaceHolderID="phDS" runat="Server">
  <px:PXDataSource ID="ds" runat="server" Visible="True" Width="100%" TypeName="PX.Objects.GL.AccountByPeriodEnq"
    PrimaryView="Filter" PageLoadBehavior="PopulateSavedValues">
    <CallbackCommands>
      <px:PXDSCallbackCommand CommitChanges="True" Name="previousperiod" HideText="True"/>
      <px:PXDSCallbackCommand CommitChanges="True" Name="nextperiod" HideText="True"/>
      <px:PXDSCallbackCommand DependOnGrid="grid" Name="Reclassify" CommitChanges="True"/>
      <px:PXDSCallbackCommand DependOnGrid="grid" Name="ReclassifyAll"/>
      <px:PXDSCallbackCommand DependOnGrid="grid" Name="ReclassificationHistory" StateColumn="IncludedInReclassHistory"/>
    </CallbackCommands>
  </px:PXDataSource>
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="phF" runat="Server">
  <px:PXFormView ID="form" runat="server"   Width="100%"
    Caption="Selection" DataMember="Filter" DefaultControlID="edFinPeriodID" DataSourceID="ds" TabIndex="100">
    <Template>
      <px:PXLayoutRule runat="server" StartColumn="True" LabelsWidth="SM" ControlSize="M" ></px:PXLayoutRule>
      <px:PXSelector CommitChanges="True" ID="edOrganizationID" runat="server" DataField="OrganizationID"></px:PXSelector>
      <px:PXSegmentMask CommitChanges="True" ID="edBranchID" runat="server" DataField="BranchID" Autorefresh="true"></px:PXSegmentMask>
      <px:PXSelector CommitChanges="True" ID="edLedgerID" runat="server" DataField="LedgerID" Autorefresh="true"></px:PXSelector>
      <px:PXSelector CommitChanges="True" ID="edStartPeriodID" runat="server" DataField="StartPeriodID"></px:PXSelector>
      <px:PXSelector CommitChanges="True" ID="edEndPeriodID" runat="server" DataField="EndPeriodID" Autorefresh="True"></px:PXSelector>
      <px:PXSegmentMask CommitChanges="True" ID="edAccountID" runat="server" DataField="AccountID"></px:PXSegmentMask>
      <px:PXSegmentMask CommitChanges="True" ID="edSubID" runat="server" DataField="SubID" SelectMode="Segment"  ></px:PXSegmentMask>
      <px:PXLayoutRule runat="server" StartColumn="True" LabelsWidth="SM" ControlSize="S" ></px:PXLayoutRule>
      <px:PXDateTimeEdit CommitChanges="True" ID="edStartDateUI" runat="server" DataField="StartDateUI" ></px:PXDateTimeEdit>
      <px:PXDateTimeEdit CommitChanges="True" ID="edPeriodStartDate" runat="server" DataField="PeriodStartDateUI" ></px:PXDateTimeEdit>
      <px:PXDateTimeEdit CommitChanges="True" ID="edEndDateUI" runat="server" DataField="EndDateUI" ></px:PXDateTimeEdit>
      <px:PXDateTimeEdit CommitChanges="True" ID="edPeriodEndDateUI" runat="server" DataField="PeriodEndDateUI" ></px:PXDateTimeEdit>
      <px:PXNumberEdit runat="server" ID="CstPXNumberEdit1" DataField="UsrCreditTotal" CommitChanges="True" />
      <px:PXNumberEdit runat="server" ID="CstPXNumberEdit2" DataField="UsrDebitTotal" CommitChanges="True" />
      <px:PXNumberEdit runat="server" ID="CstPXNumberEdit14" DataField="UsrSolde" CommitChanges="True" />
      <px:PXLayoutRule runat="server" StartColumn="True" SuppressLabel="True" ></px:PXLayoutRule>
      <px:PXCheckBox CommitChanges="True" ID="chkShowSummary" runat="server" DataField="ShowSummary" ></px:PXCheckBox>
      <px:PXCheckBox CommitChanges="True" ID="chkIncludeUnposted" runat="server" DataField="IncludeUnposted" ></px:PXCheckBox>
      <px:PXCheckBox CommitChanges="True" ID="chkIncludeUnreleased" runat="server" DataField="IncludeUnreleased" ></px:PXCheckBox>
      <px:PXCheckBox CommitChanges="True" ID="chkIncludeReclassified" runat="server" DataField="IncludeReclassified" ></px:PXCheckBox>
      <px:PXCheckBox CommitChanges="True" ID="chkShowCuryDetail" runat="server" DataField="ShowCuryDetail" ></px:PXCheckBox>

      <px:PXLayoutRule runat="server" StartColumn="True">
      </px:PXLayoutRule>
      <px:PXNumberEdit ID="edBegBal" runat="server" DataField="BegBal">
      </px:PXNumberEdit>
      <px:PXNumberEdit ID="edTurnOver" runat="server" DataField="TurnOver">
      </px:PXNumberEdit>
      <px:PXNumberEdit ID="edEndBal" runat="server" DataField="EndBal">
      </px:PXNumberEdit>
      <px:PXGroupBox runat="server" ID="groupAffichage" Caption="Afficher" CommitChanges="True" DataField="UsrAffichage" RenderSimple="True" RenderStyle="RoundBorder">
        <ContentLayout Layout="Stack" />
        <Template>
          <px:PXRadioButton runat="server" ID="CstRadioButton15" Text="Tous" Value="0" Checked="False" GroupName="groupAffichage" />
          <px:PXRadioButton runat="server" ID="CstRadioButton16" Value="1" Text="Lettres" GroupName="groupAffichage" Checked="False" />
          <px:PXRadioButton runat="server" ID="CstRadioButton17" GroupName="groupAffichage" Value="2" Text="Non lettres" Checked="True" /></Template></px:PXGroupBox></Template>
  </px:PXFormView></asp:Content>
<asp:Content ID="Content3" ContentPlaceHolderID="phG" runat="Server">
  <px:PXGrid ID="grid" runat="server"  Height="150px" 
    Width="100%" AllowPaging="True" AdjustPageSize="Auto" Caption="Summary By Period" SyncPosition ="True" FastFilterFields="TranDesc,RefNbr,"
    BatchUpdate="True" AllowSearch="True" SkinID="PrimaryInquire" RestrictFields="True" DataSourceID="ds" TabIndex="100" PreserveSortsAndFilters="False">
    <CallbackCommands>
      <Refresh RepaintControlsIDs="form"/>
    </CallbackCommands>
    <AutoSize Container="Window" Enabled="True" />
    <Mode AllowAddNew="False" AllowDelete="False"  />
    <Levels>
      <px:PXGridLevel DataMember="GLTranEnq">
        <Columns>
          <px:PXGridColumn DataField="Selected" TextAlign="Center" Type="CheckBox" Width="30px" AllowCheckAll="True" AllowShowHide="Server" CommitChanges="True"></px:PXGridColumn>
          <px:PXGridColumn DataField="Module" Width="100px" ></px:PXGridColumn>
          <px:PXGridColumn DataField="BatchNbr" Width="100px" LinkCommand="ViewBatch" ></px:PXGridColumn>
          <px:PXGridColumn DataField="TranDate" Width="100px" ></px:PXGridColumn>
          <px:PXGridColumn DataField="FinPeriodID" Width="100px" ></px:PXGridColumn>
          <px:PXGridColumn DataField="TranDesc" Width="224px" ></px:PXGridColumn>
          <px:PXGridColumn DataField="RefNbr" Width="100px" LinkCommand="ViewDocument" ></px:PXGridColumn>
          <px:PXGridColumn DataField="LineNbr" TextAlign="Right" Width="100px"  ></px:PXGridColumn>
          <px:PXGridColumn DataField="BranchID" Width="100px" ></px:PXGridColumn>
          <px:PXGridColumn DataField="AccountID" Width="108px" ></px:PXGridColumn>
          <px:PXGridColumn DataField="SubID" Width="198px" ></px:PXGridColumn>
          <px:PXGridColumn DataField="SignBegBalance" TextAlign="Right" Width="100px" ></px:PXGridColumn>
          <px:PXGridColumn DataField="DebitAmt" TextAlign="Right" Width="100px" ></px:PXGridColumn>
          <px:PXGridColumn DataField="CreditAmt" TextAlign="Right" Width="100px" ></px:PXGridColumn>
          <px:PXGridColumn DataField="SignEndBalance" TextAlign="Right" MatrixMode="True" Width="100px" ></px:PXGridColumn>
          <px:PXGridColumn DataField="CuryID"  AllowShowHide="Server" ></px:PXGridColumn>
          <px:PXGridColumn DataField="SignCuryBegBalance" TextAlign="Right" Width="100px" AllowShowHide="Server" ></px:PXGridColumn>
          <px:PXGridColumn DataField="CuryDebitAmt" TextAlign="Right" Width="100px" AllowShowHide="Server" ></px:PXGridColumn>
          <px:PXGridColumn DataField="CuryCreditAmt" TextAlign="Right" Width="100px" AllowShowHide="Server" ></px:PXGridColumn>
          <px:PXGridColumn DataField="SignCuryEndBalance" TextAlign="Right" Width="100px" AllowShowHide="Server" ></px:PXGridColumn>
          <px:PXGridColumn DataField="InventoryID" Width="120px" ></px:PXGridColumn>
          <px:PXGridColumn DataField="ReferenceID" Width="120px" ></px:PXGridColumn>
          <px:PXGridColumn DataField="ReferenceID_BaccountR_AcctName" Width="200px" ></px:PXGridColumn>
          <px:PXGridColumn DataField="ReclassBatchNbr" TextAlign="Right" Width="120px" AllowShowHide="Server" LinkCommand="ViewReclassBatch" ></px:PXGridColumn>
          <px:PXGridColumn DataField="IncludedInReclassHistory" AllowShowHide="False" Visible="false" SyncVisible="false" ></px:PXGridColumn>
          <px:PXGridColumn DataField="UsrLettrageNbr" Width="70" CommitChanges="True" /></Columns>
      </px:PXGridLevel>
    </Levels>
    <AutoSize Container="Window" Enabled="True" MinHeight="400" />
    <ActionBar DefaultAction="DoubleClick" />
  </px:PXGrid>
</asp:Content>

Чего мне не хватает?Я уже потратил на это несколько часов, и у меня закончились идеи.

Редактировать:

Моя конечная цель - вычислить сумму кредита и дебета для выбранных строк в фильтре.Посмотреть.Если у вас есть обходной путь для обновления этих значений каждый раз, когда я выбираю новую строку, я возьму ее.

Может быть, с некоторым javascript и командой обратного вызова?


Я открыл поддержкубилет по этому вопросу в партнерском центре acumatica.

Edit 2:

Итак, я создал свой собственный селектор:

#region UsrletSel
        [PXBool]
        [PXUIField(DisplayName = "Lettrer")]

        public virtual bool? UsrletSel { get; set; }
        public abstract class usrletSel : IBqlField { }
        #endregion

Затем я спрятал базовый селектор вaspx, и чтобы сохранить исходную логику, я привязал новый селектор к базовому:

protected void GLTranR_UsrletSel_FieldUpdated(PXCache cache, PXFieldUpdatedEventArgs e)
        {
            if (e.Row == null) return;
            var row = (GLTranR)e.Row;
            if(row.GetExtension<GLTranExt>().UsrletSel == true)
            {
                row.Selected = true;
            }
            else
            {
                row.Selected = false;
            }
        }

Я установил свойство CommitChanges = True в aspx для моего нового поля, но я все еще не могу запустить любойсобытие на этом экране.

есть идеи?

Редактировать 3:

Таким образом, я случайно получил свой флажок (но также и исходный выбранный флажок) для запуска событий.Вы должны дважды щелкнуть по флажку.(Что не имеет никакого смысла.) Но я не могу сказать своему клиенту «начните с двойного щелчка, если вы хотите, чтобы ваша общая сумма рассчитывалась».

При 20 с http://recordit.co/1fzW3eDIO9

С уважением,

Ответы [ 2 ]

0 голосов
/ 10 октября 2018

Окончательный ответ состоял в том, что свойство "BatchUpdate" было установлено равным "true" в Grid, что предотвращает передачу изменений на сервер.

Как только вы установите его в значение false, оно будет работать нормально:

enter image description here

0 голосов
/ 05 октября 2018

Насколько мне известно, нет способа сделать это.

Здесь та же проблема: Элемент управления флажка в сетке не вызывает событие с полем

Поле Выбранный имеет специальную жестко закодированную логикупривязан к этому.Когда вы читаете Выбранное значение на графике BLC, оно не отображает текущее значение, отображаемое на экране.Также поле не запускает события как другие поля.

Я нашел только два способа обойти это:

  1. Используйте поле с другим именем, если имя поляis Выбрано оно не будет вести себя как другие поля.
  2. Попробуйте реализовать всю свою логику, используя только атрибуты поля DAC.Этого очень трудно достичь.

У меня нет полного решения для # 2, но если все, что вам нужно, это всего лишь код, то будет хорошим началом:

// Selected count
[PXUnboundFormula(typeof(Switch<Case<Where<DAC.selected, Equal<True>>, int1>, int0>), 
                    typeof(SumCalc<FilterDAC.selectedCount>))]
protected void DAC_Selected_CacheAttached(PXCache sender)
{
}

[PXProcessButton]
[PXUIField(DisplayName = "Select All")]
protected virtual void selectAll()
{
    foreach (DAC doc in Dataview.Select())
    {
        if (doc.Selected != true)
        {
            doc.Selected = true;
            Dataview.Cache.SetStatus(doc, PXEntryStatus.Updated);
        }
    }

    FilterDAC copy = PXCache<FilterDAC>.CreateCopy(FilterDAC.Current);
    PXFormulaAttribute.CalcAggregate<DAC.selected>(Dataview.Cache, copy);
    Filter.Update(copy);
}
...