企业网企业网站制作,手机网站发展,数商云是外包吗,7k7k电脑版网页在线玩AX支持多公司帐套#xff0c;如果一个集团公司有多个分公司#xff0c;可以通过创建多个公司帐套的方式来实现#xff0c;在写代码的时候会遇到需要切换公司的时候#xff0c;AX2009提供了两种方式来实现多公司数据的查询#xff0c;内置方法ChangeCompany和关键字CrossCo…AX支持多公司帐套如果一个集团公司有多个分公司可以通过创建多个公司帐套的方式来实现在写代码的时候会遇到需要切换公司的时候AX2009提供了两种方式来实现多公司数据的查询内置方法ChangeCompany和关键字CrossCompany,学习笔记在这里记录一下这篇文章先说一下ChangeCompany.比如有两个公司001和002如果当前公司是001想切换到002公司进行查询这很简单。如下代码所示 Codestatic void ChangeCompanyDEMO(Args _args){ SalesTable salesTable; ; ChangeCompany(002) { select * from salesTable; print salesTable.SalesId; pause; }} AX里的多公司帐套实现是通过在表中的字段DataAreaId来实现的我们可以猜想它的ChangeCompany的实现原理无非就是在构造SQL查询语句的时候考虑了当前的语境的DataAreaId至于AX在哪里存放当前语境下的DataAreaId以及ChangeCompany是如何更改的可能是有一个全局变量或许是其他什么方式没看到相关文档也就无从考证了不过我们可以通过运行的SQL确认DataAreaId的改变如下所示 SQL 语句: SELECT A.SALESID,FROM SALESTABLE A WHERE (DATAAREAIDN002) [ID721, 已重用否] 接下来一个问题就是salesTable这个变量如果在ChangeCompany的范围之外会查询哪个公司那如果猜想的话在外面应该是按照查询当前公司的数据了。但是且慢写段代码来测试一下吧。 Codestatic void ChangeCompanyDEMO(Args _args){ SalesTable salesTable; ; ChangeCompany(002) { select forceLiterals * from salesTable; print salesTable.SalesId, ,salesTable.dataAreaId; //pause; } select forceLiterals * from salesTable; print salesTable.SalesId, ,salesTable.dataAreaId; pause;} 无论是从打印的结果还是从执行的SQL语句都可以看出查询的都是002公司的数据难道salesTable这表变量还有先来后到从一而终之说把后面这段代码放到ChangeCompany前面执行 Codestatic void ChangeCompanyDEMO(Args _args){ SalesTable salesTable; ; select forceLiterals * from salesTable; print salesTable.SalesId, ,salesTable.dataAreaId; ChangeCompany(002) { select forceLiterals * from salesTable; print salesTable.SalesId, ,salesTable.dataAreaId; //pause; } pause;} 从执行的结果看都是在公司001的语境下查询数据也就是说表变量对于公司确实是先入为主的如果想真正切换公司需要在查询之前清空再执行如下所示 Codestatic void ChangeCompanyDEMO(Args _args){ SalesTable salesTable; ; select forceLiterals * from salesTable; print salesTable.SalesId, ,salesTable.dataAreaId; ChangeCompany(002) { salesTable null; select forceLiterals * from salesTable; print salesTable.SalesId, ,salesTable.dataAreaId; //pause; } pause;} 这样就可以遵循各自的语境了。转载于:https://www.cnblogs.com/Farseer1215/archive/2009/11/15/1603561.html