在AX2009里新增了一个关键字CrossCompany,这个关键字让查询多个公司的数据的语法变得简洁,如下所示:
![ContractedBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif)
![ExpandedBlockStart.gif](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
static void ChangeCompanyDEMO(Args _args)
{
SalesTable salesTable;
;
while select CrossCompany salesTable
{
print salesTable.SalesId,' ',salesTable.dataAreaId;
}
pause;
}
查看执行的SQL语句如下所示:
SQL 语句:
SELECT
*
FROM
SALESTABLE A
[
ID=1575, 已重用=否
]
可以看出在增加了关键字CrossCompany之后执行的SQL语句已经没有DataAreaId的限定了。如何限定选择某几个公司那?比如只选择"001"和"002"公司。需要在关键字CrossCompany后面加一个Container变量限定一下。如下所示:
![ContractedBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif)
![ExpandedBlockStart.gif](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
static void ChangeCompanyDEMO(Args _args)
{
SalesTable salesTable;
Container c = ['001','002'];
;
while select forceLiterals CrossCompany:c salesTable
{
print salesTable.SalesId,' ',salesTable.dataAreaId;
}
pause;
}
执行的SQL语句如下:
SQL 语句:
SELECT
*
FROM
SALESTABLE A
WHERE
(DATAAREAID
IN
(N
'
001
'
,N
'
002
'
) )
[
ID=953, 已重用=否
]
从上面可以看出,AX把限定Container里的内容翻译成了SQL里的IN语法。
关于跨公司查询的更多内容可以参照MSDN,上面有很多示例代码和更详尽的解释。
http://msdn.microsoft.com/en-us/library/cc634544.aspx