Ax2012 Client的form如果属性FormTemplate设置为DetailsPage或者ListPage,则必须同时设置属性InteractionClass为相应的Interaction类,比如采购订单详细信息窗口PurchForm的InteractionClass被指定为PurchTableInteraction,它的作用是对用户在form中所做的操作面板标签切换、记录选择等做出响应,以更新操作面板中控件的状态。

Details或者List风格的Form,通常是包含一个或者多个ActionPane的,Interaction类从PageInteraction派生,其中最重要的一个方法就是tabchanged方法,在扩展类中我们重载这个方法,form中切换ActionPane的Tab时,系统会通过类InteractionService的callTabChanged方法调用重载的tabchanged方法,下面是PurchTableInteraction的tabchanged方法:

public void tabChanged(container _activeTabNames)
{
Array tabNameArray = new Array(Types::String);
int i; super(_activeTabNames); for (i=;i<=conLen(_activeTabNames);i++)
{
tabNameArray.value(i,conPeek(_activeTabNames,i));
} this.init();
if (purchTable)
{//Tab changed is called on form open before selection changed.
this.enableHeaderActions(tabNameArray);
this.enableHeaderActionsFromLine();
}
}

它根据当前选择的采购单记录和采购行更新当前激活的ActionPane tab的控件的使能状态,当前激活的ActionPane Tab的名称从参数_activeTabNames传入,要获取当前form数据源的记录我们可以通过Page对象来获取:

    page                    = this.page();

    purchLine               = page.activeRecord(identifierStr(PurchLine));
purchTable = page.activeRecord(identifierStr(PurchTable));
inventDim = page.activeRecord(identifierStr(InventDim));

除了tabchanged方法对ActionPane Tab切换作出响应,我们还需要对用户选择了不同的数据行时更新按钮状态,这种情况我们需要用到FormDataSourceInteractionAttribute特性来标记相应的Interaction类响应方法,它的用法是这样的:

[FormDataSourceInteractionAttribute('PurchLine', 'selectionChanged')]
public void purchLine_DS_selectionChanged()
{
this.init(); this.enableLineActions();
}

这里把方法purchLine_DS_selectionChanged和form的PurchLine数据源联系起来,在Purchase order窗口中如果选择的采购订单行发生了变化,系统会自动通过系统类InteractionService的callEventHandler方法调用purchLine_DS_selectionChanged,这样我们就可以根据选择的记录行更新操作按钮状态,它不带任何的参数,但是我们仍然可以通过“this.page().activeActionPaneTabNames()”来获取当前激活的ActionPane 标签名称。

Page对象也提供了actionPaneControlEnabled和actionPaneControlVisible两个方法来分别使能/禁止和显示/隐藏ActionPane中的控件,用法是这样的:

this.page().actionPaneControlEnabled(formControlStr(PurchTable, buttonPurchCancel), purchTableInteractionHelper.parmbuttonPurchCancelEnabled());

this.page().actionPaneControlVisible(formControlStr(PurchTable, buttonUpdateFacture_RU), purchTableInteractionHelper.parmenableInvoiceButton());

使用Interaction类的好处是将Form UI的更新从窗口中剥离出来单独处理,使得代码更清晰,否则我们必须把更新按钮状态的代码嵌入到表单中,复杂的Form本身代码就很多,就会使得情况更加复杂,不幸的是MSDN上只有很少的关于Interaction class的内容,可能是太简单了不值一提。

[AX]AX2012 Interaction class的更多相关文章

  1. [AX]AX2012 Number sequence framework :(三)再谈Number sequence

    AX2012的number sequence framework中引入了两个Scope和segment两个概念,它们的具体作用从下面序列的例子说起. 法国/中国的法律要求财务凭证的Journal nu ...

  2. [AX]AX2012 R2 HR Jobs, Positions, Department和Workers

    部门.作业(Job的官方翻译)和位置(Position的官方翻译)是AX人力资源管理的基本组织元素,Job和Position在AX有的地方又称作工作和职位,其实这个翻译更为恰当. Job定义的是一个工 ...

  3. [AX]AX2012 R2 采购订单的“Request change”

    在采购订单List或者Detail窗口的操作面板上有一个叫做“Request change”的按钮,如果这个按钮是激活的,采购订单不能直接编辑,而必须先使用这个按钮请求修改后,采购订单才能进入编辑状态 ...

  4. [AX]AX2012 R2 出差申请和支出报告

    AX2012中有个模块叫做出差和支出,用于管理出差以及相关的费用,用户只能在员工自助服务EP站点上提交出差申请.费用报销报告,在Client程序中做审核以及后续的支付动作等,最后形成相关的财务分录. ...

  5. [AX]AX2012 R2 EP员工自助服务中的产品不能显示图片的问题

    在员工自助服务EP站点中员工可以通过Order products自助提交采购申请,在正确设置员工采购目录后会罗列出允许员工购买的产品,每个产品都可带有图片,我们可以通过Product image来为产 ...

  6. AX2012导Demo数据

    看到这篇文章后http://www.cnblogs.com/duanshuiliu/archive/2012/07/18/2597645.html,为了大家的方便就分享下 关于AX2012的导Demo ...

  7. Consuming a Web Service in AX 2012

    Consuming a Web Service in AX 2012 在AX2012版本中如果想调用外部的Web Service变得非常容易. 第一步,在VS中创建一个Web Service并发布 第 ...

  8. [AX2012 R3]在SSRS报表中使用QR二维码

    AX2012是自带生成QR二维码的类,可以很方便的用在SSRS报表中,下面演示如何在RDP的报表中使用二维码,首先从定义临时表开始: 字段URL是要用于二维码的字符串,QrCode是container ...

  9. [AX2012 R3]关于Alerts

    AX2012提供两种类型的Alert,Change-based alert和Due-date-based alert,前者用于在对新建记录.删除记录.记录的某个指定字段被改变的时候发出提醒,后者则是用 ...

随机推荐

  1. CENTOS6.5安装CDH5.12.1(一) https://mp.weixin.qq.com/s/AP_m0QqKgzEUfjf0PQCX-w

    CENTOS6.5安装CDH5.12.1(一) 原创: Fayson Hadoop实操 2017-09-13 温馨提示:要看高清无码套图,请使用手机打开并单击图片放大查看. 1.概述   本文档主要描 ...

  2. Gojs简单例子

    前台代码: <!DOCTYPE html> <html xmlns:th="http://www.thymeleaf.org"> <head> ...

  3. PCL 可视化

    可视化(visualization)是利用计算机图形学和图像处理技术,将数据转换图像在屏幕上显示出来,并进行交互处理的的理论,方法和技术, pcl_visualization库建立了能够快速建立原型的 ...

  4. springmvc搭建环境时报No mapping found for HTTP request with URI [/exam3/welcome] in DispatcherServlet with name 'spring2'

    项目是使用spring MVC (1)在浏览器中访问,后台总报错: No mapping found for HTTP request with URI [/exam3/welcome] in Dis ...

  5. 数组新增,修改json数据

    1.向数组中添加json数据 var arr=[]; var json = {"name":"apple","color":"re ...

  6. Servlet、Filter、Listener总结

    servlet规范提供了一组标准的servlet api.servlet容器就是servlet规范的实现. 1.In Action (1)写一个类继承HttpServlet: (2)重写其中的方法. ...

  7. 开始一段新的敏捷学习之旅 —— IT帮读书会第4期《Scrum实战》

    刚看了一下,距离上一次写博客过去快1年半了.之前的知识管理都放到笔记软件中了,但是现在看来,收藏了很多东西,输入很多,但是输出有限. 学习任何领域的知识,如果只有输入没有输出,效果都是很有限的,有时需 ...

  8. 安卓程序代写 网上程序代写[原]自定义View

    一. 自定义View介绍 自定义View时, 继承View基类, 并实现其中的一些方法. (1) ~ (2) 方法与构造相关 (3) ~ (5) 方法与组件大小位置相关 (6) ~ (9) 方法与触摸 ...

  9. Python 类的初见

    #定义一个Python类 class Cat: #self关键字相当于c++类中的this指针 def eat(self): print("i am eating .") def ...

  10. IntelliJ IDEA 13.1.3 SVN无法正常使用问题

    http://my.oschina.net/luckyi/blog/291007 最新升级IDEA12到13版本,升级后发现IDEA中SVN无法正常使用,但文件夹下能够正常使用. 并且报错:svn: ...