计算Acumatica中任何类型实体的数量

时间:2017-04-15 08:37:56

标签: acumatica

在Acumatica参考(帮助 - > Acumatica框架 - > API参考 - > BQL - >分组和聚合 - >聚合函数)中,有以下代码片段

PXResult<Table> res =
PXSelectGroupBy<Table, Aggregate<Count>>.Select(this).RowCount;

但是当我用实体UPCompany执行它时,我收到以下错误消息:

System.ArgumentNullException was unhandled by user code
  HResult=-2147467261
  Message=Value cannot be null.
  Source=mscorlib
  StackTrace:
       at System.RuntimeType.MakeGenericType(Type[] instantiation)
       at PX.Data.Select4`2.OrderByNew(Type newOrderBy)
       at PX.Data.PXView.prepareSorts(String[] sortcolumns, Boolean[] descendings, Object[] searches, Int32 topCount, Boolean& needOverrideSort, Boolean& anySearch, Boolean& resetTopCount)
       at PX.Data.PXView.Select(Object[] currents, Object[] parameters, Object[] searches, String[] sortcolumns, Boolean[] descendings, PXFilterRow[] filters, Int32& startRow, Int32 maximumRows, Int32& totalRows)
       at PX.Data.PXSelectBase`1.selectBound[Resultset](BqlCommand command, Boolean readOnly, PXGraph graph, Int32 startRow, Int32 totalRows, Object[] currents, Object[] pars)
       at PX.Data.PXSelectBase`1.select[Resultset](BqlCommand command, Boolean readOnly, PXGraph graph, Int32 startRow, Int32 totalRows, Object[] pars)
       at PX.Data.PXSelectGroupBy`2.SelectWindowed[Resultset](PXGraph graph, Int32 startRow, Int32 totalRows, Object[] pars)
       at PX.Data.PXSelectGroupBy`2.Select[Resultset](PXGraph graph, Object[] pars)
       at stackOverflowSync.UsrstackOverflowSettingsMaint.ItemsForSync(UsrstackOverflowSettings settingsSelect) in C:\sourceCode\stackOverflow\stackOverflow\Acumatica_ERPSync\Acumatica_ERPSync\stackOverflowSync\UsrstackOverflowSettingsMaint.cs:line 26
       at stackOverflowSync.UsrstackOverflowSettingsMaint.Persist() in C:\sourceCode\stackOverflow\stackOverflow\Acumatica_ERPSync\Acumatica_ERPSync\stackOverflowSync\UsrstackOverflowSettingsMaint.cs:line 173
       at PX.Data.PXSave`1.<Handler>d__2.MoveNext()
       at PX.Data.PXAction`1.<Press>d__31.MoveNext()
  InnerException: 

所以我的问题如下:如何正确执行Acumatica引用的代码片段,以便接收包括UPCompany在内的所有行的数量?

1 个答案:

答案 0 :(得分:0)

我找到了原因。 UPCompany不是可用于PXSelect,PXSelectGroupBy的实体。我想也许是因为UPCompany与数据库没有直接对应关系。虽然它很奇怪,但除了UPCompany之外的其他实体PXSelect和PXSelectGroupBy工作得很好。我结束了以下方法:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using PX.Data;

namespace PX.Data
{
    public static class ExtMethods
    {
        public static int? GetNumberOfEntities<T>(this PXGraph graph) where T : class, IBqlTable, new()
        {
            PXResult<T> res = PXSelectGroupBy<T, Aggregate<Count>>.Select(graph);
            return res.RowCount;
        }
    }
}

用于计算实体数量