Axapta 通過RecId查詢紀錄

2021-09-08 03:41:39 字數 1847 閱讀 7583

ax在插入一條紀錄的時候會自動生成recid,每條紀錄的recid是全域性唯一的,如果知道了recid和tableid,關於如何找到紀錄已經有很多的介紹,典型的做法是:

public common findrecord(tableid _tableid, recid _recid, boolean _forupdate = false

)

還有一種做法是使用query:

query                q = new

query;

querybuilddatasource qbds;

queryrun qr;

;qbds =q.adddatasouce(tableid);

qbds.addrange(tableid2name(tableid), recid)).value(queryvalue

(yourrecid));

qr = new

queryrun(q);

if(queryrun.next())

但是如果在我們不知道tableid的情況下如何來查詢呢,似乎只能通過遍歷所有的table的id了,遍歷所有的table也有幾種方法,我們依次來看。

第一種 使用dictionary

dictionary      dictionary;

tableid tableid;

tablename tablename;

common c;

dicttable dt;

; dictionary = new

dictionary();

tableid = dictionary.tablenext(0

);

tablename =dictionary.tablename(tableid);

while

(tableid)

}

第二種 使用sqldictionary

sqldictionary   dicttable;

common c;

dicttable dt;

;while

select * from dicttable where dicttable.fieldid == 0

}

此外還可以使用utilidelements來查詢表:

utilidelements  uie;

common c;

dicttable dt;

;while

select uie where uie.recordtype==utilelementtype::table

}

但是這樣執行ax就崩潰了,從列印出來的uie.name我們能看到重複的表名稱,這是因為這個表可能在多個層上被修改過,查詢時需要加入層的過濾,比如

while

select uie where uie.recordtype==utilelementtype::table

&& uie.utillevel==utilentrylevel::usr

但是這樣的問題是你只能得到某乙個層上的表物件,所以對這個問題處理不如方法一和方法二的查詢辦法了。還要說的是還有乙個名為utilelements的類,它和utilidelements的方法、屬性基本上都上一樣的,不同的地方是utilelements沒有id屬性,只有乙個source屬性,這個source是個container物件,遍歷了一下所有表,這個source都是空的,不知道是被設計來做什麼的了。

通過TCODE查詢User Exit

report zfind userexit no standard page heading.tables tstc,tadir,modsapt,modact,trdir,tfdir,enlfdir.tables tstct.data jtab like tadir occurs 0 with he...

通過TCODE查詢User Exit

z find user exit report z find user exit no standard page heading.tables tstc,tadir,modsapt,modact,trdir,tfdir,enlfdir.tables tstct.data jtab like tad...

通過兄弟查詢元素

xpath還是蠻好用的,有各種的查詢方式 單個屬性識別 屬性組合識別,通過兒子找父親,通過父親找兒子,通過爺爺找孫子,通過兄弟來定位,簡直不要太全面。今天用到的是通過兄弟來識別元素。問題 想驗證點選tab成功。正愁用頁面資料判斷來判斷不好做,猛地發現只有被選擇的tab下面帶了橫線。但是這個元素只有c...