1、【协同制造管理平台 CMMP V4.0 】二次开发手册 协 同 制造管 理 平 台 CMMP V4.0 二次开发手 册 【协同制造管理平台 CMMP V4.0 】二次开发手册 1 阅读指南 1.1 编写目 的 基于协 同制 造管 理平 台 CMMP V4.0 产 品进 行开 发、 维 护或者 二次 设计 、开 发的 开发规 范及通 用实 现方 式归 纳。 以及对 于新 员工 开发 的指 导性文 档。 1.2 阅读对 象 协同制 造管 理平 台 CMMP V4.0 产 品开 发、 维 护人 员, 基于协 同制 造管 理平 台 CMMP V4.0 进行二 次开 发的 开发 经理 、开发 人员 、设
2、 计人 员。 1.3 编写约 定 一级标 题采 用三 号粗 黑体 ; 二级标 题采 用四 号粗 黑体 ; 三级及 以下 标题 采用 五号 粗黑体 ; 正文采 用五 号宋 体; 2 数据库 2.1 数据库 选择 数据库 目前 只支 持 ORACLE 数据 库 , 虽 然在 平台 设计 之初考 虑过 多数 据库 的问 题, 由于 后期在 代码 中使 用 了 OracleClient 的 数据 库访 问方 式 , 导 致 Service 层内 Sql 语 句不具 备通 用 性。如 需支 持 SQLServer , 需要重构 Service 层 ,采 用 ODBC 方式 等 。 2.2 数据库 备份还
3、原 expsystem/orclorcl file=D:CMMPBAKcmmp40-20150608.dmp log=D:CMMPBAKcmmp40-20150608.log owner=CMMP4,INTF feedback=10000 -rows=y grants=y indexes=y triggers=y imp system/orclCMMP199 file=D:CMMPBAKcmmp40-20150608.dmp full=y ignore=y 创建表空间 CREATE TABLESPACE CMMP4DB DATAFILE 【协同制造管理平台 CMMP V4.0 】二次开发手册
4、H:CMMP ORADBORCL2CMMP4DB.dbf SIZE 512M AUTOEXTEND ON NEXT 100M MAXSIZE UNLIMITED LOGGING ONLINE PERMANENT EXTENT MANAGEMENT LOCAL AUTOALLOCATE BLOCKSIZE 8K SEGMENT SPACE MANAGEMENT AUTO FLASHBACK ON; CREATE TABLESPACE INTFDB DATAFILE H:CMMP ORADBORCL2INTFDB.dbf SIZE 64M AUTOEXTEND ON NEXT 100M MAXSI
5、ZE UNLIMITED LOGGING ONLINE PERMANENT EXTENT MANAGEMENT LOCAL AUTOALLOCATE BLOCKSIZE 8K SEGMENT SPACE MANAGEMENT AUTO FLASHBACK ON; 创建用户 -1 DROP USER MXBLJL CASCADE; CREATE USER INTF IDENTIFIED BY INTF-VALUES B240121609620117 DEFAULT TABLESPACE INTFDB TEMPORARY TABLESPACE TEMP PROFILE DEFAULT ACCOUN
6、T UNLOCK; 【协同制造管理平台 CMMP V4.0 】二次开发手册 - 3 Roles for MXBLJL GRANT CONNECT TO INTF; GRANT DBA TO INTF; GRANT RESOURCE TO INTF; ALTER USER INTF DEFAULT ROLE ALL; - 3 System Privileges for MXBLJL GRANT CREATE VIEW TO INTF; GRANT CREATE SESSION TO INTF; GRANT UNLIMITED TABLESPACE TO INTF; -2 DROP USER AL
7、XMZ CASCADE; CREATE USER CMMP4 IDENTIFIED BY CMMP4-VALUES 930E2C23F5B4FE51 DEFAULT TABLESPACE CMMP4DB TEMPORARY TABLESPACE TEMP PROFILE DEFAULT ACCOUNT UNLOCK; - 2 Roles for ALXMZ GRANT CONNECT TO CMMP4; GRANT DBA TO CMMP4 WITH ADMIN OPTION; ALTER USER CMMP4 DEFAULT ROLE ALL; - 1 System Privilege fo
8、r ALXMZ GRANT UNLIMITED TABLESPACE TO CMMP4 WITH ADMIN OPTION; - 1 Tablespace Quota for ALXMZ ALTER USER CMMP4 QUOTA UNLIMITED ON CMMP4DB; 数据库连接 连接名 称:INTF_DB 用户 名:INTF 密 码:INTF 【协同制造管理平台 CMMP V4.0 】二次开发手册 2.3 建表、 存储过程 工具包 创建表 使用 后台 工 具 HoteamSoft.PlatDBAssistant.exe ,使用 后台 工具 包时 ,需 要将 DBAssistant 文
9、件夹拷 贝到 程序启 动目 录。 3 详细过程描述 3.1 模块维 护 A 步骤1(黄)点击 需 要添 加子模 块的 树节 点, 然后 点击 新 增一 行, 将在 窗口 中插入 一行新 记录 B 步骤2(黄) 填 写信 息: 模块编 码必 须唯 一 C 步骤3(黄) 信 息输 入完 成后, 点击 保存 ,系 统将 将信息 存储 到数 据库 , 同 时刷新 树结构 D 步骤1(绿) 选 择一 行记 录,点 击删 除 E 步骤2(绿) 点 击保 存, 清理数 据, 同时 刷新 节点 , 列名 描述 备注 模块类 型 管理用 户显 示, 用户 显示 , 管理显 示, 不显 示 管理用 户显 示, 在
10、菜 单和 树形结 构都 显示 用户显 示, 在菜 单和 树形 结构都 显示 【协同制造管理平台 CMMP V4.0 】二次开发手册 管理显 示, 只在 菜单 显示 不显示 , 不 管在 菜单 还是 树形结 构, 都不 显 示 模块代号 用户快 速进 入模 块的 代码 模块编码 系统运 行的 识别 代码 匹配单对象 如果调 用通 用的 增加 , 修 改 删除用 那个 对象 执行文件 模块运 行 的DLL 文件 实现类 模块实 现的 类编 码信 息, 注: 窗 体类 必须 继 承子BaseFormEx 缩略图 模块使 用 过 的缩 略图 显示顺序 模块显 示的 先后 关系 *(H) 对应语 言的
11、描述 , 如 Button 的Text *(H) 对应语 言的 补充 描述 , 如Button 的 Toolttip 3.2 模块事 件管理 F 步骤1(黄) 点 击需 要添 加子模 块的 树节 点, 然后 点击新 增一 行, 将在 窗口 中插入 一行新 记录 G 步骤2(黄) 填 写信 息: 模块编 码必 须唯 一 【协同制造管理平台 CMMP V4.0 】二次开发手册 H 步骤3(黄) 信 息输 入完 成后, 点击 保存 ,系 统将 将信息 存储 到数 据库 ,同 时刷新 树结构 I 步骤1(绿) 选 择一 行记 录,点 击删 除 J 步骤2(绿) 点 击保 存, 清理数 据, 同时 刷新
12、 节点 , 列名 描述 备注 事件编码 编码由 一串 数字 组成 , 系 统自动 生成 , 没 特 殊含义 执行文件 运行 的DLL 文件 实现类 包含事 件的 实现 类 实现事件 注册属 性 为ClickEvent 的 按钮事 件 缩略图 按钮使用 过 的缩 略图 显示顺序 按钮显 示的 先后 关系 *(H) 对应语 言的 描述 , 如 Button 的Text *(H) 对应语 言的 补充 描述 , 如Button 的 Toolttip 【协同制造管理平台 CMMP V4.0 】二次开发手册 3.3 对象构 建 图 2, 创建 表对 象 K 步骤1(黄) 点 击新 增一 行,将 在窗 口中
13、 插入 一行 新记录 L 步骤2(黄)填写 信 息: 对象编 码, 需要 遵循 表或 者视图 的命 名规 范 M 步骤3(黄) 信 息输 入完 成后, 点击 保存 ,系 统将 将信息 存储 到数 据库 ,同 时根据 对象类 型, 如果 是表 对象 ,则创 建表 结构 ,如 果是 临时表 ,则 创建 临时 表结 构,如 果是用 户定 义对 象, 不 创 建任何 结构 , 注: 如果选择 的是表或临时表, 创建 结 构后, 系统自动创建五个内 部字 段,分别为(PLMCREATOR ,PLMCREATEDATE ,PLMEID , PLMELASTUPDATE ,PLMUPDATOR ) N 步骤
14、1(绿) 选 择一 行记 录,点 击删 除 O 步骤 2(绿) 点 击保 存, 清理对 象数 据( 对象 ,对 象国际 化, 对象 列信 息, 对象列 国际化 ,全 局国 际化 信息 ) ,如果 是表 对象 或临 时表 , 同时 将物 理删 除表 结构 , 列名 描述 备注 对象编码 对象的 名称 , 如 果是 表对 象、 临 时表 , 就 是 表名, 如果 是用 户定 义对 象,就 是视 图名 对象类型 表对象,临时表,用 户定 义对象 【协同制造管理平台 CMMP V4.0 】二次开发手册 a 表对象 为创 建表 结构 的实 体表 b 临时表 为创 建表 结构 的临 时表 c 用户定 义对
15、 象为 表达 结果 集结构 的, 不 创建实 体表 被映射对象 一般用 作用 户定 义对 象和 实体对 象用 , 用 作 数据迁 移使 用 备注 存储到 表结 构 的 COMMON 信息 *(H) 对应语 言的 描述 , 如 Button 的Text *(H) 对应语 言的 补充 描述 , 如Button 的 Toolttip 3.4 对象列 信息构建 图 3, 对象 列信 息管 理 A 步骤1(蓝) 选 择需 要管 理的对 象, 然后 点击 新增 一行, 将在 窗口 中插 入一 行新记 录 B 步骤2(蓝) 填 写信 息: 列编码 信息 需要 符合 数据 库对象 编码 规范 C 步骤3(蓝)
16、 信 息输 入完 成后, 点击 保存 ,系 统将 将信息 存储 到数 据库 ,同 时根据 对象类 型, 如果 是 对 象是 表对象 或临 时表 ,则 修改 数据库 结构 信息 。 D 步骤1(绿) 选 择一 行记 录,点 击删 除 E 步骤2 (绿) 点 击保 存, 清理对 象数 据 ( 列信 息, 列国际 化, 全局 国际 化信 息) , 如【协同制造管理平台 CMMP V4.0 】二次开发手册 果对象 是 表 对象 或临 时表 ,同时 将物 理删 除表 结构 的列信 息 , 列名 描述 备注 列 编码 对象的 列编 码信 息, 要求 符 合数据 库编 码规 范 列 类型 列对象,模块配置对
17、 象, 用户定义对象 a 列对象 ,保 存时 创建 数据 库结构 b 模块配 置对 象 , 不 保存 数 据库结 构 , 列 是通过 模块 配置 信息 来 c 用户定 义对 象, 用户 自定 义的列 对象 信 息 原始对象 通过步 骤1 (黄 ) 选 择列 对 象时记 录的 派生 对象编 码 原始列名 通过步 骤1 (黄 ) 选 择列 对 象时记 录的 派生 列对象 编码 验证表达式 进行数 据修 改操 作时 , 进 行 前台合 法性 验证 正则表 达式 错误提示 验证表 达式 不通 过时 ,提 示的信 息 数据类型 列对象 的数 据类 型信 息 精度 数据对 象的 进度 信息 格式化字符串
18、用户前 台显 示时 ,数 据的 格式化 样式 列编辑方式 在编辑 页面 中, 用户 通过 何 种控件 进行 数据 编辑 是否主键 是否是 业务 主键 , 不是 系 统主键 , 注: 系统 主键为PLMEID,不可修改 是否只读 在新增 数据 行是 , 是 否不 让用户 操作 , 由 系 统赋值 默认值 在新增 一行 数据 时, 初始 化的数 值 是否可用 表示对 象是 否为 用户 可用 状态 是否可见 客户端 是否 可以 见到 该列 【协同制造管理平台 CMMP V4.0 】二次开发手册 是否必填 在前台 显示 , 是 否属 于必 填项目 , 同 时给 出 *提示 数据库默认 是否为 数据 库
19、默 认值 , 如 果是, 前台 数据 处 理将置 空值 新增可编辑 在新增 记录 状态 下, 对象 是否可 操作 排序 对象在 显示 页面 的顺 序 备注 方便阅 读的 描述 信息 *(H) 对应语 言的 描述 , 如 Button 的Text *(H) 对应语 言的 补充 描述 , 如Button 的 Toolttip 3.5 对象类 扩展选择 图 4, 选择 用户 对象 a 选择对 象信 息 b 筛选所 有的 实体 表, 临 时 表对象 , 点 击对象 信息 , 筛选对 象下 的列 信息, 选 择后点 击选 择扩展 ,反 悔主 界面 c 修改列 对象 编码 ,点 击保 存 【协同制造管理平
20、台 CMMP V4.0 】二次开发手册 3.6 多语言 维护 F 步骤1(蓝) 点 击新 增一 行,将 在窗 口中 插入 一行 新记录 G 步骤2(蓝) 填 写信 息: 对象编 码必 须唯 一 H 步骤3(蓝) 信 息输 入完 成后, 点击 保存 ,系 统将 将信息 存储 到数 据库 , I 步骤1(绿) 选 择一 行记 录,点 击删 除 J 步骤2(绿) 点 击保 存, 清理对 象数 据, 列名 描述 备注 对象编码 唯一识 别的 对象 编码 信息 对象类型 表对象生成,列对象 生成 ,模块控件,用 户自定义 d 表对象 生成 , 是 来自 于对 象管理 的多 语 言信息 e 列对象 生成
21、, 是 来自 于对 象的列 的多 语 言信息 f 模块控 件 , 是 有控 件编 码 后, 统一 生成 g 用户自 定义 为用 户手 工添 加的, 在提 示 狂中输 入等 所属表对象 表对象 生成 才哟 ,是 那个 表的多 语言 信息 所属列对象 列对象 生成 材有 ,是 那个 列的多 语言 信息 所属模块 是模块 控件 材有 , 是 通过 那 个模块 自动 提取 出来的 【协同制造管理平台 CMMP V4.0 】二次开发手册 备注 附加描 述信 息 *(H) 对应语 言的 描述 , 如 Button 的Text *(H) 对应语 言的 补充 描述 , 如Button 的 Toolttip 3
22、.7 解决方 案项目结构 图 5, 打开 解决 方案 ,新 建解决 方案 文件 夹和 项目 a Xml 文 件, 图片 等相 关文 件,需 要选 择属 性始 终复 制,否 则无 法 在 Main 文件夹 中 生成 , 导致加 载错 误 b Service 层 中, 必须 由接 口和实 现类 共同 完成 ,禁 止直接 使用 实现 类解 决 3.8 项目基 础引用类 【协同制造管理平台 CMMP V4.0 】二次开发手册 图 6,Service 层必 须引 用 的外部 类 图7 ,View 层必 须应 用的 外部类 3.9 项目属 性设置规范 图 6, 服务 项目 配置 【协同制造管理平台 CMM
23、P V4.0 】二次开发手册 图 7, 服务 项目 配置 图 8, 视图 项目 配置 在项目 的配 置中 , 需 要注 意的是 ,Server 项 目用 3.5 的 目标 框架,View 用的 是4.0 的【协同制造管理平台 CMMP V4.0 】二次开发手册 目标框 架 , 服务 项目 和视 图项目 均需 要发 布 到Main 文件夹 下, 同时 选 择XML 文档文 件 3.10 普通增 加,修改,删除实 现 在本示 例中 ,以 产品 颜色 基础档 案为 例, 过程 如下 打开HoteamSoft.CMMP 解 决方案 添 加解 决方 案文件 夹(ED/ 工程 管理 ) 添 加解决 方案
24、文件 夹(CL/ 颜 色信息 管理 ) 添加 项目 Service 项目Server 改名 CL.Service 项 目属 性设置 规范 设置 属性 项 目CLService 添 加文 件夹 Config 项 目CLService 文件 夹 Config 下添 加文 件夹Oracle 添加 查 询XML 文件配 置文件 的复 制属 性 编辑XML 文件 项目 CLService 添加 接口 类 IBaseColorService.cs 定 义接 口 项目 CLService 添加 接口 实现 类 BaseColorService.cs实现 接口 添 加项 目 View 项目 改名CL.View
25、 项目属 性设 置规 范设 置属 性 添 加文 件夹Image 添 加 必要 的图 标文 件 添 加 WinForm 窗体 修 改 窗体继 承 添 加事 件 主体 生 成解 决方 案 开 发控 制 台 配 置模 块实 现类 配置 按钮 事件 实现 代码 实现 运 行测试 。 在本示 例过 程中, 截 图及 说 明如下 3.10.1 使用内建连接对象 XML 文 件属 性说 明 【协同制造管理平台 CMMP V4.0 】二次开发手册 接口定 义类 说明 ,所 有接 口类必 须继 承 Iservice 接口实 现类 说明 ,接 口实 现类必 须集 成 BaseService ,再 继承 业务 接口
26、 定义 类 视图窗 口的 控件 定义 规则 设置 【协同制造管理平台 CMMP V4.0 】二次开发手册 视图窗 口的 实现 ,视 图窗 口必须 集 成 BaseFormEx 窗 体,否 则在 模块 配置 部分 无法识 别 实现类 信息 3.10.2 使用自定义连接 对象 在自定 义管 理中 其他 均一 样,区 别在 于接 口实 现类 的区别 ,区 别如 下如 下图 在使用 自定 义管 理时 , 需 要在运 行程 序 的App.Setting 添 加连 接信 息, 同 时设 置连接 字 符串等 ,设 置方 法如 下 配置连 接信 息 , 上图 添加 了一 个 WMS 的连 接信 息 【协同制造
27、管理平台 CMMP V4.0 】二次开发手册 本示例 中手 动调 用了 “IEntityHandler target = EntityHandlerFactory.GetEntityHandler(connStr, provi der); / TODO: 初始化为适当的 值 ”手工建 立了 一个数 据库 连接 对象 ,有 别于内 建的 对 象直接 写“this.EntityHandler ”就 可以 访问 3.11 普通SQL 或存储过程执行 3.11.1 使用内建连接对象 3.11.2 使用自定义连接对象 3.12 自动管 理事务和手动管理 事务 在自动 管理 事务 和手 动管 理事务 中
28、, 区 别为 自动 管理 事务时 每条 提交 数据 库语 句自动 执 行开启 式事 务 , 提交 事务 操作 , 而 手动 管理事 务是 在手工 提交 时 , 将一 块管 理的语 句同 时 提 交,自 动和 手动 的区 别如 下图 Open(); Try FinallyClose() BeginTrans(); 【协同制造管理平台 CMMP V4.0 】二次开发手册 TryCommitTrans(); CatchRollbackTrans(); 3.13 数据提 交 缓存及 验证 唯一 方法实例 在 执行 按钮 操作 之前 , 需 要将当 前页 面的 数据 保存 到临时 缓存 , 同时进 行前
29、 台验证 , 过 程及方 法如 下, 下图 以新 增记录 保存 到数 据为 例 3.14 代码样 例 using System; usingSystem.Collections.Generic; usingSystem.ComponentModel; usingSystem.Data; usingSystem.Drawing; usingSystem.Linq; 【协同制造管理平台 CMMP V4.0 】二次开发手册 usingSystem.Text; usingSystem.Windows.Forms; usingHoteamSoft.Plat.Attributes; usingHoteam
30、Soft.Plat.PlatView; usingHoteamSoft.Plat.PlatEntity.Interface; usingDevExpress.XtraGrid.Views.Base; usingDevExpress.XtraEditors.Repository; usingDevExpress.XtraEditors.Controls; usingHoteamSoft.Plat.Librarys; usingDevExpress.XtraGrid.Columns; usingHoteamSoft.Plat.Librarys.Common; usingHoteamSoft.Pla
31、t.AM.Service; namespaceHoteamSoft.Plat.AM.View / / 组 织权 限模 块, 用户管 理页 面视 图层 类, 提供对 用户 信息 的展 示及 增删改 查功 能 / / Title: UserManageView / Copyright: HoteamSoft LTD.co Copyright (c) 2014 / Company: 山东 山 大华天 软件 有限 公司 / Author: 赵 俊男 / Version: 0.1 / History: / 2014-12-26 赵俊男 创建 public partial class UserManage
32、View : BaseFormEx / / 用户 服 务类 【协同制造管理平台 CMMP V4.0 】二次开发手册 / privateIUserService _UserService; / / 用户 服务 / publicIUserServiceUserService get if (this._UserService = null) this.UserService = new UserService(); return _UserService; set _UserService = value; / / 构 造函 数, 同时将 查询 面板 赋值 初始 化 / publicUserMan
33、ageView() InitializeComponent(); /初始 化查 询面 板 , 以便 自动收 集查 询条 件 this.QueryPanel = this.tableLayoutPanel2; / 【协同制造管理平台 CMMP V4.0 】二次开发手册 / 查 询按 钮点 击显示 所有 数据 ,同 时初 始化 Sex 框 数据 / / / private void btn_Query_Click(object sender, EventArgs e) /验证 查询 条件 是否 有必 填等 if (!this.CheckViewParameter() return; this.gr
34、idControlEx1.EntityDataSource = this.UserService.GetUsers(this.GetViewParameterList(); / / 点 击保 存数 据 / / / ClickEvent public void Save_Click(object sender, EventArgs e) /弹出 提示 框, 提示 是否 继续操 作 if (MessageBoxView.ShowMessage(I18nLanguage.GetHead(“Q_MESSTITLE“), string.Format(I18nLanguage.GetHead(“Q_MES
35、S_IFGOON“), Convert.ToString(DataRowView)(e as DevExpress.XtraBars.ItemClickEventArgs).Item.Tag)“DISPLAY_HEAD“), MessageBoxButtons.YesNo) != DialogResult.Yes) return; / 保存 ,验 证后台 工具 配置 的主 键重 复 IEntity entity = this.UpdatedGridDataToEntity(this.gridControlEx1, this.gridControlEx1.EntityDataSource.Ref
36、EntityCode); / 提示 数据 正确性 及主 键冲 突 【协同制造管理平台 CMMP V4.0 】二次开发手册 if (this.Before_Check(entity) return; / 验证 其他 唯一约 束字 段冲 突 if (!this.ValidateExists(this.gridControlEx1, new string “USER_NAME“ .ToList(), “AUTH_USER“) / 冲突 提示 this.Show_ValidateExistsFailInfo(); return; EntityUpdateResponseeur = this.UserS
37、ervice.UpdateEnity(entity); if (eur.State / 页 面加 载事 件 / / / 【协同制造管理平台 CMMP V4.0 】二次开发手册 private void UserManageView_Load(object sender, EventArgs e) IEntity entity = this.UserService.GetEntity(“VIEW_USERMANAGE“); this.gridControlEx1.EntityDataSource = entity; / 加载 SEX 列样式 PlatGridColumnLoader.Sex_Lo
38、ad(this.gridControlEx1); / 文本 框强 制大写 输入 PlatGridColumnLoader.TextEditCharacterCasing_Load(this.gridControlEx1, “USER_ID“, CharacterCasing.Upper); 3.15 代码重 写 查询条件验证 / / 重 写判 断查 询 条件, 由于 数据 量大 ,限 制父代 号, 子代 号必 填一 个 / / 验证 结果 public new boolCheckViewParameter() bool flag = base.CheckViewParameter(); if
39、(flag) if (string.IsNullOrEmpty(Convert.ToString(this.txt_PCode.ObjectValue) this.ErrorProvider.SetError(this.txt_CCode, I18nLanguage.GetHead(“I_QUERY_ATLEAST_ONE“); 【协同制造管理平台 CMMP V4.0 】二次开发手册 flag = false; return flag; 3.16 代码重 写 查询条件修正 / / 收 集查 询面 板 QueryPanel 中 的子 控件 信息, 形成 界面 查询 参数 / / 界面 参数集 合
40、 public override ListGetViewParameterList() List list = base.GetViewParameterList(); ViewParametervp = list.Find(p =p.ObjectName = “plan_date“); vp.ObjectType = DbType.String; / 处理 日期 控件 vp.ObjectValue = vp.ObjectValue = null ?null : Convert.ToDateTime(vp.ObjectValue).ToString(Common.GetDateFormatSt
41、ring(this._DateFormat) ; return list; 3.17 代码重 写 数据更新 publicPlat.Librarys.EntityUpdateResponseItemsUpdate(IEntity view) EntityUpdateResponseresposeReturnValue = newEntityUpdateResponse(); if (view = null) returnresposeReturnValue; this.EntityHandler.DBHandler.BeginTrans(); try IEntitysEntity = this.EntityHandler.ViewToEntityTable(view); EntityUpdateResponseeur = this.EntityHandler.UpdateEntity(sEntity);