按照最佳实践,AX2012的form有几种设计模式:Details form、Details form with lines、Dialog、Drop Dialog、Simple details、Simple list、Simple list and detials、Table of contents以及List page、Area page、Role center。它们各自有不同的内部结构,分别用在不同的典型场景,其中的大部分可以通过AOT的form节点右键"New form from template”通过模板来创建,也提供“Add -ins->Check form style best practice”来检查form是否符合最佳实践。下面对这些设计模式一一简述。
- Details form:用来显示详细数据,AX2012所推荐的方式在列表中查看所有的纪录(后面要讲到的list page),然后在details form中打开某条纪录查看更多详细信息及编辑数据,这类form比较典型的应用比如CustTable form,用来显示客户的详细信息。首先其Design的style属性被设置为DetailsFormMaster,best pratice tool根据这个属性来判断其设计模式,如果是从模板创建的,这个属性被自动设置。另外注意设置Design的datasource设为主表,新建或者编辑按钮的动作都是针对这个主表的。Design下含Action pane和Tab两个控件,Action pane就是在office 2012能看到的ribbon工具栏,Tab的tabChanged方法有代码来控制ribbon工具栏某些按钮的隐藏和显示,比如“Edit”按钮,状态栏上可以切换“Details view”和“Grid view”两种视图,虽然两种视图下都能看到相同“Edit”按钮,但实际上它们不是同一个,“Details view”下的编辑按钮是一个Command button,而“Grid view”下的是一个menu item button,它们的切换就是在tabChanged方法中通过代码来显示和隐藏其中一个。Tab控件只有两个Tab page,Style分别设置为DetailsFormDetails和DetailsFormGrid,panel style分别设置为Details和Grid,根据这些属性在状态栏上切换“Details view”和“Grid view”的时候这两个Tab page也自动切换。Details Tab page下含一个Group控件和另一个Tab控件Details Tab,Group控件style设置为DetailTitleContainer,用来显示主纪录的主键和名称关键字段,Details Tab控件的Styles被设置为FastTabs,其下的Tab page表现为可折叠的组,在显示众多数据时非常方便,各Tab page下添加Group来显示数据源的字段信息。Grid Tab page下则一般只含一个Style为BorderlessGridContainer的Group,Group下包含一个grid来显示所有主数据纪录的一些关键字段。大体上Details form的结构就是这样,可以看到AX12引入了不少新的控件属性,通过这些属性就可以完成详细视图、表格视图的切换等一些功能而不需要写代码。新增的还有Parts,这里可以添加info parts或者form parts显示一写相关的预览信息,它是独立于design节点的。
- Details form with lines:这类form比较典型的比如销售订单的form SalesTable,Design的style属性为DetailsFormTransaction,总体上和Details form很类似,不同的地方就在Details Tab上,Details Tab的style不再是Fast tab而是Auto,且Show tabs被设置为no,只是为了放置两个style为DetailsFormDetails的两个tab page,Panel style各为DetailsLine和DetailsHeader,根据这个属性通过工具栏上的“Header view”和“Line view”切换表头和行的显示,而这两个tab page各含一个Tab(LineViewTab和HeaderDetailsTab),分别用来显示表头的行的数据,比如销售订单的Sales table和Sales line。LineViewTab下一般包含一些表头简要数据,一个grid用来显示所有的行数据,及一个style为IndexTabs的Tab控件来显示行的具体数据。HeaderDetailsTab则一般包含FastTabs类型的tab控件来显示各组表头的数据。所以和Details form相比,最大的变化就是“Details view”视图下的tab page不是直接用来显示数据,而是切换头视图和行视图。看起来结构很复杂,用模板就好了,所有结构都准备好了。更多有关Details form的信息见http://msdn.microsoft.com/EN-US/library/hh397318。
- Simple list:这类form用于显示比较简单的数据,比如AR模块下的客户组的form CustGroup,Design的style为SimpleList,总体上结构比较简单,包含一个Action pane、一个或多个Group,其中一个Style为BorderlessGridContainer的Group包含一个grid来显示数据。Simplist不包含标准模式的Action page工具栏,而是一个简化的Stripe风格的Action page。Simple list form还可能包含一个Style为DetailTitleGroup的Group,用来添加一些filter,比如根据enum类型的字段来过滤纪录,如何使用可以参见http://msdn.microsoft.com/EN-US/library/hh745335。
- Simple list and Details:和Simple list比较类似,Design的Style为SimpleListDetails,典型的比如AR->Setup->Charges->Charge codes的form MarkupTable。和Simple list不同的是form被SplitterVerticalContainer style的Group VSplitter拆分为左右两部分,左边显示Grid,右边显示grid中选中纪录的具体信息,具体信息可以使用fasttab类型的tab控件。和AX3的可移动拆分一样,用到了类SysFormSplitter_X,在form的init中需要使用VSplitter groug控件初始化一个SysFormSplitter_X的实例来管理拆分。使用模板这些都已经准备好了。更多关于simple list和simple list and details的信息参见http://msdn.microsoft.com/en-us/library/hh538485。
- Table of contents:比较典型的是各模块的参数配置窗口比如AR模块的CustParameters form,form design的Style为TableOfContents,包含一个VerticalTabs style的tab控件,在各tab page上使用TOCTitleContainer style的Group来显示一些提示信息,TOCTopicFastTabs style的content Group来包含一个FastTabs style的tab控件显示具体的信息。也可以使用TocTopicList style的content group来包含一个grid,或者toctopicsimple的content group来包含一个grid来显示一组纪录及其详细信息。更多参见http://msdn.microsoft.com/EN-US/library/hh745332。
- Dialog:这里所说的Dialog不是指Dialog Class,而是在AOT的Form节点下可以创建的Dialog Form,典型的用在两步创建某个主数据的场合,在创建主数据纪录前需要收集一些信息,比如销售订单的创建。Dialog可以从模板创建,Design的Style属性自动设置为Dialog,但是实际上系统中的一些对话框比如创建工单的ProdTableCreate和创建销售订单的SalesCreateOrder都没有设置这个Style属性,而是设置StatusBarStyle等属性来得到自己要的Form效果。从模板创建的Dialog包含一些提示的Text控件及一些Group,它们的Style都一一设置好,只需要输入提示文字及添加自己的数据控件就可以了。这篇文章讲述了如何隐藏/显示更多细节按钮的实现(http://msdn.microsoft.com/EN-US/library/hh811913),在显示过多数据的时候还是很有用的。另外Dialog还有一个Footnote的提示信息,这里(http://msdn.microsoft.com/EN-US/library/hh811915)讲述了如何使用它。
- Drop Dialog:和Dialog的区别仅在于少了一个Cancel按钮,一般用在工具栏按钮上通过menu item运行它,也是用来在创建其他纪录前收集一些信息,比如Employees的“Create a position assignment” form HcmPositionWorkerAssignmentDialog。Drop dialog也可以通过模板创建,Design.Style默认设置为DropDialog。更多有关Dialog和Drop dialog的内容可见http://msdn.microsoft.com/en-us/library/hh745339。
- List page:List page用来列出一些主表纪录,可以从模板创建,Design.Style设置为ListPage,它象连接一样内嵌在Client workspace中打开,不像Details窗口那样弹出一个新窗口打开,在设置了Design.Style属性后会禁用WindowType属性,AOT中可以看到大部分的List page form的WindowType设置为了Content Page,就是靠它来避免在弹出窗口中打开。我们可以把CustTable这个Detail form的WindowType设置为ListPage或者ContentPage,测试就会发现这个Detail窗口会在workspace中内嵌打开,当然这不符合微软的推荐的方式。List page form带有一个Grid来显示纪录列表、Action pane工具栏操作纪录以及Factbox显示一些相关信息,不像Details form那样复杂。
- Area page:其实Area page并不算form,它是根据AOT->Menus->Main menu下的菜单自动创建的菜单项功能列表。可以添加一个Menu,并在Main menu中添加到它的Menu reference,打开新的workspace时这个新的菜单就会出现在“模块”的列表选项中。
- Role center:Role center显示的是来自于Enterprise portal站点用户Role center的内容,在配置了企业门户后指定用户的profile后就启用了用户的role center,默认的role center profile可以在Organization administration > Setup > Role center > Initialize role center profiles管理。
除了上面提到的各种form pattern外,还有一种form part的表单,Design.Style为FormPart,用于创建Form parts类型的FactBox,它不能从模板创建,一般都很简单,用来显示来自于数据源的一些扼要信息。
当然可以创建不带任何Design.Style的Form,这和老版本的Form一样,自由设置表单的风格,AX2012中有很多这种来自于老版本的Form。
在这里http://msdn.microsoft.com/en-us/library/gg886605可以看到有关Form风格的Guide Line,更多的Form细节信息在这里http://msdn.microsoft.com/EN-US/library/aa844397查阅。