在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在内的所有行的数量?
答案 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;
}
}
}
用于计算实体数量