摘要:AX有个问题是很多功能都跟表现层窗体绑定在一起,要用代码直接实现某个功能就需要看窗体中的代码是如何处理的并将其剥离出来。 比如领料和登记功能,它都封装到了窗体InventTransPick和InventTransRegister中,虽然也是通过类InventTransWMS,InventTransWMS_Pick和InventTransWMS_Register实现相应的功能,但如果要通过代码直接实...
阅读全文
摘要:AX采用库存维度检查,在库存的各个环节都会检查库存维度,我们知道check的任务大部分都交给了InventMovent系列的类去完成了。 库存维度检查主要有两个层面的任务: 1.用户指定的维度在相关主表中是否存在; 比如InventSize,InventColor,InventBatch,WMSLocation中是否存在相应的记录。 2.不允许为空的维度用户是否已经指定。 比如如果库房维度处在激活...
阅读全文
摘要:开发了大半,遇到这样一个需求: 1.自己创建的表,要加上公司的简称做为前缀; 2.自己创建的表的字段不需要添加公司的简称做为前缀; 3.在系统原有的表上添加的字段要添加公司的简称做为前缀。 创建的表太多了,一个个修改是重体力活,于是写了个Job来完成,在这里记录一下: static void ModifyTableAndFieldNameOfSomeProject(Args _args) { ...
阅读全文
摘要:新创建一个类TestClass,用代码修改其类名为NewTestClass: static void ChangeClassName(Args _args) { #AOT TreeNode treeNode = TreeNode::findNode(#ClassesPath+'\\TestClass'); ; treeNode.AOTsetProperty("...
阅读全文
摘要:这两天折腾在Windows2008装AX2009,MOSS2007,Project Server 2007,打了N个补丁后终于全部装上了,角色中心,EP,WorkFlow也配好了,可AX2009的速度无比慢,点类边上的+都要半天才能列举出方法列表,或许是我可怜的HP本本配置太低,运行这个虚拟机太费力。。。但AX4.0+Windows2003在虚拟机上运行,消耗的资源差不多,运行得蛮好。搞不清楚是A...
阅读全文
摘要:经常要用代码创建采购和销售订单,需要弄清楚哪些字段是必输的,这段代码经常需要拷贝,放在这里做个备份。 static void CreatePurchDirectly(Args _args) { PurchTable purchTable; PurchLine purchLine; InventDim inventDim; ; ttsbegin; ...
阅读全文
摘要:JachE 提到在Query中对枚举类型DocumentStatus字段的值进行限定的问题,由于QueryBuildRange的value只能是str类型的,所以需要用Enum2Str(DocumentStatus::None)进行转换,但我试了一下这个方法好像有问题: static void Enum2StrTest(Args _args) { Query ...
阅读全文
摘要:用代码创建表的代码,在这里记录一下: static void CreateNewTable(Args _args) { #AOT TreeNode treeNode = TreeNode::findNode(#TablesPath); DictType dictType; TreeNode ...
阅读全文
摘要:感谢网友Jache在我的blog上提出一个问题: AX has 16 layers, we have over-layering problems just like the code in syp will cover sys. I want to wrote a tool to solve this problem. But now I don't know how can I get all...
阅读全文
摘要:本文描述库存模块中最重要的两个类InventMovement和InventUpdate,当然这两个类还有相应的子类. 毋庸置疑,AX中库存模块至关重要,我的理解是与财务模块并列两大基础模块,其他模块都依赖于这两个模块,当然从独立性的角度来看,库存模块也依赖于财务模块,因为库存的变动要在财务上有所体现,其他模块只要涉及到库存的变动都由库存模块去实现,具体的实现就是由InventMovement和In...
阅读全文
摘要:要想做好AX的二次开发,除了要熟练掌握X++的语法和一些系统类的用法外,还有两个必要条件: 1.精通AX的现有功能 只有熟练应用AX的现有功能才能在应用顾问提出开发需求时,准确地评估开发的合理性,并针对AX系统提出自己开发的想法,想做好开发就一定要比应用顾问更加熟练地使用系统. 可能觉得这种观点有些荒谬,其实这是最基本的要求.如果连系统都不会用,又怎么保证开发的东西符合AX的Style?又怎么评估...
阅读全文
摘要:直接看代码吧: static void OuterJoinWhere(Args _args) { WMSStoreArea wmsStoreArea; WMSLocation wmsLocation; ; while select * from wmsStoreArea outer join wmsLocation ...
阅读全文
摘要:说到开发,首先想到的是对语言语法细节的熟悉,对面向对象的理解.对于AX的二次开发,这些当然也比较重要,但相对来说更加重要的是对系统已有的几千张表和几千个类的熟悉.决定二次开发速度的主要因素也是对这些表和类的理解,因为系统中有大量的功能已经封装成了比较好的类可以调用,比如获取库存的现有量想到InventOnhand可以使用,想获取此前某一天的库存量可以用InventSumDate,销售订单和采购订单...
阅读全文
摘要:记得很久以前看过Brooks的>,其中有一篇描述软件开发模式的,具体内容不记得了,只记得他描述了一个外科手术模式的开发团队,在一个软件开发团队中应该有一个经验丰富的人起主导作用,相当于外科手术的主刀医生,当然还有一些角色是负责写文档,提供技术支持的,这些角色类似于副主刀医生或者护士之类. 这几天一直在想,实施AX是不是也用这样一种模式会好一些,现在大多数实施AX的团队都是每个模块派一个顾问,所以...
阅读全文
摘要:有时候需要锁定某个库位不允许其出库或者入库,可以通过 库存管理->设置->库存细分->位置->其他->锁定->输入已锁定或者输出已锁定来设置. 在InventMovent的checkLocationBlocking方法中可以看到它的逻辑: boolean checkLocationBlocking(InventDim inventDimLocation = null) { boolea...
阅读全文
摘要:实施AX项目笼共分几步? 1.理顺企业流程; 2.找Gap; 3.填Gap; 4.录数据测参数; 5.试运行流程. 我觉得基本上就这几大步,其中的第4步,录数据,又分为几个部分的数据: 1.基本数据 这些数据包括用户,货币,计量单位,各种组(比如客户组)等,这些数据不会很多一般通过手工录入就可以了. 2.主数据 这些数据包括会计科目表,客户,供应商,物料等,这些数据都是主数据,都只涉及到一张表,通...
阅读全文
摘要:>确实是一本不可多得的好书,虽然有些问题也没有太深入的介绍,不过比起Develop Guide过瘾多了,并且成一体系,是为数不多的值得看N遍以上的书. 前些日子一直有想翻译一下这本书的冲动,也在blog中翻译了两章,但总是被项目搞得焦头烂额,并且总体感觉这本书要想翻译得"信,达,雅"基本上是不太可能的,因为这本书太多只可意会而不可言传的表述,看英文反而更顺一些. 看到很多朋友想看这本书,在这里提供...
阅读全文
摘要:为了响应键盘事件,AX增加了一个系统方法task,在用户点击某些键时会调用Form的task方法,如果想对这些键实现自己的响应,可以重载task方法,在其中判断当前的_taskId为哪个值,再写自己的响应code.比如用户选中ALT时,如下代码所示: public int task(int _taskId) { int ret; #Task if( _taskId...
阅读全文
摘要:在X++中调用.NET的Assembly写文件的代码如下: static void WriteFile(Args _args) { System.IO.FileMode fileMode; System.IO.FileStream fs; System.IO.StreamWriter sw; ; try { ...
阅读全文
摘要:列举出某个目录下所有的文件,C#代码如下: using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.IO; namespace CLRIntegration { class Program { static void Ma...
阅读全文