日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

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

發布時間:2023/12/18 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 关于更改当前公司(一)--ChangeCompany 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

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的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。