Day 1
Microsoft Dynamics AX 发展历程
2005年,Microsoft Axapta 3.0(SP3) 发布(微软收购后开始的)
2016年,Microsoft Dynamics 365 For Finance and Operations(7.0)发布
D365之前都是C/S架构,D365是B/S架构
类似于WEB的托管应用,可以与微软的其他产品做集成
市场占有率在不断上升
应用生命周期管理服务(LCS)了解即可
项目经理: 分布式工作区,方法论自动化(sure step),敏捷项目管理,方法论流程自动化
业务分析顾问: 业务流程建模(BPM),任务录制器,许可证规模评估器,应用模板,硬件评估
技术开发顾问: 业务流程建模(BPM),基于云的开发环境(Azure deployment portal),配置管理器,快速部署,客户化分析,升级分析
IT系统管理员: 系统诊断,问题检索,基于云的支持,升级
技术特性及架构
B/S
和现在的很多东西都可以集成
大概的架构:应用程序模块,Application Fundation,Application Platform;层,model
根据不同的业务场景,分成不同的model
开发都集中在自己的电脑上,不用太注意生命周期服务设置
生命周期服务(项目管理的时候用的比较多)
开发虚拟机
本地虚拟机,或者客户提供的远程机
hyper-v创建虚拟机
Administrator pass@word1(provisioning the administrator user)
虚拟机会占用很多本地资源,会降低开发效率
IIS查询Fo网页(AOSS service)
500常见错误:虚拟机时间错误,网络无法连接到Internet
解决办法:修改电脑名,重启;修改SSRS的关联数据库(一般不需要改)
TFAC
部署流程比较重要的就是生命周期服务和dbus
可以通过下载本地开发机(有共享和微软会实时更新)
代码管理服务:Fundation service control(TFVC) 和 git
Excel集成
模块
与微软其他产品有集成
导出到EXCEL,在EXCEL中打开(实体extending(template),作为数据导入导出的工具)
Visual Studio & Team Service(代码管理)
code都在AOT里面
Visual Studio Tool
Application Explorer
· Classic view
· Module view
Project的属性(property)
Startup Object type: 项目运行时启动的对象类型,可以选择(Form,Class,Output menu item)
Startup Object: 项目运行时启动的对象
Company:项目运行时的默认公司
Model: 项目所属的Model,项目下的所有对象都必须属于同一个model
Layer: 只读属性,显示当前Project/Model所属的Layer
Synchronize database on build: 参数,用于指定对当前project进行build操作时,是否同步数据库结构
Element设计器
给其他表作关联
添加字段
添加方法和索引
可以通过拖拽的方式添加控件
code编辑器
X++ 语言
Visual Studio Team Service
mapping地址:AOSSService\PackageLocalDirectory\Metadata
如果项目显示已经被其他的人给Mapping上了,修改机器名
Package/Model/Layer
Package: 包含一个或多个model,部署和编译的基本单元,Package之间可以建立依赖关系
Model: 一组对象的集合,包含源代码文件及元数据,用于构建一个完整的解决方案/模块,如仓库管理、项目会计,一个Model总是属于一个Package(代码库或代码包)
Layer: 一个model必须属于一个Layer(Layer一般是cus),是老版本AX中的核心概念,是Overlayering概念
Layer层架构
第三方解决方案或客户化开发保存在和原始应用程序不同的Layer中
不同的Layer提供给不同的类型的开发人员(如: 微软、解决方案提供商、实施合作伙伴、客户IT)
基于单个对象元素进行Layer存储
通过工具和少量的工作可以对不同的Layer上的代码冲突进行识别和处理分层可以避免代码冲突,老版本用的比较多
新建model时可以指定Package
创建新Package:一般用于进行Extension类型的开发
选择现有的Package:一般是对所选的Package中的其他model进行的Overlayering开发
Extension/Overlayering(model)
Overlayering: 在一个已存在的package中创建一个用于覆写已有代码或对象的model
可进行高级客户化开发的强有力的工具
原始功能提供方(例如微软)对侵入式的客户化开发无法提供“未来可用”的保障
需要更多的代码升级时间,编译时间;限制了新版本的持续升级。升级和补丁更新的成本很高可以修改标准model中的一些东西(微软是很反对的标准的东西被更改和被覆盖)
Extension: 创建一个新的package,引用已存在的package
添加新的扩展对象或者插件式代码
通过消除代码和对象冲突减少升级到新版本的成本
简化并提高编译、自动化测试、部署和客户交付的性能AOT里面有很多节点
标准的表是不能直接做更改的
Extension - 开发对象
Extension Model中是可以创建新对象的
Extension - 代码
Event Handler:一个事件可以注册多个Event Handler(不推荐使用,它是以方法为主导,不是以class为主导,不同的人写在不同的地方会导致冲突,代码的可控性不高)
事件以广播的形式通知Event Handler。同一个事件的多个Event Handler执行没有固定顺序
Delegate(委托):在核心逻辑上做出一些操作(比如在发票过账时增加一些功能)
代码增强:不同于Extends的概念,在Model B中扩展Model A中的Class
一个model中可以有n个针对同一Class的Extension
可以有Private、Public方法/变量声明
由于使用了final关键字,不可以有Protected方法
Wrapper Method - 允许Extension类扩展现有的方法
next 关键字 - 必须在Wrapper Method中使用
随机 执行Extension类做一些自己的开发,修改new或者一些逻辑(new的时myclass,而不是myclass_extension)
继承的话有super,代码增强的话有next(必须调用)
插件:plug-in
Build
两种途径: Build a Project和Build Models(Package)
build model,更新好本地代码后,要同步数据库
Build 过程中的动作:
校验 Metadata
校验X++代码
Best practice 检查(BP:代码规范)
生成报表RDL
编译,生成IL,创建.NETassemblies
创建Label assembly和其他资源文件部署
同步数据库
Build a Project
Build:只根据有改动的对象进行编译
Rebuild:对Project中所有对象进行编译,不论是否有更新,如果有删除对象,一定要做Rebuild或者Build Models
Synchronize database:建议打开Build时同步数据库的选项,确保数据库及时反映开发上的改动Build Result:
Output:BP Error(严重禁止,几乎不允许)
Error List:编译报错,代码有问题之类的