摘要:Axapta的Lookup窗体提供了一种通用的供用户选择数据的机制,用户可以很方便地实现数据的选择.比如在创建订单的时候在订单主档可很方便地选择客户,订单明细可以方便地选择物料等. 本文试图解释Lookup窗体的实现方式和原理,大多数内容是Axapta的联机帮助的重新组织,部分内容没有参考资料,属于猜测.准备知识1.控件类型Axapta中的窗体控件根据与数据源的绑定情况可以分为三种,绑定控件,非绑...
阅读全文
摘要:RunBase这个类在Axapta中有蛮大的作用,一直想写篇文章来详细描述一下这个类,但一直难得梳理不知从何说起,所谓的一言难尽,呵呵.最近在MSDN上发现了两篇文章介绍RunBase的用法,文章作者介绍的内容平时做开发的应该都耳熟能详了,RunBase的源代码也可以查看,所以倒也没什么奥秘可言,不过还是很欣赏老外写文章的风格.废话少说啦,转入正题.这个老外写这两篇文章可谓旷日持久,第一篇2005...
阅读全文
摘要:在访问外部数据库(非Axapta数据库)的时候,要用到Connection和Statement以及ResultSet三个对象,要注意的是Statement和ResultSet这个对象,如果不认真读Axapta的帮助文档,按照以前的编程习惯可能会出些麻烦.看下面这段代码: Connection con; ResultSet rs; ResultSet rsDetail; Stat...
阅读全文
摘要:有两个会计恒等式 静态恒等式:资产=负债+所有者权益 动态恒等式:利润=收入-费用 两者可以凑成一个 资产=负债+所有者权益+收入-费用 国外的软件多采用表结法,也就是说在出报表的时候根据收入和费用动态计算出本年利润,并不产生凭证,而国内的软件采用账结法,即要生成如下两张凭证: 1.结转收入 Dr:各种销售收入 Cr:本年利润 销售退回 2. 结转费用 Dr:本年利润 Cr:...
阅读全文
摘要:在以前弄Asp.Net的时候就遇到一个Excel的问题,如果用ODBC等数据库驱动去读Excel的值时,在做类型判断的时候的行为蛮奇怪,当时写了一篇blog来记录的,翻了下找不到了,大体意思还是记得的.这个时候可能会用到下面的VBScript来强行加一个"'"来处理一下."'"的作用是强行转换为文本. Private Sub Workbook_BeforeSave(ByVal SaveAsUI A...
阅读全文
摘要:接触Axapt后了解最多的是物流模块,在把物流的教程看了几遍,分析了整个模块的表结构和类结构后,开发起来倒是没什么难度,应用顾问说起哪个功能,一般都会反映出应该修改哪个类和表.对财务模块一直讳莫如如深,总觉得财务是个很麻烦的东西,其实最主要的是自己从来没接触过财务的东东,甚至连会计恒等式也是前天晚上看书才知道,呵呵.虽然前段时间修改过财务的一些东西,不过都是依应用顾问的要求照葫芦画瓢,不知道为什么...
阅读全文
摘要:导入数据的时候,数据如果有错,需要写日志文件提醒用户修改数据后再次导入,Axapta提供了TextBuffer这个类用来写txt文件,如下代码所示: static void TextBufferTest(Args _args){ TextBuffer tb; ; tb = new TextBuffer(); tb.insert("Hello World!!",1); tb.to...
阅读全文
摘要:最近在做Axapta期初数据的导入,包括物流和财务,强烈鄙视一下Axapta的期初数据导入功能。首先,没有给出什么功能应该导入到哪些表中,反正我没看到相关的文档,不可否认,Axapta开放了源代码,一切都可以从代码中看出端倪,不过要从那么多类和表中找到合适的,还真不是人干的事情。其次,系统给出的那个导入功能导入主表的数据还勉强能凑合用,导关联的子表数据就太痛苦了。前些日子试了一把B1的期初数据导入...
阅读全文
摘要:装了这么多年的SQL Server,从来没遇到过问题,都是一路Next下去就OK了,没想到今天着实让SQL Server给弄郁闷了一把,遇到两个问题:1.一开始安装就给我一个下马威,告诉我:"以前的某个程序安装已在安装计算机上创建挂起的文件操作。运行安装程序之前必须重新启动计算机."乖乖地按照它的提示做了,重新启动计算机,没想到MS耍着俺玩那,重启了依然有这个问题,后来查了一把,要在注册表里把如下...
阅读全文
摘要:Axapta通过xSysLastValue类来保存用户输入的值,这个类有getLast和saveLast等方法组成,当然最重要的是上述两个方法.Runbase为了保存用户的输入值实现了sysSaveable接口,该接口方法定义了一些方法,用于获取和保存用户输入的值。Runbase通过在方法promptPrim()方法中调用xSysLastValue的getLast和setLast来获取和保存用户的...
阅读全文
摘要:宏带给人的印象坏的远多于好的,即使没有写过程序的人也知道宏病毒,每次打开带有宏的Excel的时候都要提醒你是否要打开,打开可能会染毒的警告.从程序实现的角度讲,Axapta中的宏跟Excel中的宏没什么区别,都是一段可执行代码,或者一个变量的定义,当然打开Axapta的时候不会因为有宏的存在就提醒你要不要打开Axapta,呵呵.另外对于X++的程序员来说,宏带来的也是负面多余正面,因为宏不能精确定...
阅读全文
摘要:Axapta提供了一些类用于操作Excel,这些类实际上是对Excel.Application这个COM对象的封装,由于Axapta不支持Unicode,对于含有汉字的Excel文件,可就惨了下列代码,如果Excel中是汉字的话,只能输出一半. void GetDataFromExcel(){ SysExcelApplication app; SysExcelWorkSheet...
阅读全文
摘要:在Axapta中有一个基础类型Container,在某些场合下确实比较好用,axapta现有系统中用的也比较多,比如Runbase的pack()和unpack()方法就是用Container结合宏来实现的.container可以看作是无类型的动态增长的数组,功能基本上等效于C#中的ArrayList.只不过container不能存放对象(Table对象还是可以存的),另外container可以作为...
阅读全文
摘要:在Form上如果想只添加Dimension的某一个是很很简单的事情,只需要指定Dimension[i]就可以了,但在如果想在Runbase的dialog上动态添加Dimension上的某个元素可就不那么简单了.试了半天都没办法加上去,最后只能曲线救国,想了如下三种办法:1.新建一个EDT,该EDT只有一个元素,跟想要添加到Dialog上的Dimension中的那个元素相对应,与Dimension建...
阅读全文
摘要:在Axapta中有一些类封装了对AOT的查询操作,比如Dictionary,DictRelation,DictClass,DictType等.如果想知道某个扩展数据类型的有几个元素组成的,可以用如下代码: static void getArrarySize(Args _args){ Dictionary d; DictType dt; ; d = new Diction...
阅读全文
摘要:多态在语言的表现上就是用父类类型调用子类方法的实现,C++和C#是通过虚函数表来实现的,在具体实例化的时候把重载的函数地址写到虚函数表的地址列表中,我想X++应该也是这样实现的.问题在于如果想访问子类特有的函数,该怎么玩,C#中必须用强制转化,将父类类型强制转化成子类类型,才能调用,强行转化的语法跟C语言一样,(子类型)父类型.在X++中没看到这种语法,不过可以直接赋值子类型=父类型,还可以直接赋...
阅读全文
摘要:在X++中数组类型做入口参数如下两点需要注意:1.字符串数组中字符串必须是定长的.2.如果方法不是内联的,必须定义为anytype.举例如下:1.int类型数组,内联方法 static void InputParameterTest(Args args){ int intTest[2]; //inline method void intArrayInputParameterTes...
阅读全文
摘要:最近跟数组打交道必较多,期间遇到了一些问题,在这里做一下总结.X++中的数组分为两类:基础类型和AFC中的Array,区别在于前者只能存放X++基础类型(比如int,real)而不能存放class对象和Table,本文只讨论前者.这里只叙述跟C#中不同的部分:1.只支持一维数组;不支持多维数组也没办法,只能说是编译器限制.2.定义分为dynamic, fixed length, and partl...
阅读全文
摘要:FormDataSource是连接Form和Table的对象,前端Form上要显示的内容关联到FormDataSource上的字段,而FormDataSource字段又指向Table的字段.有时候一个FormDataSource中的一个字段在Form上显示多次,如果要控制在某些条件下全部显示或者全部不显示,通过设定control的visible有些麻烦,这时可以通过设定FormDataSource...
阅读全文
摘要:一个客户的销售订单和采购订单要求工作流审核才能发货或收货,要求跟OA系统的工作流整合,在Axapta中启动流程,在工作流中签核,签核完毕后再回写Axapta相应单据的信息.今天弄了一下,由于OA是用VB+ASP写的,所以在启动流程的时候需要调用COM,Axapta提供了COM这个类来调用COM,实现起来倒挺容易的,不过在传递数组参数的时候遇到了些麻烦.工作流的COM提供的启动流程的方法是用字符串数...
阅读全文