MS Dynamics 365 Operations 跨公司报告不起作用
MS Dynamics 365 Operations cross company reporting not working
我有一个简单的 RDP 报告,工作正常并且符合预期。当 运行 在 selected 法律实体中时。
我想启用跨公司报告,这样当我在 selected 公司时,我可以根据需要查看所有其他公司的数据。我在 AOT 查询和重建中启用 属性,这会在报告查询中添加公司范围。我仍然在同一个法人实体中。
我 select 与我所在的法人实体相同。
所有其他范围等都是正确的,现在数据不正确。我还需要做什么才能使它正常工作?这是下面粘贴的简单 RDP 报告代码。我已尝试在 query运行 对象上启用 crosscompany,但仍然无法正常工作。我到处都是 0。
我还需要做什么才能使其正常工作?可以忽略范围代码,这只是捕获范围用户 selects 并打印在报告上。
[
SRSReportQueryAttribute(queryStr(WIP))
]
public class WIP extends SRSReportDataProviderBase
{
tmpWIP tmpWIP;
TmpRanges tmpRanges;
[
SRSReportDataSetAttribute('tmpWIP')
]
public tmpWIP gettmpWIP()
{
select tmpWIP;
return tmpWIP;
}
[
SRSReportDataSetAttribute(tablestr(TmpRanges))
]
public TmpRanges getTmpRanges()
{
select tmpRanges;
return tmpRanges;
}
public void processReport()
{
ProjTable projTable;
ProjTransPosting projTransPosting;
CostControlTransCommittedCost costControlTransCommittedCost;
EstimateTemplatePeriod EstimateTemplatePeriod;
QueryRun queryRun;
// Get the query from the runtime using a dynamic query.
queryRun = new QueryRun(this.parmQuery());
queryRun.allowCrossCompany(true);
while (queryRun.next())
{
projTable = queryRun.get(tablenum(ProjTable));
ProjTransPosting = queryRun.get(tablenum(ProjTransPosting));
CostControlTransCommittedCost = queryRun.get(tableNum(CostControlTransCommittedCost));
EstimateTemplatePeriod = queryRun.get(tableNum(EstimateTemplatePeriod));
tmpWIP.clear();
tmpWIP.CustAccount = projTable.CustAccount;
tmpWIP.ProjId = projTable.ProjId;
tmpWIP.Name = projTable.Name;
tmpWIP.CustName = projTable.custName();
tmpWIP.AmountMst = projTransPosting.AmountMst;
tmpWIP.CostAmount = projTransPosting.costAmount();
tmpWIP.ProjTransType = projTransPosting.ProjTransType;
tmpWIP.CategoryId = projTransPosting.CategoryId;
tmpWIP.CommittedCostAmount = costControlTransCommittedCost.AmountMst;
tmpWIP.EstimateValue = EstimateTemplatePeriod.Value;
tmpWIP.PostingType = projTransPosting.PostingType;
tmpWIP.insert();
}
this.rangesToTable(this.parmQuery());
}
public void rangesToTable(Query _query)
{
QueryBuildDataSource qbds;
QueryBuildRange queryBuildRange;
LabelType tableLabel;
int occurrence;
int dataSourceNo;
int i;
for (dataSourceNo = 1; dataSourceNo <= _query.dataSourceCount(); dataSourceNo++)
{
qbds = _query.dataSourceNo(dataSourceNo);
if (qbds.enabled())
{
occurrence = SysQuery::tableOccurrence(_query, qbds.table(), dataSourceNo);
tableLabel = tableId2pname(qbds.table()) + SysQuery::tableOccurrenceText(occurrence);
for (i = 1; i <= qbds.rangeCount(); i++)
{
queryBuildRange = qbds.range(i);
if (queryBuildRange.value() && queryBuildRange.status() != RangeStatus::Hidden)
{
tmpRanges.clear();
tmpRanges.FieldLabel = fieldId2pname(qbds.table(), queryBuildRange.field());
tmpRanges.RangeValue = queryBuildRange.value();
tmpRanges.insert();
}
}
}
}
}
}
allowCrossCompany
方法赋予你在多个公司进行查询的权利,但查询不知道在哪些公司进行。为此,您可以为每个适用的公司调用 addCompanyRange
。
在 MorphX 报告中 the documented approach 等于:
public void init()
{
super();
this.query().allowCrossCompany( true );
this.query().addCompanyRange( "dat" );
this.query().addCompanyRange( "dmo" );
}
类似于跨公司查询的其他用途,您必须告诉它适用于哪些公司。
我发现这是因为 1:N 的抓取模式不支持 属性 'allow cross company in AOT'。我目前正在用 X++ 重建这个查询来解决这个问题。
我有一个简单的 RDP 报告,工作正常并且符合预期。当 运行 在 selected 法律实体中时。
我想启用跨公司报告,这样当我在 selected 公司时,我可以根据需要查看所有其他公司的数据。我在 AOT 查询和重建中启用 属性,这会在报告查询中添加公司范围。我仍然在同一个法人实体中。
我 select 与我所在的法人实体相同。
所有其他范围等都是正确的,现在数据不正确。我还需要做什么才能使它正常工作?这是下面粘贴的简单 RDP 报告代码。我已尝试在 query运行 对象上启用 crosscompany,但仍然无法正常工作。我到处都是 0。
我还需要做什么才能使其正常工作?可以忽略范围代码,这只是捕获范围用户 selects 并打印在报告上。
[
SRSReportQueryAttribute(queryStr(WIP))
]
public class WIP extends SRSReportDataProviderBase
{
tmpWIP tmpWIP;
TmpRanges tmpRanges;
[
SRSReportDataSetAttribute('tmpWIP')
]
public tmpWIP gettmpWIP()
{
select tmpWIP;
return tmpWIP;
}
[
SRSReportDataSetAttribute(tablestr(TmpRanges))
]
public TmpRanges getTmpRanges()
{
select tmpRanges;
return tmpRanges;
}
public void processReport()
{
ProjTable projTable;
ProjTransPosting projTransPosting;
CostControlTransCommittedCost costControlTransCommittedCost;
EstimateTemplatePeriod EstimateTemplatePeriod;
QueryRun queryRun;
// Get the query from the runtime using a dynamic query.
queryRun = new QueryRun(this.parmQuery());
queryRun.allowCrossCompany(true);
while (queryRun.next())
{
projTable = queryRun.get(tablenum(ProjTable));
ProjTransPosting = queryRun.get(tablenum(ProjTransPosting));
CostControlTransCommittedCost = queryRun.get(tableNum(CostControlTransCommittedCost));
EstimateTemplatePeriod = queryRun.get(tableNum(EstimateTemplatePeriod));
tmpWIP.clear();
tmpWIP.CustAccount = projTable.CustAccount;
tmpWIP.ProjId = projTable.ProjId;
tmpWIP.Name = projTable.Name;
tmpWIP.CustName = projTable.custName();
tmpWIP.AmountMst = projTransPosting.AmountMst;
tmpWIP.CostAmount = projTransPosting.costAmount();
tmpWIP.ProjTransType = projTransPosting.ProjTransType;
tmpWIP.CategoryId = projTransPosting.CategoryId;
tmpWIP.CommittedCostAmount = costControlTransCommittedCost.AmountMst;
tmpWIP.EstimateValue = EstimateTemplatePeriod.Value;
tmpWIP.PostingType = projTransPosting.PostingType;
tmpWIP.insert();
}
this.rangesToTable(this.parmQuery());
}
public void rangesToTable(Query _query)
{
QueryBuildDataSource qbds;
QueryBuildRange queryBuildRange;
LabelType tableLabel;
int occurrence;
int dataSourceNo;
int i;
for (dataSourceNo = 1; dataSourceNo <= _query.dataSourceCount(); dataSourceNo++)
{
qbds = _query.dataSourceNo(dataSourceNo);
if (qbds.enabled())
{
occurrence = SysQuery::tableOccurrence(_query, qbds.table(), dataSourceNo);
tableLabel = tableId2pname(qbds.table()) + SysQuery::tableOccurrenceText(occurrence);
for (i = 1; i <= qbds.rangeCount(); i++)
{
queryBuildRange = qbds.range(i);
if (queryBuildRange.value() && queryBuildRange.status() != RangeStatus::Hidden)
{
tmpRanges.clear();
tmpRanges.FieldLabel = fieldId2pname(qbds.table(), queryBuildRange.field());
tmpRanges.RangeValue = queryBuildRange.value();
tmpRanges.insert();
}
}
}
}
}
}
allowCrossCompany
方法赋予你在多个公司进行查询的权利,但查询不知道在哪些公司进行。为此,您可以为每个适用的公司调用 addCompanyRange
。
在 MorphX 报告中 the documented approach 等于:
public void init()
{
super();
this.query().allowCrossCompany( true );
this.query().addCompanyRange( "dat" );
this.query().addCompanyRange( "dmo" );
}
类似于跨公司查询的其他用途,您必须告诉它适用于哪些公司。
我发现这是因为 1:N 的抓取模式不支持 属性 'allow cross company in AOT'。我目前正在用 X++ 重建这个查询来解决这个问题。