Time of Update: 2018-12-06
在Axapta中有兩個類UtilElements和UtilIdElements,從Inside Microsoft Axapta4.0中的範例程式碼中,可以看到兩者的應用.協助文檔一點記載都沒有......我們知道Axapta把AOT的資訊以*.aod尾碼檔案方式存放在物理磁碟中.這兩個類的功能就是可以讓使用者用SQL的方式查詢AOT中的元素,UtilElementType這個枚舉類型有很多AOT中結點的類型值,比如Form,Report等,下面的範例程式碼顯示了查詢Inventory相關的類.
Time of Update: 2018-12-06
在Axapta中有一些類封裝了對AOT的查詢操作,比如Dictionary,DictRelation,DictClass,DictType等.如果想知道某個擴充資料類型的有幾個元素組成的,可以用如下代碼:static void getArrarySize(Args _args){ Dictionary d; DictType dt; ; d = new Dictionary(); dt = new DictType(d.typeName2Id("Dimensio
Time of Update: 2018-12-06
一個客戶的銷售訂單和採購訂單要求工作流程審核才能發貨或收貨,要求跟OA系統的工作流程整合,在Axapta中啟動流程,在工作流程中籤核,簽核完畢後再回寫Axapta相應單據的資訊.今天弄了一下,由於OA是用VB+ASP寫的,所以在啟動流程的時候需要調用COM,Axapta提供了COM這個類來調用COM,實現起來倒挺容易的,不過在傳遞數組參數的時候遇到了些麻煩.工作流程的COM提供的啟動流程的方法是用字串數組的形式接收流程相關資訊的,開始的時候用如下代碼調用: COM workFLow; st
Time of Update: 2018-12-06
第十三章:Advanced MorphX Forms講了自訂Form的樣本,包括ActiveX控制項和Html代碼的產生,一時理不出頭緒......第十四章:Reflection 本章的範例程式碼主要介紹了一些操作AOT的類的用法,包括TableAPI,Dictionary和TreeNode等,用代碼操作AOT裡的元素,比較好玩,呵呵.第十五章:System Classes本章的範例程式碼主要介紹了一些系統類別的用法,比如集合類.第十六章:Unit
Time of Update: 2018-12-06
在Form上如果想只添加Dimension的某一個是很很簡單的事情,只需要指定Dimension[i]就可以了,但在如果想在Runbase的dialog上動態添加Dimension上的某個元素可就不那麼簡單了.試了半天都沒辦法加上去,最後只能曲線救國,想了如下三種辦法:1.建立一個EDT,該EDT只有一個元素,跟想要添加到Dialog上的Dimension中的那個元素相對應,與Dimension建立的關係也一樣.如所示:然後重載Dialog,用如下代碼添加就可以了_dialog.addField
Time of Update: 2018-12-06
FormDataSource是串連Form和Table的對象,前端Form上要顯示的內容關聯到FormDataSource上的欄位,而FormDataSource欄位又指向Table的欄位.有時候一個FormDataSource中的一個欄位在Form上顯示多次,如果要控制在某些條件下全部顯示或者全部不顯示,通過設定control的visible有些麻煩,這時可以通過設定FormDataSource中的欄位對象FormDataObject的visible屬性來統一設定.如下代碼所示:custTab
Time of Update: 2018-12-06
在Axapta中有一個基礎類型Container,在某些場合下確實比較好用,axapta現有系統中用的也比較多,比如Runbase的pack()和unpack()方法就是用Container結合宏來實現的.container可以看作是無類型的動態增長的數組,功能基本上等效於C#中的ArrayList.只不過container不能存放對象(Table對象還是可以存的),另外container可以作為資料庫欄位類型,在資料庫中轉化成img類型,可以看出container把資料序列化了.另外由於Con
Time of Update: 2018-12-06
最近跟數組打交道必較多,期間遇到了一些問題,在這裡做一下總結.X++中的數組分為兩類:基礎類型和AFC中的Array,區別在於前者只能存放X++基礎類型(比如int,real)而不能存放class對象和Table,本文只討論前者.這裡只敘述跟C#中不同的部分:1.只支援一維數組;不支援多維陣列也沒辦法,只能說是編譯器限制.2.定義分為dynamic, fixed length, and partly on
Time of Update: 2018-12-06
Axapta提供了一些類用於操作Excel,這些類實際上是對Excel.Application這個COM對象的封裝,由於Axapta不支援Unicode,對於含有漢字的Excel檔案,可就慘了下列代碼,如果Excel中是漢字的話,只能輸出一半.void GetDataFromExcel(){ SysExcelApplication app; SysExcelWorkSheets wss; SysExcelWorkSheet ws; SysExcelWork
Time of Update: 2018-12-06
在X++中數群組類型做入口參數如下兩點需要注意:1.字串數組中字串必須是定長的.2.如果方法不是內聯的,必須定義為anytype.舉例如下:1.int類型數組,內聯方法static void InputParameterTest(Args args){ int intTest[2]; //inline method void intArrayInputParameterTest(int inputParameter[]) { print inputParam
Time of Update: 2018-12-06
項目實施的過程中,在完成企業流程的梳理後,需要針對不同的角色賦許可權類比運行。AX賦許可權著實是一件費神勞力的事,在賦完權後需要進行測試,可以用運行方式來指定程式的運行賬戶,由於許可權的設定要反覆測試,如果每次都需要輸入使用者名稱和密碼實在累人。可以用Runas程式來啟動AX並設定記住其密碼,這樣就不用每次都輸入使用者名稱和密碼了。語句如下:runas /savecred /user:user@domain.com AXClient程式這樣第一次運行時需要輸入user的密碼,第二次運行時就不需要
Time of Update: 2018-12-06
銷售訂單和採購訂單在過賬的時候,可以列印確認單,領料單,發貨單以及發票等,這些列印需要設定列印原件和副本的張數,如果不設定就會報如下錯誤:Numbers of Originals and Copies are not specified in the print management form 當然可以通過銷售或者採購訂單右邊的Setup->Print Management去設定,不過讓使用者每做一個採購或者銷售訂單都這樣去弄一下,未免有些殘忍,Axapta要是傻到這種程度那也就不用玩了,
Time of Update: 2018-12-06
最近遇到一個問題,X++繼承的時候子類是否可以改變父類方法的存取層級?記得C++子類可以降低其父類方法的存取層級,比如父類方法的存取層級是public,子類方法覆蓋後可改為protected或者private,C#是不允許更改其父類方法的存取層級的,子類和父類的存取層級必須一樣。另外C#不能覆蓋private的方法,Java在編譯期倒是不會阻止覆蓋private方法,只是在運行期不會調用。X++也不能覆蓋private的方法,如果試圖覆蓋父類的private方法,會報如下錯誤方法
Time of Update: 2018-12-06
裝了這麼多年的SQL Server,從來沒遇到過問題,都是一路Next下去就OK了,沒想到今天著實讓SQL
Time of Update: 2018-12-06
鬱悶了一天,終於解決了一個問題,再次強烈鄙視Dynamics
Time of Update: 2018-12-06
最近在做一個Wizard,需要操作AOT,用代碼建立project,Table,Form,EDT等,剛試了一下用代碼添加project,並在project中新增內容,唉,再次譴責Axapta的文檔,一些系統類別的說明居然什麼都沒有!static void CrateProjectAndAddNodes(Args _args){ TreeNode TNode; ProjectNode PNode; ; //得到project的根結點 TNode = infolog.
Time of Update: 2018-12-06
概述作為資料存放區和展示的中間對象,FormDataSource在Form中的地位舉足輕重,可以說理解了FormDataSource中的方法和事件,也就掌握了Form大部分的內容.本文試圖解釋清楚FormDataSource的主要方法和屬性.由於Dynamics
Time of Update: 2018-12-06
多態在語言的表現上就是用父類類型調用子類方法的實現,C++和C#是通過虛函數表來實現的,在具體執行個體化的時候把重載的函數地址寫到虛函數表的地址清單中,我想X++應該也是這樣實現的.問題在於如果想訪問子類特有的函數,該怎麼玩,C#中必須用強制轉化,將父類類型強制轉化成子類類型,才能調用,強行轉化的文法跟C語言一樣,(子類型)父類型.在X++中沒看到這種文法,不過可以直接賦值子類型=父類型,還可以直接賦值給object類型, object = 父類型,然後調用子類的方法.看代碼吧父類:class
Time of Update: 2018-12-06
今天在做使用者權限組的匯入匯出的時候遇到一個奇怪的問題。我想把userInfo表中的每一條記錄分別存放在一個container變數中,由於container中的元素是container,於是這樣就可以把資料庫表userInfo中的記錄原封不動地搬到Container中,由於表userInfo的欄位很多,出現了內部編譯器堆疊溢位
Time of Update: 2018-12-06
匯入資料的時候,資料如果有錯,需要寫記錄檔提醒使用者修改資料後再次匯入,Axapta提供了TextBuffer這個類用來寫txt檔案,如下代碼所示:static void TextBufferTest(Args _args){ TextBuffer tb; ; tb = new TextBuffer(); tb.insert("Hello World!!",1); tb.toFile(@"C:\TextBufferText.txt");}當然在4.0下,按照 Write