HCSoft框架开发手册.docx_第1页
HCSoft框架开发手册.docx_第2页
HCSoft框架开发手册.docx_第3页
HCSoft框架开发手册.docx_第4页
HCSoft框架开发手册.docx_第5页
已阅读5页,还剩53页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

HCSoft.JVA(Net)逻辑结构界面UI界面UI界面UI业务BLL业务BLL业务BLL数据DAL数据DAL数据DAL文件应用API数据库数据库VCMDAOLFC.NE基础配置文件App.XML数据库登录管理用户管理部门管理角色管理日志管理模块管理操作管理参数设置权限管理流程管理新闻管理下载管理图像管理文档管理链接管理异常管理Web服务管理目录一、 概述61. 特点62. 引用6二、 约定71. 包(命名空间)72. 注释73. 命名约定94. 程序目录结构10三、 函数与类参考101. JS参考102. 访问数据库112.1. 数据库连接112.2. 表ID112.3. 操作数据库113. mon包123.1. Arithmetic123.2. CalculateExpression133.3. Codes133.4. Configuration143.5. DynamicProperty143.6. Expresstion143.7. Json153.8. KeyValue153.9. ModuleTools153.10. Str163.11. TreeFunction163.12. ZTreeData173.13. ZTreeDataFunction174. mon.ui包184.1. AjaxResult184.2. HtmlElement184.3. PageUtil184.4. ModuleUI195. mon.tag206. mon.annotation包207. mon.action包20四、 配置文件231. web.xml232. app.xml232.1. Configuration节232.2. Interface节242.3. 节262.4. App.XML配置技巧27五、 业务层291. 约定与要求29六、 数据库介绍301. 模块及相关表311.1. 模块表Sys_Module311.2. 模块控制参数表Sys_ModuleControl2321.3. 模块头表Sys_ModuleHead331.4. 模块操作表Sys_ModuleOperate341.5. 模块操作列表样式Sys_ModuleOperateStyle341.6. 操作列表342. 权限控制相关表352.1. 组织机构表Sys_Organization352.2. 部门表Sys_Dept352.3. 用户表Sys_Person362.4. 角色表Sys_Role372.5. 角色-用户关系表Sys_PersonRole382.6. 角色-权限表Sys_RoleAuth382.7. 用户-权限表393. 流程相关表393.1. 流程表Swf_Flow403.2. 流程步骤表Swf_FlowStep403.3. 步骤-部门表Swf_StepDept413.4. 步骤-角色表Swf_StepRole413.5. 步骤-人员表Swf_StepPerson413.6. 流程任务表Swf_FlowTask423.7. 流程任务跟踪表Swf_FlowTaskTrace424. 其他表434.1. 模板表Sys_Template434.2. 新闻表Sys_News434.3. 文档表Sys_Document444.4. 下载表及下载记录表Sys_DownRecord444.5. 图像表Sys_Image454.6. 链接表Sys_Link464.7. 日志表Sys_Log464.8. 表名表Sys_Table474.9. 更新表(升级记录表)Sys_Update47七、 模块开发471. 模块控制参数(ModuleControl)471.1. 公共部分481.2. 列表控制521.3. 录入表单控制531.4. 详细显示控制541.5. 数据验证格式551.6. 使用技巧562. 模块开发实例57一、 概述HCSoft框架包括基于.Net和Java两套框架(以下简称框架),是基于jQuery 1.7、DWZ、zTree 3.3、APS.Net MVC3.0(Struts2)、Linq(JPA+Hibernate)为基础进行开发,目的是为公司各个项目提供统一的编程规范,并尽量减少与业务无关的代码量,同时提供一些如用户管理、角色管理、模块管理、操作管理、流程管理、导出Excel(word,wps)等与项目无关的通用基础功能。1. 特点n 采用成熟的JavaScript框架进行开发,减少客户端脚本的编写,同时可兼容多种浏览器n 各个项目的数据层(DAO或Model)由公司统一生成,各项目不能自已生成n 页面文件的DOCTYPE采用xhtml.0 Transitional,该文档类型下,与html4.0文档类型相比,部分特性有较大的变化,如div中不指定绝对高度时, 即使内容超长DIV也不会有滚动条。n 绝大多数时候,将不能再使用百分比来设置高度,各页面需要使用DWZ提供layoutH来设置自适应页面高度n 页面文件统一采用UTF-8编码n .Net和Java框架尽可能相同的代码与结构,但存在由于开发语言的区别而带来的区别。2. 引用1、 jQuery1.7.1 :一种轻量级的JavsScript 框架,官方网站:/2、 zTree:国人开发的基于jQuery的树形控制,使用方便,功能强大。“官方”网站:http:/www.ztree.me3、 DWZ:基于jQuery的轻量级UI框架,网站:4、 jqPlot:纯JavaScript图形控件,使用方便,支持各种图形(柱形图、线图、饼图、仪表盘等等)。官方网站:。二、 约定1. 包(命名空间)(一)、命名空间 HCFCommon=HCSoft.Frame.CommonHCFDal=HCSoft.Frame.DALHCFBLL=HCSoft.Frame.BLLPRJ=HCSoft.PRJ.BLLPRJDal=HCSoft.PRJ.DAL(三)、包mon2. 注释(一)、 代码分区(.NET)功能相似的一组方法(如业务对象的CRUD基本操作)必须进行分区,分区必须写出功能说明#region 返回用户所能管理的部门与单位#endregion(二)、 文件头注释/* * 图像管理Action */(三)、 类注释 /* * author Liu.zg * date 2012/8/8 * category 图像管理Action * */public class Dept extends HCFrameObject (四)、 公共方法注释/* * 获取对象 * * param AID * return */public static SysDept getEntity(Long AID) (五)、 私有方法与程序内部注释要求:n 程序内部(每个函数)的注释不得少于代码行的30%n 写有意义的注释,做相关的事情的注释前加上序号,如1,1.1,1.2/返回一个部门的全部下级部门(不包括独立部门的下级部门)private static List GetChildrenDept(DAL.LFCDB ctx, Decimal AID) List retList = new List(); /1.直接下级部门 List deptList = retList.AddRange(deptList); /2.针对每个下级部门(如果是独立的组织机构,则不找),再找下级部门 foreach (DAL.Sys_Dept dept in deptList) if (dept.IsIndependent != true) /9.返回结果 return retList;(六)、 代码修改1) 由于功能增加或修改而修改的代码,必须在文件的开头注释修改时间、修改人员、增加或修改的功能2) 由于程序错误而修改代码,必须在修改处注释修改时间、修改人员以及具体的修改情况3. 命名约定(一)、 取有意义的变量、类、接口名称(二)、 类、公共方法与接口:采用Pascal命名规则(三)、 内部变量:可采用camel命名规则(四)、 业务层约定:1) 返回单个实体的getEntity()2) 返回多个实体或全部实体:getEntities()3) 删除实体:bool delete(EntityType data)、bool delete(Decimal AID)4) 保存实体:bool save(EntityType data)5) 根据条件返回实体:getEntityByCondName(.) 、getEntitiesByCondName()6) 按分页情况返回数据,分页参数放在可变参数之前其他参数之后:getEntitesByDeptID(,int PageSize,int PageNo,)7) 返回记录数量的方法,名称必须以Count结束,如:getEntitesCount(),getEntitesByDeptIDCountry()8) 返回结果有特殊格式的:getEntitiesWithStyle(.)9) 如:按月+机构 WithDayAndOrgan10) 将代码转换为对应值的:convertToName(Objecty AData) /供MC使用11) 为ModuleControl专用的返回列表的方法名必须以ForMC结尾:如functionNameForMC(Object AData)12) 简单的含义非常清晰的单循环变量,可以采用i,j,k4. 程序目录结构三、 函数与类参考工欲善其事,必先利其器!函数与类参考提供对各种JS二次封的函数以及常用的工具类和框架提供的需要在项目中使用的全部类的详细介绍。1. JS参考提供对DWZ框架的完善与修改以及zTree树操作的封装等,不要直接修改各类开源框架的源代码HCSoft.CheckOnzTree2. 访问数据库包:mon.dao.类名称:CommonDAO相关文件:web.xml,配置JPA的数据源提供的方法:2.1. 数据库连接打开数据库连接:CommonDAO getInstance(String jpaDb)开始事务:void beginTransaction()事务提交:如果失败则回滚并返回false Newpublic static boolean commitTransaction()2.2. 表ID类名称:EntityManagerHelper产生表可用的ID:Long getTableIDFromObject(Object AObject, String APersist)Long getTableIDFromObject(Object AObject, String APersist, int ANumber)2.3. 操作数据库类层次结构:HCPrjObjectHCFrameObjectHCSoftObjectCommonDAO类名称:CommonDAO方法:private static EntityManager em;/JPA操作的EntityManager对象返回数据集:List findAll(String qryString, int PageSize, int PageIndex, Object. args)List findAllBySql(String qryString, int PageSize, int PageIndex, Object. args)查找单条记录:Object find(final String qryString, Object. args)Object findBySql(final String qryString, Object. args)返回记录数:int getTotal(String qryString, Object. args)int getTotalBySql(String qryString, Object. args)3. mon包3.1. ArithmeticgetProgramNameFromUrl()getActionNameFromUrl()replaceAction(String url, String newAction)genNavTabid(Long AModuleId)getConfigPara(String XPath)getFileName(String absoluteFilePath)3.2. CalculateExpressionString processInlineExpression(String AInlineExpStr, Object AData)Object calculate(String expression)Object calculate(String expression, Object Obj)3.3. Codes代码转换:String codeInXML(String ACodeName, String ACodeList)String codeInXML(String ACodeName, String ACodeList, Boolean AWithoutParenthesis)Object sqlToName(String ASQLType, String ASQL, Object ACodeList)Object sqlToName(String ASQLType, String ASQL, Object ACodeList, Object AData)dataToValue(String ADataListStr, Object ACodeList)funcToValue(String AConvertParameter, Object ACode)代码列表:List getCodesFromXML(String ACodeName, Boolean AIsRequiredAll)List getCodesFromData(String ADataParameter, Boolean AIsRequiredAll)List getCodesFromSQL(String ASQLType, String ASQL, Boolean AIsRequiredAll)getCodesFromSQL(String ASQLType, String ASQL, Boolean AIsRequiredAll, Object AData)List getCodesFromFun(String AConvertParameter, Object AParaObject)3.4. ConfigurationHashtable getAppSetting()String getConfigPara(String XPath)3.5. DynamicProperty创建对象:Object newInstance(String className)Object newInstance(String className, Object args)获取对象属性()支持多级Object getProperty(Object owner, String propertyName)boolean setProperty(Object target, String propertyName, Object propertyValue)Object invokeMethod(Object owner, String methodName, Object args)boolean copyModuleObject(Object sourceObject, Object targetObject, String excludeFields)boolean assignModuleObject(Object sourceObject, Object targetObject, String assignExpr(赋值表达式,目标对象属性=源对象属性,多个之间用逗号隔开,”Name=deptName,Note=Description”)3.6. ExpresstionDouble expValue(String expStr)Object expValue(String expStr, Object obj)3.7. JsonString Serialize(Object AObject)3.8. KeyValueprivate Object key = ;/KEYprivate Object value = ;/值private Object parentKey;3.9. ModuleTools * 聚集函数:未测试(如果要使用,需要进行测试) * 调用例子:ModuleTools.aggregate(对象列表,Sum(对象属性),聚集字段(对象属性),插入位置FLGW值(ModuleTools.NEWOBJECTPOSITION_LAST)List aggregate(List dataList, String aggregateExpression, String groupField, int newObjectPosition) * 对象列表插入 * 将一个对象列表插入到目标对象列表最开始,源对象和目标对象的类型可以不一致,只对属性名称相同的进行拷贝List insertModuleObjectList(List sourceObjectList, List targetObjectList) * 对象列表拷贝 * 拷贝一个对象列表到新的对象列表之中,源对象和目标对象的类型可以不一致,只对属性名称相同的进行拷贝List copyModuleObjectList(List sourceObjectList, List targetObjectList) * 对象合并 * 合并两个对象列表(可排除一部分属性)List mergeModuleObjectList(List sourceObjectList, List targetObjectList, String linkExpression, String excludeFields) * 用指定的赋值方式对对象进行合并 * 合并两个对象列表(通过赋值字段表达式)mergeModuleObjListAssign(List sourceObjectList, List targetObjectList, String linkExpression, String fldLinkExpression) * 列表对象属性拷贝List copyModuleObjectListProp(List sourceObjectList, List targetObjectList, String sourceProp,String targetProp)3.10. Strboolean isNullOrEmpty(String str)boolean isStrEqual(String str1,String str2)boolean isStrEqual(Object obj1,Object obj2)boolean isChinese(char c)int getStringLength(String AValue)String getSpecifyLengthStr(String AStr, int ALen)String urlEncode(String AStr)String htmlEncode(String s)3.11. TreeFunctionDWZ 树HTML代码String genTreeHtml(List AData, String AKey, String AParentKey, String AText, String AUrl, String AOtherPara)查找子节点List findChildList(List AData, String AKey, String AParentKey, Object AParentValue)是否有子节点Boolean hasChildList(List AData, String AKey, String AParentKey, Object AValue)找到根节点KeyValue findRootNode(List ADataList)3.12. ZTreeData与zTree树节点数据相关的类3.13. ZTreeDataFunction形成ZTreeData的方法:从其他数据构造、List genDataFrom(List ASourceData, String AFieldList)根据条件设置某项属性void SetDataByCondition(List AData, String ATargetExpr, String AConditionExpr)将ZTreeData列表以JSON格式输出为zTree所需要的JSON格式数据String ToJson(List AData)判断一个树List中指定节点是否有下层子节点Boolean hasChildList(List AData, String AParentValue)Boolean hasChildList(List AData, String AKey, String AParentKey, Object AValue)查找一个树形List中某个节点的子节点List findChildList(List AData, String AParentId)List findChildList(List AData, String AKey, String AParentKey, Object AParentValue)4. mon.ui包4.1. AjaxResult public int statusCode ; public String message ; public String navTabId ; public String rel ; public String callbackType ; public String forwardUrl ;public String data;4.2. HtmlElementgenHiddenInputgenTextInputgenPasswordInputgenTextAreaInputgenDateInputDomaingenDateTimeInputDomaingenListboxFromListgenRadioFromListgenCheckboxFromListgenTreeListboxFromList4.3. PageUtil private int pageSize; /每页显示条数 private int totalCount; /记录总数 private int pageIndex; /当前页,(在程序中并不会改变) private int numPageShow ; private String onchange;private List pageList = null;4.4. ModuleUIgenDataRows/* * 根据模声控制参数,生成列表界面,产生的列表,不包括Table,全部由TR行组成 * * param AModuleControlName * 模块内部代码名称 * param AData * 产生列表的数据 * param AOperateButtons * 需要的按钮,如view,edit(class=button * style=margin:20px)(url=.)(event=.) * param AIsShowHeader * 是否显示表头 * param AXH * 序号列,如果小于0则不显示序号 * param AURLPostfix * 链接字段或按钮的URL后缀 * param ARowSpanFieldList (支持A+B+C进行合并)New * 纵向合并即RowSpan字段 * param ADisplayFieldList * 要显示的列的属性(字段)列表,用逗号隔开genInputForm/* * * param AModuleControlName * param AData * param ATHStyle * param ATDStyle * return */genDetail/* * param AModuleName * 模块名称 * param AData * 数据 * param ATHStyle * 表头样式 * return 产生详细显示时的页面 */getAllDefaultValues New/* * 获取并设置缺省值 * param AModuleControlName * param AData */5. mon.tagFunctions:boolean hasAuth(List AuthList,String AOperate)6. mon.annotation包HcAuthService:authHcModel:name7. mon.action包ImageAction:显示一个图片BaseAction:全部Action的基类,项目必须从该类直接一个新的基类,作为项目全部Action的基类protected final Logger logger = Logger.getLogger(this.getClass();/ HTTP标准对象protected HttpServletRequest request;protected HttpSession session;protected ServletContext application;protected HttpServletResponse response;/ Ajax调用返回结果的数据protected AjaxResult ajaxResult;/ 分页相关的数据protected PageUtil pageInfo = new PageUtil(0, 0, 10);private String page;private String pageHiddenStr;/ 页面提交过来的IDprotected Long id;/ 表单提交相关数据private String saveAction = save;private String onSubmit = return validateCallback(this, dialogAjaxDone);private String saveButton;/ table表头行中按钮相关数据private String operateHtml = ;private String operateList;/ 查询条件中按钮及相关数据private String queryOperateList;private String queryOperateHtml = ;/ 传递给页面的数据private String content;private String content1;/ form或QueryString相关数据/ 页面基本URL(不含_与.action)之间的内容private String baseUrl;/ 当前URL中的QueryString(不包括与分页相关的参数)private String otherQueryString;private String otherPagePara;/ 日志相关/ 当前用户protected SysPerson currentsysPerson;protected Long userId;/ 与当前模块及权限相关数据private static SysModule currentModule = null;private List operateAuthList;String ajaxDone(String tabId, String AForwardUrl)String ajaxDone(String tabId, String AForwardUrl, Object AData)String ajaxDoneNoClose(String tabId, String AForwardUrl)ajaxDoneNoClose(String tabId, String AForwardUrl, Object AData)String ajaxFailed(String AMessage)String getActionUrl(String actionName)String getActionUrl(String actionName, String queryString)int getPageXh()String getPageParaUrl()返回页面中需要使用的QueryString参数,会产生分页参数与otherPagePara的参数boolean hasAuth(String Operate)String getOperateAuths(String OperateList)String getOperateAuths()String getModuleControlName()String getNavTabId()void addLog(String AOperate, String ABeforeData, String AAfterData)outputString(String str)String getRemortIP(HttpServletRequest request)public String execute() return browse();public String browse() return browse;public String list() return browse();public String add() return edit();public String edit() return edit;public String link()return ajaxFa

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论