U9研发体系(COMMONCRUD使用手册)
U9研发体系(实体操作API参考手册)
propName 属性名
public MultiLangDataDict GetMultiLangPropDict(string propName)
取得属性所对应的全语种信息 参数:
propName 属性名
返回: MultiLangDataDict 带全语种的多语集合
方法
public IPersistableObject Clone()
新建一个实体,将源实体的所有属性拷贝到这个新建的实体,注意,这个新实体的 ID 与源实体都是一样的
public virtual void CopyTo(Entity target)
将源实体的除了 ID 以外的所有属性拷贝到 target 实体 参数:
EntityKey
这个 EntityKey 是实体基类 UFSoft.UBF.Business.BusinessEntity 的内部类,是强类 型 EntityKey 的基类
方法
public BusinessEntity GetEntity() 通过 EntityKey 加载实体
EntityFinder
List<string> 变化的属性集合
public string GetMultiLangProp(string langType, string propName)
取属性在指定语种所对应的多语言信息 参数:
langType 语种 propName 属性名
public string GetMultiLangProp(string propName)
创建实体全名为 fullName 的实体对象 参数:
fullName 实体的带名空间的全名 parent 上级实体,如果是主实体的创建,这个参数为 null,如果不是,这个参数 需要送入组合它那个实体实例
U9研发体系(系统管理工具说明)
1.1. 登录
主控服务器:选择要登录的控制服务器地址。 初始密码为 123456
1.2. 站点管理
对该站点下的各种服务器进行配置。如下图:
【操作说明】 z 注册站点:注册本企业的其它站点到本地站点进行管理。 z 新增服务器:选择工具条上的【新增服务器】,弹出下拉列表,选择要添加的服务器类型,
进行添加即可。 z 编辑:可以对选择项进行编辑。 z 删除:删除选择项。
新增报表服务器,U9 的报表来源的服务器。 (A)代码: 报表服务器在当前站点中的唯一代码 (B)名称: 报表服务器的名称 (C)描述: 报表服务器的描述。 (D)服务器: 指安装 ReportServer 的机器名或 IP 地址,可以为本机或同域中其他机器。如果不 是本机,必须保证要配置的服务器运行系统管理服务(运行 ServiceHostingConsole.exe,启用 SystemManageEngine 服务),否则按刷新按钮会提示 (E)报表服务器 URL: 如果成功获取 ReportServer 安装信息,会显示 ReportServer 实际 URL,不 能为空。 (F)报表服务库目录: U9 报表扩展库目录,如果报表服务扩展库及系统配置管理工具均为标准 目录部署,此内容会自动判断是否存在,若存在,浏览按钮会 Disable。否则操作人员需手工查 找报表目录库所在位置(点击浏览按钮) (G)U9 门户网站: 需要配置报表服务运行环境的 Portal 服务器。此为先前创建的 Web 服务器名 称,如果是新增报表服务器,此处内容会预设第一个 Web 服务器 (H)高级:显示和编辑当前服务器的补丁更新的设置。详细间《服务器高级设置》 (I)确认:进行文件上传和报表服务器及 Portal 服务器复制 (J)取消:不做任何操作返回。 (6)新增集群服务器,如下图:
U9 操作指引(完整版)
U9 操作指引销售管理部份料品:50-0000-0001 指定存储地点及业务员客户:指定交易币种,价目表,出货原则,退货条件,出货条件,收款币种,收款条件,立账条件,其中立账条件及收款币种要与交易币种保持一致(重要)1.下达销售合同(注意起交日期在生效日期与失效日期之间)—提交—审核—客户确认(注意指定合同类型及流程)2.操作—批量生单(注意收款条件币种与单据币种一致)--提交—审核3.标准收货—批量生单—提交—审核4.退回流程:退货申请—批量生单(注意退货处理的单据类型)--受理—提交—审核5.采购管理—收货—销售退回收货—批量生单—进入检验流程6.采购管理—销售退回单—操作—检验—确定—提交—审核采购管理部份:料品:10-0000-0001 ,收货程序,勾选请购及询价属性1.查看是否点收及检验,操作—点收—提交—审核为可改,收货原则要填供应商:付款条件,付款币种,收货原则,立账条件2.下达采购合同(注意起交日期在生效日期与失效日期之间)--提交—审核—供应商确认3.采购申请—合同请购—批量生单(参照采购合同)提交—审核4.采购管理—料品询价范围—询价—批量生单(参照请购单)-比价—接受比价—提交—审核—转PO5.采购订单—提交—审核6.标准收货—批量生单—进入检验流程。
7.采购收货单—操作—检验—确定最终接受数量—提交—审核生产管理部份:料品:50-0000-0001 料品档生产页签可设超领百分比;物料清单中控制页也可以设,优先取物料清单的设置1、生产订单下达新增——单据类型——生产部门——生产数量——完工存储地点——计划开工时间——计划完工时间2、齐套分析指定存储地点——选取成套策略(生产数量、指定数量、可成套数)——选取生产订单——齐套分析3、生产订单开工开工:开工——开工数量——开工反开工:开工——开工历史——反开工4、生产订单领料与退料领料:后续处理——非成套领料——存储地点——实发数量——保存——审核——发料确认退料:生产退料——单据类型——选取生产订单——选取备料单——实退数量——退料理由——保存——审核——退料确认生产订单查询领退料明细、生产订单查询备料5、生产订单完工后续处理——完工——完工数量、报废数量、返工数量——质检页签(没有质检流程时:检验结果、不合格处理方式、数量)——保存——审核——进入质检流程---入库(打开生产订单、取消入库)6、返工生产订单生产管理参数:是否即时产生返工生产订单。
U9研发体系(数据库访问API参考手册)
U9 数据库访问API参考手册适用版本:U9 V1.5 UBF2.0修改状态:编写人:叶琳审核人:此部分要记录该文档形成过程中的历次版本变更过程及变更的内容版本修改与参与人修改时间修改原因修改内容审批人1.0 叶琳2008-7-8 原始文档建立叶琳2008-7-9 加上类的名空间概述U9数据库访问的API集中在UFSoft.UBF.Util.DataAccess.dll中,主要是封装直接执行sql和存储过程DataAccessorUFSoft.UBF.Util.DataAccess.dll下的DataAccessor主要对外提供直接执行sql和存储过程的方法,名空间为UFSoft.UBF.Util.DataAccess方法:public static IDbConnection GetConn()取当前的连接注意:这个连接是通过DatabaseManager.GetCurrentConnection()取得,是取当前环境下的连接static public int RunSP(string sprocName, DataParamList dataParams)用当前连接执行存储过程参数:sprocName 存储过程名dataParams 参数列表static public int RunSP(string sprocName, DataParamList dataParams, outDataSet ds)用当前连接执行存储过程参数:sprocName 存储过程名dataParams 参数列表ds 输出结果static public int RunSP(string sprocName, DataParamList dataParams, out IDataReader dr)用当前连接执行存储过程参数:sprocName 存储过程名dataParams 参数列表dr 输出结果static public int RunSP(string sprocName, DataParamList dataParams, out object obj)用当前连接执行存储过程参数:sprocName 存储过程名dataParams 参数列表obj输出结果static public int RunSP(IDbConnection conn, string sprocName, DataParamList dataParams)执行存储过程参数:c onn 数据库连接sprocName 存储过程名dataParams 参数列表static public int RunSP(IDbConnection conn, string sprocName, DataParamList dataParams, out DataSet ds)执行存储过程参数:c onn 数据库连接sprocName 存储过程名dataParams 参数列表ds 输出结果static public int RunSP(IDbConnection conn, string sprocName, DataParamList dataParams, out IDataReader dr)执行存储过程参数:c onn 数据库连接sprocName 存储过程名dataParams 参数列表dr输出结果static public int RunSP(IDbConnection conn, string sprocName, DataParamList dataParams, out object obj)执行存储过程参数:c onn 数据库连接sprocName 存储过程名dataParams 参数列表obj输出结果static public int RunSQL(IDbConnection con, string commandText, DataParamList dataParams)执行sql参数c on 数据库连接commandText sql语句dataParams 参数static public int RunSQL(IDbConnection con, string commandText, DataParamList dataParams, bool needCloseConn)执行sql参数c on 数据库连接commandText sql语句dataParams 参数needCloseConn 执行完后是否需要平台自动关闭连接static public int RunSQL(IDbConnection con, string commandText, DataParamList dataParams,bool needCloseConn, out IDataReader dr)执行sql参数c on 数据库连接commandText sql语句dataParams 参数needCloseConn 执行完后是否需要平台自动关闭连接dr 输出结果static public int RunSQL(IDbConnection con, string commandText, DataParamList dataParams, out DataSet ds)执行sql参数c on 数据库连接commandText sql语句dataParams 参数ds 输出结果static public int RunSQL(IDbConnection con, string commandText, DataParamList dataParams, out IDataReader dr)执行sql参数c on 数据库连接commandText sql语句dataParams 参数dr 输出结果static public int RunSQL(IDbConnection con, string commandText,DataParamList dataParams, out object obj)执行sql参数c on 数据库连接commandText sql语句dataParams 参数obj 输出结果public static IDataReader GetDataReaderByPage(string tableName, intpageSize,Int64pageIndex, string selectSql,string whereSql, stringorderbySql, string optimizesql, string aliasFileds, DataParamList dataParams)分页查询,返回IDataReader参数:tableName 主table名pageSize 页面大小pageIndex 页面索引selectSql 查询子句whereSql 条件子句orderbySql 排序子句optimizesql 优化子句aliasFileds 别名列,一般可以用*dataParams 参数列表注意,这个方法这个方法的参数很多,较复杂,一般平台用,开发尽量避免直接使用public static DataSet GetObjectsByPage(string tableName, int pageSize,Int64 pageIndex, string selectSql, string whereSql, string orderbySql,string optimizesql, string aliasFileds, DataParamList dataParams)分页查询,返回DataSet参数:tableName 主table名pageSize 页面大小pageIndex 页面索引selectSql 查询子句whereSql 条件子句orderbySql 排序子句optimizesql 优化子句aliasFileds 别名列,一般可以用*dataParams 参数列表注意,这个方法这个方法的参数很多,较复杂,一般平台用,开发尽量避免直接使用KeyGeneratorU9实体的ID是通过存储过程产生,UFSoft.UBF.Util.DataAccess.dll下的KeyGenerator 提供一个辅助的方式提供一个新的ID,以避免直接访问产生ID的存储过程,名空间为UFSoft.UBF.Util.DataAccess方法:static public Int64 NewValue()取一个新的ID值。
U9研发模式及管理体系
U9研发模式及管理体系U9研发模式是指U9公司在开展研发活动时采用的一种工作方式和流程,以实现高效、快速、协同的研发结果。
U9公司作为一家专注于软件开发的公司,其研发模式的选择和管理体系的建立对于项目的成功与否至关重要。
下面将详细介绍U9研发模式及管理体系。
一、敏捷开发敏捷开发是U9研发模式的核心理念之一、敏捷开发注重迭代式、模块化的开发过程,以客户需求为导向,快速交付可用的产品。
敏捷开发强调团队合作,重视沟通和反馈,能更好地满足快速变化的需求,并保持良好的项目进展。
二、模块化开发三、协同工作四、持续集成与测试五、产品运维U9研发管理体系为了保证U9公司研发活动的有效进行,U9公司建立了完善的研发管理体系。
该体系包括以下几个方面的内容:一、项目管理U9公司采用项目管理方法来对研发活动进行全面的规划和控制。
在项目启动时,会制定详细的项目计划,并确定项目目标、范围和时间表等。
同时,项目经理会对项目进展进行监控和控制,及时解决问题,确保项目按时交付。
二、人员管理U9公司注重人力资源的合理配置和管理。
在项目组建时,会根据项目需求和团队成员的技能特点进行合理的组合。
同时,公司还会为员工提供培训和发展机会,提高团队的整体素质和技术能力。
三、质量管理U9公司对产品的质量要求非常严格,因此建立了严格的质量管理体系。
在整个研发过程中,团队成员会严格按照规定的开发流程和标准进行工作,并对每个阶段的工作进行质量检查和评估。
同时,团队会积极采集用户反馈,及时改进产品。
四、知识管理U9公司注重知识的积累和分享,建立了完善的知识管理系统。
在每个项目的结束,U9会对项目进行总结和归档,收集并整理项目相关的文档、代码和经验等。
这样可以方便后续团队的使用和学习,提高工作效率和质量。
五、风险管理U9研发管理体系还包括风险管理。
在项目的不同阶段,团队成员会识别和评估各种风险,并制定相应的应对策略。
通过对风险的及时识别和处理,可以降低项目失败的可能性,提高项目的成功率。
U9研发体系(开发环境手册)_图文.
U9开发环境手册文件编号:U9-SE-××-SPEC-××版本号:修改状态:0编写人:张璋审核人:适用对象该手册适用于U9本部开发人员、客户化开发人员。
版本记录【此部分要记录该文档形成过程中的历次版本变更过程及变更的内容】版本修改与参与人修改时间修改原因修改概述审批人1.0 张璋 2008/07/10 原始文档建立1.1 张璋 2008/08/12 按照本部级评审意见修改相关文档名词解释z U9AppCode(U9业务逻辑视图目录z U9Data(U9数据视图目录z U9Product(U9开发环境目录z U9UICode(U9UI逻辑视图目录手册正文1.U9基础开发环境1.1 OS环境推荐使用“Windows Server 2003(企业版,SP2”,U9本部人员可以在如下地址访问获取:\\u9domain\data\Download\0C - 操作系统1.2 IIS6.0推荐安装OS后,立即安装IIS,以保证在安装 2.0之前IIS已经安装完毕。
IIS6.0的安装位置在:添加或删除程序->添加删除Windows组件->应用程序服务器->详细信息->Internet信息服务(IIS。
按照下图红色数字顺序,安装IIS6.0。
点击【确定】、【下一步】后,系统提示插入操作系统光盘,可以插入系统光盘,如果没有系统光盘,可以定位到操作系统文件夹的i386文件夹。
1.3 Framework V3.0U9本部人员可以在如下地址访问获取:\\u9domain\data\Download\0C - Visual Studio系列1.4 浏览器推荐使用“IE7”,U9本部人员可以在如下地址访问获取:\\u9domain\data\Download\0C - Office系列1.5 数据库开发环境推荐先安装SQL Server 2005,再安装Visual Studio 2005。
u9研发体系(自定义报表开发手册)
开发必备软件
请先安装下列软件并正确的配置UBF Studio的配置文件才能使用UBF Studio:
Window 2003标准版。
Microsoft .net Framework V3.0。
系统需要安装 Framework V3.0。一定要注意Framework的版本,只有版本匹配UBF Studio V2.0才能正常运行。小技巧:由于Framework 2.0和3.0可以共存,如果UBF Studio V2.0不能正常运行,可以考虑检查一下当前启用的Framework版本。
4、“CLR配置”(标识4)是数据库使用的DLL文件,一般情况是与备份文件(标识5)一块保存。
5、“备份文件”(标识5)是数据库导出的备份文件。
6、“还原checkbox”(标识6):请注意不要忘记选择。
填写完成后,单击【创建】。
1.5
自定义报表模板的导入导出是利用UBF平台的报表模型元数据管理工具。
1.5.2
1.5.3
方案类型必须是分析项目,如下图:
1.5.4
上面界面点击确定后,就会出现一个报表开发界面,暂时不要关注其他信息,请打开菜单报表/模型元数据管理,操作过程如下图:
1.5.5
操作过程如下图:
报表元数据库连接后
1.5.6
单击选择报表目录、报表容器或报表模板,右键单击打开菜单,选择导出、导入命令,操作过程如下图:
单击“基本信息设置”数据库――创建,打开创建界面:
创建数据库填写信息:
1、“数据库”(标识1)需要填写创建的数据库名称。
2、“数据文件”(标识2)是创建的数据库的数据文件,单击 选择数据文件的存储位置,如:D:\DB\,后面的“\U9ERP_JDF.mdf”是工具自动添加上的。
U9研发体系(数据库访问API参考手册)
U9 数据库访问API参考手册适用版本:U9 V1.5 UBF2.0修改状态:编写人:叶琳审核人:此部分要记录该文档形成过程中的历次版本变更过程及变更的内容版本修改与参与人修改时间修改原因修改内容审批人1.0 叶琳2008-7-8 原始文档建立叶琳2008-7-9 加上类的名空间概述U9数据库访问的API集中在UFSoft.UBF.Util.DataAccess.dll中,主要是封装直接执行sql和存储过程DataAccessorUFSoft.UBF.Util.DataAccess.dll下的DataAccessor主要对外提供直接执行sql和存储过程的方法,名空间为UFSoft.UBF.Util.DataAccess方法:public static IDbConnection GetConn()取当前的连接注意:这个连接是通过DatabaseManager.GetCurrentConnection()取得,是取当前环境下的连接static public int RunSP(string sprocName, DataParamList dataParams)用当前连接执行存储过程参数:sprocName 存储过程名dataParams 参数列表static public int RunSP(string sprocName, DataParamList dataParams, outDataSet ds)用当前连接执行存储过程参数:sprocName 存储过程名dataParams 参数列表ds 输出结果static public int RunSP(string sprocName, DataParamList dataParams, out IDataReader dr)用当前连接执行存储过程参数:sprocName 存储过程名dataParams 参数列表dr 输出结果static public int RunSP(string sprocName, DataParamList dataParams, out object obj)用当前连接执行存储过程参数:sprocName 存储过程名dataParams 参数列表obj输出结果static public int RunSP(IDbConnection conn, string sprocName, DataParamList dataParams)执行存储过程参数:c onn 数据库连接sprocName 存储过程名dataParams 参数列表static public int RunSP(IDbConnection conn, string sprocName, DataParamList dataParams, out DataSet ds)执行存储过程参数:c onn 数据库连接sprocName 存储过程名dataParams 参数列表ds 输出结果static public int RunSP(IDbConnection conn, string sprocName, DataParamList dataParams, out IDataReader dr)执行存储过程参数:c onn 数据库连接sprocName 存储过程名dataParams 参数列表dr输出结果static public int RunSP(IDbConnection conn, string sprocName, DataParamList dataParams, out object obj)执行存储过程参数:c onn 数据库连接sprocName 存储过程名dataParams 参数列表obj输出结果static public int RunSQL(IDbConnection con, string commandText, DataParamList dataParams)执行sql参数c on 数据库连接commandText sql语句dataParams 参数static public int RunSQL(IDbConnection con, string commandText, DataParamList dataParams, bool needCloseConn)执行sql参数c on 数据库连接commandText sql语句dataParams 参数needCloseConn 执行完后是否需要平台自动关闭连接static public int RunSQL(IDbConnection con, string commandText, DataParamList dataParams,bool needCloseConn, out IDataReader dr)执行sql参数c on 数据库连接commandText sql语句dataParams 参数needCloseConn 执行完后是否需要平台自动关闭连接dr 输出结果static public int RunSQL(IDbConnection con, string commandText, DataParamList dataParams, out DataSet ds)执行sql参数c on 数据库连接commandText sql语句dataParams 参数ds 输出结果static public int RunSQL(IDbConnection con, string commandText, DataParamList dataParams, out IDataReader dr)执行sql参数c on 数据库连接commandText sql语句dataParams 参数dr 输出结果static public int RunSQL(IDbConnection con, string commandText,DataParamList dataParams, out object obj)执行sql参数c on 数据库连接commandText sql语句dataParams 参数obj 输出结果public static IDataReader GetDataReaderByPage(string tableName, intpageSize,Int64pageIndex, string selectSql,string whereSql, stringorderbySql, string optimizesql, string aliasFileds, DataParamList dataParams)分页查询,返回IDataReader参数:tableName 主table名pageSize 页面大小pageIndex 页面索引selectSql 查询子句whereSql 条件子句orderbySql 排序子句optimizesql 优化子句aliasFileds 别名列,一般可以用*dataParams 参数列表注意,这个方法这个方法的参数很多,较复杂,一般平台用,开发尽量避免直接使用public static DataSet GetObjectsByPage(string tableName, int pageSize,Int64 pageIndex, string selectSql, string whereSql, string orderbySql,string optimizesql, string aliasFileds, DataParamList dataParams)分页查询,返回DataSet参数:tableName 主table名pageSize 页面大小pageIndex 页面索引selectSql 查询子句whereSql 条件子句orderbySql 排序子句optimizesql 优化子句aliasFileds 别名列,一般可以用*dataParams 参数列表注意,这个方法这个方法的参数很多,较复杂,一般平台用,开发尽量避免直接使用KeyGeneratorU9实体的ID是通过存储过程产生,UFSoft.UBF.Util.DataAccess.dll下的KeyGenerator 提供一个辅助的方式提供一个新的ID,以避免直接访问产生ID的存储过程,名空间为UFSoft.UBF.Util.DataAccess方法:static public Int64 NewValue()取一个新的ID值。
U9研发体系(构造系统使用手册)
1.3 相关工具备份路径
\\pt05\标准构造工具
2、环境要求
Framework2.0 Nant0.85 Sql2005+SP1 Win2003+SP1 winfx3.0 ClearCase
3、设置环境变量:
1、nant.exe(0.85)所在目录 设置为系统环境变量 2、Msbuild.exe(FrameWork2.0)所在目录 设置系统环境变量 3、ClearCaseTool.exe 所在目录 设置系统环境变量 4、搭建测试环境的服务器 master 数据库建立存储过程 P_KillSpid
5、配置文件
5.1、配置文件如下: Buildtool\Build.ShareParameter.xml TotalBuild.build
TotalBuild.Config
配置视图路径、产品视图路径 构造 nant 脚本 执行构造的所有操作 构造脚本的配置文件
控制更新视图,构造那些项目组的 Sht 文件,建立 数据库名称,数据库服务器连接信息,备份文件信 息等等 (已加注释)
Buildtool\envirment.xml
构造系统数据库联接信息
Buildtool\U9V1Build.Config
扩展类配置文件
5.2、修改或新增源代码库路径
基础环境设置-〉源代码库:选择项目对应的源代码库改为规范路径即可(今后版本将
全部改为规范路径可不用设置)
5.3 、 修 改 脚 本 文 件 , 修 改 TotalBuild.Config, Buildtool\Build.ShareParameter.xml 中 的 SourceView,ProductView 节即可;其他节已经按规范配置为相对路径,正常情况不需要修 改
U9研发体系(数据升级工具使用手册)
U9升级工具使用手册文件编号:U9-SE-××-SPEC-××版本号: 1.0修改状态:0编写人:李靖和审核人:目录1. 适用对象 (3)2. 版本记录 (3)3. 使用说明 (3)3.1 数据库升级 (3)3.2 报表升级 (5)4. 常见问题 (6)4.1 为什么元数据升级不能指定连接串 (6)4.2 当DBServer和WebServer部署在不同服务器时如何升级报表元数据 (6)4.3 能否只针对更新的报表元数据进行升级 (6)1.适用对象该规范适用于系统实施、测试人员以及其它和系统升级相关的操作人员。
2.版本记录版本修改与参与人修改时间修改原因修改概述审批人1.0 李靖和 2008-6-30 原始文档建立3.使用说明3.1 数据库升级执行UFIDA.UBF.Build.Install.exe,操作用户必须具有windows管理员权限,在数据库服务器本机执行,如图:点击“获取”按钮,工具将获取本地SQL服务器默认实例下的所有数据库,选择要升级的数据库。
点击打开文件按钮,选择补丁包文件,如下图:选择好文件,后点击“数据升级”按钮。
升级完成后,系统弹出如下窗口:标识该补丁包已经升级完毕。
日志文件参考执行目录下的xxxxinstall.log(xxxx为补丁包文件名)3.2 报表升级选择报表路径:报表路径一般为${protal}\ApplicationServer\Libs\SqlScript\ReportMetaData,“${protal}”为IIS中U9portal对应的目录。
选择报表工具路径,一般为${U9}\ReportServer\Tool\import”,${U9}为Portal的上层目录。
选择完之后点击“报表升级”,稍候即可。
如果数据库不在本地,请指定连接串。
4.常见问题4.1 为什么元数据升级不能指定连接串为了提高数据更新效率,元数据升级采用SQLServer的Bulk Insert方式导入,所以升级程序必须在数据库本地执行。
U9研发体系(U9性能规范)
避免锁定Type ★
第 6 页 共 55 页
锁定 Type 对象会影响同一进程中所有 AppDomain 该类型的所有实例,这不仅可能导致严重的性能问题, 还可能导致一些无法预期的行为。这是一个很不好的习惯。即便对于一个只包含 static 方法的类型,也应 额外构造一个 static 的成员变量,让此成员变量作为锁定对象。
C#的 IDisposable 接口是一种显式释放资源的机制。通过提供 using 语句,还简化了使用方式(编译器 自动生成 try..finally 块,并在 finally 块中调用 Dispose 方法)。对于申请了非托管资源的对象,应为其 实现 IDisposable 接口,以保证资源一旦超出 using 语句范围,即得到及时释放。这对于构造健壮且性能优 良的程序非常有意义!
用友软件股份有限公司研发过程
U9 性能规范
文件编号: 版本号: 修改状态: 编写人: 审核人: 批准人: 批准时间:
U9-SE-CD-WF-003 V1.0
张红斌、尹明君、黄卫 翟宇翔 黄涛 2006-10-30
第 1 页 共 55 页
1. 适用对象
该规范适用于 U9 设计人员和开发人员。
2. 版本记录
此部分要记录该文档形成过程中的历次版本变更过程及变更的内容
版 修改与 修改时间
本 参与人
修改原因
修改概述
1.0 张红斌、 2006/06/10 原始文档建立
尹明君、
黄卫
1.1 张红斌 2007/01/29 补充内容
1. ToEntityData 消耗
2. A.B 代替 A.B.ID
U9研发体系(U9编码规范)
命名规则与约束 一般规则
# # # 所有的标识符都必须用英文命名,请不要使用汉字或者汉语拼音作为标识符。有关 。 BE 的命名规则请参考《UBF 编码规范》 当对集合变量命名时,请使用复数形式,用以描述该变量是一个集合。 命名 const 变量时请保持所有的字母大写,并且每个单词之间用“_”连接。 不推荐: private const int Max_Account = 100; 推荐: private const int MAX_ACCOUNT = 100; 请使用大家认识一致的缩写,不要自己随意发明缩写,这样理解上会比较困难并且 会产生歧义。 不推荐: GetH():H 的具体含义请看下面的推荐方案 UserInterface:这里应该用缩写 推荐: GetHandler() UI:大家都是知道 UI 指的是 User Interface 虽然 private 是默认的访问控制, 但是建议不要省略这个关键字, 请严格根据您设计 的类的访问控制规约明确的给出是否使用该关键字。 不推荐: public class SomeClass{ stirng s; } 推荐: public class SomeClass{ private string s; } 每个变量的声明必须占一行,避免一行声明多个变量。 不推荐: private string s,s1,s2; 推荐: private string s; private string s1; private string s2; 众所周知 C#是区分大小写,请不要只用大小写来区分标识符,请使用明确的语义。 不推荐: private Bus bus; private Bus bUs; 推荐: private Bus PublicBus;
文件
# 所有的源代码文件命名必须遵循 Pascal Case 的命名规则(请参考术语定义) 。 推荐: SourceCodeFile.cs 所有的项目文件命名必须遵循 Pascal Case 的命名规则 (请参考术语定义) , 该条目 同样适用于 Assembly 和命名空间。 推荐:
U9研发体系(开发环境手册)
文件编号: 版本号: 修改状态: 编写人: 审核人:
U9-SE-××-SPEC-××
0 张璋
适用对象
该手册适用于 U9 本部开发人员、客户化开发人员。
版本记录
【此部分要记录该文档形成过程中的历次版本变更过程及变更的内容】
版 修改与 修改时间
本 参与人
修改原因
修改概述
1.0 张璋
2008/07/10 原始文档建立
3.3 IIS 6.0 下 Portal 配置说明
请参见:IIS 6.0 下Por册
3.5 U9 产品启动概述
z 启动 “U9Product\U9.VOB.Product.U9\Portal\SysManageServer\ServiceHostingConsole.exe ”。
点击【确定】、【下一步】后,系统提示插入操作系统光盘,可以插入系统光盘,如果没 有系统光盘,可以定位到操作系统文件夹的 i386 文件夹。
1.3 Framework V3.0
U9 本部人员可以在如下地址访问获取: \\u9domain\data\Download\0C - Visual Studio系列
Q&A
1) Q: A:
3.2 在 IIS 中搭建 Portal
打开 IIS 管理器,按照附图搭建 Portal: z 虚拟目录别名:Portal z 网站内容目录:**\U9Product\U9.VOB.Product.U9\Portal
z Web 服务扩展:需要保障“ v2.0.50727”处于启动状态。
1.1 张璋
2008/08/12 按照本部级评审意见修改
审批人
相关文档
名词解释
z U9AppCode(U9 业务逻辑视图目录) z U9Data(U9 数据视图目录) z U9Product(U9 开发环境目录) z U9UICode(U9UI 逻辑视图目录)
U9研发体系(U9数据库索引设计指南)
用友软件股份有限公司研发过程U9数据库索引设计指南文件编号:版本号:V1.0修改状态:编写人:黄卫审核人:张红斌批准人:批准时间:适用对象该指南适用于U9设计人员和开发人员。
适用数据库产品该指南适用于MS SQL Server 2005数据库。
版本记录此部分要记录该文档形成过程中的历次版本变更过程及变更的内容版本修改与参与人修改时间修改原因修改概述审批人1.0 黄卫 2007/06/01 原始文档建立 张红斌相关文档此部分包含对该文档起指导与约束作用的相关文档以及预计在该文档指导与约束下将要建立的文档。
1、《U9数据库设计规范》约定标有★的条目表示强制性规范。
无前缀词的“索引”默认指的是非聚集索引。
数据库索引设计细则1.索引概述索引是为了加速数据检索而设计的数据库对象。
与书中的索引一样,数据库中的索引可以快速找到表或索引视图中的特定信息。
索引包含从表或视图中一个或多个列生成的键,以及映射到指定数据的存储位置的指针。
通过创建设计良好的索引以支持查询,可以显著提高数据库查询和应用程序的性能。
索引可以减少为返回查询结果集而必须读取的数据量。
另外,索引还可以强制表中的行具有唯一性,从而确保表数据的数据完整性。
2.索引类型2.1 聚集索引官方说明:在 SQL Server 中,索引是按 B 树结构进行组织的。
索引 B 树中的每一页称为一个索引节点。
B 树的顶端节点称为根节点。
索引中的底层节点称为叶节点。
根节点与叶节点之间的任何索引级别统称为中间级。
在聚集索引中,叶节点包含基础表的数据页。
根节点和叶节点包含含有索引行的索引页。
每个索引行包含一个键值和一个指针,该指针指向 B 树上的某一中间级页或叶级索引中的某个数据行。
每级索引中的页均被链接在双向链接列表中。
(聚集索引结构图)聚集索引与非聚集索引最大的不同,是索引的叶节点不仅包含索引项,还同时包含数据行,即:聚集索引和表中数据构成了树结构。
这意味着获取每条记录(select *)都会比非聚集索引要少一次IO。
U9研发体系(列表查询开发手册)
修改与 参与人
阴志鑫 阴志鑫
修改时间
2008/06/06 2008/06/05述
添加对每个步骤的简要说明 加入隐藏栏目功能 (界面上不 显示,但 UIView 中有对应的 UIField) ; 设置第一层的多个 栏目项的可见性; 设置自定义 栏目的显示名称
审批人
目录
1. 查询列表API框架...................................................... 6 1.1. 查询列表运行原理................................................. 6 1.1.1. 设计期................................................... 6 1.1.2. 运行期................................................... 6 1.2. 查询列表UI端API框架说明.......................................... 7 1.2.1. 动生成的代码框架......................................... 7 1.2.2. 代码框架解释............................................. 9 1.3. DTO查询BP端API框架说明.......................................... 10 1.3.1. 代码框架................................................ 10 1.3.2. 代码框架解析............................................ 12 2. 列表开发............................................................ 14 2.1. 新建查询项目.................................................... 14 2.2. 指定UI和BP项目的创建位置........................................ 14 2.3. 创建查询组件.................................................... 15 2.4. 创建完成后的项目呈现............................................ 16 2.5. 指定数据源实体信息.............................................. 17 2.6. 修改UI项目的配件名和UIModel的命名空间 ........................... 18 2.7. 设置过滤条件【如果此窗体需要过滤条件】 .......................... 19 2.8. 查询方案设置.................................................... 20 2.9. UI端应用开发人员可扩展代码...................................... 21 2.9.1. Action应用开发可扩展代码 ................................ 21 2.9.2. WebPart应用开发可扩展代码 ............................... 22 2.9.3. 装配.................................................... 22 3. BE查询开发.......................................................... 22 3.1. 新建查询项目.................................................... 22 3.2. 指定UI和BP项目的创建位置........................................ 23 3.3. 创建查询组件.................................................... 23 3.4. 创建完成后的项目呈现............................................ 24 3.5. 指定数据源实体信息.............................................. 24 3.6. 修改UI项目的配件名和UIModel的命名空间 ........................... 24 3.7. 设置过滤条件.................................................... 24 3.7.1. UIModel................................................. 24 3.7.2. UIForm.................................................. 26 3.8. 设置提供者参数【如果此窗体是提供者】 ............................ 27 3.8.1. UIModel................................................. 27 3.8.2. UIForm.................................................. 27 3.9. 查询方案设置.................................................... 29 3.10. UI端应用开发人员可扩展代码...................................... 29 3.10.1. Action应用开发可扩展代码 ................................ 29 3.10.2. WebPart应用开发可扩展代码 ............................... 31 3.11. 装配............................................................ 31 4. DTO查询开发......................................................... 31
U9研发体系(U9数据库编程规范)
2. 应用 TreeEntity 版型的表,应为 ParentID 建立索引 3. 禁止在代码中动态建立索引。若有特别的需求,需审批。
1.4.2 外键
U9 对外发布的产品禁止程序员手工建立外键。在开发期间,为辅助暴露逻辑处理缺陷, 可以建少量外键。
版 修改与 修改时间
本 参与人
修改原因
修改概述
黄卫
2008/06/26 原始文档建立
审批人
相关文档
【此部分包含对该文档起指导与约束作用的相关文档以及预计在该文档指导与约束下将要 建立的文档。】
约定
标有 ★ 的条目表示强制性规范。
第 2 页 共 27 页
数据库编程规范细则
1.数据库设计
1.1 命名规范
第 4 页 共 27 页
二进制流 varbinary
1-8000 或者 Max:2GB
十进制数 Decimal
默认精度为 Decimal(24,9)。
大金额请使用 Decimal(32,10)。
Guid
Uniqueidentifier
16 字节 GUID
XML
XML
2GB
对象类型 N/A
ቤተ መጻሕፍቲ ባይዱ
N/A
空类型
创建对象的 SQL 脚本应先检查对象是否存在,如果存在,先 drop 掉: if Object_Id(N'dbo.P_AllocSerials', N'P') is not null begin
drop procedure dbo.P_AllocSerials end go
create procedure dbo.P_AllocSerials @AllocCount int output, @StartSN bigint output
U9研发体系(捕获通用CRUD异常)
U9捕获通用CRUD异常范例说明版本号:V1.0作者:者文明版本记录【此部分要记录该文档形成过程中的历次版本变更过程及变更的内容】版本修改与参与人修改时间修改原因修改概述审批人1.0 者文明 2008/06/26 原始文档建立一.问题域说明应用场景:如果后台通用CRUD抛出的异常信息不能满足要求,可以自己进行封装之后再抛出。
这种情况一般在通用CRUD抛出的异常在某些特定场景下无法给出准确提示时使用。
二.基本原理在BE自动生成的Extend.cs文件中重新封装如下方法中的异常:public override void DealException(Exception e){base.DealException(e);throw e;}三.关键代码及说明public override void DealException(Exception e){if (e is RefObjectInValidException){RefObjectInValidException re = (RefObjectInValidException)e;throw new MyExc(re.EntityFullName,re.AttrName,this.Values[re.AttrName]); }base.DealException(e);}四.源代码使用说明通用CRUD抛出的异常类型包括:AttrCannotNullException 属性不能为空,涉及实体是${EntityFullName},实体属性名是${AttrName}AttributeInValidException 属性效验异常: 涉及实体是${EntityFullName},实体属性名是${AttrName}, 错误信息是 ${ErrMsg} BusinessException 实体${EntityFullName}异常,错误信息是${ErrMsg}EntityNotExistException 实体 ${EntityFullName} 不存在RefObjectInValidException 实体 ${EntityFullName}的引用对象${AttrName}不存在或者无效不能为空,请录入AttrNotNullableException &{AttrLabel} AuthorityException 权限异常:${ErrMsg}已被使用,不能删除。
U9通用操作手册2013
1.系统环境检查IE:推荐使用IE8以上版本,安装文件可以找信息部获取查看IE版本:如果未安装IE8以上版本,访问页面会出现下列状况2.系统访问2.1登录访问路径:http://192.168.8.135/U92.2修改密码2.3注销2.4主页2.5菜单访问注意:U9的菜单和一般系统菜单不一样,U9未列出所有菜单到菜单栏,而是根据使用状况将一级菜单列到菜单栏。
初次进入系统,需要点击【全部模块】,再点击需要使用的一级菜单2.6查看错误提示3.通用页面操作3.1快捷功能点击弹出点击【确定】,页面就出现在快捷工具栏了当有页面加入快捷工具栏后,会出现一个快捷功能管理按钮3.2标准表单页面3.3标准操作及浏览工具栏3.3.1新增U9页面进入时,默认都是新增模式3.3.1.1参照和引用通常,有放大镜(U9里叫参照)的字段如果没有选中,是名称如果选择,该值就变成编码,可以手动修改编码值,移开后引用的名称也会联动变化U9里参照(放大镜)和引用(下划线)的主要区别在于引用可以进行增删改操作,共同点是都能返回一个值数据表行同样也存在参照和引用3.3.1.2日期控件U9里日期控件可以手动输入值或点击图标弹出日期控件进行选择,如下图:3.3.1.3百分比控件3.3.2删除3.3.3复制当点击【复制】时,系统会将整个单的数据复制并新增到另外一张单据上3.3.4查找点击【查找】会弹出查找对话框3.3.4.1查询方案3.3.5列表列表同样可增加方案选择3.3.6附件3.3.7输出可以输出以下类型输出内容可以通过【打印模板】选择3.3.8打印和快打快打点击【快打】,系统按默认模板开始打印4.功能操作工具条5.报表5.1报表初览我们用库存管理 库存数量来举例说明进入后是一个查询界面点击【确定】5.2调整列宽点击【调整列宽】调整后点击【确定】,报表界面如下:5.3选择栏目结果:注意:如果结果和我的结果不一样,请查看其它页签是否有选择非行分组字段结果5.7报表方案选择方案后5.8比例5.9查找5.10导出6.常见问题列表6.1U9没有我要用的菜单可参考2.5U9中,默认只有两个菜单,【主页】和【全部模块】请点击【全部模块】,找到您想用的一级菜单,点击点击后再次点击菜单就可以出现菜单列表6.2为什么进入菜单后发现没有数据U9默认进入页面后为新增模式如果要查看数据可以进行【查找】或者点击【首页】【上页】【下页】【末页】。
U9研发体系(UIACTION使用手册)
U9 研发体系(UIAction 使用手册)适用版本: U9 V1.5 UBF2.0 修改状态: 编写人: 审核人: 熊悦阅 刘小东此部分要记录该文档形成过程中的历次版本变更过程及变更的内容 版本 修改与 参与人 熊悦阅 修改时间 修改原因 修改内容 审批人1.02008-7-8原始文档建立刘小东1.概述UFIDA UIAction 是表示层 MVC 框架中 Controller 一部分,它与 CodeBehind 构成完整 的 UIController,CodeBehind 完成 Web 响应的流转控制,UIAction 完成一个独立的行为, 如保存、加载、翻页等等。
2.构架原理2.1 UIAction 在表示层构架中的位置和作用2.2 UIAction 的主要内容2.3 公共 UIAction截止 U9 UBF2.6,U9 一共提供了 2 套公共 UIAction,分别是 CommonAction 和 NavigationAction。
3. 使用指南3.1 CommonAction 部分CommonAction 部分主要完成对 UIModel 数据的加载和更新操作,其中主要方法有 Load, LoadChildView,Save 等方法。
3.1.1 Load 方法Load 方法完成加载数据到 IUIModel 的过程,包含以下多种声明:声明 IUIModel Load() IUIModel Load(IUIModel) IUIModel Load(IUIModel,bool) 说明 加载当前 IUIModel 加载指定的 IUIModel 加载指定的 IUIModel 第二个参数控制是否清空 IUIModel 的数据 IUIModel Load(IUIView,bool) IUIModel Load(params IUIView[]) IUIModel Load(params IUIViewBindingControl[]) 加载一个视图,是否根据父视图进行过滤 加载指定的多个视图 加载指定的多个 UI 绑定控件对应的视图3.1.2LoadChildView 方法LoadChildView 方法加载指定视图的下级视图数据:声明 Void LoadChildView(IUIView) 说明 加载的数据存放在视图的 ContainerModel 中3.1.3Save 方法Save 方法将 IUIModel 的变化更新到后台持久层 声明 IUIModel Save() IUIModel Save(IUIModel) 保存后会回刷 IUIModel 的数据到前台。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
U9研发(CommonCRUD使用手册)适用版本:U9 V1.5 UBF2.0修改状态:编写人: 熊悦阅审核人: 刘小东此部分要记录该文档形成过程中的历次版本变更过程及变更的内容版本 修改与修改时间 修改原因 修改内容 审批人 参与人1.0 熊悦阅 2008-7-8 原始文档建立 刘小东1.概述UFIDA CommonCRUD是一套标准的服务,为表示层提供公共的查询、创建、更新、删除操作。
2.构架原理2.1 CommonCRUD的主要功能CommonCRUD功能同名称一样,为前台提供了公共的创建、查询、更新、删除记录的服务。
CommonCURD一共提供了两个标准的U9服务(参见服务相关手册),使用UIModel为参数。
两个服务分别如下:函数声明 说明UIModelQuery(IUIModel) 查询数据UIModelUpdate(IUIModel) 创建,更新,删除数据CommonCRUD在业务应用中,起到重要的作用,简化了大量的代码,U9中70%以上的查询,创建,更新,删除行为,都使用CommonCRUD完成。
它是表示层与持久层的重要桥梁。
3. 使用指南3.1 UIModelQueryUIModelQuery提供数据查询的功能,它使用IUIModel作为参数,返回符合条件的IUIModel数据。
3.1.1 UIModelQuery的调用方法//创建UIModelQuery代理UIModelQueryProxy queryBp = new UIModelQueryProxy();//设置传入参数queryBp.Model = model;//执行查询操作并接受返回值IUIModel result = queryBp.Do();3.1.2传入参数传入参数只有IUIModel对象,UIModelQuery将使用IUIModel中的一些属性,进行数据查询操作,属性如下:属性 功能说明View.ViewDealFlag 只能ViewDealFlag为CommonDealFlag.Load的才加载数据,加载关联数据时,不受此影响。
View.QueryGlobalizationOption 语种信息。
语种信息包括2种选项,1.Auto,只加载当前上下文的语种2.Manual,加载所有语种View.IUIFieldCollection 通过View.IUIFieldCollection产生查询的Select子句 View.SelectOQLString 如果设置了SelectOQLString属性,将替换IUIFieldCollection产生的Select子句View.CurrentFilter 过滤条件,产生Where子句View.EntityFullName 查询的Entity对象,控制From子句View.FromOQLString 如果设置了FromOQLString属性,将替换View.EntityFullName产生的From子句View.PageStrategy.IsUsing 是否进行分页查询,当View.IsMain为True时,View.PageStrategy.IsUsing总是为TrueView.PageStrategy.CurrentPageIndex 当前的页号,控制加载第几页数据View.PageStrategy.PageSize 每页记录的条数3.1.3使用示例示例场景:有一个叫DepartmentUIModel的UIModel,其中包括两个UIView,分别为Department和Person,对应实体DepartmentBE和PersonBE。
视图的关键属性如下:Department的属性ViewDealFlag CommonDealFlag.LoadQueryGlobalizationOption AutoIUIFieldCollection ID, Name,DeptTypeSelectOQLStringCurrentFilterEntityFullName DepartmentBEFromOQLStringPageStrategy.IsUsing TruePageStrategy.CurrentPageIndex 1PageStrategy.PageSize 20IsMain TrueViewName DeptPerson的属性ViewDealFlag CommonDealFlag.Load QueryGlobalizationOption AutoIUIFieldCollection ID, Name,DeptID SelectOQLStringCurrentFilterEntityFullName PersonBEFromOQLStringPageStrategy.IsUsing FalsePageStrategy.CurrentPageIndex 1PageStrategy.PageSize 20IsMain FalseViewName PersonDepartment和Person构架1:N的组合关系示例1:加载Department和Person的数据//创建UIModelQuery代理UIModelQueryProxy queryBp = new UIModelQueryProxy();//设置传入参数queryBp.Model = model;//执行查询操作并接受返回值IUIModel result = queryBp.Do();将会加Department第一页的数据和相应的所有Person的记录 示例2:设置过滤条件UIModel.View[“Dept”].CurrentFilter.OPath=”Name = ‘开发部’”; //创建UIModelQuery代理UIModelQueryProxy queryBp = new UIModelQueryProxy();//设置传入参数queryBp.Model = model;//执行查询操作并接受返回值IUIModel result = queryBp.Do();将会加载Department中开发部的数据和开发部所有Person的记录示例3:综合过滤条件UIModel.View[“Dept”].CurrentFilter.OPath=”Name = ‘开发部’”;UIModel.View[“Person”].CurrentFilter.OPath = “Name like ’王%’”;//创建UIModelQuery代理UIModelQueryProxy queryBp = new UIModelQueryProxy();//设置传入参数queryBp.Model = model;//执行查询操作并接受返回值IUIModel result = queryBp.Do();将会加载Department中开发部的数据和开发部所有姓王的Person的记录示例4:使用上下文进行查询UIModel.View[“Person”].CurrentFilter.OPath = “Name = #erName#”;//创建UIModelQuery代理UIModelQueryProxy queryBp = new UIModelQueryProxy();//设置传入参数queryBp.Model = model;//执行查询操作并接受返回值IUIModel result = queryBp.Do();将会加载Department中第一页的数据和与当前登陆用户姓名相同的Person的记录示例5:查询每个部门的员工数//这个例子中需要对查询的Select和Where部分进行自定义//自定义Select 部份UIModel.View[“Dept”].SelectOQLString = “max(ID),Name, count(ID) “;//自定义Where部份UIModel.View[“Dept”].CurrentFilter.OPath = “ group by Name “;//设置不加载Person的数据,因为我们在这个例子中不需要PersonUIModel.View[“Person”].CurrentFilter.OPath = “1=2”;//创建UIModelQuery代理UIModelQueryProxy queryBp = new UIModelQueryProxy();//设置传入参数queryBp.Model = model;//执行查询操作并接受返回值IUIModel result = queryBp.Do();这个例子执行时,会产生一句如下的OQLselect max(ID) as ID,Name, count(ID) as DeptType from departmentBE group by Name 实现我们加载数据的目的。
注意一个细节,我们把统计的员工数加载到了DeptType字段中,更好的实现方法是新建一个叫PersonCount或其它的字段。
3.2UIModelUpdateUIModelUpdate为UIModel提供创建,更新,删除操作。
它根据记录的状态(Record.State)的值进行相应的操作,详细信息请参见UIModel手册中记录状态一节。
3.2.1 UIModelUpdate的调用方法//创建UIModelUpdate代理UIModelUpdateProxy updateBp = new UIModelUpdateProxy();//设置传入参数updateBp.Model = model;//执行更新操作并接受返回值IUIModel result = updateBp.Do();3.2.2创建记录当记录状态为New时,UIModelUpdate会创建一条相应的记录,如下://创建新记录IEntity new = Entity.Create( view.EntityFullName,null);然后,对new对象进行赋值,将Record的值Copy到new 中,最后调用持久层Session 对象的Commit方法保存。
获得一条新增状态的Record,通常调用View.NewUIRecord方法,如下://创建新记录IUIRecord new = View.NewUIRecord();示例6:创建Dept//建立一条新的记录IUIRecord newDept = model.Views[“Dept”].NewUIRecord();//赋值操作newDept[“Name”] = “设计部”;newDept[“DeptType”] = DeptType.Normal;//此时newDept的ID为负数,State为New//将newDept加入model的Record集合中。