本文仅供AX从业者和爱好者学习交流之用,由于原文版权问题,请勿转载
虽然AX是一个用相同的部署支持多国家,语言,公司规模和行业的国际产品,它也是及其高产的开发平台,它可以使布局非常容易配置并自动安排应用功能的布局。唯一的呈现技术是基于建模元素属性,配置和安全设定以及个性化,它为每一个用户将窗体,报表,菜单,菜单的显示控件相应的Web元素的布局整合在一起。该技术叫做IntelliMorph,它支持AX中的胖客户端和Web客户端类型。
IntelloMorph技术设计的首要需求是为国际发布做准备,但与其他EPR产品不同的是,IntelliMorph必须用相同的部署为用多个语言的多个国家做准备,而且不管用户界面的语言如何,必须提供相同的用户体验。这使得元数据驱动和属性驱动的用户交互界面成为必须,窗体,报表,菜单和菜单项同时兼顾全球和本地配置和安全设定。这种设计的一个积极的副作用是用户可以通过多种方式个性化用户界面。在AX4.0中进一步扩展了个性化设定,用户可以引用所有的胖客户端窗体作为最爱,可以向其绑定任意查询。
IntelliMorhp自动排列功能基于许可证代码,配置和安全键和个性化,不需要更改任何代码。图11-1显示了元素,比如窗体,报表,菜单和web,布局的过滤结构。
图11-1:IntelliMorph呈现结构
该布局包括许可证代码,它打开配置键,配合键包含安全键引用或者安全键的子配置键。
安全键控制菜单项的访问,菜单项引用为用户组或者单个用户提供的可用功能。单个用户可以属于多个用户组,权限的完整集合组成最大的安全级别。界面体验的最后一个因素是个性化,它允许用户通过隐藏,显示和配置展现的控件来修改用户界面。
接下来的部分将会描述这些元素和他们之间的交互和依赖的更多细节,包括个性化的讨论。
注意
用户界面的呈现不仅仅局限于支持IntelliMorph技术,它也为开发拥有众多不同控件类型的,比如ActiveX和ListView控件,Mircrosoft Windows 窗体提供了丰富的设计选项集合。AX报表也有它们自己的设计器,可以在用X++和属性窗体的排列和格式化时进行可视化设计一张报表(译注:那个设计器实在是不敢恭维,呵呵。)。
最佳实践
了解IntelliMorph的工作原理可以帮助开发应用扩展的运行时呈现。如果遵循最佳时间的设计规则和模式,可以优化IntelliMorph技术的使用确保有一个统一的应用运行时界面。最佳实践原则集中在使用呈现控件的默认属性设定,它决定如何呈现元素和功能。也包括标签的一般使用,字段组,扩展数据类型,自动组,安全和配置键和菜单项。AX的标准应用采用所有的最佳实践规则和模式开发(译注:这牛吹大啦,呵呵),这提供了应用和底层业务逻辑交互的统一方式。第四章,"MorphX开发工具",提供了关于最佳实践工具的描述。可以在AX SDK中发现规则和模式的细节。
窗体的原理
如果总是从头开始设计,设计应用窗体是一件非常耗时的工作,特别是应用必须运行在多语言部署的情况下。这就是最佳实践要求尽可能地通过拖拽来创建报表并手动设定非常非常少量属性的原因。有时候系统的默认属性值可能不适合当前的情况,这是几乎所有属性都可以定制的原因。
在设计一个表或者视图作为底层数据源的窗体的布局时,可以使用与AOT中的原始表和视图相同的字段组和字段结构,倘若通过拖拽将它从这些节点中拖到窗体的Data Sources节点的话。这些数据源应该被配置使用AX AutoJoin系统,这可以确保两个窗体连接时数据同步。当处理布局和属性设定时,保持Auto或者Default设定。这可以优化自动排列技术的使用并限制移动像素以统一和排列窗体显示与其他应用的需要。
在设计窗体时,遵循下列列表中推荐的做法,可以尽量优化字段排列技术的使用。大多数模式是窗体设计的属性设置。
1.尽可能使用默认设定,特别是Left,Top,Width,Height,Frame,WindosResize,WindowType和HideToolbar.
2.当使用表或者视图做为数据源的时候使用DataGroup属性。
3.当使用DataGroup属性时,将AutoDataGroup属性设为Yes,这样就会根据数据源的行为调整所有的行为。
4.使用标签而不是硬编码的字符串。
5.使用标签作为帮助文本(状态栏帮助)而不是硬编码的字符串。
6.使用TitleDataSource属性提供为用户更好和更可视的数据体验。
7.如果要在X++代码中使用控件,将AutoDeclaration属性设为Yes。
8.尽量使用AutoJoin系统。
如果客户要求一种非常特殊的用户体验,没有任何设计限制阻止全部重新修改用户界面。唯一的缺点是培训,灵活性和升级在一定程度上变得复杂。
报表的原理
IntelliMorph对于报表甚至比窗体更加重要,报表的最佳实践主要是保留属性的默认设置。当设计一个报表的时候,报表将要执行的环境通常是不可知的。这种类型的信息包含如下:
1.用户打印机所用的纸张的大小
2.根据用户的安装设置和语言,标签的长度或者内容可能不同
3.哪些字段通过安全和配置键设置禁用了
4.用户设定的字段(扩展数据类型)的长度
5.数据发送到报表的排列顺序
6.用户系统通过subtotals设定打印还是仅仅使用totals设定打印
7.字体和字体大小的默认设定
8.报表获取数据的表中的记录数量
可以创建两种类型的报表设计:Auto(AutodesignSpecs)或者Generated(Design)。大多数常规报表可以使用Auto,有特殊功能需求不能通过Auto设计实现的使用Generated设计。也可以为设计是由外部决定的报表使用Generated设计,比如:
1.由外部决定报表的布局,要求信息显示在非常特定的位置的报表。
2.在部署期间需要根据用户的需求进行调整设计的报表。发票是一个例子。大多数控件需要有固定的位置(不设置为Auto),用报表设计器移动它们。
尽可能地遵循如下设计模式:
1.尽可能采用默认属性设定,特别是Orientation,Width,Label,标签的宽度和格式信息,因为固定的设定导致报表控件不考虑从属性窗体中可用的IntelliMorph自动排列技术。
2.尽量使用Auto设计报表类型
(译注:说实在的AX的报表平台做对格式有很高要求的报表太难过了)。
使用IntelliMorph
IntellMorph为个性化AX窗体提供了众多选项。这些选项允许移动控件,设置控件的属性,向Form中添加额外的字段。窗体在应用运行的时候定制,设置按每个用户保存。依赖于个性化类型,个性化选项可以在很多地方被调用。无论是用鼠标移动进入Form然后通过菜单的命令隐藏一列还是通过高级个性化窗体重命名一列,个性化选项都使用了相同的框架。
高级个性化窗体,如图11-2所示,提供给用户个性化选项:
图11-2:高级个性化窗体
使用该工具,用户可以改变Tab页的顺序,移动元素,移除字段,添加Form数据源中存在的额外字段,重命名字段,阻止字段内容被编辑,更改默认的字段长度,甚至可以从窗体外观的多个版本中挑选一个。个性化设置可以共享,比如一个部门想采用一个通用的外观,该外观与整个公司的标准外观不一样,但又不想修改全局窗体布局,可以这样设置。
为了是用户个性化可以工作,必须通过窗体设计属性
AllowUserSetup 和
AllowAdd定义个性化的不同层级。一共有四种个性化层级,如表11-1所示:
(译注:在我用的版本AX4.0SP1中,Form Design并没有AllowAdd属性,所以后面的表11-1的内容暂时不翻译,等搞清楚了再说)。
Form中X++代码的使用也可以改变个性化层级,如果有关控件位置的方法被覆盖了,核心会自动限定用户设置的层级。