摘要:
经常要用代码创建采购和销售订单,需要弄清楚哪些字段是必输的,这段代码经常需要拷贝,放在这里做个备份。staticvoidCreatePurchDirectly(Args_args){PurchTablepurchTable;PurchLinepurchLine;InventDiminventDim;;ttsbegin;//PurchTable//PurchIdpurchTable.PurchId=NumberSeq::newGetNum(PurchParameters::numRefPurchId()).num(); purchTble.PurchaseType = PurchaseType: 阅读全文
摘要:
本文描述库存模块中最重要的两个类InventMovement和InventUpdate,当然这两个类还有相应的子类.毋庸置疑,AX中库存模块至关重要,我的理解是与财务模块并列两大基础模块,其他模块都依赖于这两个模块,当然从独立性的角度来看,库存模块也依赖于财务模块,因为库存的变动要在财务上有所体现,其他模块只要涉及到库存的变动都由库存模块去实现,具体的实现就是由InventMovement和InventUpdate去做的.一.类设计首先按照我的理解分析一下AX为什么要用InventMovement和InventUpdate两个类来做处理库存的变动.先来看一下InventMovement和Inv 阅读全文
摘要:
上一篇说了资金流,这一篇就扯一下信息流,在软件设计的时候信息流可能有很多想法,每个人对信息流的理解也不一样,所以也没有统一的标准。我这里所分成的信息流,现金流和物流仅仅是为了分析销售开票这个过程,人为地按照我自己的理解把代码分割了一下,便于整理,如此而已。我这里提到的信息流是指在销售开票的过程中用哪些表和代码记录了与客户相关的信息。企业折腾的过程最终是为了赚钱,所以最后总会落脚到Money,也就是上文提到的那些财务凭证。在从物料转化成Money的过程中,需要记录一系列的信息,要不然将来客户说凭啥给你钱?当然这只是一方面了,还有很多情况,比如一个销售订单可能要多次发货和开票,需要记录每次开票的信 阅读全文
摘要:
一直在想怎么才能更清晰地描述一个过程的代码,如果采用类似时序图的方式描述,看到的只是这个方法调用了另一个方法,然后一次调用下去,这样写了感觉用处不大,下次要做客制化还是要重新去跟踪一遍,没有起到梳理代码的目的。细细想想,不管代码怎么编排,它的目的都是要实现业务的需求,而代码用各种模式去设计,无非也就是为了便于修改,更加有效地从数据库里读取和写入数据。于是可以把整个过程分解为三个阶段,就像把大象关到冰箱里拢共分几步一样。前段是业务,后端是表结构,中间是代码。变化最大的是中间的代码,如果一头钻进代码里,后果很有可能是云深不知处。于是我想可能更好的分析代码方式是抓住两头,梳理中间。首先要搞清楚这段代 阅读全文
摘要:
Reporting Services for Microsoft Dynamics 2009 Enterprise Portal – Part 3 Designing a Basic ReportIn this post I’ll discuss, creation of a simple Customer Report, as and when it is time to introduce new concepts I will add more to this report.Creating a Reporting Project1) Open Visual Studio2) Click 阅读全文
摘要:
响应键盘事件为了响应键盘事件,AX增加了一个系统方法task,在用户点击某些键时会调用Form的task方法,如果想对这些键实现自己的响应,可以重载task方法,在其中判断当前的_taskId为哪个值,再写自己的响应code.比如用户选中ALT时,如下代码所示:publicinttask(int_taskId){intret;#Taskif(_taskId==#taskAlt)info("Iam'Alt'");returntrue;}由于Task方法的调用是由平台实现的,没找到它实现的代码,并不是所有的按键都会调用task方法,只有在宏Macro->T 阅读全文
摘要:
AX通过菜单可以多次打开同一个窗体,有些客户想同一个窗体只打开一次,如果第二次点击就把原来已经窗体显示在最上面。AX提供了一些API用来做这事,并且有合适的入口用来增加一些处理代码。1.修改类工厂ClassFactory的FormRunClass方法FormRunformRunClass(Argsargs){#FormCacheMarkHwndhwnd;;if(infolog.globalCache().isSet(#FormCacheMark,args.name())){hwnd=infolog.globalCache().get(#FormCacheMark,args.name());Wi 阅读全文