Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Acumatica 无法在GL404000屏幕上触发fieldupdated或rowupdated事件_Acumatica - Fatal编程技术网

Acumatica 无法在GL404000屏幕上触发fieldupdated或rowupdated事件

Acumatica 无法在GL404000屏幕上触发fieldupdated或rowupdated事件,acumatica,Acumatica,我试图扩展AccountByPeriodEnq业务逻辑,但我面临以下问题: 我似乎无法启动GLTranR_RowUpdated或GLTranR_Selected_FieldUpdated事件。(除非单击“刷新”按钮,否则将触发事件) 这是我的密码: #region EventHandler protected void GLTranR_Selected_FieldUpdated(PXCache cache, PXFieldUpdatedEventArgs e, PXField

我试图扩展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,并且为“Selected”字段设置了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>
然后我将基本选择器隐藏在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;
            }
        }
protectedvoid GLTranR\u UsrletSel\u FieldUpdated(PXCache缓存,PXFieldUpdatedEventArgs e)
{
if(e.Row==null)返回;
var row=(GLTranR)e.row;
if(row.GetExtension().UsrletSel==true)
{
row.Selected=true;
}
其他的
{
row.Selected=false;
}
}
我在aspx中为我的新字段设置了属性CommitChanges=True,但仍然无法在此屏幕上触发任何事件

你知道吗

编辑3:

因此,我随机选择了我的复选框(但也选择了原始复选框)来触发事件。您必须双击该复选框。(这没有任何意义)但我不能真正告诉我的客户“如果你想计算总数,就双击开始”

20多岁


就我所知,没有办法做到这一点

这是同样的问题:

所选的字段似乎有特殊的硬编码逻辑。当您在BLC图形中读取所选值时,它不会提供屏幕上显示的当前值。此外,该字段不像其他字段那样触发事件

我发现只有两种方法可以解决这个问题:

  • 使用具有不同名称的字段,如果选择了字段名称,则该字段的行为与其他字段不同
  • 尝试仅使用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);
    }
    
    //所选计数
    [PX未绑定公式(开关类型),
    类型(SumCalc))]
    受保护的无效DAC\u选定\u缓存已连接(PXCache发送方)
    {
    }
    [PXProcessButton]
    [PXUIField(DisplayName=“全选”)]
    受保护的虚拟void selectAll()
    {
    foreach(Dataview.Select()中的DAC文档)
    {
    如果(已选择文档!=真)
    {
    doc.Selected=true;
    Dataview.Cache.SetStatus(doc,PXEntryStatus.Updated);
    }
    }
    FilterDAC copy=PXCache.CreateCopy(FilterDAC.Current);
    PXFormulaAttribute.CalcAggregate(Dataview.Cache,复制);
    过滤、更新(复制);
    }
    
    最后的答案是,网格上的属性“BatchUpdate”设置为“true”,这会阻止将更改提交给服务器

    将其设置为false后,即可正常工作:


    哦,奇怪的是,苏没有向我提出这个问题。感谢您的回答,但这让我感到惊讶,因为即使是本机代码也会尝试在选定的\u fieldupdated事件上更新重分类按钮状态。如果我想继续使用此屏幕上的单个复选框来执行所有处理,您认为我可以:隐藏选中的复选框、显示我自己的selectedCust复选框、在selected base复选框上复制我自己的selectedCust复选框的状态吗?此外,我的目标是将所选行的数量相加,并将其打印在“过滤器”视图上,您可能想到的任何解决方法?诚实地删除所选列并用其他内容替换它是我所要做的。很久以前,我确实使用属性和许多奇怪的解决方法实现了对所选列的求和,以使其正确刷新,但这非常困难,我现在手头上没有该代码。我确实找到了一些使用属性获取所选字段求和的代码,我将其添加到了我的答案中,如果你选择那样做,也许会有帮助。这里的困难在于,需要强制更新和刷新DAC,因为所选字段无法执行此操作。非常感谢您提供此代码示例,但您能否对其稍加注释我正在努力了解所选列上PXUnboundformula的用途您好,我使用了一个未命名为Selected的字段,但它仍然不会触发任何事件:(这可能会破坏批处理功能,请谨慎使用。
    // 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);
    }