摘要: cacheAddMethod方法display方法会带来效率上的损失,因为每当界面刷新时都会调用display方法,在Inside Dynamics AX在性能(一)这一节介绍了用cacheAddMethod提升性能的做法.FormDataSource的cacheAddMethod可以将display的返回值打包发送到客户端,只有在调用FormDataSource的reread,create和write方法的时候刷新缓存的值.使用这个方法的时候要注意以下两点:1.cacheAddMethod只能缓存定义在表的方法结点上的display方法;2.cacheAddMethod要在FormDataS 阅读全文
posted @ 2012-04-10 11:43 K小子 阅读(276) 评论(0) 推荐(1)
摘要: 给多个表的Dimension字段赋初值[需求]最近遇到这样一个需求,在实施的时候把系统现有的三个纬度前两个分别用于记录分公司和部门,在做财务凭证或者销售采购订单的时候,需要给这些表相应的Dimension字段的前两个纬度赋值,用户要求根据当前用户所属的分公司和部门直接赋值,而不想自己去选择。[分析]最直观的想法就是修改各个表的InitValue()方法,给相应的表赋初值,不过这样的工作量有些大,要修改多个表,并且当需要赋初值的表增加时还需要继续修改相应的表。AX中用Map实现表方法的共享,于是考虑用Map来实现这个功能。只有Map还是不行的因为InitValue()这个方法还是在各个表上的,好 阅读全文
posted @ 2012-04-10 11:41 K小子 阅读(203) 评论(0) 推荐(0)
摘要: 添加图片系统提供了用文档处理为系统中记录添加文档,这样每条记录可以附加一份说明文档,这个功能用起来比较方便,可是有时候遇到的用户比较不够勤劳,他于是希望不点那个工具栏上的图标,直接就可以看到一些东西,比如产品的图片说明。这个时候就需要添加图片。系统是通过window控件来添加图片的,我们有几种方式可以为Widow控件来指定数据来源。 1.直接指定ImageName或者ImageResource属性,其中ImageName只能指定一个物理路径上的文件,ImageResource只能指定AOT上Resource某个节点的ID,其中第一个属性缺乏灵活性,第二个还真没找到办法得到Resources节点 阅读全文
posted @ 2012-04-10 11:39 K小子 阅读(872) 评论(0) 推荐(0)
摘要: 设定Grid行的颜色 有时候需要根据某些单据的值设定不同的颜色,AX中FormDataSource的displayOption方法可是实现这个需求,只要重载一下这个方法即可。 public void displayOption(Common _record, FormRowDisplayOption _options) { SalesTable localSalesTable; ; localSalesTable = _record; _options.fontBold(true); if(localSalesTable.CustAccount == '4000')... 阅读全文
posted @ 2012-04-10 11:38 K小子 阅读(1197) 评论(0) 推荐(0)
摘要: Lookup窗体返回多个值 今天在MBSCN上看到有网友提到一个蛮好的问题,如何用Lookup窗体返回多个值。默认的情况下,AX的Lookup窗体只能返回一个值,赋值给调用Lookup的控件,那么如何返回多个值那?这种情况还是蛮常见的,比如从客户表中选择数据,Lookup窗体中可以显示多个值,比如客户编码,客户名称,客户地址等,如果每次只返回一个值赋值给客户编码,显然不太好,因为用户可能还要同时看到客户名称和客户地址的值。正如那位网友提到的,这个问题要分成两种类型来解决:1.通过调用SysLookupTable类构造的Lookup窗体2.通过直接调用Lookup Form(比如CustTabl 阅读全文
posted @ 2012-04-10 11:37 K小子 阅读(468) 评论(0) 推荐(0)
摘要: Lookup窗体简介 Axapta的Lookup窗体提供了一种通用的供用户选择数据的机制,用户可以很方便地实现数据的选择.比如在创建订单的时候在订单主档可很方便地选择客户,订单明细可以方便地选择物料等. 本文试图解释Lookup窗体的实现方式和原理,大多数内容是Axapta的联机帮助的重新组织,部分内容没有参考资料,属于猜测.准备知识1.控件类型Axapta中的窗体控件根据与数据源的绑定情况可以分为三种,绑定控件,非绑定控件和计算控件.所谓绑定控件是指该控件的DataSource属性指定了某个具体的DataSource,DataField指定了DataSource中的某个字段.非绑定则没有指定 阅读全文
posted @ 2012-04-10 11:36 K小子 阅读(408) 评论(0) 推荐(0)
摘要: 写日志文件 导入数据的时候,数据如果有错,需要写日志文件提醒用户修改数据后再次导入,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 Secure X++ Code中的介绍,由于TextBuffer被 阅读全文
posted @ 2012-04-10 11:33 K小子 阅读(146) 评论(0) 推荐(0)
摘要: 宏的使用 宏带给人的印象坏的远多于好的,即使没有写过程序的人也知道宏病毒,每次打开带有宏的Excel的时候都要提醒你是否要打开,打开可能会染毒的警告.从程序实现的角度讲,Axapta中的宏跟Excel中的宏没什么区别,都是一段可执行代码,或者一个变量的定义,当然打开Axapta的时候不会因为有宏的存在就提醒你要不要打开Axapta,呵呵.另外对于X++的程序员来说,宏带来的也是负面多余正面,因为宏不能精确定义出错的行,写起代码来确实很不方便.但是一个事物存在总有它的道理,所谓存在即合理.宏有什么好处那?我的理解是宏提供了一个集中管理代码的方式,这不正是所谓的OO要达到的封装变化的目的吗?不能用 阅读全文
posted @ 2012-04-10 11:32 K小子 阅读(209) 评论(0) 推荐(0)
摘要: 利用表之间的关系创建Query 我们经常需要根据表之间的关系用代码创建query,SysQuery这个类提供了一个方法queryFromTableRelation,当然这个方法的代码跟我们平常根据表之间的关系构造query的过程是完全一样的,不过它做成了通用的方法,直接调用它就不用自己每次都重复劳动了,另外SysQuery里还有几个不错的方法,值得看一下source.public static Query queryFromTableRelation(Common _parentTable, TableId _relationTableId, boolean _update = false, 阅读全文
posted @ 2012-04-10 10:21 K小子 阅读(244) 评论(0) 推荐(0)
摘要: QueryRun的Reset()方法解释 今天写代码的时候遇到一个问题,在一个过程中用户需要多次输入查询条件,这样同一个QueryRun对象qr需要用到多次,但在第一次prompt后,后面的qr.Next()死活都不执行查询,qr的结果也就不会更新了,翻阅QueryRun的帮助文档,想找到个方法用一下,QueryRun所有的方法中reset方法比较接近俺的想像,鼠标点了下去,鼻子差点气歪,这个函数的解释空空如也,服了.不过试了一下,结果正如自己想像的那样,代码如下: static void qrTest(Args _args) { QueryRun qr; Query q... 阅读全文
posted @ 2012-04-10 10:19 K小子 阅读(184) 评论(0) 推荐(0)