是否可以扩展“通用查询”屏幕,以便显示检索到的记录数量?或者也许可以使用PXGenericInqGrph来获取通用查询的记录数量?
但是,出于性能原因,我只能从数据库中检索一条带有总计的记录,这很重要。并且没有从数据库中获取所有记录并在Application层执行Count。
答案 0 :(得分:3)
至少在Acumatica 7.207.0029之前,没有办法扩展通用查询结果屏幕。
如果您只需要记录计数,您可以做的是编辑您的GI或创建副本以获得总数并使用特殊的<Count>
字段来获取记录数。
当然,这需要您设置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:
然后您可以在GroupBy条件中使用此字段。
然后,您可以添加Numbers
字段并将其值设置为<Count>
。保留所有其他结果字段以保留逻辑但如果您不需要它们则隐藏它们(它们将按最大值自动分组)。
地理标志执行的所有查询都在数据库中执行,因此您无需担心它在应用程序端运行。