扩展通用查询以显示记录数

时间:2018-02-06 16:54:58

标签: acumatica

是否可以扩展“通用查询”屏幕,以便显示检索到的记录数量?或者也许可以使用PXGenericInqGrph来获取通用查询的记录数量?

但是,出于性能原因,我只能从数据库中检索一条带有总计的记录,这很重要。并且没有从数据库中获取所有记录并在Application层执行Count。

1 个答案:

答案 0 :(得分:3)

至少在Acumatica 7.207.0029之前,没有办法扩展通用查询结果屏幕。

如果您只需要记录计数,您可以做的是编辑您的GI或创建副本以获得总数并使用特殊的<Count>字段来获取记录数。

Select <Count> in the GI editor screen

当然,这需要您设置GroupBy字段,如果您想要总记录数,则需要对所有记录都相同。

如果您的查询有一个您知道等于所有记录的字段,则可以在GroupBy选项卡中使用该字段。如果没有,可以通过向数字表添加连接来实现此目的。

号码表解决方法

此技术使用带数字的表来创建特定查询。在这种情况下,我们可以将它连接到您的查询,以便为所有行添加已知的公共值。

以下是自定义项目的XML,它创建此表并使其可用作Is.Objects.Core.ISNumbers DAC。

<Customization level="200" description="Number utility table" product-version="17.207">
    <Graph ClassName="ISNumbers" Source="#CDATA" IsNew="True" FileType="NewDac">
        <CDATA name="Source"><![CDATA[using System;
using PX.Data;

namespace IS.Objects.Core
{
  [Serializable]
  public class ISNumbers: IBqlTable
  {
    #region Number
    [PXDBInt(IsKey = true)]
    [PXUIField(DisplayName = "Number", IsReadOnly = true)]
    public int? Number { get; set; }

    public class number : IBqlField{}
    #endregion
  }
}]]></CDATA>
    </Graph>
    <Sql TableName="ISNumbers" CustomScript="#CDATA">
        <CDATA name="CustomScript"><![CDATA[IF OBJECT_ID('ISNumbers', 'U') IS NOT NULL DROP TABLE ISNumbers;

SELECT TOP 10000 IDENTITY(int,1,1) AS Number
    INTO ISNumbers
    FROM sys.objects s1
    CROSS JOIN sys.objects s2
ALTER TABLE ISNumbers ADD CONSTRAINT PK_ISNumbers PRIMARY KEY CLUSTERED (Number)]]></CDATA>
    </Sql>
</Customization>

只需将表格添加到GI并创建一个INNER JOIN关系,其中number字段的值等于1:

Join configuration example

然后您可以在GroupBy条件中使用此字段。

GroupBy configuration example

然后,您可以添加Numbers字段并将其值设置为<Count>。保留所有其他结果字段以保留逻辑但如果您不需要它们则隐藏它们(它们将按最大值自动分组)。

Result fields

地理标志执行的所有查询都在数据库中执行,因此您无需担心它在应用程序端运行。

Example count