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. 多线程三:Task

    Task是.NET 3.0中推出的,是基于ThreadPool封装的,里面的线程都是来自于ThreadPool. 1.使用Run()方法启动线程 F12查看Run()方法的定义: 发现Run()方法的 ...

  2. Qt 程序打包发布总结

    1.  概述 当我们用QT写好了一个软件,要把你的程序分享出去的时候,不可能把编译的目录拷贝给别人去运行.编译好的程序应该是一个主程序,加一些资源文件,再加一些动态链接库,高大上一些的还可以做一个安装 ...

  3. RIP路由协议及工作原理

    RIP路由协议及工作原理 RIP(Routing information Protocol,路由信息协议)是应用较早.使用较普遍的内部网关协议(Interior Gateway Protocol,IG ...

  4. Microsoft Visual C++ 9.0 is required Unable to find vcvarsall.bat 解决办法

    问题描述 安装 Python的MySQL驱动时时出现这个错误: Microsoft Visual C++ 9.0 is required Unable to find vcvarsall.bat 环境 ...

  5. 使用tomcat搭建centos的yum源

    最近在折腾大数据,需要搭建一个yum源.一般的做法是在CentOS中安装httpd,然后将rpm包放入/var/www/html下面,再执行[createrepo .]即可. 不过虚拟机对传文件终归是 ...

  6. e617. Determining the Opposite Component of a Focus Event

    The opposite component is the other component affected in a focus event. Specifically, in a focus-lo ...

  7. doctest初次体验

    测试代码放在两个地方才有效果,一个是模块开头,一个是函数声明语句的下一行 doctest 的概念模型 在python的官方文档中,对doctest是这样介绍的: doctest模块会搜索那些看起来像是 ...

  8. svn -- svn数据仓库

    在svn中我们的项目,不能称之为项目或文件夹,而是称之为“仓库” 仓库的建立步骤: 1.创建代码仓库 l 在任意盘符下建立文件夹(D:\svn\myApp\)做为我们的版本库根目录,如我们需要建立一个 ...

  9. Python 3.x标准模块库目录

    出处:http://blog.csdn.net/sadfishsc/article/details/10390065 文本 1. string:通用字符串操作 2. re:正则表达式操作 3. dif ...

  10. pyqt5加载网路图片,不本地下载。

    依赖组件: requests class webImg: pass if __name__ == '__main__': import sys from PyQt5.QtWidgets import ...