二次开发文档
二次开发需求文档书写指南
需求文档编写指南一份好的需求文档不仅可以使二次开发效果达到需求方预期的功能,还可以加快开发速度。
需求文档理应包括的信息:1.目前网站的版本号,如ShopEx 4.8.5;2.安装了哪些插件,做了哪些改动,为了详细了解需要提供ftp或者源码;3.请我们开发的功能图文描述。
下面给出三个描述开发功能图文需求例子,以作参考。
A.仿其他网站功能1.给出要仿的网站网址2.需要仿的功能截图例如:购物车添加删除按钮的功能需求,图文描述如下鼠标移到购物车文字上下方弹出购物车详细信息,如图所示这样简短的介绍,技术员就一清二楚了~B.在原有网站基础上新增修改功能(原始文档参考/9Xlt5A)1.需要改动界面的链接2.需要改动的界面详细介绍如忘记密码,手机短信取回密码功能描述用户点击忘记密码按钮后,如果填入手机号,则显示红色提示,替换方框内的文字填写完成信息后点击提交如果之前填写的是手机取回,则提示短信已经发送C.大改动的开发(原始文档参考下载链接/AxYCgo)需求是修改运费计算系统,该客户是家具厂自销模式,家具一般国内是通过体积重量来计费的。
首先用户提供了体积重量如何计算的公式介绍体积重量(kg)的计算方法为:长度(cm) x 宽度(cm) x 高度(cm) ÷ 6,000(如快件一般是以陆路运输, 其体积重量会以除数 12,000计算。
计算方法都是按地区及市场惯例决定, 当中可能各有差异。
)/cn/sc/delivery_step/enquiry/rate_enquiry.html根据计算公式可知,每个商品必须拥有长宽高体积重量等信息,作为计算运费的初始数据。
配送方式的界面需有填写运费单价的功能,与原系统计费单价区分。
下单运费显示页面显示出详细的包装信息给客户查看,展示运费是如何计算出来的最后犹豫计费方式复杂涉及到最优包装的选取还需写一个具体的计费例子/BhBHWa总而言之就是具体的图文描述加上耐心,认真的写需求文档,耐心的回复技术员的疑问,相信开发出来的功能一定会让您满意的。
二次开发报告模板
二次开发报告模板篇一:二次开发合同拟稿二次开发合同甲方(盖章):乙方(盖章):授权代表签字:日期:年月日授权代表签字:日期:年月日附注:1、请加盖骑缝章,否则视为合同未签署或生效。
2、甲乙双方的签字代表应为法定代表人或授权代表。
一、项目要求1、项目名称:2、开发内容:3、技术指标二、成果交付1、研究开发成果交付的内容:1.1 文档:1.2 软件产品:2、交付形式、数量2.1 文档:电子文档份,纸质文档份。
2.2 软件产品:以当面形式提交正式软件,原件份。
3、研究开发成果交付的时间:乙方于本合同签订生效后将研究开发成果交付至交货地点。
4、研究开发成果交付的地点:。
三、系统验收1、系统安装调试完毕后,由甲方组织进行一次系统测试,测试通过后出具测试报告,同时进行系统验收,由双方授权代表确认签署《软件二次开发验收单》,乙方同时提供相关成果交付物。
2、如系统最终验收不合格,则乙方应在甲乙双方共同确认的工作日内修改完毕,并经甲方签字确认后验收合格,若甲方验收仍未通过,则按乙方违约责任处理。
四、服务费用与付款方式1、二次开发服务费用的计价方式:二次开发服务费用= 。
2、本项目二次开发服务费用:人*天,即元,大写:元整。
3、付款方式:3.1甲方于本合同生效之日起的个工作日内,向乙方支付本合同总费用的%,即元,大写:。
3.2在甲乙双方签字确认,乙方依据甲方开发需求完成附件一中的所有开发项目并通过甲方测试验收之日起的个工作日内,甲方向乙方支付本合同项下费用的%,即人民币元整,大写:元整。
3.3在甲乙双方签字确认,乙方完成本合同约定的所有开发项目并由甲方实际无问题运行个工作日后即通过项目总体验收。
通过项目总体验收之日起的个工作日内,甲方向乙方支付本合同项下全部费用的%,即人民币元整,大写:元整。
3.4经乙方增值研发部门评估,以上的工作内容的实际开发量为人*天,经甲乙双方相互协调,及考虑到甲乙双方多次合作的情况下,将费用折扣为以上价格,乙方增值开发部门开发计划仍以天的工作内容安排。
二次开发技术文档
ShopExV4.8二次开发技术文档一、开发需求:ShopExV4.8网店系统是一套基于网上快速建店的标准化B2C电子商务系统。
系统集成了最基本最普通最常用的电子商务运作流程及使用功能,可以满足正常的开店需求。
定制可以根据客户的需求对网站进行相应功能的添加修改或者删除,同时定制也存在一定的弊端。
ShopExV4.8以前版本的定制是在原来的程序上修改的所以定制过的网站就不能使用该版本后发布的相关补丁。
ShopExV4.8版本采用MVC开发模式,二次开发解决了定制在原程序上进行修改导致程序不能升级的问题,使新的程序模块可以很好的融合到ShopExV4.8系统中同时也可以继承原有程序的所有功能。
二、技术描述:本着不与原程序冲突的原则,需要新建一个目录去存放二次开发所用的程序,这就要求在ShopExV4.8的配置文件中定义一个存放二次开发程序目录的常量。
同时为了使二次开发程序能够兼容原程序的所有功能也要求要包含原来的控制器文件或模型层文件,通过类继承和函数重载的方式实现原有功能的保留、修改和新功能的开发,当然如果该功能完全与原有功能没有联系则只需继承控制器文件或模型层文件的基类。
三、流程说明:1、配置config.php文件:define(‘CUSTOM_CORE_DIR’,’自定义文件路径’)[自定义文件路径建议和core同级]2、后台菜单新增规则(customSchema.php):格式参照原有后台菜单文件的书写格式但数组名必须为$cusmenu①、新增菜单项此处格式参照adminSchema.php即可,数组名称注意应为$cusmenu②、在已有菜单项中添加根据菜单出现的位置添加不同的参数如在“统计报表”下新增二级菜单“测试二次开发”$cusmenu['analytics']=array('items'=>array(array('type'=>'group','label'=>'测试二次开发','position'=>'after|begin|end|before','reference'=>'访问统计','items'=>array(array('type'=>'menu','label'=>'测试二次开发1','link'=>'index.php?ctl=vip/vote&act=index'),array('type'=>'menu','label'=>'测试二次开发2','link'=>'index.php?ctl=vip/vote&act=index')))));position值及说明:I、after:在某个菜单项的后面,此时reference必须为一个同级已存在的菜单项。
二次开发方案范文
二次开发方案范文二次开发是指对已有软件或系统进行二次开发或功能扩展的过程。
在进行二次开发之前,首先需要明确开发的目标和需求,然后选择适合的开发平台和工具,制定详细的开发计划和任务,最后进行开发和测试工作。
下面是一个关于二次开发方案的具体内容,包括目标和需求分析、平台和工具选择、开发计划和任务制定、开发和测试工作。
一、目标和需求分析在进行二次开发之前,需要明确开发的目标和需求,确保开发的方向明确,确保二次开发能够满足用户的需求。
在目标和需求分析阶段,需要与用户进行充分的沟通和交流,以了解他们的需求和期望。
二、平台和工具选择在选择平台和工具时,需要考虑以下几个方面:1. 开发语言:根据项目需求和开发人员的技术背景选择合适的开发语言,常用的开发语言有Java、C#、Python等。
3. 数据库:根据项目需求选择合适的数据库,常用的数据库有MySQL、Oracle等。
4. 开发工具:选择合适的开发工具能够提高开发效率,例如Eclipse、Visual Studio等。
三、开发计划和任务制定在确定了目标和需求以及选择了合适的平台和工具后,需要制定详细的开发计划和任务,包括开发的阶段、时间和人力资源的分配等。
在制定开发计划和任务时,需要充分考虑项目的复杂度和开发人员的技术水平,确保开发进度和质量。
四、开发和测试工作在进行开发和测试工作时,需要按照开发计划和任务进行组织和安排,充分利用已有的资源和工具,以确保开发的进度和质量。
开发过程中需要遵循良好的开发规范和设计原则,编写高质量的代码和文档,进行充分的测试和调试工作,以确保开发的质量和可靠性。
五、验收和部署在开发完成后,需要进行验收和部署工作。
验收工作主要是对开发的软件或系统进行功能和性能测试,以确保满足用户的需求。
部署工作主要是将开发的软件或系统部署到生产环境中,确保能够正常运行和使用。
总结:二次开发是对已有软件或系统进行二次开发或功能扩展的过程,需要明确目标和需求,选择合适的开发平台和工具,制定详细的开发计划和任务,进行开发和测试工作,最后进行验收和部署。
项目二次开发源代码及详细说明
项目二次开发源代码及详细说明I. 项目介绍本文档描述了一个二次开发项目的源代码及详细说明。
该项目是基于一个开源的企业资源管理系统进行二次开发,以满足特定客户的需求。
原始系统功能包括客户关系管理、订单管理、库存管理等,但客户需要在原始系统的基础上增加一些新的功能,比如业务报表的定制、权限管理的优化等。
为了满足客户的需求,我们需要对原系统进行二次开发,修改和添加一些功能,以适应客户的特定业务需求。
II. 项目目标1. 通过二次开发,实现客户需求的定制化功能,并满足特定的业务需求。
2. 优化原系统的权限管理模块,增强系统的安全性和稳定性。
3. 重构原系统的报表模块,实现业务报表的定制化功能。
4. 对原系统的库存管理模块进行优化,提高系统的性能和稳定性。
III. 项目源代码及详细说明1. 新增功能模块:客户需要系统新增一个产品价格管理模块,方便他们随时根据市场需求调整产品的价格。
我们在系统中增加了产品价格管理的功能模块,客户可以在这个模块中根据自己的需求,对产品的价格进行调整。
以下是新增功能模块的主要源代码及详细说明:```python# 产品价格管理模块import datetimefrom django.db import modelsclass Product(models.Model):name = models.CharField(max_length=100, verbose_name='产品名称')price = models.DecimalField(max_digits=10, decimal_places=2, verbose_name='产品价格') create_time = models.DateTimeField(default=datetime.now, verbose_name='创建时间')class Meta:verbose_name = '产品'verbose_name_plural = verbose_name# 增加产品价格调整记录模型class PriceAdjustRecord(models.Model):product = models.ForeignKey(Product, on_delete=models.CASCADE, verbose_name='产品')old_price = models.DecimalField(max_digits=10, decimal_places=2, verbose_name='调整前价格')new_price = models.DecimalField(max_digits=10, decimal_places=2, verbose_name='调整后价格')adjust_time = models.DateTimeField(default=datetime.now, verbose_name='调整时间')class Meta:verbose_name = '价格调整记录'verbose_name_plural = verbose_name```上面的代码是在原系统中新增的产品价格管理模块的源代码。
wps二次开发案例
wps二次开发案例引言概述:WPS二次开发是指在WPS Office的基础上进行二次开发,根据个人或企业的需求,定制化开发一些功能或插件。
本文将通过五个大点来阐述WPS二次开发的案例,包括自动化任务、数据处理、界面定制、插件开发和云服务集成。
正文内容:1. 自动化任务1.1 自动化文档生成:通过WPS二次开发,可以实现自动化生成各类文档,如报告、合同等。
可以通过设置模板和自定义字段,将数据自动填充到相应位置,提高文档生成的效率。
1.2 批量处理:WPS二次开发可以实现对大量文档进行批量处理,比如批量修改格式、批量替换文本等。
通过编写脚本或插件,可以自动化完成这些操作,节省了大量的时间和人力成本。
2. 数据处理2.1 数据导入导出:通过WPS二次开发,可以实现与数据库的连接,实现数据的导入导出。
可以通过编写脚本或插件,将数据库中的数据导入到WPS Office中进行处理,或将处理后的数据导出到数据库中。
2.2 数据分析:WPS二次开发可以实现对数据的分析和统计。
通过编写脚本或插件,可以实现各种数据分析算法的应用,如排序、过滤、计算等,帮助用户更好地理解和利用数据。
3. 界面定制3.1 自定义菜单和工具栏:WPS二次开发可以实现对菜单和工具栏的自定义,根据用户需求添加或删除相应的功能。
可以通过编写脚本或插件,实现个性化的界面定制,提高用户的使用体验。
3.2 快捷键设置:WPS二次开发可以实现对快捷键的设置和修改。
通过编写脚本或插件,可以根据用户的喜好或习惯,自定义快捷键,提高操作效率。
4. 插件开发4.1 自定义插件:WPS二次开发可以实现自定义插件的开发,根据用户需求添加特定的功能。
可以通过编写脚本或插件,实现各种特定的功能,如自动翻译、图片处理等,扩展WPS Office的功能。
4.2 第三方插件集成:WPS二次开发可以实现与第三方插件的集成。
通过编写脚本或插件,可以将第三方插件集成到WPS Office中,实现更多的功能扩展,提供更多的选择。
Uniscope-二次开发文档API
Uniscope-二次开发文档APIUniscope Globe API 接口说明uniscope.globe空间方法:void createInterface (object div, function onCreated, function onCreateFail);参数: div: 控件创建的位置onCreated:创建成功响应的方法onCreateFail:创建失败响应的方法功能:创建一个新的Globe方法:void addEventListener (object targetObject, string eventID, function callbackListener); 参数: targetObject: 事件的触发者eventID:触发事件IDcallbackListener:响应事件的方法功能:添加一个全局事件方法:void removeEventListener(object targetObject, string eventID, function callbackListener); 参数: targetObject: 事件的触发者eventID:触发事件IDcallbackListener:响应事件的方法功能:移除一个全局事件属性:poiClickedHandler类型:eventHandler功能:poi被点击时触发的事件句柄属性:documentChangedHandler类型:eventHandler功能:文档被修改时触发的事件句柄uniscope.globe.measure方法:void clearResult();参数:无功能:清除所有的测量结果方法:void lineLength (function callbackOnResult);参数:callbackOnResult: 测量完成的响应函数功能:进行空间直线距离的测量功能:挖填方分析方法:void lineOfSight(double srcHeight, double destHeight, String pointString, function callbackOnResult );参数: srcHeight: 原始点的相对高度destHeight: 目标点的相对高度pointString: 视线的顶点集callbackOnResult: 完成后的回调函数功能:挖填方分析uniscope.search方法:void createInterface( String serverUrl);参数:serverUrl:服务的路径功能:uniscope.search初始化方法:void getPoiByKeyword(String keyword, String cityName, int pageIndex, int pageLength, function callbackOnResult );参数: keyword: 查询关键字cityName: 城市名pageIndex: 显示页号pageLength: 每页条数callbackOnResult: 完成后的回调函数功能:POI关键字查询方法:void getPoiByRect(String keyword, String cityName, double north, double south,double east, double west, int pageIndex, int pageLength, function callbackOnResult );参数: keyword: 查询关键字cityName: 城市名north, south, east, west: 矩形的参数pageIndex: 显示页号pageLength: 每页条数callbackOnResult: 完成后的回调函数功能:POI关键字查询方法:void getPoiByCircle(String keyword,String cityName, double centerLon, double centerLat, double radius, int pageIndex, int pageLength, function callbackOnResult );参数: keyword: 查询关键字cityName: 城市名centerLon: 圆形区域中心点经度centerLat: 圆形区域中心点纬度radius: 圆形区域半径pageIndex: 显示页号pageLength: 每页条数callbackOnResult: 完成后的回调函数功能:POI圆形区域查询方法:void getBuildingByKeyword(String keyword, String cityName, int pageIndex, int pageLength, function callbackOnResult );参数: keyword: 查询关键字cityName: 城市名pageIndex: 显示页号pageLength: 每页条数callbackOnResult: 完成后的回调函数功能:Building关键字查询方法:void getBuildingByRect(String keyword, String cityName, double north, double south, double east, double west, int pageIndex, int pageLength, function callbackOnResult );参数: keyword: 查询关键字cityName: 城市名north, south, east, west: 矩形的参数pageIndex: 显示页号pageLength: 每页条数callbackOnResult: 完成后的回调函数功能:Building矩形区域查询方法:void getBuildingByCircle(String keyword,String cityName, double centerLon, double centerLat, double radius, int pageIndex, int pageLength, function callbackOnResult );参数: keyword: 查询关键字cityName: 城市名centerLon: 圆形区域中心点经度centerLat: 圆形区域中心点纬度radius: 圆形区域半径pageIndex: 显示页号pageLength: 每页条数callbackOnResult: 完成后的回调函数功能:Building圆形区域查询方法:void getBuildingByPoint(String keyword,String cityName, double ptLon, double ptLat, int pageIndex, int pageLength, function callbackOnResult );参数: keyword: 查询关键字cityName: 城市名ptLon: 经度ptLat: 纬度pageIndex: 显示页号pageLength: 每页条数callbackOnResult: 完成后的回调函数功能:Building点选查询eventHandler对象方法:void addEventHandler(object targetObject, function callbackListener);参数: targetObject: 事件的触发者(可设置为null)callbackListener:响应事件的方法功能:添加一个响应函数方法:void removeEventHandler(object targetObject, function callbackListener); 参数: targetObject: 事件的触发者(可设置为null)callbackListener:响应事件的方法功能:移除一个响应函数方法:void clearEventHandler();参数: targetObject: 事件的触发者(可设置为null)callbackListener:响应事件的方法功能:清除所有的响应函数方法:void notifyEvent(object argument);参数:argument: 参数功能:触发事件IUSEarth对象属性:ImageLayers类型:IUSLayers功能:获得Image 图层的集合属性:ModelLayers类型:IUSLayers功能:获得Model图层的集合属性:POILayers类型:IUSLayers属性:VectorLayers:类型:IUSLayers功能:获得Vector 图层的集合属性:UserDocument类型:IUSUserDocument功能:获得用户数据文档属性:GlobeObserver类型:IUSGlobeObserver功能:获得摄像机属性:TrackControl类型:IUSTrackControl功能:获得飞行路线控制器属性:Factory类型:IUSFactory功能:对象工厂属性:Measure类型:IUSMeasure功能:测量模块属性:ShapeCreator类型:IUSShapeCreator功能:几何对象创建属性:Paint类型:IUSPaint功能:绘制简单几何图形的接口属性:HtmlBalloon类型:IUSHtmlBalloon功能:HTML弹出气泡属性:Event类型:IUSEvent功能:事件模块属性:RootPath类型:StringIUSLayers接口属性:Count类型:Int功能:获得图层的数量属性:Item类型:IUSLayer功能:获得某一图层;IUSLayer接口属性:Name类型:String功能:获得图层的名字属性:Visible类型:Boolean功能:获得/设置图层的可见性IUSUserDocument接口方法:void ImportXmlString(String xmlString, bool bAsync);参数:xmlString: 导入的XmlStringbAsync: 是否异步读入功能:将一个XmlString导入USEarth中方法:String LoadXmlFile(String xmlFilePath);参数:xmlFilePath: 文件的路径功能:从本地文件中读入xmlString方法:void SaveXmlFile(String xmlFilePath, String xmlString); 参数:xmlFilePath: 文件的路径xmlString: 需要写入的xmlString功能:将xmlString写入本地文件中方法:void DeleteXmlFile (String xmlFilePath); 参数: xmlFilePath: 文件的路径功能:删除本地文件中的xml方法:void DeleteXmlFile (String xmlFilePath); 参数: xmlFilePath: 文件的路径功能:删除本地文件中的xml IUSGlobeObserver接口方法:void Forward();参数:无功能:视点向前移动方法:void Backward();参数:无功能:视点向后移动方法:void MoveLeft();参数:无功能:视点向左移动方法:void MoveRight();参数:无功能:视点向右移动方法:void TurnLeft();参数:无功能:视点向左旋转方法:void TurnRight();参数:无功能:视点向右旋转方法:void LookUp();参数:无功能:视点向上旋转方法:void LookDown();参数:无功能:视点向下旋转方法:void ZoomIn();参数:无功能:视点靠近目标点方法:void ZoomOut();参数:无功能:视点远离目标点方法:void Resume();参数:无功能:视点返回全球状态方法:void NorthView();参数:无功能:视点返回到正北姿态方法:void TopView();参数:无功能:视点返回到顶视姿态方法:void Stop();参数:无功能:停止当前视点的运动状态方法:void FlyTo( double lon, double lat, double alt, double heading, double tilt, double range); 参数: lon: 目标点经度lat: 目标的纬度alt: 目标点高程heading: 朝向(与正北方向的夹角 0 <= heading <= 360 )tilt: 俯仰(垂直指向地心方向的射线的夹角。
二次开发文档介绍
二次开发文档介绍
一、程序简介二次开发文档是一种软件开发中常用的技术文档,它主
要是为了提供给程序的开发人员更加详细的程序规范、开发工具、程序架
构以及相关的详细说明等等,为程序开发人员提供统一的开发指南。
二、
二次开发文档的内容1、程序的结构说明:主要包括程序的整体架构、流
程模型、功能模型、数据模型等;2、程序的功能说明:主要描述程序实
现的功能及其功能性;3、程序的开发工具:主要说明程序开发所需要使
用的相关工具,以及如何使用;4、程序开发环境:主要介绍程序开发所
需要的软件环境、配置及相关文件;5、接口文档:主要包括程序与其他
程序、数据库之间的接口文档;6、安全文档:主要包括程序的安全设置、安全策略等;7、测试文档:主要包括程序的测试计划、测试环境、测试
用例、测试方法等。
三、二次开发文档的用途二次开发文档主要作为技术
文档使用,有助于程序开发过程中的更高级功能模块的把控和控制,在把
控这个模块的各个方面的同时,也能帮助开发人员更快的完成程序的开发、测试和维护等等。
K3单点登录二次开发指导文档
单点登录二次开发指导文档目录1.概要信息 (3)1.1.目的 (3)1.2.范围 (3)2.二次开发实现步骤 (3)2.1.Visual Basic单点登录二次开发实现步骤 (3)2.1.1. Demo简介 (3)2.1.2. 实现步骤和流程 (4)2.1.3. 注意事项 (7)2.2.Visual C#单点登录二次开发实现步骤 (8)2.2.1. Demo简介 (8)2.2.2. 实现步骤和流程 (9)2.2.3. 注意事项 (12)单点登录二次开发实现步骤 (13)2.3.1. Demo简介 (13)2.3.2. 实现步骤和流程 (13)2.3.3. 注意事项 (17)1.概要信息1.1. 目的本文档主要描述如何在第三方系统中,使用K/3门户系统的单点登录功能,以方便与K/3各应用系统如K/3门户、K/3、K/3HR进行集成应用。
阅读本文需要具备一定的软件开发知识,最好具备相应语言如Visual Basic、Visual C#、 开发经验,同时也需要对单点登录的业务逻辑有一定的了解,关于单点登录业务逻辑的信息文档,请参见K/3门户的帮助系统。
1.2. 范围本文档描述单点登录的二次开发功能实现,主要分3种语言分包进行描述,分别为VB、C#、,当然,K/3门户系统的单点登录也支持其他开发语言,具体请参考已有语言的逻辑进行二次开发工作。
2.二次开发实现步骤2.1. Visual Basic单点登录二次开发实现步骤2.1.1.Demo简介正常安装K/3后,请在服务器打开(K3安装目录一般为C:\Program Files\Kingdee\K3ERP)/K3Portal/ PortalHelp/Demo/VB/目录,其中VBPassportDemo.vbp为采用Visual Basic 语言开发的单点登录Demo,运行时界面如下图:录入正确的用户和密码后,选择单点登录,进入正常的第三方业务系统,界面效果如下图:2.1.2.实现步骤和流程下面以Demo为例,详细讲解二次开发流程1、假定VBPassportDemo为第三方的业务系统,并具备自己的用户和登录系统,假定原登录界面为FrmLogin,原主控为frmMain2、在FrmLogin增加3个控件,首先增加一个GroupBox(登录方式),然后增加2个OptionButton,分别命名为opt1(命名用户登录),opt2(单点登录),其中命名用户登录为原有的登录方式,改进后增加了如下图的内容3、增加一个Module,命名为PassportLogin,假定原系统存在登录逻辑校验函数为LoginVB,则增加函数LoginPassword,该函数首先调用单点登录组件进行单点登录验证,当单点登录验证通过之后,再调用原有登录逻辑LoginVB进行登录具体如下:4、在登录界面FrmLogin中,调用单点登录函数,如下图5、注销功能实现,当退出主控台时,需要注销单点登录信息,注销实现如下图:6、在FrmMain界面调用注销功能,代码如下图:2.1.3.注意事项1、关于门户Url地址和门户用户关联:因为单点登录是使用K/3门户的用户进行登录的,而第三方系统有自己的用户系统,因此,需要进行两者的用户关联,本Demo默认使用K/3的用户关联系统,第三方系统需要替换成自己的用户关联处理函数下面介绍一下K/3的用户关联逻辑2、K/3系统的Url地址在安装有K/3的机器上,通过开始菜单-程序-金蝶K3-金蝶K3 服务器配置工具-帐套管理,进入后点击系统(&S)菜单-系统参数设置,见如下界面该参数在VB中通过下列代码可以获取3、K/3单点登录用户关联在安装有K/3的机器上,通过开始菜单-程序-金蝶K3-金蝶K3 服务器配置工具-帐套管理,选择具体的帐套,进入菜单帐套(&A)-用户管理,在用户管理界面中,选择一个用户,双击,弹出如下界面,其中包括“对应门户用户”的信息2.2. Visual C#单点登录二次开发实现步骤2.2.1.Demo简介正常安装K/3后,请在服务器打开(K3安装目录一般为C:\Program Files\Kingdee\K3ERP)/K3Portal/ PortalHelp/Demo/ C#/目录,其中CSharpPassportDemo.csproj为采用Visual C#语言开发的单点登录Demo,运行时界面如下图:录入正确的用户和密码后,选择单点登录,进入正常的第三方业务系统,界面效果如下图:2.2.2.实现步骤和流程下面以Demo为例,详细讲解二次开发流程1、假定CSharpPassportDemo为第三方的业务系统,并具备自己的用户和登录系统,假定原登录界面为FrmLogin.cs,原主控为FrmMain.cs2、在FrmLogin增加3个控件,首先增加一个GroupBox(登录方式),然后增加2个OptionButton,分别命名为opt1(命名用户登录),opt2(单点登录),其中命名用户登录为原有的登录方式,改进后增加了如下图的内容3、增加一个Class,命名为CPassportLogin.cs,假定原系统存在登录逻辑校验函数为LoginCSharp,则增加函数LoginPassword,该函数首先调用单点登录组件进行单点登录验证,当单点登录验证通过之后,再调用原有登录逻辑LoginCSharp进行登录具体如下:4、在登录界面FrmLogin中,调用单点登录函数,如下图5、注销功能实现,当退出主控台时,需要注销单点登录信息,注销实现如下图:6、在主控台FrmMain调用注销功能,代码如下图:2.2.3.注意事项1、关于门户Url地址和用户关联:因为单点登录是使用K/3门户的用户进行登录的,而第三方系统有自己的用户系统,因此,需要进行两者的用户关联,本Demo默认使用K/3的用户关联系统,第三方系统需要替换成自己的用户关联处理函数2、门户Url地址:本Demo未取实际的Url设置地址,实际应用中要增加门户Url设置界面,并调用相关接口提取门户Url地址,本Demo采取了简化处理,直接取本机,如下图3、单点登录用户关联如VB本版介绍,需要进行用户关联设置并提供相关接口进行用户映射2.3. 单点登录二次开发实现步骤2.3.1.Demo简介正常安装K/3后,请在服务器打开(K3安装目录一般为C:\Program Files\Kingdee\K3ERP)/K3Portal/ PortalHelp/Demo/ ASPNET/目录,其中包括Login.aspx和Default.aspx,该页面是采用语言开发的单点登录Demo,首先在IIS服务器建立一个虚拟目录为ASPNET,并将路径指向该目录。
二次开发接口资料文档
接口开发文档一、开发包目录结构1.1demo 文件夹包含了s dk 接口调用源代码,可供二次开发参考。
使用C++开发的M FC 程序。
1.2dll 文件夹包含了二次开发所需的所有动态库,demo 编译好的e xe 文件需要放在该文件夹内才可以运行。
1.3include 文件夹包含了二次开发所需要的头文件。
1.4lib 文件夹包含了二次开发所需要的l ib 静态库。
1.5DSS 二次开发指南(C++).pdf指导二次开发用户如何新建V S2005 工程运行d emo 文件夹中的d emo。
1.6Version.xmldpsdk 开发包的程序版本信息。
1.7常见问题解答.pdf二次开发常见问题以及解决方式。
1.8大华平台S DK 开发手册(C++版).chm二次开发接口使用说明。
二、术语和缩略语1、D PSDK:DSS 平台二次开发S DK 包2、C MS:中心管理服务3、D MS:设备管理模块4、d emo:程序示例(功能类似D SS 平台客户端)5、w eb 管理员端:在浏览器中输入D SS 平台的i p 即可打开管理员端6、C ameraID:通道i d,形如:10000010$1$0$07、D eviceID:设备i d三、Demo 操作方法3.1 运行d emo把“demo/bin/”目录下面的3个文件,如下图所示拷贝到“dll”文件夹下面,运行Test_DPSDK_Core.exe。
3.2 登陆平台图 1 登陆界面登陆界面如图 1 所示,其中: IP:DSS 平台ip 地址;端口:9000;用户名:web 管理员端配置的用户;密码:web管理员端配置的用户对应的密码。
点击“登录”按钮,登陆平台。
登陆成功的界面如图2所示:123图2主界面上图选中的 5个模块分别是:1、组织树;2、实时视频;3、本地录像;4、云台操作;5、执行结果。
3.3 主界面功能介绍3.3.1、组织树操作步骤:点击“加载所有组织结构”按钮加载组织结构是其他操作的前提,是为了获取 DSS平台上所有的设备信息。
wps二次开发案例
WPS二次开发案例一、介绍WPS Office是一款功能强大的办公软件套件,包括文字处理、表格计算和演示文稿等功能。
WPS二次开发是指在WPS Office的基础上进行二次开发,根据自己的需求进行定制和扩展,以满足个性化的办公需求。
本文将通过案例分析,深入探讨WPS二次开发的具体应用。
二、案例一:自动化生成报告2.1 需求分析某公司每月需要生成大量的报告,包括销售报告、财务报告等。
传统的生成方式是手动填写模板,耗时且容易出错。
因此,需要开发一个自动化的报告生成工具,能够根据输入的数据自动生成报告。
2.2 解决方案1.使用WPS二次开发工具,通过调用WPS Office的API实现自动化生成报告的功能。
2.开发一个报告生成程序,通过读取数据库或Excel表格中的数据,将数据填充到报告模板中。
3.使用WPS Office的模板功能,设计好报告的样式和格式,并保存为模板文件。
4.程序在生成报告时,先根据模板文件创建一个新的文档,然后将数据填充到文档中,并保存为最终的报告文件。
2.3 实施步骤1.创建一个WPS Office的文档对象。
2.打开报告模板文件,并将其作为基础文档。
3.读取数据库或Excel表格中的数据。
4.根据数据的内容,使用WPS Office提供的API将数据填充到文档中的相应位置。
5.保存生成的报告文件。
2.4 效果与总结通过WPS二次开发,成功实现了自动化生成报告的功能,大大提高了工作效率。
只需输入数据,程序就能自动生成报告,减少了手工操作的时间和错误。
同时,使用WPS Office的模板功能,使得报告的样式和格式统一,提高了报告的质量和专业性。
三、案例二:批量处理文档3.1 需求分析某公司需要对大量的文档进行批量处理,包括转换格式、合并文档等操作。
传统的处理方式需要逐个打开文档并进行操作,耗时且效率低下。
因此,需要开发一个批量处理文档的工具,能够自动完成这些操作。
3.2 解决方案1.使用WPS二次开发工具,通过调用WPS Office的API实现批量处理文档的功能。
老客户二次开发方案
老客户二次开发方案1. 简介本文档旨在为企业提供一个有效的老客户二次开发方案,以提升客户满意度、增加业务扩展机会。
在本方案中,我们将介绍老客户二次开发的概念、目标、步骤,并提供一些实施策略和注意事项。
2. 老客户二次开发概述老客户二次开发是指基于已有的客户关系,通过进一步开发和定制服务,满足客户特定需求的一项重要业务。
通过与老客户建立更深入的合作关系,企业能够提供个性化的解决方案,加强客户与企业间的紧密联系。
3. 目标•提升客户满意度:通过开发定制化解决方案,满足客户特定需求,增强客户的满意度,提高客户忠诚度。
•增加业务扩展机会:通过与老客户紧密合作,了解其需求,探索新的业务增长点,为企业带来更多的商机。
4. 老客户二次开发步骤步骤一:需求调研1.与客户进行深入沟通,了解其当前的业务痛点、需求和目标。
2.分析客户需求,确定可行的二次开发方案,并与客户进行讨论和确认。
步骤二:方案设计1.根据客户需求和确认,设计详细的二次开发方案。
2.确定开发技术栈,评估开发难度和工期,制定开发计划和进度安排。
步骤三:开发实施1.根据方案设计和计划,进行二次开发实施。
2.建立适当的开发环境,编写代码并进行测试与调试。
3.根据客户反馈和需求变更,进行必要的调整和修改。
步骤四:验收交付1.进行二次开发项目的内部测试和验收。
2.向客户呈现二次开发成果,并进行用户培训和开发文档的交付。
步骤五:支持与跟进1.提供上线后的技术支持与维护,确保系统的稳定运行。
2.定期与客户进行沟通,了解二次开发的效果和客户反馈,并根据需要进行调整和改进。
5. 实施策略和注意事项•保持与客户的密切合作和沟通,及时解决问题和需求变更。
•确保开发团队具备足够的技术能力和经验,以保证开发项目的质量和进度。
•根据项目规模和复杂程度,合理安排开发资源和时间,确保项目的顺利进行。
•灵活应对客户需求变化,及时调整开发方案和计划,以满足客户需求。
6. 结论老客户二次开发是为企业创造更多机会和价值的重要战略。
云豹直播二开文档
云豹直播二开文档一、背景介绍云豹直播是一款流行的直播平台,提供了强大的直播功能和丰富的互动体验。
然而,对于一些个性化需求,用户可能需要进行定制开发,以满足特定的业务需求。
本文将介绍云豹直播的二次开发文档,指导开发人员进行二次开发工作。
二、二次开发准备2.1 开发环境搭建在进行云豹直播的二次开发之前,需要搭建相应的开发环境。
请按照以下步骤进行开发环境的搭建:1.安装开发工具集,推荐使用Visual Studio Code等编辑器。
2.下载并安装Node.js,通过Node.js的包管理器NPM安装相关依赖。
3.获取云豹直播开发者账号,并申请API密钥。
2.2 开发文档查阅云豹直播提供了详细的开发文档,开发人员可以通过官方网站或开发者后台进行查阅。
开发文档中包括产品概述、API文档、SDK集成、示例代码等内容,开发人员可以根据具体需求选择查阅相应文档。
三、二次开发流程3.1 创建应用在进行二次开发之前,需要先创建一个应用。
请按照以下步骤进行应用的创建:1.登录云豹直播开发者后台。
2.进入应用管理页面,点击新建应用按钮。
3.根据提示填写应用信息,包括应用名称、应用图标、回调地址等。
4.创建成功后,系统会分配一个应用ID和应用密钥,用于后续开发使用。
3.2 集成SDK云豹直播提供了多种SDK供开发人员使用,包括iOS、Android、Web等。
请按照以下步骤进行SDK的集成:1.选择相应的SDK版本,下载并解压到项目目录。
2.导入SDK到项目中,并配置相关依赖。
3.初始化SDK,设置应用ID和应用密钥。
4.通过SDK提供的接口,实现相关功能。
3.3 接口调用云豹直播提供了丰富的API接口,开发人员可以通过调用接口实现自定义功能。
请按照以下步骤进行接口调用:1.根据开发文档查阅相应接口的说明和参数。
2.使用SDK提供的方法进行接口调用,传入相应参数。
3.处理返回结果,实现自定义功能。
3.4 开发示例云豹直播提供了多个示例代码,方便开发人员参考和使用。
二次开发培训文档
二次开发培训文档一、ECOLOGY系统框架结构1、主要的程序结构EcologyClassbean 存放编译后的CLASS文件js 系统中使用的JA V ASCRIPT和VBSCRIPT脚本Css 系统中JSP页面使用的样式ImagesImages_faceImages_frame 系统中使用的图片的存放目录Crm..Workflow 该功能分文件夹存放每个功能的文件WEB-INFProp 系统配置文件存放Service 系统的接口配置文件的存放二、说明一个JSP页面,一个JA V A程序的基本组成,如何阅读JSP页面1、一个jsp页面通常需要包含什么内容2、如何阅读一个JSP页面由于ECOLOGY系统支持多语言,因此在JSP页面上一般不出现中文,全部使用标签的形式来显示中文:比如:在IE上显示“姓名”那么在JSP页面中将通过<%=SystemEnv.getHtmlLabelName(413,user.getLanguage())%>这样的形式来表示,其中的数字413就是表示姓名,同时可以通过“select labelname from htmllabelinfo where indexid=413 and languageid=7”来获取到“姓名”这个显示名称,其中languageid=7表示中文显示名称,languageid=8表示英文显示名称.3、JA V A程序的基本组成在ECOLOGY中开发JA V A程序建议继承weaver.general. BaseBean,在BaseBean 中主要封装了两个方法:写日志文件,获取配置文件中的参数值。
三、几个常用的底层类的说明最基本的底层类,数据库操作类,上传下载文件,如何构建缓存,基本的工具类Ecology系统底层包开发指南.doc四、页面权限控制的说明,怎样在页面中引用权限,怎么样新增一个权限,如何在新开发的模块上引入权限控制在这一部分将描述:新增的页面如何保持和ECOLOGY的风格保持一致;新增的页面上引用ECOLOGY中的权限;新增的页面上引用新的ECOLOGY中还没有的权限;1、可以根据<泛微协同商务系统(Ecology)_JSP式样编写指南>保证新开发的页面在风格上和原有系统保持一致泛微协同商务系统(Ecology)_JSP式样编写2、使用ECOLOGY分页控件实现数据的分页显示泛微分页控件使用帮助及规范.doc3、引用系统中的权限首先从系统的权限设置中找到需要引用的权限名称,如下如找到“地址类型维护”这个权限,其ID为41,然后通过“select rightdetailfrom systemrightdetail where rightid=41”得到其rightdetail=“AddAddressType:Add”,那么在JSP页面中通过如下语句,就可以使得只有的“地址类型维护”这个权限用的用户可以查看该页面<% if(!HrmUserVarify.checkUserRight("AddAddressType:Add ", user) ) {response.sendRedirect("/notice/noright.jsp");return;}%>4、新增新的权限控制新功能的查看新增功能模块添加权限控制.d o c五、系统的人员组织结构的介绍1、主要数据结构HrmResource(人员基本信息表).doc HrmSubCompany(分部信息表).docHrmDepartment(部门信息表).doc2、如何从缓存中获取人员信息(对三个缓存的简单介绍)六、对流程,文档数据的存放说明(主数据,明细数据,一般信息等在数据库中如何存放,主要为了考虑报表的问题)1、文档的主要数据结构文档信息的主要存储表DOCDETAIL:文档信息存储表,主要存放文档的基本信息DOCDETAILCONTENT: 文档内容存放表(如果是ORACLE数据库,如果文档的类型是HTML文档,那么文档内容存放在该表中,SQLSERVER数据库不用该表)DOCIMAGEFILE:文档,附件关联表,此表记录文档和附件(WORD,EXCEL格式文档在数据库中按照附件格式存放)的关系(即一个文档关联了几个附件)IMAGEFILE:附件路径存放表,此表记录了文档的附件(或者WORD,EXCE)存放在文件服务器上的位置DOCSHARE:文档共享表SHARINNERDOC:文档共享明细表,此表存放了该表具体共享给那些用户了DocDetail.doc ImageFile.doc DocImageFile.doc shareinnerdoc.docDocShare.doc2、流程的主要数据结构这里主要介绍流程的数据存放结构及如果通过流程类型获取到流程的字段信息,流程的载体分为表单和单据两类,表单和单据的区别在于:所有使用表单的流程数据存放在同一个表中,而单据每个单据对应着一张独立的数据表1、表单一、对于表单而言流程的数据信息存放在三个数据表中Workflow_requestbase:该表存放了流程的基本信息:标题,创建人,创建时间,流程类型等等Workflow_form:该表存储了流程的具体信息通过REQUESTID字段和Workflow_requestbase表关联Workflow_formdetail:该表存放了流程的明细信息,同样通过REQUESTID字段和Workflow_requestbase表关联二、通过流程的类型如何获取该流程使用了Workflow_form和Workflow_formdetail表中哪些字段在Workflow_form和Workflow_formdetail表中存放了大量字段,所有使用表单的流程的字段都在这两个表中,如何获取每个流程使用了那些字段呢?A、找到流程的类型ID,假定为wfidB、找到流程用了哪个表单select formid from workflow_base whereid=wfid and isbill=’0’C、获得该表单用到了哪些主字段:select(select fieldlable from workflow_fieldlable where workflow_fieldlable.fieldid=workflow_formfield.fieldid and langurageid=7andworkflow_fieldlable.formid=workflow_formfield.formid)as name,(select fieldname from workflow_formdictwhere id=fieldid)from workflow_formfield whereformid=上面获取的FORMID and (isdetail is null orisdetail=’’)哪些明细字段:select(select fieldname fromworkflow_formdictdetail where id=fieldid)fromworkflow_formfield where formid=上面获取的FORMID andisdetail=’1’2、单据对于表单而言流程的数据信息存放在三个数据表中Workflow_requestbase:该表存放了流程的基本信息:标题,创建人,创建时间,流程类型等等Workflow_form:该表只存放Workflow_requestbase和单据表之间的关系信息各单据主表:该表存储了流程的具体信息通过REQUESTID字段和Workflow_requestbase表关联,如何获取该表呢:A、找到流程的类型ID,假定为wfidB、找到流程用了哪个单据select formid form workflow_basewhere id=wfid and isbill=’1’C、通过单据ID可以获取到该单据使用的字段Select * from workflow_billfield where billid= formidD、通过单据ID找到其用了那个表存储流程主信息,那个表存储流程明细信息select tablename from workflow_bill where id= formidselect tablename from workflow_billdetailtablewhere id= formid各单据主明细表:该表存放了流程的明细信息,同样通过REQUESTID字段和Workflow_requestbase表关联3、流程的其他信息表结构流程处理人情况表Workflow_currentoperator:此表存储了流程当前未操作者,已操作者等信息workflow_requestlog 流程处理意见表:此表存储了流程处理人处理过的审批意见workflow_requestviewlog 流程的查看日志workflow_requestbase.doc workflow_bill.doc workflow_base.doc workflow_currentoperator.docworkflow_requestLog.doc七、如何新建,定制一个客户化的单据新建单据的好处,在于可以比较容易到把新建单据表中的信息和其他信息进行一些必要的操作八、系统已经有可开发的接口的培训1、短信接口可以通过该接口实现其他短信网关或者硬件短信设备进行在OA中发送短信的操作通用短信接口实现方式及使用说明.doc2、单点登录接口ECOLOGY提供了通过用户映射和模拟其他系统登录窗体的方式实现多系统之间的单点登录接口Ecology系统接口指南---单点登录篇.doc3、数据源和计划任务接口在ECOLOGY系统中,可以定义多个其他系统的数据连接,通过该连接可以和其他系统的数据库直接连接,同时也可以设置“计划任务”,系统根据设置定时制定执行设定的计划。
ProE二次开发设置文档
Pro/E二次开发程序设置与调试安装Pro/E首先确保你正确安装了Pro/EPro/E开发工具Toolkit的目录结构:设置包含文件和库文件然后在你的VS2005IDE中设置好包含文件和库文件目录。
点击工具->选项菜单,弹出选项对话框1.加入包含文件:在安装目录下<安装目录>\protoolkit\includes2.加入库文件:在安装目录下<安装目录>\protoolkit\i486_nt\obj新建工程新建一个工程1.选择MFC DLL模板;2.填入项目名称,点击确定;3.在应用程序设置页,选择“使用共享MFC DLL的规则DLL”4.点击完成。
设置工程属性点击项目->属性菜单开始设置项目属性。
1.在C/C++标签下预处理器页面,预处理器定义中添加一条PRO_USE_VAR_ARGS宏。
3.在语言页设置将wchar_t视为内置类型为否(/Z c:wchar_t-)4.在连接器标签->输入页面a)附加依赖项中添加要附加的依赖库文件:protk_dllmd.lib,wsock32.lib,mpr.lib。
b)在忽略特定库中添加要忽略的库文件:msvcrt.lib。
5.在链接器->命令行标签->附加命令选择中填入/FORCE设置完成以上内容后即可编译成功。
编辑源文件重新编译你的工程注册和运行程序1.编写一个注册文件Protk.dat,该文件描述了二次开发程序的注册信息。
典型的文件结构如下:语法意义如下:name:为你的二次开发程序指定一个单独的名字。
startup:指定程序模式,这里是DLL模型。
exec_file:你编译出来的动态链接库的放置路径。
text_dir:应用程序使用的菜单和消息文件的放置路径。
allow_stop:程序运行停止。
delay_start:延迟启动。
end:注册文件结束2.在工程目录下新建一个Text文件夹,然后在Text文件夹下面,新建一个user_msg.txt启动Pro/E主程序,选择工具->辅助应用程序菜单(Tools->Auxiliary Application)4.然后点击注册(Register)按钮,选择前面编写的注册文件protk.dat。
showdoc二次开发案例
以下是一个简单的showdoc二次开发案例,用于展示如何使用自定义函数和模板来扩展showdoc的功能。
案例名称:自定义函数和模板扩展showdoc功能一、需求分析showdoc是一款常用的文档生成工具,用于将文档内容转换为HTML、PDF等格式。
但是,有时候用户需要自定义一些功能,例如添加自定义样式、调整排版等。
因此,我们需要对showdoc进行二次开发,以实现这些功能。
二、实现方案在这个案例中,我们将使用自定义函数和模板来实现以下功能:1. 添加自定义样式2. 调整段落排版3. 插入自定义图像具体实现步骤如下:1. 安装和引入showdoc库首先,我们需要安装showdoc库,并在代码中引入它。
2. 创建自定义函数我们创建一个名为“custom_function”的自定义函数,用于添加自定义样式和调整段落排版。
该函数接受一个参数“content”,表示要处理的文档内容。
3. 创建自定义模板我们创建一个名为“custom_template”的自定义模板,用于插入自定义图像。
该模板定义了一个名为“{image}”的占位符,用于插入图像。
4. 使用自定义函数和模板处理文档内容在主程序中,我们使用showdoc库将文档内容传递给自定义函数进行处理,并使用自定义模板插入图像。
最后,我们将处理后的文档内容输出到指定的输出路径。
三、代码实现以下是一个简单的代码实现示例:自定义函数:custom_function.py```pythondef custom_function(content):# 添加自定义样式和调整段落排版content = content.replace('\n', '<br>') # 添加换行符content = content.replace('*', '<em>') # 添加斜体样式return content```自定义模板:custom_template.html```html<html><body>{image}</body></html>```主程序:main.py```pythonfrom showdoc import Document, render_to_file, TemplateNotFoundError, custom_function, add_custom_template, save_as_pdf, save_as_html, output_dir, doc_template_dir, html_template_dir, render_html, render_pdf, ImageNotFoundError, parse_content, output_dir_from_template, create_pdf, create_html, pdf_extensions, image_extensions, text_extensions, listdir, glob, replace_string, markdownify, reindent_text, make_markdown, remove_tags, split_textblocks, ispdfable, ishtmlable, setlocale, strip_ansi, normalize_html, markdownifyfile, parsefiles, file2text, markdownifyfilelist, markdownifydirlist, addtextblock, addimageblock, addimageblocklist, addimageblockdirlist, addimageblockdirlistglobbed, addimageblockdirglobbedglobbedglobbedglobbedfileglobbedfileglobbedfilelistfilelistfilelisthtmlta gspanthenewfileblocks1markdownmardowntexthtmltobeerxlndigipaddtocolumntablecellsrtshov eerrwritebase64copybytesreplaceandmodifypdfpdffilterargsadobepdfgenlegacyxdialogimagesim agesfilterexcelreplacejsongraphplaintextmessageextdeletetextblockaddtextblocktohtmltemplatea ddtextblocktopdftemplateaddimageblocktohtmltemplateaddimageblocktopdftemplateaddimage blocktodoctemplateaddimageblocktoexceltemplateaddimageblocktoplaintexttemplateaddimage blocktomarkdowntemplateaddtextblocktomarkdowntemplateaddtextblocktomarkdownfiletempl ateaddtextblocktomarkdownfilelisttemplateaddtextblocktomarkdownfilelisttodoctemplateallfiles aslistdictmarkupsonsysfoldersimulatelegacyfilesyncdocsimportedtextblocksimagesignaturesharec ontentreplaceinlinescriptsinsertpdftableinserthtmltablesplitcontentwithpagebreaksreadfilesand markdownifycontentwithpagebreaksallfilesaslistdictmarkupsonsysfoldersyncdocsimportedtextblo cksimagesignaturesharecontentreplaceinlinescriptsinsertpdftableinserthtmltableallfilesaslistdictmarkupsonsysfoldersimulatelegacyfilesallfilesaslistdictmarkupsonsysfoldersyncdocsimportedtext blocksimagesignaturesharecontentandthenewfilesyncdocsimportedtextblocksimagesignatureshar econtentallmarkdowns2imageshowdocpyextensionsextractfileextensionsupdateimagefilenamesr eadtextfromdirectoryreadmarkdownfromdirectoryallfilesaslistdictshowdocmarkdowntodocbase6 4encodingremoveansi。
二次开发技术文档
二次开发技术文档了解系统结构程序为MVC 3层结构,模型/ 视图/ 控制器。
●模型是前后台公用。
完成业务逻辑,所有的数据库操作,文件等资源调用,都由此层实现。
●控制器则是前后台独立。
负责业务模型的调用,拼接,变量的转换等等。
●视图层采用类似smarty的实现。
在任何时候都有一个全局变量$system指向唯一的一个内核类:core/kernel.php控制器负责所有的变量的转换,包括对外界的变量转换。
像胶水一样粘合各个业务model,并在其中的数据交互过程中做一些数据转换过程。
最终将变量抛到模板层。
模板层负责编译成html输出,这里我们创建了大量的smarty插件来减少开发者的重复工作量。
结构图公共类图公共函数库公共函数库位于/core/func_ext.php,它在内核加载时首先被加载,对全系统有效。
其中包含若干php5函数的php4模拟版本:●file_put_contents●json_encode●json_decode●ftp_chmod●array_diff_key●http_build_query运行过程商派Commerce B2B标准版前后台调度都分别通过各自目录下一个名为index.php的入口文件进行,入口文件接受控制器、方法等的输入参数,调度给对应的控制器方法执行并输出结果。
index.php会调用kernel。
Kernel基础类提供模型对象加载,插件入口,错误处理,设置管理,输入输出,第三方类库加载等基础服务。
前后台及安装入口程序在初始化时,都会初始化一个对应的内核类,这个类在前台是shopCore.php,后台时是adminCore.php。
这两个文件都是继承core/kernel.php文件。
该内核类首先会形成一个名为system的指向自身的全局对象,然后根据传入参数调用对应的控制器方法运行。
控制器层与模型层都会产生对该全局system对象的调用来使用基础服务。
并且控制器和模型层在自身被实例化之后都可以使用$this->system来引用内核对象。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Jspxcms无侵入式插件开发(二次开发)教程之一:概述Jspxcms支持无侵入式插件和二次开发,无需修改系统原有代码,即可无缝整合Entity、Service、Controller、功能菜单、权限、标签、国际化等功能。
系统中“插件--简历管理”就是以这种方式实现的,下面就以“简历管理”讲解Jspxcms插件和二次开发的方法。
本帖隐藏的内容需要回复才可以浏览配置文件位置:/WEB-INF/conf/plugin。
所有的配置文件都必须在这个目录,在该目录下的配置文件会自动加载。
在该目录下新建自己的文件夹,可以是任何名字,如:abc、novel等,本例为plug。
即/WEB-INF/conf/plugin/plug配置文件说明application.properties:功能菜单、权限、国际化、Entity都与这个文件相关。
context-dao.xml:Dao的加载。
context-service.xml:Service的加载。
controller-back.xml:后台Controller的加载。
controller-fore.xml:前台Controller的加载。
context-directive.xml:标签的加载。
其他与插件开发相关的文件目录/WEB-INF/messages/plugin/plug:后台国际化文件位置/WEB-INF/messages/plugin/plugfore:前台国际化文件位置/WEB-INF/views/plug:后台jsp文件位置/files/1/bluewise/plug_resume.html:插件的前台模版插件源代码包名:com.jspxcms.plugJspxcms无侵入式插件开发(二次开发)教程之二:菜单与权限本帖隐藏的内容需要回复才可以浏览菜单和权限配置文件:/WEB-INF/conf/plugin/plug/application.properties一级菜单配置(分号为分割符)1.menu.650=navigation.plug;nav.do?menuId=650;nav_plug复制代码650:是后台导航一级菜单的编号,编号大小决定菜单的前后位置。
其值可以根据需要调整,如330、970,但不要与系统菜单或其他插件菜单重复。
系统菜单通常为menu.100,menu.200,menu.600等,系统菜单定义文件在/WEB-INF/conf/application.propertiesnavigation.plug:菜单名称。
这里使用了国际化,也可以直接用中文,比如“我的插件”。
nav.do?menuId=650:菜单链接地址。
其中650需与前面的值一样。
nav_plug:权限值。
其中plug通常与配置文件目录名称一样。
如目录为abc,则应为nav_abc。
也可不一样,但不能与其他一级菜单权限名称一样。
二级菜单配置(分号为分割符)1.menu.650.100=resume.management;plug/resume/list.do;plug:resume:list;create@plug:resume:create;copy@plug:resume:copy;edit@plug:resume:edit;save@plug:resume:save;update@plug:resume:update;delete@plug:resume:delete复制代码650:二级菜单所属的一级菜单编号。
100:二级菜单编号。
其值的意义和一级菜单编号一样,用于确定二级菜单的前后位置。
resume.management:二级菜单名称。
可以直接用中文,如“小说管理”。
plug/resume/list.do:功能菜单的链接地址。
需与Controller中的地址对应,否则会找不到页面。
plug:resume:list:功能菜单的权限。
需与Controller中list方法的权限对应,否则会报没有权限。
create@plug:resume:create:新增按钮的权限值。
其中create是国际化,可以用直接用中文,如“新增@plug:resume:create”。
其中plug:resume:create是该按钮的权限值,需与Controller中对应的create方法权限值一致。
copy@plug:resume:copy:意义和上面一样,后面的以此类推。
com.jspxcms.plug.web.back.ResumeController代码片段1.package com.jspxcms.plug.web.back;2.@Controller3.@RequestMapping("/plug/resume")4.public class ResumeController {5. @RequiresPermissions("plug:resume:list")6. @RequestMapping("list.do")7. public String list(......) {8. ......9. }10.11. @RequiresPermissions("plug:resume:create")12. @RequestMapping("create.do")13. public String create(......) {14. ......15. }16. ......17.}Jspxcms无侵入式插件开发(二次开发)教程之三:Entity本帖隐藏的内容需要回复才可以浏览实体类Entity配置文件:/WEB-INF/conf/plugin/plug/application.properties1.entityManagerFactory.packagesToScan.plug=com.jspxcms.plug.domain复制代码plug:通常与配置文件所在目录一样,也可不一样,但不能与其他相关配置同名。
com.jspxcms.plug.domain:Entity所在包名。
不使用主键自增策略,将主键放到数据库中的一个表里。
1.create table plug_resume2.(3. f_resume_id int not null,4. f_site_id int not null,5. f_name varchar(100) not null comment '姓名',6. f_post varchar(100) not null comment '应聘职位',7. f_creation_date datetime not null comment '投递日期',8. f_gender char(1) not null default 'M' comment '性别',9. f_birth_date datetime comment '出生日期',10. f_mobile varchar(100) comment '手机',11. f_email varchar(100) comment '邮箱',12. f_expected_salary int comment '期望薪水',13. f_education_experience longtext comment '教育经历',14. f_work_experience longtext comment '工作经历',15. f_remark longtext comment '备注',16. primary key (f_resume_id)17.)18.engine = innodb;19.alter table plug_resume comment '简历表';20.alter table plug_resume add constraint fk_plug_resume_site foreign key (f_site_id)21. references cms_site (f_site_id) on delete restrict on update restrict;复制代码1.@Entity2.@Table(name = "plug_resume")3.public class Resume implements java.io.Serializable {4. private Integer id;5.……6.7. @Id8. @Column(name = "f_resume_id", unique = true, nullable = false)9. @TableGenerator(name = "tg_plug_resume", pkColumnValue = "plug_resume", table = "t_id_table",pkColumnName = "f_table", valueColumnName = "f_id_value", initialValue = 1, allocationSize = 1)10. @GeneratedValue(strategy = GenerationType.TABLE, generator = "tg_plug_resume")11. public Integer getId() {12. return this.id;13. }14.15. public void setId(Integer id) {16. this.id = id;17. }18.……19.}复制代码需注意以下三个值,其中plug_resume为表名: = "tg_plug_resume", pkColumnValue = "plug_resume"2.generator = "tg_plug_resume"Jspxcms无侵入式插件开发(二次开发)教程之四:Dao本帖隐藏的内容需要回复才可以浏览Dao配置文件:/WEB-INF/conf/plugin/plug/context-dao.xml1.<jpa:repositories base-package="com.jspxcms.plug.repository"2. transaction-manager-ref="transactionManager"3. entity-manager-factory-ref="entityManagerFactory"4. factory-class="mon.orm.MyJpaRepositoryFactoryBean"5. repository-impl-postfix="Impl">6.</jpa:repositories>复制代码其中com.jspxcms.plug.repository为dao接口所在包。