400-888-0545
五大平台全开源 /
FIVE PLATFORMS
OA流程管理平台
全功能流程引擎。基于任务驱动,开放式服务驱动,高灵活性、扩展性...
了解更多
OA内容管理平台
OA门户管理平台
OA数据中心
OA服务管理平台
移动OA办公全开源 /
MOBILE OFFICE
全终端OA| 移动OA原生APP| 钉钉集成| 微信集成| WeLink集成
OA内置应用全开源 /
BUILT IN APPLICATIONS
考勤管理
工作中心
日程管理
企业网盘
个人便签
-
收起
会议管理
网络会议
全文检索
企业AI
热点信息
-
收起
客户管理
云笔记
资产管理
企业社区
公文管理
-
收起
工作管理
系统日志
脑图设计
-
收起
OA平台产品特色 /
PRODUCT FEATURES
全平台OA
支持Windows、Linux、AIX、MacOS及国产操作系统,支持x86、ARM、MIPS、POWER等芯片。
了解更多
全终端OA
支持Chrome、Firefox、IE、Safari、Opera,支持钉钉、微信、WeLink及第三方APP接入。
了解更多
国产化OA
支持全国产化芯片、操作系统、数据库,浏览器,并符合信创OA环境体系,生成安全的OA系统。
了解更多
低代码OA开发
提供高效率的OA开发平台的同时,通过可视化的工具快速构建项目流程、信息、门户、报表以及服务。
了解更多
开放源代码
确保全代码开源,安全可控的开源OA,可在Github、Gitee上下载代码编译并进行二次OA开发。
了解更多
OA国标版式公文
拥有GB/T 9704-2012(党政机关公文格式)标准版式公文模板,无需加载任何插件和控件,支持OA移动端编辑。
了解更多
智能化OA办公
OA系统支持语音办公,人脸识别,内置企业AI分析推荐引擎,可通过机器学习自定义OA办公使用场景。
了解更多
OA应用市场
基于丰富的OA开发经验,提供各类插件、组件、模板以及专业应用,客户可免费下载安装OA平台,进行OA系统二次开发。
了解更多
数据交互
提供多种数据访问方式,可自定义数据访问接口,实现多系统间数据交互,使OA系统数据协同功能更强大。
了解更多
集群扩展
采用微服务架构,支持横向和纵向集群扩展,提供高可用OA系统能力,支持公有云和私有云的PaaS部署。
了解更多
业务实现 /
BUSINESS IMPLEMENTATION
所见即所得的门户管理平台,可以轻松结合O2OA提供的认证设置与其他系统进行单点认证集成。
降低企业人力资源成本,提高人均产值。规范化、数据化的管理,为企业未来的发展奠定基础。
将企业工作的制定、分解、进展汇报痕迹化,数据更新动态化,带来更直观的责任考核,支持企业运营目标的实现。
便利清晰的日报周报管理界面,帮助员工自我管理和自我提升,实现团队管理和分享。
项目管理系统中,包含工作项目的进度、人员、时间等信息以实现多维度的管控,充分满足企业需求。
执行力管理平台能够将任务细化,让员工按质按量完成自己的任务,全面提高企业的无纸化办公效率。
企业网站和门户|人力资源管理系统|战略工作管理系统| 企业日报周报管理|项目管理系统|执行力管理平台
新闻资讯 /
NEWS
07
2022-01
中小企业如何提高办公OA软件的利用率?
OA办公软件的利用率可以作为衡量办公系统应用效果的指标。为了更好的实现企业OA的目标和作用,必须要保证OA办公软件的良好应用效果。OA办公软件可以提高中小企业内部办公效率、降低企业经营管理成本,是企业信息化和数字化转型升级过程中不可或缺的一部分。提高OA办公软件利用率的办法有很多,但一般包括OA需求和实施计划保障、OA产品、厂家选择和服务保障、OA推广中企业内部的制度和执行保障等等方面。1、规划好OA功能和需求一些企业用户在进行OA需求和规划中往往只有一个模糊的概念,过于简单的概念和需求将影响OA办公软件的作用和实用性,从而影响整个OA系统在后续正式使用中的利用率。有些企业在选择OA时,没有结合自己的实际需要,导致OA的应用始终停留在表面,使用率低下;也有些单位对OA办公软件规划的需求和功能太简单,用户单位对OA要求不高,或者对OA了解不够深入,从而导致后续OA系统在使用中可有可无。因此,OA负责人需要有一定的企业信息化经验,结合企业的实际管理,合理规划OA功能和需求,明确OA的目标和效果。2、OA软件产品的保障OA办公软件的功能需求应与企业的实际需求相结合,产品使用起来要简单便利,良好的用户体验,能使用户更容易熟悉和接受,有利于应用推广,提高软件的利用率。因为中小企业对于OA的需求复杂多样,所以一款OA具有良好的可扩展性、易于维护都是必要条件。1)OA办公软件基本功能完善,内部沟通协作更高效方便,是软件利用率好的基本保证。2)OA产品是否具有良好的可扩展性和可维护性,是软件适用性和用户满意度的保证,是提高系统利用率的技术保证。3)手机oa使用方便、高效、携带方便,使用不受时间和地域限制,是提高oa办公软件利用率的有力保证。3、保证OA与企业管理制度相结合中小企业OA推广执行力不足,缺乏相应的制度保障,是OA办公软件利用率低的主要原因。OA办公软件作为一款管理软件,必须与企业的日常管理体系、业务功能紧密结合,故需要一定程度的二次开发和功能扩展,这是企业OA使用和推广成功的前提。在推广和使用过程中,不同部门的需求和立足点也不同,会有各种问题和意见。因此,制度保障和执行力到位尤为关键,需要做到以下几点:1)OA反映企业的日常管理如:企业内部财务管理制度(报销、付款等)、人事管理制度、考勤管理制度等,都需要考虑在OA中,真正实现OA系统与企业管理的紧密结合,建立高效协作的管理平台。2)建立oa内部运行管理体系在企业内部推广之初,OA办公软件必然会遇到各种人为的阻力和困难。为了保证OA系统后续的正常运行,企业需要有相关的制度作为保证。3)OA内部推广过程中需要高执行力在具体的推广中,可能会有各种不同的反对意见。当反对意见较多时,企业负责人会质疑OA软件的作用,OA负责信息化的人也会面临很大的压力。随着越来越多人热情的降低,OA办公软件的应用可能越来越边缘化,甚至最终被迫搁置。所以OA内部推广时需要保证执行力,促进和推动OA办公系统的使用。4、通过移动OA办公提高使用率手机所拥有的移动性、便利性等优点,是PC端所不具备的,手机办公可以让用户更轻松、方便、高效地完成工作,更容易被中小企业用户接受,企业内部的各种信息可以及时发送到目标用户的手机上,实现高效的协作模式,提高办公软件的利用率。5、OA+即时通信软件提高用户粘度企业日程管理中,沟通甚为重要,可以说是管理的重要手段之一。传统的沟通方式包括电话、电子邮件、面谈等等,目前使用即时通信工具进行日常高效的沟通也已成为许多企业的选择。即时通信软件对个人用户和企业用户都具有较高的粘性。在办公软件中进行相关审批和业务处理时,使用即时通信软件进行沟通辅助,能有进一步提高管理效果。目前,许多企业都使用微信进行沟通管理,工作沟通管理和个人信息不能很好地区分。OA办公软件与即时通信软件互补后,能连接企业OA办公平台内的组织结构,更好地分离工作和生活,更方便用户管理和信息管理控制,使用户对OA的粘性更高,进一步提高OA办公软件的利用率和应用效果。O2OA开源协同办公项目,O2OA致力于让企业以更低成本实现信息化系统建设,使用相对简单的二次开发,可视化搭建,创建出一款适合本企业的协同办公系统,它适用于企业OA、协同办公类信息化系统的建设和开发,适配安卓和IOS移动APP,能深度集成钉钉和企业微信,为推动企业信息化添砖加瓦。(转自公众号:浙江兰德网络)
17
2022-01
OA系统价格太昂贵?来用开源项目搭建一个吧!
今天给大家介绍的,确确实实是一款鲜为人知,但是好用的全开源协同OA项目,它的名字叫做:O2OA企业应用开发平台(简称O2OA平台)。O2OA平台是什么?O2OA开源企业应用开发平台基于J2EE分布式架构,集成移动办公、智能办公、支持私有化部署,是适用于企业OA、协同办公类信息化系统建设和开发的开源协同办公平台。它适配IOS和安卓移动端APP,也能深度集成钉钉和企业微信。O2OA平台全开源全免费吗?O2OA平台是真正全代码开源,无任何隐藏闭源组件,平台开源开放,透明度高,并且全功能免费,无任何功能和人数限制。但是O2OA平台遵从AGPL-3.0开源许可协议,如若闭源分发参与商业项目需进行商业授权。同时,平台原厂也提供高质量的技术支持服务,能有效协助用户完成信息化项目建设。不卖关子,直接放上相关链接:官方网站 : http://www.o2oa.netGitee : https://gitee.com/o2oa/O2OAGithub : https://github.com/o2oa/o2oaO2OA平台有哪些特色?✔代码全部开源,开发者可以下载源码进行任意,编译成自己的信息化平台。✔平台全功能免费,无任何功能和人数限制。✔支持私有化部署,下载软件安装包后可以安装在自己的服务器上,数据更安全。✔全终端:支持Chrome、Firefox、IE、Safari、Opera,支持钉钉、微信、WeLink及第三方APP接入。✔低代码开发:提供高效率的OA办公开发平台的同时,通过可视化的工具快速构建项目流程、信息、门户、报表以及服务。✔智能化办公:支持语音办公,人脸识别,内置企业AI分析推荐引擎,可通过机器学习自定义OA办公使用场景。✔国标版式公文:拥有GB/T 9704-2012(党政机关公文格式)标准版式公文模板,无需加载任何插件和控件,支持OA移动端编辑。O2OA平台有什么样的功能?★流程管理★全功能流程引擎。基于任务驱动,开放式服务驱动,高灵活性、扩展性,事件定义丰富。包含人工、自动、拆分、合并、并行、定时、服务调用、子流程等功能。应用场景丰富,可轻松实现公文、合同、项目管理等复杂工作流应用。★信息管理★具有权限控制能力的内容管理平台。支持自定义栏目、分类,表格,表单,多级权限系统,能轻松实现知识管理、通知公司、规章制度、文件管理等内容发布系统。★门户管理★具体可视化表单编辑,支持HTML直接导入,支持各类数据源,外部应用集成能力的,是一个所见即所得的门户管理平台。适用于实现企业信息化门户系统,可以轻松结合系统提供的认证设置与其他系统进行单点认证集成。★服务管理★可以在前端脚本的形式,开发和自定义web服务,实现与后端服务数据交互的能力。★数据中心★可以通过配置轻松实现数据透视图展示,数据统计、数据可视化图表开发等等功能。★智能办公★拥有语音办公、人脸识别、指纹认证、智能文档纠错、智能填表推荐等智能办公特色★移动办公★支持安卓/IOS手机APP办公,支持与企业微信和钉钉集成,支持企业私有化微信部署★开箱即用★还提供如考勤管理、日程管理、会议管理、脑图管理、便签、云文件、企业社区、执行力管理等开箱即用的应用供企业选择。O2OA平台部分演示图(多图预警!!!)应用市场: 公文管理:会议管理:考勤管理:支持全终端:脑图功能:企业论坛:企业通讯录:固定资产:CRM客户管理:工作任务管理:Office在线协作:当然,除了以上演示图外,O2OA平台还有许多其他的功能,目前也在持续更新迭代中。O2OA开源协同办公项目,O2OA致力于让企业以更低成本实现信息化系统建设,使用相对简单的二次开发,可视化搭建,创建出一款适合本企业的协同办公系统,它适用于企业OA、协同办公类信息化系统的建设和开发,适配安卓和IOS移动APP,能深度集成钉钉和企业微信,为推动企业信息化添砖加瓦。(转自公众号:浙江兰德网络)
06
2022-01
OA基础知识介绍
中文:办公自动化,英文:OfficeAutomation,简写后即为我们常说的OA,它是利用网络和软件技术构件的协同办公和内部管理平台。OA是组织行为管理软件OA是组织行为管理软件,也是企业信息化的基础软件。使用OA可以提高单位内部协作的效率,降低运营管理成本。OA涵盖沟通、审批、合作、文档信息、人员、行政、财务、考勤、客户、销售、采购、文件收发、业务集成等等内容。OA是一个面向单位大多数人的管理软件,OA办公系统可以实现多人、多部门、跨区域的协作办公模式,利用计算机取代人工需要费时费力完成的大部分日常工作,基于移动OA的任何时间和任何地方的都可工作的特性,进一步提高OA的办公应用效果。OA的主要功能和应用范围1、建立内部沟通合作平台例如:通知、公告、工作沟通、工作日记、任务管理、工作计划、即时沟通和信息传递等。2、内部管理的规范化和流程化提高单位内部协作的效率、工作执行力、信息传递的及时性和准确性,实现单位内部管理流程的规范化和流程化。企业内部费用审批、行政事务审批、订单、报价、合同审批等;政府收发文件、审批文件、文件管理、档案管理、报表传递、会议通知等。采用电子起草、传递、审批、签发、归档等电子流通方式,提高办公效率。3、内部信息的共享实现知识收集、沉淀、共享、学习和培训共享,构建规范的单位内部知识管理体系。例如:规章制度、内部培训、电子书、技术资料等。4、人力和行政事务管理涵盖人员、薪酬、培训、绩效、考核等管理,为企业战略决策提供有力支持。轻松处理日常事务,让管理者摆脱日常复杂的行政事务。考勤管理包括休假管理、加班申请、出差申请、现场登记、现场管理、考勤统计、排班管理等。支持考勤机对接和移动考勤登录,灵活的排班管理,实时创建各种考勤统计表。5、OA办公和业务管理一体化将客户关系管理、企业订单和采购管理、项目管理等业务管理功能整合到OA系统中,与OA、ERP、财务系统等其他系统进行对接和数据交换。6、跨时间、跨地区协作办公。基于互联网的移动OA办公系统,改变了传统的办公模式,扩大了办公范围,极大地方便了企业负责人和常要出差的办公人员,提高办公效率的同时降低经营管理成本。哪些单位需要OA办公系统?那么,什么样的企业适合使用办公OA系统呢?几乎所有企业都适合使用办公自动化(OA)系统,但不同企业的目的和使用效果会有所不同,例如:1.需要规范和完善内部管理的企业规范和完善内部管理、降低企业经营管理成本是所有企业面临的问题,所以OA系统愈来愈成为现代企业管理中不可缺少的一部分。对于具有一定规模的用户单位来说,OA信息化是企事业单位的必由之路。2.异地办公或多地分布的企业企业负责人和业务人员经常外出,或者企业拥有许多外部分支机构,这样的企业通过OA进行协作,方能实现高效管理,大大降低企业的运营管理成本。3.缺乏信息化资金准备的企业企业信息化需要成本和时间投入,而且数额往往较大,大多数企业在没有看到实际效果的情况下不敢盲目投入。因此,对于谨慎的企业或资金暂时不足的企业,OA办公系统有利于企业逐步了解企业信息化及其作用,减少未来信息化工作的难度。4.需要进一步改善行政办公和内部信息交流环境的企业协同OA办公系统和业务管理系统相辅相成,可以丰富和完善企业信息化工作的形式和内容。O2OA开源协同办公项目,O2OA致力于让企业以更低成本实现信息化系统建设,使用相对简单的二次开发,可视化搭建,创建出一款适合本企业的协同办公系统,它适用于企业OA、协同办公类信息化系统的建设和开发,适配安卓和IOS移动APP,能深度集成钉钉和企业微信。(转自公众号:浙江兰德网络)
12
2022-01
开源office在线编辑器:O2OA平台和ONLYOFFICE结合
比起传统的Office系统,Office在线协作应用正如其名,通过云端数据推进协作办公,将数据资产和文档协同结合起来,实时同步信息的同时,也能保证组织性和安全性。具体表现为:多人文档在线实时编辑、多终端同步、组织性的编辑权限等等。目前越来越多的企业需求文档在线协作功能,正是在如此大趋势下,O2OA平台的应用市场也终于更新了Office在线协作应用。Office在线协作应用是O2OA平台和ONLYOFFICE结合实现的一个在线办公套件,包括用于文本、电子表格、演示文稿等的查看器和编辑器,与Office Open XML格式完全兼容:.docx,.xlsx,.pptx,并支持实时协作编辑。接下来一起来看看Office在线协同应用的具体操作:Office在线协作使用界面界面风格简约,操作便利,满足办公需求。新建文档点击右侧新建按钮新建文档,包括文件夹、Word、Excel、PPT。文档新建后,点击文件名即可在新窗口打开该文件进行编辑,鼠标移动则自动保存,同时支持多人在线协同编辑。(编辑界面使用的是ONLYOFFIC控件本身的编辑界面,完美兼容Office)文档操作除了新建之外,文件也可以直接上传后进行在线编辑,点击页面右上角“上传”按钮,支持上传Word、Excel、PPT三种格式的文档。点击右侧图标即可对文档进行进一步操作(如图)下载该文档,把文档移动、复制到其他文件夹下给文档重新命名删除文档给文档设置标签设置文档同时在线人数,多余设置的人数时会提示再打开的用户当前文档已经超过了上限人数给该文档添加星标后可以在星标文件中查看把文档分享给公司内部其他人员,添加成员后默认该成员只有只读权限,可修改是否有修改文档的权限或者移除查看历史版本查看文档属性O2OA作为开源免费的OA办公开发平台,只需要简单的几步技术搭建,就可以创建一款属于自己企业单位的OA办公系统,最低“零成本”帮助各企业单位组织的无纸化办公、信息化办公,加强与同事之间的远程协同,提高企业的整体工作效益。(转自公众号:浙江兰德网络)
05
2022-01
开发集团正版小型OA办公软件系统收费标准是多少?
OA办公自动化系统的开发和部署是随着我国信息化科学技术的飞速发展而发展的,越来越多的企业想要实现协同化、信息化的办公管理。目前市场上企业OA办公系统越来越多,不同的集团企业有不同的历史和业务情况,为使OA办公室管理软件更好地适应公司内部办公需求,在筹备部署OA办公系统时,除挑选在市场上已经完成通用开发的OA办公系统,还可以考虑定制开发的OA办公系统。一般已经完成通用开发的软件,对于一部分企业来说,价格不合理的同时,无法兼顾企业的个性化需求,所以有许多的企业都转向定制开发。一、对于企业来说,定制开发OA办公系统有何不同呢?具体来说,定制开发就是根据企业的具体需求、具体需求设计软件系统,并提供相应服务。自定义开发的好处是可以根据集团企业内部的办公需求和业务进行开发,将更适应企业的发展。因此,企业选择办公OA系统的开发人员需要考虑哪些问题?下面我们一起来看看。二、集团企业开发正版OA办公系统应该选用什么样的开发商?当我们选择定制开发时,最好是选择大型软件开发商还是小型软件开发商?它们之间有什么不同?1、大型软件开发商有什么优点?大型的软件开发商是指含有上百人规模的企业,这类企业对于对于需要承载多人同时使用的OA系统有很强的开发能力,技术类服务相对快速,开发经验丰富,各行各业成熟案例多,尽管如此,开发这样的大型软件还是更适合大企业,对小企业并不适用。2.大型软件开发商有什么缺点?开发同一种OA协同办公系统项目功能,就成本而言,大型软件开发商远远高于小型软件开发商。由此可以看出,虽然大型软件开发者的能力、经验都是优点,但它们有一处“不可否认的缺点”,即价格高昂,一般开发预算仅为几万的中小企业对他们而言并非目标用户,其目标用户的预算都在十几万甚至几十万。3. 中小型软件开发商有何优点?价格友善,一般都在几万至几十万之间,开发经验也较为丰富,尤其是成立较久的软件开发商,他们的开发经验并不会比大型的软件开发商差。4、中小型软件开发商有什么缺点?如果是大型公司想要开发OA协同办公系统,找这些小型的软件开发企业,可能无法胜任。大型企业一般预算较为充足,对于OA协同办公系统也有相应的品牌需求,所以小型软件开发商很少能有集团化企业开发的经验。从以上几点可以大致了解到,集团大型企业若需要自定义开发OA协同办公系统,则最好还是找大的软件开发商,毕竟预算充足,领导层也比较重视品牌效应,大型软件开发商对此集团规模较大的项目也更有经验。而中小型企业为了办公系统OA系统的预算基本上都在几万,如果去集团大型软件开发商,首先开发费用是不够的,第二是OA系统的常规功能,如果去找中小型软件开发商也许只要几万,但还是找大软件开发商,那个价格最少也在10万以上。讲完对软件开发厂商的分析,接下来我们就谈一谈开发OA办公管理软件所需的费用。从OA系统开发的各个方面开始,我们都应该对OA系统开发的成本进行预测。三、企业对于OA协同办公系统开发费用在多少方面比较合适?1.一般企业在开发OA系统时,有两种收费方式:A、OA办公室系统的产品化实施:这种OA办公系统是指软件商购买并使用的标准产品,包括安装、培训和实施等等。它可以满足普通办公的需求,实施周期也较短,价格更为低廉。B、OA系统自定义定制开发:如果用户的需求超出了厂商已有系统产品的范围,那么客户可以选择进行定制开发,由于定制开发的要求和复杂程度不同,价格区间也是几万、几十万甚至上百万浮动,价格差别较大。2.影响OA办公系统开发的其他主要因素:A、用户对OA系统的使用要求:用户的使用要求不同,项目的开发难度和复杂程度就不同,最后投入的时间和成本也就有所差别。B、OA系统厂商原因∶除了产品价格与服务策略,还要看厂商产品的成熟度和扩展能力,厂商的收费与产品的技术架构严谨度息息相关,如果购买通用OA办公系统,虽然价格合适,但模块功能未必能满足我们的需求;而定制开发的OA办公系统能够满足企业办公需求,但价格相对偏高。四、如何降低办公自动化OA系统的开发成本和费用?事实上,在选择OA办公系统时,只要选择系统架构和功能都比较成熟和稳定的软件,就能有效减少OA办公系统的实施工作量,从而降低因系统不成熟而产生的各种维护费用。若要在后续使用中进行二次开发,则前期选择OA办公管理软件需要扩展性佳,这样系统二次开发难度和维护都会降低,费用将会减少。许多软件在实施及售后服务时不需要到现场,可以远程解决,若要到现场处理服务费也相应较高,因此可选择支持远程实施或者售后OA系统厂商,将减少软件服务费。这类软件还有很多,如O2OA开源协同办公平台的OA办公管理系统。(转自公众号:浙江兰德网络)
04
2022-01
O2OA考勤系统功能介绍,提升企业效率
企业中考勤难管吗?有人会答:简单呀不就是打个卡吗,换谁都能管。有人亦会答:考勤管理真的太麻烦了,下次绝对不揽这种活了。而正如后者所说,考勤管理确实难管,究其原因,有以下五点:一、考勤流于形式:人情考勤、异地考勤导致考勤数据弄虚作假、滞后。二、考勤数据繁琐:考勤需要人力采集大量的数据,然后进行计算、汇总、审批上报。三、考勤申请复杂:请假单、加班单、出差单等申请都是纸质流通,难以保存,程序麻烦。四、考勤排班复杂:因为员工们的上班时间、工作性质都有所不同,所以排班管理非常耗费人力,还容易滋生各种矛盾。五、考勤报表制作:因为缺少多维度数据分析与展现的数据平台,人力制作考勤报表尤为费劲。以上的考勤问题,可谓是让企业管理人员头疼不已,足以见得,拥有一个完善的考勤系统是多么重要。人力和考勤系统一起协作,才能达到一加一大于二的效果。有一款实用的考勤系统,不仅可以解放人工资源、减轻人工统计的各类负担,还可以简化工作流程、提升工作效率。O2OA开源办公开发平台就是这样一款OA办公系统,可以帮助企业进行轻松的考勤管理。我的考勤月报打开考勤管理系统后,会展示我的考勤月报,您可以查看当月的考勤,如下图:考勤日历:以日历的形式展现当月的考勤结果,并以不同的颜色表示出勤状态。考勤汇总:用饼图展现考勤状态(出勤、请假、迟到、缺勤、申诉、工时不足)在本月所占的比例。上下班走势图:提供上班时间和下班时间的走势信息数据,用折线图展现上下班时间的趋势。右边可以查看排班时间表。我的考勤统计点击考勤管理-我的考勤统计,可以查看我的出勤明细、我的出勤统计。我的出勤明细:显示当前考勤周期里每天的打卡时间和考勤状态,并可根据考勤状态查询。如果您对考勤状态有异议的时候,可以向上级提出申诉,领导审批后可修改考勤状态。点击有异常的明细后面的申诉标识,会弹出申诉申请单。在申诉申请单里选择相应的申诉原因,并确定。我的出勤率统计:显示当前考勤周期里各种考勤状态的次数。我的申诉申请点击考勤管理-我的申诉申请,查看各种已提交的申诉状态、申诉原因的申诉申请。员工考勤申诉审批点击考勤管理-员工考勤申诉审批,员工提出申诉后,其审批人可在此处单个或批量处理审批单。系统提供批量处理申诉的数据的功能,选择同意或者不同意部门考勤月报用于部门管理员、公司管理员查看部门的考勤月报,有权限限制。如果部门管理员管理多个部门,可以在部门间切换。部门考勤数据展现样式:图表展示、趋势图展示、数据列表展示个人考勤统计个人出勤明细:用于按年度、月份来查询员工个人的考勤记录个人出勤率统计:用于按按年度、月份统计工个人的考勤记录部门考勤统计、公司考勤统计同上人员:输入人员姓名年度,月份:选择相应的年份和月份维护管理员工休假记录员工休假记录:是从请假流程的数据对接过来的。请假流程发起后,自动将数据展现到该员工休假记录中。导出员工休假记录:点击该按钮,导出数据到Excel表数据导入下载Excel模板:系统提供模板规范格式导入考勤数据:考勤数据根据模板规范格式进行填写核对考勤数据:核对考勤数据,系统自动比对数据格式是否填写正确分析考勤数据:对考勤数据进行分析统计考勤数据:统计考勤数据整理出统计的数据导入错误信息功能:删除文件非正常出勤数据导出导出:选择年度和月份,导出数据到Excel权限设置按钮:新建管理员,配置角色,人员名称,部门信息。操作:删除配置文档配置角色信息选择所属单位配置人员信息排班设置操作:新建排班设置单位:可选择公司或者部门上班时间:选择上班时间下班时间:选择下班时间迟到起算时间:选择早退起算时间:选择矿工起算时间:选择配置后,点击“保存”按钮法定假期操作:新建假期,定义假期时间年度:选择年度假期名称:输入名称开始日期:选择结束日期:选择补班日期:选择统计周期设置操作:添加统计周期删除:删除配置文档统计周期设置公司名称:可输入*号,表示包含所有部门名称:可输入*号,表示包含所有统计周期年份:选择统计周期月份:选择开始日期:选择结束日期:选择配置后,点击“确定”保存考勤人员配置操作:新增考勤人员配置删除:删除配置文档配置类型:选择公司名称:选择部门名称:选择员工姓名:选择员工编号:输入入职日期:选择点击“确定”后,保存工作场所设置定义工作地点申诉设置申诉及审批功能启用状态:选择考勤结果申诉审核人确定方式:选择考勤结果申诉审核人确定内容:输入“直属领导”
27
2021-12
中小企业如何取舍OA办公系统的功能?
中小型企业在选择办公OA系统的时候,主要考虑的是产品的性能和价格,有些企业用户认为OA办公系统的功能越多,功能越强,使用年限越长,需要二次开发的可能性就越小,可以节约大量二次开发成本。但这一观点是错误的,不进行功能开发,只会增加OA系统的购买成本,并影响OA系统的应用效果,许多OA系统的功能也逐渐成为附加的鸡肋。所以产品功能的选择不仅要看产品已经具有的功能,还要考虑产品的可扩展性和二次开发能力,便于满足后续不断变化的功能需求,才可为系统提供长久的维护和服务。根据企业的需要,合理选择产品及功能 OA办公系统的需求与使用和实现的目标和效果直接相关 ,功能和要求过于简单 ,会导致在后续使用中有些作用 “可有可无 ” ;但是过度的需求和功能又会导致OA系统实施困难 。 根据企业的实际情况,对OA办公系统的功能与需求进行合理的规划 ,并在此基础上选择符合企业需要的OA产品 。客户对于 OA 的需求、项目难度 、是否包含了不同 程度的定制开发等,这一些因素的影响下,最终投入的时间和成本都不相同 。 OA的预算受到需求的复杂性影响,其中包括个性化需求的开发工作量 ,企业组织结构的规模等等 。常用功能可满足一般需求OA办公系统基础由不同的模块组成,如流程协作模块、信息发布模块、通信管理模块、知识管理模块、行政管理模块。在实际管理中,采用不同的模块,如:人事管理、费用控制、考勤管理及其它行政事务。所以许多用户在选择OA系统时会选择大而全的OA系统,想要一步到位,使用后可以高枕无忧,忽略软件是否符合企业自身发展的需求,最终因为实用性不强而无法深入应用。OA个性化功能和扩展性OA办公系统的功能选择应当从实际需求为起点,是否需要OA产品的每个功能,这些功能是否能够满足重点需求,是否能深入应用。一般的“大而全”的OA系统功能都很难做到极致的深入应用,因为开发过程所涉及到的成本太高;且这类系统过于注重功能而忽略了产品的架构和设计,易用性差。因此,企业用户要立足于自身需求,选择功能实用的,且能满足深入应用OA办公系统。O2OA开源协同办公OA平台,扩展性强、PC和移动端的软件实用性高、性能稳定,作为开源的OA项目开发平台,,既可以支持小企业的OA协同办公系统快速搭建,也能支持复杂的集团化大型协同门户及业务平台建设,而且O2OA致力于让企业以更低成本实现信息化系统建设,使用相对简单的二次开发,可视化搭建,创建出一款适合本企业的协同办公系统。(转自公众号:浙江兰德网络)
29
2021-12
中小型企业OA的需求和预算之间有什么关联?
OA系统的实现对中小企业OA信息化,既要提供合理的需求,又要进行合理的预算评估,功能要求和价格是OA系统选择中最重要的两个因素,那么企业信息化需要解决哪些问题?中小型企业可以投入多少预算?让我们跟大家大致谈一谈。没有明确的需求,无法进行评估预算在OA进行评估预算期间,用户无法形成明确的OA需求,厂商就不能根据开发的时间、复杂程度进行明确的评估预算。很多企业遇到这样的情况时,都会选择先使用厂商OA产品中的大众通用功能,后续再结合实际使用中的问题,挖掘更深层次的应用需求,所以选择一个OA功能基本完善,拥有良好的扩展性和二次开发能力的OA产品是非常重要的。OA系统需求的预算投入不足OA需求扩展,加上把业务系统的功能也放在需求中,毫无疑问会极大地增加定制开发的预算,预算不足便不能实现既定的需求。所以,要先做到抓住企业的核心需求,并且尽可能简化需求,尽量避免大量的定制开发;其次,相同需求下,不同的OA厂商实现的成本也不同,选择OA平台具有先进技术和丰富服务经验的厂商是关键。OA系统的实施未对需求和预算进行合理控制OA系统实施过程中,对需求没有合理控制,容易造成系统预算超支,中小企业必须具备整体管控能力,各部门所需求的功能需要更多的交流沟通,对业务需求进行深入准确的分析,区分什么是核心需求,什么是次要需求,对OA的预算进行合理的控制和保障。忽略了OA系统维护和服务的预算OA系统预算时,应当将系统的维护服务费用计入在内,OA供应商的系统维护服务包括功能完善、错误修复、系统升级、问题解决等等,购买产品可以说就是购买服务,没有服务保障的OA系统不能长久使用。但是OA产品不同,维修难度的难度也完全不同,所以选择系统技术架构先进、运行稳定、使用简单、易于维护的OA产品,是企业用户在选择产品时应考虑的因素。同样的需求,不同的OA厂商实现成本不同由于OA厂商技术结构不同,采用的系统软件不同,服务能力和服务体系也不同,这些差异,最后会体现在体现在实施的成本上。企业需要处理好技术与办公自动化系统费用预算之间的关系,不能只注重功能评价,而忽视产品技术水平,后端技术的后期维修成本和维修成本较高。这一点不考虑齐全的话,很有可能会因为维护成本超过预算,导致许多需求无法满足。O2OA开源协同办公OA平台,扩展性强、PC和移动端的软件实用性高、性能稳定,作为开源的OA项目开发平台,,既可以支持小企业的OA协同办公系统快速搭建,也能支持复杂的集团化大型协同门户及业务平台建设,而且O2OA致力于让企业以更低成本实现信息化系统建设,使用相对简单的二次开发,可视化搭建,创建出一款适合本企业的协同办公系统。(转自公众号:浙江兰德网络)
22
2021-12
一套OA办公系统可以用多少年?
在许多OA使用者和OA观望者的心里,都有这么一个问题:一套OA办公系统可以用多少年?这个问题并没有明确的答案,因为无法通过精准的数字标准进行衡量。影响OA办公系统使用年限的因素有许多,比如:技术的更新换代、企业发展用户需求改变、软件功能的增加或减少、厂商服务、系统性能等等。在这里,O2OA为了让企业更直观地判断OA系统使用年限,根据各种因素来分析OA系统不同使用寿命(使用年限)。使用寿命:1年左右很少有企业因为功能问题在短时间内放弃一次性付费OA系统,短时间内被放弃的多半是SAAS模式的OA系统和免费OA系统。企业在短时间内增加了大量的人员,然后使用SAAS模式的OA系统成本太高,会考虑更换一次性付费OA系统。或者企业首先通过免费OA了解OA系统,然后在深入了解后选择付费形式的OA系统。使用寿命:5年左右大多数企业的OA办公系统使用寿命约为5年左右。这主要是因为OA系统供应商的服务不能满足企业的深度需求,企业在选择OA系统时没有充分考虑到供应商的可扩展性和服务能力,经过几年的反复修改后,系统改变无法跟上需求。另一种情况是,企业的业务流程发生了重大改革,现有的OA系统根本无法满足需求,企业不得不重新选择供应商进行开发。使用寿命:10年及以上OA办公系统的使用寿命可以超过10年,这是罕见的。毕竟,几乎所有的软硬件都是几年更新一代。使用寿命长的OA办公系统基本上由集团企业独立开发,由专业技术人员维护。另一种情况是,OA供应商定期升级系统,使系统能够适用于软硬件的升级。简单来说,时代在进步,软硬件也在升级,OA系统不升级只能淘汰;不能满足企业的深度应用需求,只能淘汰。O2OA建议企业选择OA系统,优先考虑技术先进、系统架构优秀的软件产品,基于J2EE的平台OA具有很强的灵活性和可扩展性,可以围绕企业不断变化的需求进行开发,可以大大延长OA系统的使用寿命。O2OA开源企业应用开发平台基于J2EE分布式架构,集成移动办公、智能办公、支持私有化部署,是适用于企业OA、协同办公类信息化系统建设和开发的开源协同办公平台。它适配IOS和安卓移动端APP,也能深度集成钉钉和企业微信。O2OA作为开源的OA项目开发平台,既可以支持小企业的OA协同办公系统快速搭建,也能支持复杂的集团化大型协同门户及业务平台建设,而且O2OA致力于让企业以更低成本实现信息化系统建设,使用相对简单的二次开发,可视化搭建,创建出一款适合本企业的协同办公系统。(转自公众号:浙江兰德网络)
28
2021-12
OA平台的优势体现在哪里?
OA系统目前日益普及,大家对于办公OA的需求也不断提高、日趋复杂多样,许多用户不仅需要一个通用的OA办公功能,同时也要求OA拥有开放的平台、OA在这同时又扮演“软件平台”的角色,而传统的OA是以行政办公室和过程审批的模式为基础,无法满足有关用户这方面的技术要求。一个OA平台具有较好的扩展性、二次开发能力和集成性,能够通过OA平台不断扩展系统的应用功能,作为一种可持续发展的信息系统,可在现有OA系统的基础上,通过OA平台不断扩展,唯有如此,OA软件才能更好地适应单位的发展变化。一般看来,OA平台具体有如下的优点和作用:为办公OA的应用提供支持平台OA的全部功能都建立在OA平台之上,软件的核心是OA平台。它以OA平台为基础,可以迅速地满足用户的不同需求,有利于OA系统的实施、开发、维护和升级。以OA平台为基础,系统具有稳定、性能、安全、开放、扩展性、易与第三方系统集成等特点,具有较好的开放性、扩展性和兼容性。可定制开发的OA平台及其可扩展性由于传统OA软件在功能上比较固定,定制开发尤其复杂,开发周期长、成本高、风险大,加之不同用户需求的多样性和复杂性,许多以产品化为主的软件厂商纷纷抵制OA定制开发。普通用户同样无法进行周期长、成本高、风险大的定制开发。但是通过OA平台能很好地解决了软件开发周期、质量、成本等问题,系统扩展更加方便之外,还使更多用户能够享受到个性化定制开发带来的OA深入应用的效果。OA平台更容易进行系统维护一个好的OA系统不但要使用方便,而且要维护简单,在OA平台上,可以减少系统维护的技术难度,节约OA日常维护时间和成本。与之相反,在许多OA应用实例中,由于OA系统功能固化技术架构落后,系统可维护性差,不仅因为过度依赖厂商系统维护的成本高,而且维护起来不便效率低,OA用户无法长期承担。(转自公众号:浙江兰德网络)
标杆案例 /
BENCHMARKING CASES
更多案例 /
MORE CASES
合作伙伴说O2OA /
WHAT PARTNERS SAY ABOUT O2OA
CEO 王维航
定制化的平台可以让我们的企业管理理念最终体现到流程,数据管理中。
中台事业群副总裁 墙辉(玄难)
世界是平的,企业也应该是平的
CEO 王伟力
O2OA是国内少有的信息化快速开发平台,让企业技术人员更关心业务,加速企业需求的落地。
总经理 陈栋
很高兴能在众多流程产品中选择了O2OA,希望能一如既往的提供高效和创新的管理产品。
OA开发技术文摘 /
TECHNICAL ABSTRACTS
公文编辑器详解:一、公文格式和基本使用
  O2OA提供了符合国家党政机关公文格式标准(GB/T 9704—2012)的公文编辑组件,可以让用户在不需要付出额外成本,就可以实现标准化公文格式的编辑。适用范围  公文编辑器不同于我们其他的在线文档编辑器,它基本上只限于公文系统中对红头文件的编辑和查看,规定了标准的格式、字体、行距、字据等,编辑自由度是比较低的。O2OA的公文编辑器适用于红头文件的处理,或是对格式要求非常严格的文书编辑。其他情况下的在线文档编辑功能,我们可以选择OnlyOffice、WPS等其他产品,您可以在我们的文档库中找到相关的内容。一、公文格式简介  O2OA公文编辑器中的格式规范,是参照《党政机关公文格式》国家标准(GB/T9704—2012)来设定的,下面简略说明一下红头文件的组成和相关格式规范。  一个标准的红头文件,基本上是下面的样式:  当然不同的文种的格式会略有不同,但主要元素基本一致。下面我们对规范上要求的各个标准做一个简要的说明。版面  公文用纸采用A4型纸,幅面尺寸为:210mm x 297mm。页边与版心尺寸    公文用纸天头(上白边)为37mm(相当于约104.9pt),公文用纸订口(左白边)为28mm(相当于约74.9pt),版心尺寸为:156mm x 225mm,由此可计算出,下白边为:35mm(相当于约99.2pt),右白边为:26mm(相当于约73.7pt)。字体和字号  无特殊说明,公文各要素一般使用3号仿宋字体。行数和字数  每页22行,每行28个字。颜色  无特殊说明,公文中的文字颜色都为黑色。版头  版头内容包括:份号、密级和保密期限、紧急程度、发文机关标志(红头)、发文字号、签发人。份号、密级和保密期限、紧急程度  左上角顶格编排,份号一般用6位阿拉伯数字,3号黑体字。发文机关标志(红头)  推荐使用小标宋体字,颜色为红色。发文字号  发文机关标志下空两行,上行文居左空一字编排,平行文下行文居中编排。采用3号仿宋字体。签发人  只有上行文应标注签发人姓名。发文机关标志下空两行编排,“签发人”三字加全角冒号和签发人姓名组成。“签发人”三字用3号仿宋字体,签发人姓名用3号楷体字体,多个签发人每行编排两个姓名。主体主体部分包括:标题、主送、正文、附件说明、发文机关署名、成文日期、印章、附注。标题  一般用2号宋体字,分一行或多行居中排布。至于标题的位置,规范中说明在红线下方空两行,但在实际使用中,几乎所有项目的客户都反馈反馈,要求标题在红线下方空一行,所以现在公文编辑组件的默认模板设置为红线下空一行编排标题。可以通过自定义模板修改这一规则。主送单位  在标题下空一行位置,居左顶格。最后一个单位名称后标全角冒号,使用3号仿宋字体。正文  用3号仿宋字体,编排于主送单位名称下一行,每个自然段左空两字,回行顶格。  文中结构层次用:“一”、“(一)”、“1.”、“(1)”标注,第一层用3号黑体字,第二层用3号楷体字,第三第四层用仿宋字体,附件说明  如有附件,在正文下空一行,左空两字编排“附件”二字,后标全角冒号和附件名称。多个附件使用阿拉伯数字标注序号,附件名称较长需要回行时,与上一行附件名称的首字对齐。发文机关署名和成文日期  成文日期一般右空四字编排,发文机关在成文日期之上,以成文日期为准居中编排。  发文机关署名长于成文日期,发文机关署名居右空二字编排,成文日期发文机关首字为准,右移二字。  采用3号仿宋字体。附注  如有附注,居左空二字加圆括号,采用3号仿宋字体。版记  版记内容包括:抄送单位、印发单位和印发日期。版记要置于最后一页的最后位置。版记中的分隔线  分隔线与版心等宽,首条分隔线和末条分隔线使用粗线,中间分隔线用细线。抄送单位  一般用4号仿宋字体,左右各空一字编排。印发单位和印发日期  一般用4号仿宋字体,印发机关左空一字,印发日期右空一字。  以上是简略的说明公文中的一些要素编排的格式规范,参考自《党政机关公文格式》国家标准应用指南(GB/T9704—2012),中国质检出版社、中国标准出版社。二、基本使用  接着我们介绍一下公文编辑组件的基本用法。  公文编辑器可以在流程表单和内容管理表单中使用。  直接将公文编辑器组件拖动到表单中合适的位置,然后设置相关属性即可。下面我们来说明每个属性配置。基本属性基本属性属性默认值可选项说明标识documenteditor无组件唯一标识名称无无略描述无无略延时加载否是,否如果选择“是”,在打开表单时,不会加载公文编辑器组件,您需要通过active方法激活组件。如:this.form.get("documenteditor").active();文件模板系统模板系统模板自定义模板如果选择系统模板,您可以从下面的下拉框中选择系统内置模板,包括:“标准公文类”、“纪要通报类”、“党委既要类”、“函类”、“命令类”、“党委纪委类”、“联合发文类”和“空模板(仅正文)”;如果选择自定义模板,您需要在下方的模板路径中输入模板html文件的URL。一般情况下,会将自定义模板文件放到Web服务器的非系统目录下,如filetemplete目录下,那么在模板路径中输入:../filetemplete/filename.html编辑允许允许,不允许,根据脚本控制是否允许编辑正文。如果选择“根据脚本”,在下面的脚本编辑框中输入脚本,返回true表示允许编辑,否则不允许编辑正文。打印正文允许允许,不允许,根据脚本控制是否允许打印正文。如果选择“根据脚本”,在下面的脚本编辑框中输入脚本,返回true表示允许打印,否则不允许打印正文。打印正文是将公文转换为word文件下载,用户直接打印word文件即可。转换word的设置与下面的“word转换”属性配置有关。查看痕迹允许允许,不允许,根据脚本控制是否允许查看痕迹。如果选择“根据脚本”,在下面的脚本编辑框中输入脚本,返回true表示允许查看痕迹,否则不允许查看痕迹。设置缩放不允许允许,不允许是否允许用户对公文进行缩放查看全角转换是是,否如果选择“是”,用户在正文中输入或粘贴的所有空格,都会自动转换为全角空格段落缩进是是,否如果选择“是”,用户输入回车换行,或粘贴的内容,都会在段落首行自动缩进二字。双页显示是是,否默认情况下,公文编辑器在web端不分页,只在转换word后翻页。如果选择“是”,编辑器右上角会出现“双页”按钮,点击后在web端进行模拟分页。全屏允许允许,不允许是否允许全屏展示公文编辑器WORD转换否是,否是否自动将公文转换为Word文件。当选择“是”时,会有下表的配置属性。当WORD转换选择“是”时,会有下面的配置属性。属性默认值可选项说明转换方式OOXMLOOXMLServiceService选项在默认情况下,是为了兼容旧版本而保留的,它转换的word文件在格式上并不符合规范。已经不推荐使用。当然当使用Service选项时,我们可以更新后端服务,使用不同的服务来转换,配合不同的第三方包,可实现word、pdf、ofd等多总格式的转换。这将在后面的章节详细说明。文件名无无转换后存储在文档中的附件名称,如果为空,文件名将会是:“本文档的标题.docx”附件site$doc无此处可设定转换后的附件的site属性,这意味着转换后的附件会在设置了相同site的附件组件中展现出来。转换印章是是,否转换Word文件时,是否将模拟盖章的图片也转换到WORD文件中。何时转换提交时提交时、保存时保存时:当文件被保存时,将公文转换为Word文件。它会发生在:用户点保存按钮时,用户按Ctrl+S时,执行脚本this.form.save()时。但是当执行this.data.save()时,不会触发转换动作。当然,当文件提交继续流转时,系统会自动保存文档,所以此时也会执行word转换。提交时:当文件提交继续流转时,自动转换为word文件。通过点击“继续流转”来提交文件,或通过脚本this.form.process(); 都可触发文件转换。转换条件始终转换始终转换,满足条件时转换当选择“满足条件时转换”选项时,除了要符合上述“何时转换”的选项外,还需要提供一段脚本,在下方的脚本编辑器中输入,只有当脚本运行返回true时,在进行转换。公文编辑器数据结构和默认值基本属性在往下,是默认值的配置:当公文编辑器存储的数据是一个JSON对象数据,每个数据都对应公文中的元素的显示内容,它的结构大概是下面的样子:{ "annotation": "附注", "attachment": [ "logo_new_blue", "logo_new_grey_x" ], "attachmentTitle": "附件:", "copies": " ", "copyto": "[抄送]", "copyto2": "[发]", "copyto2Title": "发:", "copytoTitle": "抄送:", "editionDate": "[印发日期]", "editionUnit": "[印发机关]", "fileno": "[文号]", "filetext": "\u003cdiv\u003e\n\u003cdiv\u003e\n\u003cdiv\u003e  正文内容\u003c/div\u003e\n\n\u003cdiv\u003e\u003c/div\u003e\n\u003c/div\u003e\n\u003c/div\u003e\n", "issuanceDate": "[成文日期]", "issuanceUnit": "[发文机关]", "mainSend": "[主送单位:]", "meetingAttend": "", "meetingAttendTitle": "出席:", "meetingLeave": "", "meetingLeaveTitle": "请假:", "meetingRecord": "", "meetingSit": "", "meetingSitTitle": "列席:", "priority": " ", "redHeader": "文件红头", "secret": " ", "signer": "[签发人]", "signerTitle": "签发人:", "subject": "[文件标题]", "seals": [ "http://develop.o2oa.net:20020/x_processplatform_assemble_surface/jaxrs/attachment/download/b6941e81-c24b-47a4-ad22-2a31898b936c/work/9994247e-bd6d-4ffb-85aa-04bbc1fd356f" ] }我们还是通过表格来说明每个字段的含义。字段含义类型copies份号textsecret密级textpriority紧急度textredHeader发文机关标志(红头)htmlfileno文号textsignerTitle签发人标题textsigner签发人姓名htmlsubject文件标题htmlmainSend主送单位textfiletext正文htmlattachmentTitle附件说明的标题textattachment附件标题arrayissuanceUnit发文机关署名htmlissuanceDate成文日期textannotation附注textcopytoTitle抄送标题textcopyto抄送单位textcopyto2Title版记中第二个抄送标题textcopyto2版记中第二个抄送单位texteditionUnit印发单位texteditionDate印发时间textmeetingAttendTitle出席标题(会议纪要类的模板中)textmeetingLeaveTitle请假标题(会议纪要类的模板中)textmeetingSitTitle列席标题(会议纪要类的模板中)textmeetingAttend出席人(会议纪要类的模板中)htmlmeetingLeave请假人(会议纪要类的模板中)htmlmeetingSit列席人(会议纪要类的模板中)htmlmeetingRecord记录人(党委会议纪要类的模板中)htmlseals模拟盖章图片的urlarray再往下是CSS属性,我们可以给版式正文定义额外的样式。接着是校验,这两部分我们将在后续的章节说明。配置属性  公文编辑组件属性的“配置”部分,主要是控制公文中各个内容项的显示和值的绑定。通用配置先看每个内容元素的通用配置:属性默认值可选项说明是否显示自动显示,隐藏,自动,根据脚本此属性配置本内容元素的显示状态。显示:无论有没有值,都显示(占位)隐藏:不显示此内容元素,也不占位自动:根据此元素的值来确定,空则隐藏,有值则显示根据脚本:在下方脚本编辑器中输入脚本,运行返回true则显示,否则隐藏。绑定值表单数据表单数据脚本设置此元素要显示什么内容。表单数据:将此元素的值与表单中的字段绑定,(在下方的表单数据属性中输入表单字段标识),当表单中的字段发生变化时,此元素的值也立即变化。脚本:通过脚本计算此元素的值(在下方的脚本编辑器中输入脚本),当文档保存后,或者公文编辑器执行resetData方法后更新元素值。编辑文件标题和发文单位  文件标题元素一般会绑定到文档subject字段,此字段一般是Textfield类型的字段。文件标题过长时,会自动换行,规范要求标题换行要词义完整、长短适宜,这就需要用户手工进行换行,在这种情况下,我们就需要设置文件标题元素为可编辑。  文件标题配置有“允许编辑”属性,三个选项为:“允许”、“不允许”和“根据脚本”,默认值为“不允许”。  允许:可以让用户在公文编辑器中直接编辑标题,一般都是进行换行分隔操作。  不允许:不可在公文编辑器中直接编辑标题。  根据脚本:通过脚本运行返回true表示“允许”,否则“不允许”。  注意:当标题可编辑时,不要绑定表单数据(保持绑定值选“表单数据”;表单数据为空)。因为如果绑定了数据,用户的修改会被表单上的值重新覆盖。  我们还可以配置“同步数据路径”,将编辑的内容同步回表单字段,在此处输入表单上的字段标识即可。  发文单位和标题一样,由于一些格式要求,可设置允许编辑,但没有同步回表单数据的功能。一些特殊的元素值  一般情况下,公文元素内容绑定的值都是字符串,但有以下一些内容,可绑定特殊的值:  附件:表单数据可以绑定一个附件组件,会计算此附件组件中上传的所有附件,作为公文附件展示在公文内容中。  签发人:可绑定组织类型的表单字段。选择类型为“身份”。  主送单位和抄送单位:可绑定组织类型的表单字段。选择类型为“组织”。自定义元素配置  在公文编辑器属性的“配置”页面中,有一个“自定义元素配置”,这是用在系统默认元素不够用的情况下,可以在模板中增加自定义元素,并将其要显示的内容,与业务数据绑定。  假设需要在版记之前加上一个“其他说明”,如下图:可以按以下步骤来实现:1、拷贝模板l文件  系统模板路径在webserver/x_component_process_FormDesigner/Module/Documenteditor/templete目录下,我们看到templete.json文件,里面设定了每种类型的模板对应的html文件。拷贝一个标准文件模板(standard.html)进行修改。2、修改模板文件  在拷贝后的模板文件中,找到Class为“doc_layout_editionArea”的div元素,在此元素上面加如下html代码:<p class="doc_block doc_layout" data-doc-layout="doc_data_other"></p>  其中P元素的class设置了“doc_layout”代表这是公文编辑器中的一个有效元素,“data-doc-layout”属性定义了此元素的自定义名称。  编辑完成后,保存文件,并上传到服务器。本例中,上传到了webserver的filetemplate目录中。3、使用自定义模板  在表单编辑中,设置公文编辑器属性中的文件模板为“自定义模板”,模板路径输入上传的模板文件路径。在本例中就是“../filetemplate/standard.html”。(关于自定义模板的制作,我们将在第三章中详细描述)4、配置数据绑定  在公文编辑器属性的“配置”页中,配置自定义元素如下:  其中“doc_data_other”为模板中定义的元素的“data-doc-layout”属性值。  explain为表单中的任意文本类字段的标识。  保存表单后,只要explain字段值改变,并触发“change”事件,公文编辑器中的对应元素的显示内容就会发生改变。  配置完以上内容后,我们就可以使用公文编辑组件了。
2021
10月
30
在O2OA中使用网络会议(一):Openmeetings-5.1.0亲手安装整理
@O2OA @Openmeetings @网络会议 @安装 @Openmeetings-5.1.0本文主要讲解Openmeetings-5.1.0安装的过程,O2OA服务器的相关配置教程将随后发布。教程比较详细,可以按照步骤一步一步安装服务器的安装,如果您在安装过程中有遇到其他的问题,请及时联系我们,我们会进一步更新安装手册。O2OA实际上是集成Openmeeting来实现网络会议的,Apache-Openmeeting是一个开源的网络会议系统,我们可以在Openmeeting官方网站上得到更多的信息。介于Openmeetings的安装比较复杂,所以在这里,我们也把我们安装的过程共享出来,希望对大家有所帮助:Openmeetings官网:https://openmeetings.apache.org/Openmeetings官网下载:https://openmeetings.apache.org/downlOpenmeetings官方手册:https://openmeetings.apache.org/installation.html从Openmeeting官方发布的安装手册中可以看到,服务器的安装需要如下几个步骤:本文后续就按照Openmeeting官方安装手册的要求逐步完成目前最新版本5.1.0的安装:Version 5.1.0 released!Release 5.1.0, provides following improvements:This release provides WebRTC audio/video/screen-sharing in the Room Stability:● Room Audio/Video should be more stable● OM should work as expected after KMS server restart● Backup is further improved● Audio/Video connection established faster● Most recent versions of dependencies are usedUI:● User display name is used almost everywhere● Browser notifications are used to notify about new chat messages and moderator actions● Interview room was broken● Mute and "Mic status" were brokenOther fixes and improvements52 issues are fixed please checkCHANGELOG and Detailed list See Downloads page.一、安装KMS(Kurento Media Server)(含操作系统准备)KMS官方文档:https://doc-kurento.readthedocs.io/en/stable/index.htmlKMS安装手册:https://doc-kurento.readthedocs.io/en/stable/user/installation.html我们可以从Local Installation里看到,KMS支持长期支持版Ubuntu16.04和Ubuntu18.04(64位版本),这里我们打算使用Ubuntu18.04(64位),下文先讲述操作系统准备的过程,已经准备好的朋友,请看后续章节《安装Kurento Media Server》。1、安装Ubuntu18.04配置网络1)准备镜像文件下载链接:http://releases.ubuntu.com/18.04/ubuntu-18.04.5-live-server-amd64.iso2)安装操作系统Ubuntu18.04在安装过程中会提示选择需要 安装的应用组件,可以根据自己的需要进行选择。建议安装openssh在安装过程中,设置用户kms,密码:123456。root密码可以在安装完成后进行修改。3)修改root密码安装完成后,重启服务器,进入登录界面:使用kms用户登录系统:kms/123456修改root密码为123456sudo passwd root先输入kms用户密码 123456,再设置root密码(UNIX密码)。root密码修改成功。4)配置网络在安装操作系统时就可以根据要求配置网络,也可以在安装完成后进行配置。Ubuntu从17.10开始,已放弃在/etc/network/interfaces里配置IP地址,即使配置也不会生效,而是改成netplan方式,配置写在/etc/netplan/01-netcfg.yaml或者类似名称的yaml文件里,每台主机略有不同:编辑yaml文件:vi /etc/netplan/00-installer-config.yaml# Let NetworkManager manage all devices on this system network: ethernets: enp129s0f0: #dhcp4: true #dhcp4: true addresses: [172.16.93.9/18] gateway4: 172.16.64.1 nameservers: addresses:[172.16.2.43] version: 2 #renderer: NetworkManager关于子网掩码的表示,可以百度查一下:172.16.93.9/24 :255.255.255.0172.16.93.9/18 :255.255.192.0设置完成后执行命令让配置生效:sudo netplan apply设置完成后,可以使用SSH工具连接服务器即可。5)设置或者关闭防火墙sudo ufw disable如果仍然连接不上,可能是没有安装openssh服务,可以参考以下文档安装openssh服务:https://blog.csdn.net/gymaisyl/article/details/865704262、安装KMS1)确认GnuPG 是否已经安装Make sure that GnuPG is installed.sudo apt-get update && sudo apt-get install --no-install-recommends --yes \ gnupg执行命令过程如下图所示:2)在系统配置中添加Kurento仓库配置Add the Kurento repository to your system configuration.Run these commands(执行如下命令):# Import the Kurento repository signing key sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 5AFA7A83 # Get Ubuntu version definitions source /etc/upstream-release/lsb-release 2>/dev/null || source /etc/lsb-release # Add the repository to Apt sudo tee "/etc/apt/sources.list.d/kurento.list" >/dev/null <<EOF # Kurento Media Server - Release packages deb [arch=amd64] http://ubuntu.openvidu.io/6.15.0 $DISTRIB_CODENAME kms6 EOF# Import the Kurento repository signing key(导入Kurento仓库的签名)sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 5AFA7A83此命令执行需要一点时间:# Get Ubuntu version definitions(获取Ubuntu版本信息定义)source /etc/upstream-release/lsb-release 2>/dev/null || source /etc/lsb-release# Add the repository to Apt(将Kurento仓库添加到apt) sudo tee "/etc/apt/sources.list.d/kurento.list" >/dev/null <<EOF # Kurento Media Server - Release packages deb [arch=amd64] http://ubuntu.openvidu.io/6.15.0 $DISTRIB_CODENAME kms6 EOF3)Install KMS(安装KMS)提醒:此步骤仅适用于第一次安装。如果您已经安装了Kurento并想升级它,请按照下面描述的步骤进行:本地升级(Local Upgrade)。sudo apt-get update && sudo apt-get install --no-install-recommends --yes \ kurento-media-server执行命令后等待,直到安装完成(需要一点时间):4)启动KMSThe server includes service files which integrate with the Ubuntu init system, so you can use the following commands to start and stop it:服务器包含与Ubuntu初始化系统集成的服务文件,因此您可以使用以下命令来启动和停止它:sudo service kurento-media-server start sudo service kurento-media-server stop日志目录:/var/log/kurento-media-server/二、前提条件准备1、数据库准备,本文中我们直接使用默认的H2数据库Recommendation for production environmentBy default OpenMeetings uses the integrated H2 database. For production environment you should consider using MySQL , Postgres , or for example IBM DB2 , or Oracle , or MSSQL生产环境建议默认情况下,OpenMeetings使用集成的H2数据库。对于生产环境,您应该考虑使用MySQL、Postgres,或者例如ibmdb2、Oracle或MSSQL2、下载并安装JRE(JDK)Note: Openmeetings requires JRE 11, JRE 6/7/8 are NOT compatible!提醒:Openmeetings需要JRE11,JRE 6/7/8 都无法兼容!先卸载Ubuntu自带的OpenJDK:sudo apt-get remove openjdk*安装JDK的方法有很多,在这里我们可以直接通过apt安装:apt install openjdk-11-jre-headless执行命令后等待一会儿即可:当前JDK版本:11.0.9.13、安装ImageMagick Enabling Image Upload and import to whiteboardInstall ImageMagick on the server, you can get more information on http://www.imagemagick.org  regarding installation. The instructions for installation can be found there http://www.imagemagick.org/script/binary-releases.php  , however on most Linux systems you can get it via your favorite package managers (apt-get it)启用图像上载和导入到白板前提条件:在服务器上安装ImageMagick,您可以获得有关http://www.imagemagick.org关于安装。安装说明可以在那里找到http://www.imagemagick.org/script/binary-releases.php,但是在大多数Linux系统上,您可以通过您最喜欢的包管理器(apt-get-it)获得它sudo apt-get install imagemagick查询安装的目录:dpkg -L imagemagick4、安装GhostScript Enabling import of PDFs into whiteboard● Install GhostScript on the server, you can get more information on http://www.ghostscript.com/download/gsdnld.html  regarding installation. The instructions for installation can be found there, however on most Linux systems you can get it via your favorite package managers (apt-get it).启用将PDF导入白板前提条件:在服务器上安装GhostScript,您可以获得有关http://www.ghostscript.com/download/gsdnld.html关于安装。安装说明可以在那里找到,但是在大多数Linux系统上,您可以通过您最喜欢的包管理器(apt-get-it)获得它。sudo apt-get install ghostscript一般在Ubuntu18操作系统里,GhostScript已经安装过了。查询安装的目录:dpkg -L ghostscript查询ghostscript版本ghostscript5、安装OpenOffice或者Libre Office(略) Enabling import of .doc, .docx, .ppt, .pptx, ... all Office Documents into whitebaord● OpenOffice or Libre Office InstalledSince Version 2.x of OpenMeetings it is no more required to start OpenOffice (or Libreoffice) service, see OpenOfficeConverter for details启用将导入.doc、.docx、.ppt、.pptx.....所有Office文件都放在白板中前提条件:已安装OpenOffice或Libre Office由于OpenMeetings的2.x版不再需要启动OpenOffice(或Libreoffice)服务,有关详细信息,请参阅OpenOfficeConverter6、安装FFMpeg和 SoX1. Enabling Recording and import of .avi, .flv, .mov and .mp4 into whiteboard ○ Install FFMpeg (with -enabled libmp3lame and libx264 options) . You should get FFMPEG in an up to date copy! OpenMeetings is tested with FFMPEG Version 10.3 and latest build from GIT For Windows you can download a Build for example from http://ffmpeg.zeranoe.com/builds/  Linux or OSx Users should be able to use one of the various Installation Instructions on the Web. You need to enable libmp3lame and libx264! ○ Install SoX http://sox.sourceforge.net/  . You should install SoX in a up to date copy! SoX 12.xx will NOT work!启用录制并将.avi、.flv、.mov和.mp4导入白板前提条件:安装FFMpeg(使用启用的libmp3lame和libx264选项)。你应该得到一份最新的FFMPEG!OpenMeetings使用FFMPEG 10.3版和GIT For Windows的最新版本进行了测试,您可以从下载一个版本,例如http://ffmpeg.zeranoe.com/builds/Linux或OSx用户应该能够使用Web上的各种安装说明之一。您需要启用libmp3lame和libx264!前提条件:安装SoXhttp://sox.sourceforge.net/. 你应该在最新版本中安装SoX!SoX 12.xx将不起作用!1)安装FFMpegsudo apt-get install ffmpeg查询安装的目录:dpkg -L ffmpeg查询ffmpeg版本:ffmpeg2)安装SoXapt-get install sox查询安装的目录:dpkg -L sox查询sox版本sox --version三、下载和启动Openmeetings1、下载Openmeetings-5.1.0并上传下载链接:https://downloads.apache.org/openmeetings/5.1.0/bin/apache-openmeetings-5.1.0.zip或者通过命令直接从服器下载:wget https://downloads.apache.org/openmeetings/5.1.0/bin/apache-openmeetings-5.1.0.zip创建/data目录root@kms:/# mkdir /data将下载好的apache-openmeetings-5.1.0.zip放到/data目录下:2、解压apache-openmeetings-5.1.0.zip如果没有unzip命令,则需要先需要安装一下unzip再进行解压:apt install unzip将文件解压到/data目录unzip apache-openmeetings-5.1.0.zip3、启动openmeetings服务./data/apache-openmeetings-5.1.0/bin/startup.sh四、安装和配置Openmeetings使用浏览器访问openmeetings提供的安装服务:URL: https://localhost:5443/openmeetings/install点击下一步进行数据库配置:在这里我们不使用其他的数据库,直接使用默认的H2数据库进行演示,但是在正式环境,我们建议您使用Mysql等商用数据库服务器,并且做好数据备份等工作。下图是Mysql服务器配置:设置好数据库后,点击下一步进行管理员用户信息设置:这里我们填写用户名,密码,邮件等信息,并且填写一个组织名称,然后点击下一步进行邮件相关配置:这里我们不作任何改动直接点击下一步,进行文档转换相关设置:这里我们仍不然任何改变动,直接点击下一步进行信息安全相关设置:这里我们仍不然任何改变动,直接点击下一步准备开始安装。在此界面并没有“完成”按钮,点击结束按钮我们可以开始安装(实际上就是完成配置动作),完成安装之后,您可以直接访问https://localhost:5443/openmeetings来使用openmeetings服务器提供的服务:输入用户名密码登录到openmeetings服务器:这里是用户主页,一个看板,上面有需要进行的所有工作有交流信息。下图是进入会议后的界面:点击右上角的分享屏幕,我们可以将自己的计算机屏幕分享给参所有参会者:关于Openmeeting的使用,您可以百度,或者到官方网站看到更多的文档和演示,我们以安装步骤为主,就不过多赘述,下一篇我们将指导大家如何将openmeetings与O2OA打通认证机制。
2021
07月
09
办公OA:O2OA前端性能优化
O2OA是一个基于J2EE分布式架构,集成移动办公、智能办公,支持私有化部署,自适应负载能力的,能够很大程度上节约企业软件开发成本的基于AGPL协议开放源代码的企业信息化系统需求定制开发平台解决方案。O2OA对外提供专业的开发运维等技术服务。开源O2OA官网:http://www.o2oa.net/下文是O2OA前端性能优化的教程干货:O2OA是一个SPA应用,相对与传统的多页应用,前端的代码量比较大,用户进行二次开发也主要是前端的脚本,本文中,我们来讨论一下与页面展现性能相关的一些内容。(数据库和服务器的优化不在本文讨论范围内)。本文中的内容需要O2OA 5.3 及以上版本支持。缓存客户端的缓存设置一般情况下,现代浏览器都默认支持http协议的缓存策略,我们需要注意IE10和IE11,在“网站数据设置”中推荐使用“自动”。如果您将O2OA通过webview嵌入到自己的移动端APP中时,注意使用webview的默认缓存策略。(IOS:NSURLRequestUseProtocolCachePolicy;Android:LOAD_DEFAULT)Max-Age为了浏览器可以直接从缓存中获取静态文件,可以设置静态资源响应头的Cache-Control的Max-Age值。在服务器config/node_xxx.xxx.xxx.xxx.json文件中,配置web中的cacheControlMaxAge字段,以秒为单位,配置静态资源本地缓存的时间。如:{ ... "web": { ... "cacheControlMaxAge": 86400, ... }, }配置后需要重启服务器生效。Etag一些服务请求,在响应头中会有Etag,客户端收到带有Etag响应头的响应后,会把内容和Etag值缓存下来,下次发起同一个请求时,会带上请求头If-None-Match,值为上一次收到的Etag值,服务器收到请求后,会计算出Etag值,并与请求的If-None-Match值比较,如果相同,则不需要返回内容,返回304,告诉浏览器从本地缓存获取内容即可。如果两值不匹配,说明要请求的内容已经修改过,需要重新下载。所以,我们系统在经过一系列网络设备,如负载设备和Web应用防火墙(WAF)等,请确保这些设备不对请求的Etag响应头进行修改。静态资源缓存服务器我们可以把web服务器部署到其他静态资源的web服务器,也可以通过nginx等配置静态资源缓存。服务器目录下servers/webServer/下的所有文件,拷贝到其他web服务器的web目录,修改x_desktop/res/config/config.json文件中的配置即可:{ "center": [ { "port": "20030", //O2服务器中心服务器端口 "host": "develop.o2oa.net" //O2服务器中心服务器Host } ], "applicationServer": { "host": "develop.o2oa.net" //O2应用服务器Host }, "initManagerChanged": true, "initManagerName": "", ... }此文件主要修改两部分内容:1、center部分,修改为要访问的O2中心服务器地址和端口;2、applicationServer部分,修改为要访问的O2应用服务器地址,如果没有applicationServer,就添加一个。集群环境下,可配置应用服务器负载地址;不发起option请求 默认情况下O2OA服务器启用三个端口80、20020和20030,分别对应web服务、应用服务和center服务。由于使用不同端口,在浏览器请求时,会先发送option请求来判断跨域访问策略。见下图:方法一我们可以按以下配置,使请求同源,就不再需要发送option请求。在服务器config/node_xxx.xxx.xxx.xxx.json文件中,配置web中的proxyApplicationEnable字段为true,将application和center中的proxyPort配置为和web端口一致(默认为80),将proxyHost配置为用户访问的域名。{ ... "center": { ... "proxyHost": "develop.o2oa.net", "proxyPort": 80, ... }, "application": { ... "proxyHost": "develop.o2oa.net", "proxyPort": 80,", ... }, "web": { ... proxyApplicationEnable: true, ... }, ... }配置后重启服务器后,就不会有option请求发起。方法二我们也可以通过负载设备的http代理配置来避免发送option请求,以nginx为例,我们可以进行如下配置:在nginx配置中,通过配置不同路径来映射到O2OA服务器的web、application和center。 listen 80; server_name develop.o2oa.net; location /web/ { proxy_pass http://xxx.xxx.xxx.xxx:80/; } location /app/ { proxy_pass http://xxx.xxx.xxx.xxx:20020/; } location /center/ { proxy_pass http://xxx.xxx.xxx.xxx:20030/; }然后在O2OA服务器config/portal.json文件中配置urlMapping,如下:(如果在config目录下没有portal.json文件,可以从configSample目录下拷贝一个过来){ ... "urlMapping": { "develop.o2oa.net:20020": "develop.o2oa.net/app", "develop.o2oa.net:20030": "develop.o2oa.net/center" }, ... }重启nginx和O2OA服务器后,我们可以用 http://develop.o2oa.net/web 访问系统。此方法通过nginx将不同路径的请求代理到O2OA服务器的不同端口,浏览器只使用80端口访问,避免的跨域请求,也不会发起option请求。获取服务地址请求  默认情况下,访问系统页面时,会发起若干个获取服务器地址的请求,地址如:http://develop.o2oa.net:20030/x_program_center/jaxrs/distribute/assemble/source/develop.o2oa.net。此服务会返回一组服务列表,后续的请求都会使用此列表中的host和port。这样我们就可以在集群环境下,根据服务器策略,给不同的用户分配不同的服务地址。  假设我们有两台服务器:server1和server2,端口配置都为默认,组成了O2OA的集群,我们可以查看/x_desktop/res/config/config.json文件,服务器自动生成了center服务器地址配置:{ ... "center": [ { "port": "20030", "host": "" }, { "port": "20030", "host": "server1" }, { "port": "20030", "host": "server2" } ], ... }此时,浏览器会同时发起三个获取服务地址的请求:1、http://(用户访问系统的域名):20030/x_program_center/jaxrs/distribute/assemble/source/(用户访问系统的域名);2、http://server1:20030/x_program_center/jaxrs/distribute/assemble/source/server13、http://server2:20030/x_program_center/jaxrs/distribute/assemble/source/server2其中只要有一个服务成功返回数据,其他服务就会取消,系统就会使用返回的服务地址列表进行后续访问,返回的数据格式如下:{ "type": "success", "data": { "x_portal_assemble_designer": { "name": "门户设计", "host": "server1", "port": 20020, "context": "/x_portal_assemble_designer" }, "x_portal_assemble_surface": { "name": "门户", "host": "server1", "port": 20020, "context": "/x_portal_assemble_surface" }, "x_query_assemble_surface": { "name": "数据查询", "host": "server1", "port": 20020, "context": "/x_query_assemble_surface" }, "x_file_assemble_control": { "name": "云文件", "host": "server1", "port": 80, "context": "/x_file_assemble_control" }, ... }, "message": "", "date": "2020-11-25 16:14:58", "spent": 0, "size": -1, "count": 0, "position": 0 }其中每一个服务的host是服务器根据策略分配的。所以不同用户或这个每次访问会分配到不同的服务地址,以此平衡服务器压力。  但大多数情况下,我们通过都会nginx配置来搭建负载均衡集群,那此时,我们的获取到的服务地址列表始终是指向nginx服务器的。此时再去动态获取服务地址列表,就显得没有必要了。  所以我们可以手工配置所有服务地址,这样浏览器就不需要发起获取服务地址的请求了。在服务器config/web.json文件中,添加以下配置(如果在config目录下没有web.json文件,可以从configSample目录下拷贝一个过来):{ "configMapping": { //此处的server1是用户访问系统时所用的域名。 "server1": { "center": { "host": "center服务器域名", "port": "20030" }, //servers下配置所有系统服务的地址, //可以通过http://center服务器:20030/x_program_center/jaxrs/distribute/assemble/source/server1 //这个请求来获取,返回的data中的内容 "servers": { "x_portal_assemble_designer": { "name": "门户设计", "host": "app.cqmc.com", "port": 8085, "context": "/x_portal_assemble_designer" }, ...... } }, //如果有多个域名可以访问本系统,可以配置多组。 "server2": { ... } } }配置完成后重启服务器,再次访问系统,就不会发起获取服务地址的请求了。脚本预加载  在设计表单和页面时,我们经常会引用脚本库中的设计,在以前的版本中,我们会使用this.include方法引用脚本,这样会向服务器发起请求,在请求完成后再执行其他脚本。如果在页面载入的时候,需要引入的脚本过多时,必然会拖慢页面加载速度。  举例说明:在以前的代码中,我们很多时候都是include一个脚本,运行一部分代码,再include一部分脚本,再运行一部分代码,这样就要求include的脚本同步加载,阻塞页面载入,如以下代码://在表单的queryLoad事件中的代码 this.include("script1"); this.script1Function(); this.include("script2"); this.script2Function(); this.include("script3"); this.script3Function();在表单的queryLoad事件中有以上代码,并有三个脚本库script1、script2和script3,分别定义三个方法://script1 this.define("script1Function", function(txt){ console.log("script1 function is run"); });//script2 this.define("script2Function", function(txt){ console.log("script2 function is run"); });//script3 this.define("script3Function", function(txt){ console.log("script3 function is run"); });当我们展现这个表单时,通过浏览器开发工具的网络监控可以看到:三个引入脚本是顺序加载的,阻塞了页面载入,导致页面展现速度变慢,我们可以通过以下两种方法来解决此问题。页面配置预加载脚本  在5.3版本开始,我们在设计表单和页面时,可以配置需要预加载的脚本,只要选择在页面载入时需要加载的脚本即可,不需要再使用this.include方法加载了。但要注意的是,如果脚本有依赖关系,必须按照一定的顺序选择脚本。  在上面的例子中,我们只需要将要引入的脚本,选择到表单属性的“预加载脚本”中。然后修改queryLoad代码://在表单的queryLoad事件中的代码 //脚本已经预加载,不需要通过this.include载入了 this.script1Function(); this.script2Function(); this.script3Function();  再次展显此表单时,方法正常运行,但没有了引入脚本的http请求了。异步加载  我们也可以通过异步加载脚本,来加快页面展现速度,我们将上例中的queryLoad事件代码做如下改动://在表单的queryLoad事件中的代码 this.include(["script1","script2","script3"], function(){ this.script1Function(); this.script2Function(); this.script3Function(); }.bind(this), true);  通过设置this.include方法的第二个个参数为回调函数,这样第一个参数中的数组所指向的脚本会进行异步加载,加载完成后,运行回调函数。  再次展显此表单时,我们会看到方法正常运行,通过浏览器开发工具的网络监控可以看到:  三个请求同时运行,完成后运行脚本中的方法,不阻塞页面展现。  但上面的方法存在一个问题,就是在queryLoad事件中异步加载脚本,不会使页面展现阻塞,此时页面加载继续执行,如果我们在页面的其他事件或组件默认值等脚本中,使用了要加载的脚本中定义的方法时,就会出现错误,所以如果有这样的情况,我们需要在queryLoad事件中异步加载脚本时,暂停页面载入,等脚本加载完成后,再继续载入页面。我们修改上面的queryLoad事件代码如下://在表单的queryLoad事件中的代码 //暂停页面加载,并获取要恢复页面加载的回调方法 var resolve = this.wait(); this.include(["script1","script2","script3"], function(){ this.script1Function(); this.script2Function(); this.script3Function(); //异步加载完成,获取回调方法 resolve.cb(); //回调方法继续展现页面 }.bind(this), true);异步加载的方法不但适用脚本加载,也同样适用数据字典或其他异步请求的数据获取,可以通过异步方式获取所有需要的数据后,再加载表单,这样可以有效避免同步请求阻塞页面。请看下面的例子://假设在表单加载时,我们会使用到若干脚本、几个数据字典、以及通过服务获取的数据 //可以让这些请求异步执行,所有数据准备好以后,再继续展现表单 //在表单的queryLoad事件中的代码 //暂停页面加载,并获取要恢复页面加载的回调方法 var resolve = this.wait(); //加载脚本的Promise var scriptPromise = new Promise(function(resolve, reject){ this.include(["script1","script2","script3"], function(){ resolve(); }.bind(this), true); }.bind(this)); //加载通过服务器请求的数据 //此处以获取当前用户最新10条待办为例 //Actions的方法返回Promise对象 var dataPromise = this.Actions.load("x_processplatform_assemble_surface").TaskAction.V2ListPaging(1,10); //加载第一个数据字典 //get方法第二个参数表示异步,也可以是一个回调函数,返回Promise对象 var dict1Promise = (new this.Dict("dict1")).get("path", true); //加载第二个数据字典 var dict2Promise = (new this.Dict("dict2")).get("path",true); //通过Promise.all方法确保所有资源加载 Promise.all([scriptPromise, dict1Promise, dict2Promise, dataPromise]).then(function(values){ //获取到的数据赋值,以备后续使用 this.dict1Data = values[1]; this.dict2Data = values[2]; this.taskData = values[3].data; resolve.cb(); //继续加载表单 }.bind(this)).catch(function(){ //即使资源加载有错,也继续加载表单 resolve.cb(); });再次展显此表单时,通过浏览器开发工具的网络监控可以看到:所有请求同时发起,减少了页面阻塞时间。组件延时加载表单和页面的Tab页组件和子表单组件,具有“延时加载”选项。Tab页组件建议“延时加载”选项始终选“是”。对于子表单,首先建议尽可能不用计算子表单。然后“延时加载”选项选:“是”,然后在需要子表单展现时,使用以下代码激活:this.form.get("subform").active(function(){ //子表单加载完成后的回调方法 });组件默认值异步处理5.3版本开始支持表单组件默认值通过Promise进行异步处理,有关详细内容可查看文档:此处为语雀文档,点击链接查看:https://www.yuque.com/go/doc/14754201https://www.yuque.com/o2oa/rf2zrv/ws07m0想要了解更多开源O2OA办公开发平台,欢迎随时访问官网。官网:http://www.o2oa.net/
2020
12月
30
办公OA:O2OA表单中的事件
1. 概述我们设计表单的时候经常会有这样的需求:在表单或者组件加载前/加载后,能够执行一些脚本来改变表单或组件的样式和行为。或者用户在点击组件的时候能够执行脚本。表单的事件就是为这样的场景而设计。在表单中有两类事件:组件事件和Element事件。当我们打开表单设计器,在表单属性或组件属性中的“事件”附签中可以看到一组事件,这组事件即包含了两种事件。表单事件见下图。开发人员可以在事件编辑器中编写脚本,也可以添加或删除事件。添加的组件事件需要在API的列表中才有效。2 Element 事件2.1 简介Element 是经过Mootools框架封装后的HTML DOM对象,参考 http://www.chinamootools.com/element.html。Element 的事件类型和 HTML DOM 对象一致,比如"focus、click、blur"等。本平台的Element事件,是基于Mootools的 Element.Event 类进行封装的。Element.Event类参考http://www.chinamootools.com/element_event.html。2.2 表单设计器中的使用表单设计器中的事件,this对象指向平台的MWF.xScript.Environment对象,这是平台脚本的上下文,可以执行类似于"this.form"的脚本,上下文API请查看:链接。平台在每次运行事件的时候,都会为 this 对象添加一个属性"target"。我们可以通过 this.target 来获取当前组件。//获取当前组件对象 this.target; //等价于 this.form.get("fieldName");当我们在表单设计器的各种组件中添加了事件,在表单加载的时候,平台会把事件添加到相应的Element对象。下表是各种组件对应的Element事件对象。组件类型Element事件对象获取Element脚本Checkbox多选按钮input[type='checkbox']this.form.get("fieldName").node.getElements("input['type='checkbox']")Radio单选按钮input[type='radio']this.form.get("fieldName").node.getElements("input['type='radio']")Textarea多行文本textareathis.form.get("fieldName").node.getFirst() || this.form.get("fieldName").node; Textfield单行文本inputthis.form.get("fieldName").node.getFirst() || this.form.get("fieldName").node; Org人员第一个子divthis.form.get("fieldName").node.getFirst() || this.form.get("fieldName").node; Calendar日期inputthis.form.get("fieldName").node.getFirst() || this.form.get("fieldName").node; Combox组合框第一个子divthis.form.get("fieldName").node.getFirst() || this.form.get("fieldName").node; Opinion意见框第一个子对象this.form.get("fieldName").node.getFirst() || this.form.get("fieldName").node; Address地址选择第一个子对象this.form.get("fieldName").node.getFirst() || this.form.get("fieldName").node; Number数字inputthis.form.get("fieldName").node.getFirst() || this.form.get("fieldName").node; 其他nodethis.form.get("fieldName").node; 样例:在一个标识为"subject"的文本组件的 focus 事件中增加了脚本。对于上面的脚本,当光标进入输入框的时候被执行。如果希望由其他条件来触发这个事件,也可以通过下面的脚本来执行:var node = this.form.get("subject").node; //获取组件节点 ( node.getFirst() || node ).fireEvent("focus"); //触发focus事件2.3 在脚本中的使用在上面的例子中,我们都是通过组件属性中的事件区域来添加事件。除了这种方法,还可以在脚本中增加事件。使用 addEvent 对元素设置一个侦听器。myElement.addEvent(type, fn);参数:type - (string) 事件名,没有'on'。fn - (function) 事件函数。返回:(element)当前元素。样例:下面的脚本可以实现上一个样例的功能,在一个标识为"subject"的文本组件的 focus 事件中增加脚本var node = this.form.get("subject").node; node.getElement("input").addEvent("focus", function(ev){ //ev 是Mootools Element的Event对象,参考http://www.chinamootools.com/event.html //这里的this指向input this.setStyle("border","1px solid blue"); })使用 addEvents 对元素设置多个侦听器。myElement.addEvents(events);参数:events - (object) 包含多个事件的对象(对象的key为事件名,value为事件函数)。返回:(element)当前元素。样例:var node = this.form.get("subject").node; node.getElement("input").addEvents({ "focus" : function(ev){ //ev 是Mootools Element的Event对象,参考http://www.chinamootools.com/event.html //这里的this指向input this.setStyle("border","1px solid blue"); }, "blur": function(ev){ //ev 是Mootools Element的Event对象,参考http://www.chinamootools.com/event.html //这里的this指向input this.setStyle("border","1px solid gray"); } })使用fireEvent 触发一个或多个事件myElement.fireEvent(type[, args[, delay]]);参数:type - (string) 事件名称(例如"click" )args - (mixed, optional) 事件函数的参数,数组或单个对象,如果超过一个参数,必须是一个数组。delay - (number, optional) 延迟(ms)执行时间。返回:(element)当前元素。样例:var node = this.form.get("subject").node; //获取组件节点 ( node.getFirst() || node ).fireEvent("focus"); //触发focus事件3 组件事件3.1 简介平台中的组件是一组基于Mootools Class生成的对象。Mootools Class是MooTools框架的基类,参考http://www.chinamootools.com/class.html。在Mootools Class中有一系列的特性,其中就包括了 Class:Event,参考http://www.chinamootools.com/class_extras.html 中的 Event章节。当我们在表单设计器的各种组件中添加了事件脚本,在表单加载的时候,代码运行到相应的位置,这些脚本就会被触发。比如平台在加载组件(包括生成Html Dom,赋值等等)之前,会去执行queryLoad事件中的脚本;加载组件以后,会去执行postLoad中的事件。3.2 表单设计器中的使用表单设计器中的事件,this对象指向平台的MWF.xScript.Environment对象,这是平台脚本的上下文,可以执行类似于"this.form"的脚本,上下文API请查看:链接。平台在每次运行事件的时候,都会为 this 对象添加一个属性"target"。我们可以通过 this.target 来获取当前组件。//获取当前组件对象 this.target; //等价于 this.form.get("fieldName");某些需要参数的事件,平台在每次运行的时候,会为 this 对象添加一个属性"event "。我们可以通过 this.event 来获取参数。//有时候可以通过this.event获取参数 this.event;样例:在queryLoad脚本中根据流程活动名称把当前组件设置为只读。系统在加载组件的时候,会根据json的isReadonly判断生成输入框还是div节点。如果希望由其他条件来触发这个事件,也可以通过下面的脚本来执行:var field = this.form.get("subject"); //获取组件 field.fireEvent("queryLoad"); //触发queryLoad事件3.3 在脚本中的使用在上面的例子中,我们都是通过组件属性中的事件区域来添加事件。除了这种方法,还可以在脚本中增加事件。使用 addEvent 对组件设置一个事件。myClass.addEvent(type, fn[, internal]);参数:type - (string)事件的类型(例如'queryLoad') ,包含在表单设计器里组件的事件。fn - (function)事件函数。internal - (boolean, optional)设置函数属性:internal为true。internal属性通常用来防止删除。返回:(object)这个类的实例。样例:在表单的保存的时候加一个事件,将临时字段置空。var form = this.form.getApp().appForm; //获取表单组件 form.addEvent("beforeSave", function(){ //添加保存前事件 this.form.get("tmpField").setData(''); //给临时字段置空 }.bind(this)) //通过 bind(this), 把上下文传到事件方法里使用 addEvents 对组件设置多个侦听器。myClass.addEvents(events);参数:events - (object)一个key:value对象,key事件名称(如"queryLoad" ) ,和值,当事件发生时要调用的函数。返回:(object)这个类的实例。注: 通过这种方式添加事件,this.target 和 this.event 均为空。样例:var form = this.form.getApp().appForm; //获取表单组件; form.addEvents({ "beforeSave" : function(){ //添加保存前事件 this.form.get("tmpField").setData(''); //给临时字段置空 }.bind(this), // "beforeDelete": function(){ //增加删除前事件 //do something } })使用fireEvent 触发一个或多个事件myClass.fireEvent(type[, args[, delay]]);参数:type - (string)事件的类型(例如'beforeSave') 。args - (mixed,optional)传递给函数的参数。要传递多个参数,该参数必须是一个数组。delay - ( number,optional)等待时间,单位毫秒。返回:(object)这个类的实例。注: 通过这种方式添加事件,this.target 和 this.event 均为空。样例一:var form = this.form.getApp().appForm; //获取表单组件; form.fireEvent("beforeSave"); //触发beforeSave事件样例二:假如临时字段是触发时传入的,可以这样写var form = this.form.getApp().appForm; //获取表单组件; form.fireEvent("beforeSave",["tmpFieldName1"]); //触发beforeSave事件则添加的事件需要改成如下:var form = this.form.getApp().appForm; //获取表单组件 form.addEvent("beforeSave", function( fieldName ){ //添加保存前事件 this.form.get(fieldName").setData(''); //给临时字段置空 }.bind(this)) //通过 bind(this), 把上下文传到事件方法里3.4 表单和组件的加载顺序整个表单加载时的顺序遵循以下规则(a-g也是有顺序的):a、执行主表单事件 queryLoad -> beforeLoad -> beforeModulesLoad;b、根据组件在主表单的位置从上到下,从里到外执行组件的queryLoad->postLoad->load事件;c、执行主表单事件 postLoad;d、子表单、子页面、部件上的直接事件不会被执行,但子表单里组件的事件也是根据 规则b 执行;e、由于子表单、子页面、部件是异步加载,这些组件内的组件事件在异步加载后分别执行;f、执行主表单事件 afterModulesLoad -> afterLoad;g、当 Tab 组件、子表单、公文管理器等组件被设置为延迟加载的时候,主表单加载的时候,这些组件内的子组件在不会加载。当这些组件被激活的时候,根据 规则b 执行事件。表单加载时触发的直接事件说明:表单的直接事件说明queryLoad 表单加载前触发。数据(businessData)、预加载脚本和表单html已经就位。beforeLoad表单加载前触发。已提示抢办锁定。beforeModulesLoad表单的所有组件加载前触发,此时表单的样式和js head已经加载。postLoad 表单加载后触发。主表单的组件加载完成,但不保证子表单、子页面、部件加载完成。afterModulesLoad表单的所有组件加载后触发。表单包含有子表单、子页面、部件时,此事件会在这些组件加载后触发。afterLoad表单加载后触发。表单包含有子表单、子页面、部件时,此事件会在这些组件加载后触发。
2021
08月
10
开源OA:O2OA开源办公平台,为何开源?
大家好,我们是O2OA开源办公开发平台,今天想要为大家来解决一些常问的问题:O2OA为什么要开源?其实一开始有人提出说要“开源”的时候,大家都是一愣。我们一个通过售卖软件“养家糊口”的IT公司要是把软件“开源”了,软件不就难卖了?又有什么发展前景呢...... 一个个的问题萦绕在大家的脑子里。经过几番争论,大家还是决定执行“开源”。说到“开源”,那应该从开源软件这些年的发展说起!开源软件的发展开源软件最早的思想起源于黑客文化,真正的开源思想形成,要以 GNU 的诞生说起。 1984年,美国国家工程院院士 Richard Stallman 建立起操作系统 GNU,标志着基于“自由软件”思想的操作系统落成。后来随着Linux的出世,开源软件得到了更多人的支持,并逐步走向了正轨。时间来到2000年左右,随着Apache基金会等大型非盈利组织的出现,越来越多的开发爱好者因为“开源”聚集到了一起,开源软件进入到了第二个阶段。在软件行业,“自由”的思想越来越盛行。而今Google、Facebook、Oracle、阿里巴巴、腾讯等大型互联网和IT企业已经开始倡导开源软件,开源的思想形成了空前的盛况。近几年,开源产业有了前所未有的发展。特别是在2018年,互联网上最大的开源仓库 Github 宣布自家平台上开源软件仓库数量突破了1亿个,已汇集了来自全球的3100多万开发者。最新的2020年报告,Github上的开发者达更是到达了5600万,仅仅2020年一年开源软件仓库就增加了6000万个。由此可见,开源的思潮到现在已经产生了空前的发展。时至今日大到全球性的非盈利组织、大型企业、教育机构拥抱开源,小到个人、中小企业也闻风而动。从另一个维度来看,开源思想从原来的IT软件行业,发展到了如今的教育、管理、设计等等各行各业。可以预见在未来的几年、几十年,开源的思想将大行其道。传统IT企业的选择在开源盛行的当下,很多传统IT企业遇到了这些思想的冲击,也面临着“抉择”。如果接受了开源,企业如何盈利,不接受是否会被社会淘汰?传统的IT企业都是通过售卖软件为生的。在过去很长一段时间内,企业只要开发一个软件就能够产生很大的经济效益,通过这些软件就可以获得一张来自甲方的合同。因为有很多需求类似的甲方,所以企业通过售卖这些软件给甲方能够获取丰厚的利润,并且还能通过维护软件收取大量的维护费用,这个软件是他们的聚宝盆。如果软件开源了,其他人就可以学习他们的思路,甚至是拿他们的源码进行修改转卖等,直接导致企业的利润受损。另外一方面企业觉得投入了开源的人力,资源投入却没有产生对应的回报,浪费了企业的资源。确实,开源不是把软件公开就行了的,需要花费很多人力、精力去维护软件,去维护社区,去分享演讲。企业觉得发工资给员工就应该让员工对企业产生价值,而不是浪费在暂时得不到回报的工作中。这些都是实实在在摆在大家面前的问题,需要大家去思考!理解“开源”经过大家多轮的激烈讨论,我们对开源有了更深的理解,思想也得到了统一。首先,“开源”和共享有助于提高自己项目的质量。软件从来都不是静止的,随着市场和竞争环境的变化,竞争优势也会发生变化,只有一直迭代,高速迭代才能屹立不倒。一个软件项目也好,一个企业也罢只有持续的进步才能立于不败之地。关起门来做出来的软件是有天花板的,无论你觉得自己有多牛,你是技术专家,但是并不一定是业务或者场景的专家,软件进化的速度受限于开发团队和产品经理自己的认知和见识的进化速度,除非开发商强大到能够持续引领整个行业的进化方向。“开源”你的项目就等于允许让整个开发社区都在为这个项目做贡献,可以免费分享利用了大家的智慧和劳动。其次,“开源”也不是做无用功,它能够让参与的员工更加娴熟的掌握相关的知识。一个人要把技术学精湛最好的方式就是去把它教授给其他人。因为你要将一种知识教授给别人的时候,你需要对种知识有更加深刻的理解和认识。对于公司让员工去做“开源”项目,去写开源文章、去公开演讲,员工本身就得精心准备,理清思路,自然也就得到了提升。再次,“开源”和共享也是推销自己最好的方式之一。“开源”能够提升公司的品牌形象,提高社会认知度。为“开源”社区做贡献,既是回馈社区,也展示了公司的影响力和品质,也就为吸引更多的人才做了铺垫。企业参与“开源”,不仅贡献自己的力量,回馈社区,让整个社会互利互惠,让知识传播到世界的各个角落,同时也能整合整个社会的力量,让企业能够站到更高的位置。进而提升自己的品牌影响力。让我们拥抱开源吧!
2021
03月
15
OA办公:如何使用Tomcat搭建WebDav文件存储服务器
O2OA服务器支持使用webdav协议来存储二进制文件.Tomcat默认是支持WebDAV的,且默认为禁用状态.可以开启Tomcat的webdav作为文件存储服务器.开启步骤如下:1.在tomcat的webapp是目录下创建一个webdav目录作为项目.2.在webdav目录下创建WEB-INF/web.xmlweb.xml内容如下:<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0"> <display-name>webdav</display-name> <welcome-file-list> <welcome-file>index.html</welcome-file> <welcome-file>index.htm</welcome-file> <welcome-file>index.jsp</welcome-file> <welcome-file>default.html</welcome-file> <welcome-file>default.htm</welcome-file> <welcome-file>default.jsp</welcome-file> </welcome-file-list> <servlet> <servlet-name>webdav</servlet-name> <servlet-class>org.apache.catalina.servlets.WebdavServlet</servlet-class> <init-param> <param-name>debug</param-name> <param-value>0</param-value> </init-param> <init-param> <param-name>listings</param-name> <param-value>true</param-value> </init-param> <!-- Read-Write Access Settings --> <init-param> <param-name>readonly</param-name> <param-value>false</param-value> </init-param> </servlet> <!-- URL Mapping --> <servlet-mapping> <servlet-name>webdav</servlet-name> <url-pattern>/*</url-pattern> </servlet-mapping> <security-constraint> <web-resource-collection> <web-resource-name>webdav</web-resource-name> <!-- Detect WebDAV Methods in URL For Whole Application --> <url-pattern>/*</url-pattern> <http-method>PROPFIND</http-method> <http-method>PROPPATCH</http-method> <http-method>COPY</http-method> <http-method>MOVE</http-method> <http-method>LOCK</http-method> <http-method>UNLOCK</http-method> </web-resource-collection> <!-- Restrict access by role --> <auth-constraint> <role-name>*</role-name> </auth-constraint> </security-constraint> <login-config> <auth-method>BASIC</auth-method> <realm-name>webdav</realm-name> </login-config> <security-role> <description>WebDAV User</description> <role-name>webdav</role-name> </security-role> </web-app>3.在tomcat/conf目录下的tomcat-users.xml文件中添加webdav访问用户4.启动Tomcat<?xml version="1.0" encoding="UTF-8"?> <tomcat-users xmlns="http://tomcat.apache.org/xml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://tomcat.apache.org/xml tomcat-users.xsd" version="1.0"> <role rolename="webdav"/> <user username="admin" password="admin" roles="webdav"/> </tomcat-users>5.在o2server/configSample目录下拷贝externalStorageSources.json到o2server/config目录修改配置指向webdav{ "file": [ { "protocol": "webdav", "username": "admin", "password": "admin", "host": "127.0.0.1", "port": 8080.0, "prefix": "/repository/default/file/", "enable": true, "weight": 100.0, "name": "251", "deepPath": false, "###protocol": "协议,可选值ftp,webdav###", "###username": "登录用户名.###", "###password": "登录密码.###", "###host": "主机地址.###", "###port": "端口.###", "###prefix": "前缀路径.###", "###enable": "是否启用###", "###weight": "设置权重.###", "###name": "存储节点名,对应存储名称,谨慎修改.###", "###deepPath": "是否使用更深的路径.###" } ], "processPlatform": [ { "protocol": "webdav", "username": "admin", "password": "admin", "host": "127.0.0.1", "port": 8080.0, "prefix": "/repository/default/processPlatform/", "enable": true, "weight": 100.0, "name": "251", "deepPath": false, "###protocol": "协议,可选值ftp,webdav###", "###username": "登录用户名.###", "###password": "登录密码.###", "###host": "主机地址.###", "###port": "端口.###", "###prefix": "前缀路径.###", "###enable": "是否启用###", "###weight": "设置权重.###", "###name": "存储节点名,对应存储名称,谨慎修改.###", "###deepPath": "是否使用更深的路径.###" } ], "mind": [ { "protocol": "webdav", "username": "admin", "password": "admin", "host": "127.0.0.1", "port": 8080.0, "prefix": "/repository/default/mind/", "enable": true, "weight": 100.0, "name": "251", "deepPath": false, "###protocol": "协议,可选值ftp,webdav###", "###username": "登录用户名.###", "###password": "登录密码.###", "###host": "主机地址.###", "###port": "端口.###", "###prefix": "前缀路径.###", "###enable": "是否启用###", "###weight": "设置权重.###", "###name": "存储节点名,对应存储名称,谨慎修改.###", "###deepPath": "是否使用更深的路径.###" } ], "meeting": [ { "protocol": "webdav", "username": "admin", "password": "admin", "host": "127.0.0.1", "port": 8080.0, "prefix": "/repository/default/meeting/", "enable": true, "weight": 100.0, "name": "251", "deepPath": false, "###protocol": "协议,可选值ftp,webdav###", "###username": "登录用户名.###", "###password": "登录密码.###", "###host": "主机地址.###", "###port": "端口.###", "###prefix": "前缀路径.###", "###enable": "是否启用###", "###weight": "设置权重.###", "###name": "存储节点名,对应存储名称,谨慎修改.###", "###deepPath": "是否使用更深的路径.###" } ], "calendar": [ { "protocol": "webdav", "username": "admin", "password": "admin", "host": "127.0.0.1", "port": 8080.0, "prefix": "/repository/default/calendar/", "enable": true, "weight": 100.0, "name": "251", "deepPath": false, "###protocol": "协议,可选值ftp,webdav###", "###username": "登录用户名.###", "###password": "登录密码.###", "###host": "主机地址.###", "###port": "端口.###", "###prefix": "前缀路径.###", "###enable": "是否启用###", "###weight": "设置权重.###", "###name": "存储节点名,对应存储名称,谨慎修改.###", "###deepPath": "是否使用更深的路径.###" } ], "okr": [ { "protocol": "webdav", "username": "admin", "password": "admin", "host": "127.0.0.1", "port": 8080.0, "prefix": "/repository/default/okr/", "enable": true, "weight": 100.0, "name": "251", "deepPath": false, "###protocol": "协议,可选值ftp,webdav###", "###username": "登录用户名.###", "###password": "登录密码.###", "###host": "主机地址.###", "###port": "端口.###", "###prefix": "前缀路径.###", "###enable": "是否启用###", "###weight": "设置权重.###", "###name": "存储节点名,对应存储名称,谨慎修改.###", "###deepPath": "是否使用更深的路径.###" } ], "cms": [ { "protocol": "webdav", "username": "admin", "password": "admin", "host": "127.0.0.1", "port": 8080.0, "prefix": "/repository/default/cms/", "enable": true, "weight": 100.0, "name": "251", "deepPath": false, "###protocol": "协议,可选值ftp,webdav###", "###username": "登录用户名.###", "###password": "登录密码.###", "###host": "主机地址.###", "###port": "端口.###", "###prefix": "前缀路径.###", "###enable": "是否启用###", "###weight": "设置权重.###", "###name": "存储节点名,对应存储名称,谨慎修改.###", "###deepPath": "是否使用更深的路径.###" } ], "bbs": [ { "protocol": "webdav", "username": "admin", "password": "admin", "host": "127.0.0.1", "port": 8080.0, "prefix": "/repository/default/bbs/", "enable": true, "weight": 100.0, "name": "251", "deepPath": false, "###protocol": "协议,可选值ftp,webdav###", "###username": "登录用户名.###", "###password": "登录密码.###", "###host": "主机地址.###", "###port": "端口.###", "###prefix": "前缀路径.###", "###enable": "是否启用###", "###weight": "设置权重.###", "###name": "存储节点名,对应存储名称,谨慎修改.###", "###deepPath": "是否使用更深的路径.###" } ], "report": [ { "protocol": "webdav", "username": "admin", "password": "admin", "host": "127.0.0.1", "port": 8080.0, "prefix": "/repository/default/report/", "enable": true, "weight": 100.0, "name": "251", "deepPath": false, "###protocol": "协议,可选值ftp,webdav###", "###username": "登录用户名.###", "###password": "登录密码.###", "###host": "主机地址.###", "###port": "端口.###", "###prefix": "前缀路径.###", "###enable": "是否启用###", "###weight": "设置权重.###", "###name": "存储节点名,对应存储名称,谨慎修改.###", "###deepPath": "是否使用更深的路径.###" } ], "strategyDeploy": [ { "protocol": "webdav", "username": "admin", "password": "admin", "host": "127.0.0.1", "port": 8080.0, "prefix": "/repository/default/strategyDeploy/", "enable": true, "weight": 100.0, "name": "251", "deepPath": false, "###protocol": "协议,可选值ftp,webdav###", "###username": "登录用户名.###", "###password": "登录密码.###", "###host": "主机地址.###", "###port": "端口.###", "###prefix": "前缀路径.###", "###enable": "是否启用###", "###weight": "设置权重.###", "###name": "存储节点名,对应存储名称,谨慎修改.###", "###deepPath": "是否使用更深的路径.###" } ], "teamwork": [ { "protocol": "webdav", "username": "admin", "password": "admin", "host": "127.0.0.1", "port": 8080.0, "prefix": "/repository/default/teamwork/", "enable": true, "weight": 100.0, "name": "251", "deepPath": false, "###protocol": "协议,可选值ftp,webdav###", "###username": "登录用户名.###", "###password": "登录密码.###", "###host": "主机地址.###", "###port": "端口.###", "###prefix": "前缀路径.###", "###enable": "是否启用###", "###weight": "设置权重.###", "###name": "存储节点名,对应存储名称,谨慎修改.###", "###deepPath": "是否使用更深的路径.###" } ], "structure": [ { "protocol": "webdav", "username": "admin", "password": "admin", "host": "127.0.0.1", "port": 8080.0, "prefix": "/repository/default/structure/", "enable": true, "weight": 100.0, "name": "251", "deepPath": false, "###protocol": "协议,可选值ftp,webdav###", "###username": "登录用户名.###", "###password": "登录密码.###", "###host": "主机地址.###", "###port": "端口.###", "###prefix": "前缀路径.###", "###enable": "是否启用###", "###weight": "设置权重.###", "###name": "存储节点名,对应存储名称,谨慎修改.###", "###deepPath": "是否使用更深的路径.###" } ] }6.在o2server/config目录下将node_xxx.xxx.xxx.xxx.json中的storage服务器设置为禁用. "storage": { "enable": false, "port": 20040.0, "sslEnable": false, "name": "251", "accounts": [], "prefix": "", "deepPath": false, "###enable": "是否启用,对于二进制流文件,比如附件,图片等存储在单独的文件服务器中,可以支持多种文件服务器,默认情况下使用ftp服务器作为文件服务器,每个节点可以启动一个文件服务器以提供高性能.###", "###port": "ftp服务器端口,此端口可以不对外开放,仅有ApplicationServer进行访问,并不直接对用户提供服务.###", "###sslEnable": "是否启用ssl传输加密,如果启用将使用config/keystore文件作为密钥文件.使用config/token.json文件中的sslKeyStorePassword字段为密钥密码,sslKeyManagerPassword为管理密码.###", "###name": "名称,多个节点中不能重名,默认为251.###", "###accounts": "二进制流文件是分多个账号分段存储的,可以单独设置每个分类的存储配置,一般不需要设置.###", "###passivePorts": "ftp传输有主动和被动之分,如果使用了被动传输,设置被动端口范围,默认为29000-30000.###", "###prefix": "路径前缀.###", "###deepPath": "使用更深的路径###" }7.启动服务器o2server服务已经将存储转向tomcat服务器所提供的webdav服务.📎tomcat-users.xml📎webdav.zip
2020
11月
19
我们的客户 /
OUR CUSTOMERS
咨询电话: 400-888-0545 0571-88480535
邮件地址:
O2OA开发平台官网:
官方微博
官方微信
售前顾问
Copyright © 2020 Zoneland All Rights Reserved. 浙ICP备10211689号-5 浙公网安备 33010602009829号
首页