1.目标
- 描述事件的概念,并介绍怎样在AX中使用它。
- 描述与AX结合的多种方法。
- 描述AX中可用的多用服务类型。
- 为.NET操作X++使用一个代理类
- 从X++访问托管的程序集。
- 解释如何部署.NET Framework程序集。
2.介绍
在AX2012中,有许多框架可用。本章提供对AX2012中一些框架、子系统和特性的描述。框架是设计模式、接口和代码的容器,为开发者提供支持。
2.1事件
事件是客制化的设计模式,用来设计启用无干扰、可维持的客制化。该技术允许你客制化系统,而不用广泛地改变基本应用的源代码。
事件允许客制化事件处理器中实现的行为。时间处理器代码在响应中被调用,用来相应一个事件。
要了解事件的更多信息,看本章的“Event Handlers for Customization”。
2.2地址系统
地址由地址子系统处理。全局地址簿,或地址子系统,能帮助你理解大量人和组织渐渐的关系。例如,一个客户也可以是市场竞争中的一个供应商,在组织中的工人,也能成为供应商。
注意:要了解更多地址系统,参考Application Foundation Features章节的“Global Address Book”。
2.3批处理日记框架
批处理日记框架,能用于运行一组被RunBase框架创建的任务。
提示:每个任务都有单独的tts 事务控制。
RunBase框架提供一个标准的途径,在AX中创建进程和批处理任务。框架必须被应用中每个工作类型的功能所使用。
该框架被RunBase application类实现,提供了许多特性:
- Query
- Dialog,展示用户最后输入的值
- Validate
- 为用户执行批处理,来计划工作。该功能使用RunBaseBatch类,和pack(),unpack()方法,使用版本控制。
- 进度条
- Run
- 优化过的客户端/服务端
注意:要了解更多RunBaseframwork,参考http://go.microsoft.com/fwlink/?LinkId=238164。
2.4业务操作框架
业务操作框架(BOF),遵守WCF的协议和标准。使用BOF,你可以做:
启用菜单驱动的执行,或服务的批处理执行。
以同步或异步的模式调用服务
基于数据契约自动创建一个客制化的用户界面
囊括代码,在适当的层上操作。在客户端层输入,业务逻辑在服务端层。
要了解更多关于BOF的信息,参考本章的"Business Operation Framework"
2.5前后一致检查框架
前后一致检查框架,用于验证数据在生产数据库中的前后一致,帮助修复它找到的不一致。
前后一致框架的类,以ConsistencyCheck结尾,例如InventConsistencyCheck。每个框架类都扩展自SysConsistencyCheck类。
2.7维度
你可以使用Dimension子系统,为财务维度工作。使用InventDim子系统,为库存维度工作。
要了解更多关于财务维度子系统,参照Application Foundation Features章节的Dimensions。
2.8文档管理系统
在AX中,文档管理系统自动随处可用。文本笔记,任何类型、格式的文档,能被附加到AX中的任何记录上。
笔记字段应该不能放在你自己的表上,而是使用文档管理系统的文本笔记。
注意:如果文档附加到一个记录上,存储在一个共享文件,而不是AX数据库中,你必须确保设置了合适的访问等级。
2.9Infolog
给用户的信息和消息,在Infolog中。它也包含上下文信息,提供Help和action。要了解更多,查看
http://go.microsoft.com/fwlink/?LinkId=238165。
2.10数字序列
AX有一个数字序列框架来生成字母数字的数字序列,用于标识销售订单这样的交易文档。
2.11操作进度
使用Operation Progress framework,来显示该进程要花费多少时间。
基本实践:使用一个进度显示器,为花费超过两分钟的操作提供标识。
使用沙漏鼠标指针,如果进程要花费2到7分钟。
使用进度条,如果进程花费8分钟或更多。
注意:要了解更多信息,How to: Create Progress Indicators (http://go.microsoft.com/fwlink/?LinkId=238166。
2.12报表
SSRS是AX主要的报表平台。默认地,AX提供开箱即用的报表,运行在报表服务平台。新报表开发环境,又花了扩展自SQL Server
tools和组件。报表开发环境完全集成进了VS。
2.13应用集成
AX与与其他企业内部和外部系统集成的能力,是一个公共的需求。应用集成框架AIF,提供通过XML格式交换数据的能力。格式化的XML,作为文档的引用,并且每个文档包含数据和业务逻辑。文档给予一个文档类,使用AX定义。
AX提供许多标准的文档服务,支持公共的业务草错。通过使用AIF提供的能力,你也能客制化现有文档服务,或穿件自己的文档服务。
注意:要了解更多AIF,BOF,查看Application Integration Framework and Services课程。
3.时间处理器的客制化
该主题描述事件的概念,并介绍在AX中如何使用它们。
AX很少不用修改地使用,因为客户有他们自己的一套需求,来实现产品。正因为这样,伙伴要客制化产品。伙伴也投资重要的时间,来浏览并理解微软提供的源代码。当需要客制化时,伙伴修改客户层的代码,运行时引擎担保客制化发生。然而,存在一个问题是,当新版本发布,或微软底层代码改变,客制化会被破坏,对伙伴来说,为下个版本升级客制化代码,会很昂贵。附加地,当一个客户使用多个独立软件供应商ISV或伙伴,他们可能会修改同一个对象。当覆盖对象时,会导致相同的问题。
通过使用事件,可以减少创建和升级客制化的花费。开发者创建客制化代码,其他用户在该处创建事件。然后,这些开发者在其他可以被事件订阅的层,客制化原始功能。当客制化功能紧密地与事件结合,底层应用代码能为溶血,并且他会在客制化上产生一些效果,因为相同的事件在不同的版本中,以相同的顺序调用。
3.1天然的事件
例如,类代表了现实生活中的一些事情,它的名字是会计,人,客户。方法用于改变对象,它的名字指什么操作在对象上执行,如deposit,hire,invoice.
一个事件,代表了对象里要发生的事情。事件的名字典型是过去式,如deposited,hired,invoiced。事件会总是发生。
你可以使用时间,来为下面的编程范式提供支持:
Observation:观察者模式,事件可以用于查看预期的行为,当行为发生时,生成警报。该事件类型的例子是,regulation compliance
systems.例如,如果多个指定金额的货币从一个账户传输到另一个账户,系统出发一个工作流,来询问是否接受介意。
Information
dissemination:信息传播,事件分发相应的信息给合适的调用者,在大多数情况下。信息传播通过发布一个事件给任何想要对此作出反应的人。
Decoupling:解耦,事件可以被一个应用的完整的不同部分。他不需要为生产者知道消费,也不需要消费者知道生产者的细节。以恶生产者的时间,可以被多个消费者扮演,另外,消费者可以扮演多个生产者的事件。
提示:X++和C#的时间设计模式的实现不同。要了解更多信息,"X++ and C# Comparison: Event
(http://go.microsoft.com/fwlink/?LinkId=238167)"。
3.2术语
AX2012中的X++事件,是仿照.NET事件概念。下表列出了AX2012相关的事件术语:
术语Term | 定义Definition |
Producer | 生产者,是包含导致一个变化的代码的逻辑。他是发出事件的一个实体。 |
Consumer | 消费者,是当一个特定事件发生时,代表提醒的应用代码。他是接收事件的一个实体。 |
Event | 事件,代表了在生产者发生的变化。 |
Event payload | 事件装载货物,是事件里携带的信息。例如,当一个人被解雇了,装载货物可能包含雇员的名字和生日。 |
Delegate | 一个代理,是,当事件发生时,信息从生产者传递到消费者的一个定义。 |
3.3代码事件
在X++,你能添加代理作为一个类的成员。定义代理的语法,与定义一个方法的语法相同,除了下面的:
- 要使用delegate关键字
- 没有public或任何其他
- 返回类型必须是void
- body必须是空的,意味着,它不能包含declarations or satements。
例如,一个人被解雇时的事件代理,可以被表达成如下:
delegate void hired(str name, UtcDateTime startingDate)
{
}
提示:你可以在class上右键,选择New>Delegate,来创建一个新代理,或你可以从代码编辑器上选择New,并填入代码。
下面显示了一个类,叫做HireWorkerEventSample,他包含了一个代理,叫做hired,它接受一个string和一个date。
提示,闪电图标表明了他是一个代理,不是一个X++方法。
当应用代码不得不发信号,一个新人杯解雇,他用代理作为一个方法调用,提供事件装在负荷作为参数,如下面例子显示:
{
while select * from Employees where
Employees.hiredDate == today
{
this.hired(employees.Name,
employees.FirstWorkingDay);
}
}
注意:代码示例,只是一个例子。代码在AX中不能编译,因为没有Employee表。
参数,可以是任何X++接受的类型。它用于传递一个对象的实例,能让处理者修改该对象的状态,所以发布者能从订阅者请求值。事件处理者在调用者事务上下文里运行。订阅者可以被添加给事件,以两种方法中的一种——通过AOT或X++代码。
3.4自动事件
自动事件被环境触发,作为什么事情的执行结果。现在,开发者可以在方法被调用时,指示一个一个事件被触发。描述见下面。
Pre和Postsh是方法被调用时的预定义事件。pre-event处理器在方法执行前调用,post-evet
hndlers在方法结束后被调用。