摘要:
Map的使用 这里的Map指的是AOT->Data Dictionary->Maps里的map.干吗要弄个Map出来??因为Table不能继承.如果两个表的内容的逻辑基本上是一样的,有必要分别写一套方法吗?显然没必要,这时需要Map,Map说白了就是在一些表中共享的方法库.那么怎么玩那?如何调用某个map中的方法?Common.map::Method();Common是某个表变量,Map是某个map的名称,Method是map中的某个方法.axapta中有很多map使用的例子,比如SalesLine的calcLineDiscExclTax方法就用了map SalesPurchLin 阅读全文
posted @ 2012-04-10 10:17
K小子
阅读(248)
评论(0)
推荐(0)
摘要:
在Axapta中实现split函数在Axapta中没有找到类似于C#中的split函数,在SQL Server中也没有类似的函数,当初写SQL函数的时候用了SQL Server中的系统函数charindex和substr来实现这样的功能,于是首先想到了用函数strFind和subStr来实现split函数.下列代码可以分解一个字符串并打印: static void split(Args _args) { int position; str srcStr; ; srcStr = "AA,BB,CC,"; while(true) { position = strFind(s.. 阅读全文
posted @ 2012-04-10 10:15
K小子
阅读(201)
评论(0)
推荐(0)
摘要:
Axapta中的保留字看到一份微软的文档,介绍了Axapta中的保留字,把Axapta中特有的一些保留字和摘录如下:anytype:说明:该类型的方法可以返回任意类型的数据.举例: anytype Method1(Args a) { // Commands Return xyz; }at说明:跟保留字Window结合使用,可以指定输出窗体在Axapta主窗体的相对位置.举例:static void Job4(Args _args) { CustTable ct; window 80,30 at 5,3; while select name from ct { print... 阅读全文
posted @ 2012-04-10 10:13
K小子
阅读(268)
评论(0)
推荐(0)
摘要:
pack/unpack runbase Framwork用pack和unpack来保存用户上次操作的值,用户上次操作的值会存在SysLastValue表中,这个功能确实蛮酷,不过今天差点被这个东西给整死,在我机子运行上的好好的代码,弄到客户那边去死活run不起来,Application和DataBase都是一样的,认真地跟踪了一遍代码才知道,原来是由于我开发的机子是两层的,客户的环境是三层造成的,太大意了......两层代码都运行在一个进程中,没有进程间通讯的问题,pack/unpack执行情况:从数据库里取出上次的数据->调用unpack,并用取得的值初始化Dialog,用户看到上次操 阅读全文
posted @ 2012-04-10 10:11
K小子
阅读(883)
评论(0)
推荐(0)
摘要:
Agrs Class这个类在很多代码中出现,在启动报表的时候也需要用到它.简单来说这个类用于共享构造参数.在Axapta中之所以可以用Args的方式,是因为:1.通常参数的数目比较少.2.用的参数类型很类似.3.有时候构造一个主要的对象,需要构造与之相关的对象,在构造这些对象时需要用到相同的构造参数.在传统的OO世界里,一个对象往往有多个重载的构造函数,通常情况下这没什么问题,但当一个主要的对象需要通过特定构造器去构造相关的对象时,事情变得糟糕起来.有时候需要通过逻辑判定到底该构造哪个构造函数,并且要在很多层之间传递这些信息.事实证明在Axapta中,很多报表,窗体,Action类的构造参数都 阅读全文
posted @ 2012-04-10 10:09
K小子
阅读(174)
评论(0)
推荐(0)
摘要:
QueryBuildRange中的表达式在QueryBuildRange中很容易可以实现这样的功能:查询不同客户编号的客户,比如查询编号为A00001或者A00002的客户。如下代码所示: static void GeneralQueryBuild() { Query q; QueryRun qr; CustTable cust; str queryCriterion; ; q = new Query(); queryCriterion = 'A000001,A000002'; q.addDataSource(tableNum(custtable)).addRange(... 阅读全文
posted @ 2012-04-10 10:08
K小子
阅读(192)
评论(0)
推荐(0)
摘要:
X++中的字符串操作函数 每个语言中都会有很方便的操作字符串的函数库,可惜在X++的教程中没有看到这个函数库的列表,下面的函数是在看源代码的过程中发现的,汇集如下:1.strlen(str text)作用:获取字符串的长度参数:text,待获取长度的字符串返回值:字符串的长度 static void strlenExample(Args _args) { str source; int i ; ; source = "Axapta"; i = strlen(source); print i; pause; }2.strfind(str source,str toFindC. 阅读全文
posted @ 2012-04-10 10:06
K小子
阅读(1107)
评论(0)
推荐(0)
摘要:
QueryBuildRange的空值 在用QueryBuildRange的value属性时,如果value的值是‘’,则查询会忽略该Range,好像没有这个Range一样,比如如下语句:static void EmptyTest() { Query q; QueryRun qr; CustTable cust; ; q = new Query(); q.addDataSource(tableNum(custtable)).addRange(fieldnum(custtable,accountnum)).value(''); qr = new QueryRun(q); while 阅读全文
posted @ 2012-04-10 10:05
K小子
阅读(166)
评论(0)
推荐(0)
摘要:
临时表方法:table.setTmp() 将一个表作为临时表使用tmpTable.Data() 一般配合 doinsert()使用,从参数表中Copy一行记录后插入到临时表.tmpTable.SetTmpData(Common cursor) 设置tmpTable中的内容到cursor中 临时表在报表中:将临时表传递给报表做数据源调用SetRecord()方法:this.queryRun().setRecord(tmpTableClass); 临时表在窗体中:在窗体数据源init()方法中写:DataSource1.SetTmpTable(tmpTable); 将临时表作为窗体的数... 阅读全文
posted @ 2012-04-10 10:03
K小子
阅读(323)
评论(0)
推荐(0)
摘要:
使用自定义窗体做为Lookup窗体,其实非常简单:关键地方有两处:CloseSelect方法this.performFormLookup(formRun); 步骤:新建一个窗体作为lookup窗体,将Frame设为Border;添加一个数据源,这个数据源即是lookup内容;覆盖窗体方法CloseSelect写上: (此处我们将Unit表作为Lookup内容) super(unit.unitid); //将unitid用作返回给lookup的值Lookup窗体已完成之后就是在其它Form中调用它:下面贴出窗体中某StringEdit控件的Lookup方法public void lookup() 阅读全文
posted @ 2012-04-10 10:01
K小子
阅读(190)
评论(0)
推荐(0)

浙公网安备 33010602011771号