AX开发拾荒

在学习AX开发时,会有很多小问题,但是做为一个新人这些问题看起来的确让人毫无头绪,这里将一些比较零散细小的知识点整理一下,一来防止时间长了以后遗忘,二来也可以让大家参考。

1)TTS ERROR

2)清理ax cach

3)表变量的引用传递和值传递

4)将form上的光标设置为沙漏

5)report的横向或纵向打印控制

6)获取当前日期、时间

7)获取当前用户名

8)获取当前sessionId

9)判断当前代码是否运行在服务器端

10)开始运行较长时间的处理时设置鼠标状态为忙

11)获取当前类的ID

12)当前用户是否对某一个表有某种访问权限

13)@

14)Recid用尽怎么办

15)获取OS版本

16)date on AOS or Client

17)ReSearch, Refresh, Reread

 

1)TTS error

 如下图的tts错误,由于ttsbegin没有对应的ttscommit,会出现这样的问题,然后你发现自己没办法保存相应的表。这时候可以写一个Job, 执行ttscommit或ttsabort就可以了。

 

2)清理ax cach

有时候一些东西会驻留在cach里,会有一些莫名的错误,代码和数据怎么检查都是对的,这个时候就该清空一下cach了,在ax的Tools->Options->(tab)Preload->(Button)UsageData->(button)Reset,就可以清空cach了。

 

3)表变量的引用传递和值传递

当使用 common = common1类似的方式赋值时,是在做引用传递。

当使用 common.data(common1)的方式赋值时,是在做值传递。

 

4)将Form上的光标设置为沙漏

如果需要在form上除了耗时较长的操作,可以在操作开始时将光标设为沙漏,在操作结束后再修改回原来状态。

在form上直接调用:infoLog.startLengthyOperation()可以将光标设置为沙漏;

调用:InfoLog.endLengthyOperation()可以将光标设置回正常状态。

5) report的横向、纵向打印控制

在report的design下可以设置打印方向,有三个选项:Auto,Portrait,Landscape. 在这里设置好以后,可以直接控制打印方向。

但是,如果你想使用代码来控制打印方向,比如更加条件决定打印方向是,你必须将design的这个选项设置为AUTO,FitToPage属性设置为YES,然后在初始中调用element.desing().orientation(int), 其中Int用于标识要打印的方向,0代表auto,1代表Portrait,2代表landscape。

 6) 获取当前时间、日期

所以于当前时间、日期等相关的信息都可以通过DateTimeUtil类来查询

7)当前用户名

当前用户名可以使用curuserid()来获取。

8)获取当前SessionId

int sessionId = new xSession().sessionId();

9)判断当前代码是否运行在服务器端

isRunningOnServer() 

10)开始运行较长时间的处理时设置鼠标状态为忙

startLengthyOperation()

11)获取当前类的ID

classidget(this);

12)当前用户是否对某一个表有某种访问权限

isTableUserEnabled(tableId tableId, AccessType accessType = AccessType::Edit);

13)@

WinAPI::fileSize(@"filename");

@的作用是让AX可以以WINDOW的方式读取后面的文件路径,如c:/temp/123.txt

如果没有加@的话,后面的路径是要写成c://temp//123.txt

14)Recid用尽怎么办

可Run ->Classes/SysRecIdRepair,该类会重新释放及分配RECID。但如果有定制的RECID关联,则需要注意。

15)获取OS版本

WINAPI::getOSVersion()

16)date on AOS or Client

如果AX2009的话可以用 DateTimeUtil::utcNow()获取当前AOS上的utcDateTime,然后转换为date。

如果是其他版本,可以自己写一个类,加一个静态方法,让该静态方法运行在服务器端:

public server static date curDate()

{

    return today();

}

systemDateGet()方法是先读取Session中的日期,如果session没有被初始化,则读取当前系统日期(指代码所运行的机器)。

而today读取当前系统日期(代码所运行的机器)

在上边的例子中由于让代码跑在了服务器端,也即AOS上,所以可以读取到你想要的日期。

17)ReSearch, Refresh, Reread

ReSearch():在保留当前的条件下,包括过滤条件、排序等,从数据库中重新刷新数据源的数据;若要改变查询条件或者排序条件,我们应该使用executeQuery而不是ReSearch();

Refresh(): 重新从数据源中读取当条记录。

Reread():重新从数据库中读取当条记录。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值