AX支持多公司帐套,如果一个集团公司有多个分公司,可以通过创建多个公司帐套的方式来实现,在写代码的时候会遇到需要切换公司的时候,AX2009提供了两种方式来实现多公司数据的查询,内置方法ChangeCompany和关键字CrossCompany,学习笔记在这里记录一下,这篇文章先说一下ChangeCompany.
比如有两个公司"001"和"002",如果当前公司是"001",想切换到002公司进行查询,这很简单。如下代码所示:

Code
static 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 (DATAAREAID=N'002') [ID=721, 已重用=否]

接下来一个问题就是salesTable这个变量如果在ChangeCompany的范围之外会查询哪个公司那?如果猜想的话,在外面应该是按照查询当前公司的数据了。但是且慢,写段代码来测试一下吧。

Code
static 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前面执行

Code
static 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"的语境下查询数据,也就是说表变量对于公司确实是先入为主的,如果想真正切换公司,需要在查询之前清空再执行,如下所示:

Code
static 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

关于更改当前公司(一)--ChangeCompany相关推荐

  1. 在SAP系统中,更改一个公司代码(Company Code)的会计科目表(Chart of Accounts)

    通常,我们在SAP系统中会通过复制一个已有的公司代码来创建一个新的公司代码.这种情况下,如果我们想改变"新创建出的company code"的会计科目表,应该如何做呢? 通常需要如 ...

  2. nohup怎么更改名字_公司相关信息更改、公司注销不可漏缺步骤

    想更改公司相关信息却无从下手,不知道怎么改,找财驴财税公司免费咨询,公司经营一段时间想更改名字或经营范围不会改,也找不到靠谱公司. 相关信息更改步骤: (更改名称.地址.范围.股东.股权比例.注册资金 ...

  3. 网景:曾经让微软感受到威胁的公司

    1995是为接下来的世纪揭开序幕的一年.彼时,一家知名报刊的专栏曾断言:"这是网络开始改变生活的一年."<连线>藉由对网景公司的回忆,带领读者重温互联网崛起前的黎明时光 ...

  4. openapi_MicroProfile OpenAPI上的Swagger UI

    openapi MicroProfile OpenApi为我们提供了一种使用OpenApi 3描述我们JAX-RS API的标准化方法.如果您以前使用过swagger-jaxrs和swagger- 批 ...

  5. 魔术笔反选_魔术二传手反图案

    魔术笔反选 设置者和获取者是邪恶的. 创建JavaBean定义时,这似乎是个好主意. 但是它们对Java社区造成了很大的伤害. 通常不如null指针那么多,但足够了. 首先,许多初级人员相信实现set ...

  6. MicroProfile OpenAPI上的Swagger UI

    MicroProfile OpenApi为我们提供了一种使用OpenApi 3描述我们JAX-RS API的标准化方法.如果您以前使用过swagger-jaxrs和swagger-annotation ...

  7. 远程办公招聘_招聘远程人才时要寻找的5种技能

    远程办公招聘 Remote work is a fast emerging segment of the labor market. How to embrace this shift as an e ...

  8. 360搜索、UC浏览器等被3·15点名应用已下架;马斯克宣布通过NFT卖歌;美团App再发力社交,内测 “群聊”功能 |极客头条...

    「极客头条」-- 技术人员的新闻圈! CSDN 的读者朋友们早上好哇,「极客头条」来啦,快来看今天都有哪些值得我们技术人关注的重要新闻吧. 整理 | 丁恩华 出品 | CSDN(ID:CSDNnews ...

  9. 什么是RPA? ——业务流程自动化的革命

    CIO们正在转向机器人过程自动化,以去除繁琐使企业员工能够专注于更高价值的工作.专家表示如果要支撑业务,RPA需要适当的设计.规划和治理. 越来越多的CIO正在转向一种名为机器人过程自动化(RPA)的 ...

最新文章

  1. 如何查看linux动态链接库文件的版本等其他信息
  2. 一种新型鱼眼图像轮廓提取算法
  3. OpenVINO 部署 YOLOv5 转换IR文件
  4. 鸟哥的Linux私房菜(基础篇)-第一章、Linux是什么(一.2. Torvalds的Linux发展)
  5. 三门科目分析信息系统项目管理师如何备考
  6. One order deletion tool
  7. CCF NOI1009 分配任务
  8. 【渝粤教育】电大中专职业生涯规划_1作业 题库
  9. python读取HDF5数据
  10. iOS:childViewController和view的声明周期及其原理
  11. 十九个国内外主流的三维GIS软件(转)
  12. 电视机芯片介绍-海思Hi3751 V600
  13. centos oracle 修改监听服务名_虚拟机(Oracle Virtual Box)下ORACLE的安装
  14. 【B类】BI商业智能、大数据、Mysql、等系列课程集
  15. 大数据与传统数据对比
  16. 邮箱不可用 550 User has no permission(JavaMail登不进邮件系统)
  17. HCIP(四)---BMA,NBMA网络类型
  18. 如何将两列数据转为一列数据
  19. Node.js:时间处理库:moment.js用法
  20. 欧洲通用数据保护条例(GDPR)合规的6个步骤

热门文章

  1. info testing mysql_SQLMASQLMAP中文说明(linux版本)
  2. miniconda3 安装numpy_OpenCV4在Ubuntu1810/1604安装
  3. JavaMelody开源系统性能监控软件:
  4. 安农大计算机调剂,2020年安徽农业大学硕士研究生调剂公告
  5. Servlet 工程 web.xml 中的 servlet 和 servlet-mapping 标签
  6. 美国oracle球场,美国体育馆考察——美国体育产业是如何盈利的?
  7. C++primer第九章 顺序容器 9.3 顺序容器操作
  8. SpringBoot —— @ComponentScan注解
  9. Java提高篇 —— Java内部类详解
  10. IT必须掌握的常用命令