400-888-0545
扫码关注
官方微信
五大平台全开源 /
FIVE PLATFORMS
流程管理平台
全功能流程引擎。基于任务驱动,开放式服务驱动,高灵活性、扩展性...
了解更多
内容管理平台
门户管理平台
数据中心
服务管理平台
移动办公全开源 /
MOBILE OFFICE
全终端| 原生APP| 钉钉集成| 微信集成| WeLink集成
内置应用全开源 /
BUILT IN APPLICATIONS
考勤管理
工作中心
日程管理
企业网盘
个人便签
-
收起
-
详细介绍
会议管理
网络会议
全文检索
企业AI
热点信息
-
收起
-
详细介绍
客户管理
云笔记
资产管理
企业社区
公文管理
-
收起
-
详细介绍
工作管理
系统日志
脑图设计
-
收起
-
详细介绍
高达50%的合作伙伴续费折扣
身为O2OA合作伙伴,您在续费时可以获得高达50%的价格折扣
折扣规则
· 在合同到期前续费,可以获得官方价格50%的价格折扣。
· 在合同到期后3个月内续费,可以获得官方价格30%的价格折扣。
立即购买
产品特色 /
PRODUCT FEATURES
全平台
支持Windows、Linux、AIX、MacOS及国产操作系统,支持x86、ARM、MIPS、POWER等芯片。
了解更多
全终端
支持Chrome、Firefox、IE、Safari、Opera,支持钉钉、微信、WeLink及第三方APP接入。
了解更多
国产化
支持全国产化芯片、操作系统、数据库,浏览器,并符合信创协同平台环境体系,生成安全的OA办公系统。
了解更多
低代码开发
提供高效率的OA办公开发平台的同时,通过可视化的工具快速构建项目流程、信息、门户、报表以及服务。
了解更多
开放源代码
开源OA:确保全代码开源,安全可控,可在Github、Gitee上下载代码编译并进行OA系统二次开发。
了解更多
国标版式公文
拥有GB/T 9704-2012(党政机关公文格式)标准版式公文模板,无需加载任何插件和控件,支持OA移动端编辑。
了解更多
智能化办公
支持语音办公,人脸识别,内置企业AI分析推荐引擎,可通过机器学习自定义OA办公使用场景。
了解更多
应用市场
基于O2OA系统丰富的项目经验,提供各类插件、组件、模板以及专业应用,客户可免费下载安装,进行OA系统二次开发。
了解更多
数据交互
提供多种数据访问方式,可自定义数据访问接口,实现多系统间数据交互,使OA系统数据协同功能更强大。
了解更多
集群扩展
采用微服务架构,支持横向和纵向集群扩展,提供高可用OA系统能力,支持公有云和私有云的PaaS部署。
了解更多
业务实现 /
BUSINESS IMPLEMENTATION
所见即所得的门户管理平台,可以轻松结合O2OA提供的认证设置与其他系统进行单点认证集成。
降低企业人力资源成本,提高人均产值。规范化、数据化的管理,为企业未来的发展奠定基础。
将企业工作的制定、分解、进展汇报痕迹化,数据更新动态化,带来更直观的责任考核,支持企业运营目标的实现。
便利清晰的日报周报管理界面,帮助员工自我管理和自我提升,实现团队管理和分享。
项目管理系统中,包含工作项目的进度、人员、时间等信息以实现多维度的管控,充分满足企业需求。
执行力管理平台能够将任务细化,让员工按质按量完成自己的任务,全面提高企业的无纸化办公效率。
企业网站和门户|人力资源管理系统|战略工作管理系统| 企业日报周报管理|项目管理系统|执行力管理平台
新闻资讯 /
NEWS
企事业单位,为何选择OA协同办公系统? - O2OA国产信息系统低代码开发平台
OA即办公自动化,主要是帮助管理者进行组织人员的管理运作。OA办公系统可以实现企事业单位内部的协同办公,多部门、跨地域办公的问题都将不再是问题。日常工作中,需要手动进行统计、采集、记录的事情,使用OA办公系统都可以代替完成。除了这些简单的事务,OA办公对于企事业单位,还有以下作用:一、推行“无纸化绿色办公”推行OA办公系统,支持无纸化办公保护环境的同时降低企业运营成本。在企业日常工作中,一纸一笔都是公司的资产,日积月累,也是一笔巨大的消耗,使用OA办公系统后,电子文件可以完美替代纸质文件,节约成本的同时,也解决了文件存放的问题。二、推进企业信息化管理进程近几年,企事业单位越来越追求整体的信息化进程。拥有OA办公系统后,所有的工作流程变成电子化处理,设置多条工作流后,领导审批、签章都会根据工作流程自动移交到下一步,打破时间空间上的限制,更有自动提醒功能,防止工作的错漏。三、时间不限、空间不限每次想找领导审批,被告知领导出差了;临时来了个紧急工作任务,没有办法及时应对等等这些问题都是传统办公模式下的固有弊端。但是在OA办公下,不限时间不限空间,PC和手机、PAD都可以随时随地办公,实现整体资源有效共享,即使你不在工位前,也能处理组织内部所有事宜。四、企业资源安全性加强传统的办公模式下,纸质文件容易丢失、企业人才离职后也会带走大量客户资源,导致企业的文件机密泄露。OA办公系统下,每位员工对应职位权限不同,文件查阅的范围也不同;在OA办公系统下,也有客户资源统计的功能,方便办公的同时,也避免了客户资源的流失。五、资源有效共享传统办公模式下,企业各部门之间,有资源共享的滞后性,但是通过OA办公系统,企业部门之间的信息资源都趋于透明化、共享化。(当然信息的共享透明都是在员工权限的前提下进行提供的)这样就打破了信息孤岛、资源孤岛的现象,根据不同的工作任务,有效实现信息数据共享。综上所述,对于企事业单位而言,日常工作中的流程审批,通知公告,企业资产,财务结算等等任务都可以通过OA办公系统进行扁平化的简单管理,提升企事业单位整体的管理运营水平。O2OA作为一款开源免费的OA办公开发平台,基于J2EE架构,集成移动办公、智能办公,支持私有化部署,自适应负载能力的企业信息化系统建设平台,基于AGPL协议开放源代码的企业信息化系统需求定制开发解决方案,让企业最低“零成本”进行OA办公系统的开发,为企事业单位信息化推波助澜。
09
2021-04
09
2021-04
JAVA开源企业OA开发平台——办公用品的管理 - O2OA国产信息系统低代码开发平台
企业管理中,除了人员的管理,许许多多的办公用品也亟待管理。小到纸张笔墨,大到桌椅电脑,都是企业购入的资产,但是因为数量繁多,使用人员复杂,管理起来也是特别的麻烦。比如以下这几个问题,就是办公用品管理中细小繁杂却又重要的问题:①仓库里还有多少桌椅用品?采购时间分别是何时?目前还可以用吗?②上个月采购的一批笔记本,为什么才用了几天就没了?领用的人员和数量是多少?使用频率得到统计了吗?③换了好多新桌椅,那旧桌椅全部存放去哪里了?送去维修了吗?那维修进度呢?这些问题看似渺小,在公司的发展中貌似无足轻重,实则,量变终会导致质变,办公用品管理中密密麻麻的小问题堆积后,也是对企业资产的一种大消耗。这种琐碎复杂的办公用品,利用OA系统采用电子化的管理方式,将流传情况显性化,采购、领用、维修、报废等过程进行全程记录,随时随地查阅。O2OA办公开发平台为了让用户有更多符合企业需求的应用可以直接使用,也为了确保系统不会因大量的应用而显得过于“笨重”,所以最新版本的O2OA提供了应用市场,分离了部分集成到平台的应用,并且新推出了大量的应用供开发者免费下载使用。此次我们更新的应用就是——办公用品管理。接下来小编将来讲讲这一款新应用的详情。本应用提供办公用品的入库、领用、采购、库存盘点维护等功能,以便于轻松管理物资,减少铺张浪费,节约成本,提高办公效率。/办公用品管理首页//办公用品信息备案/1.手动输入2.批量导入/办公用品信息查询/支持通过名称和规格型号进行模糊查询。/办公用品相关流程/办公用品相关的流程涉及入库,采购,领用流程。在流程启动界面,物品列表里的“名称”支持双击选择已有的办公用品信息,点击名称可查看具体物品信息。这款办公用品管理的应用,能够通过OA系统落实办公用品管理工作,不管是使用情况、入库采购流程等环节,都可以实现实时追查。使用者不断在领用办公用品的同时,管理者也可以进行简单的数据盘点,保障公司的办公资产。O2OA作为一款开源免费的OA办公开发平台,致力于让企业单位“零成本”开始实施信息化建设变为可能,进行简单的技术搭建后,就可以创建出一款适合本企业单位适合的OA办公系统。
09
2021-04
收藏点赞数999+的开源协同OA项目,你不来看看吗? - O2OA国产信息系统低代码开发平台
虽然这样的标题,大家也司空见惯了,但是今天给大家介绍的,确确实实是一款鲜为人知,但是无比好用的全开源协同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平台还有许多其他的功能,目前也在持续更新迭代中。我们十分欢迎大家的使用,也非常希望能有更多的意见和建议。
08
2021-04
开源OA项目有这么多的优点,你get到了吗? - O2OA国产信息系统低代码开发平台
这类话题,百度一下就会有很多种不同的答案,笔者看到一种答案不禁想结合自己对开源OA和开源软件的理解感叹几句。如上图所示:一种典型的回答是,优点就是可以自己改,缺点是安全性差。当然,从优点上来讲,选择开源OA或者开源软件有非常多的优点,可不仅仅是可以自己改和便宜,比如:1、能更详细地了解供应商或者选择的项目是否优质,代码一看就明白了;2、可以得到更好的技术支持,发布开源软件的开发者一般都会留下联系方式,遇到问题可以直接通过公开的方式进行联系,解决自己遇到的问题;3、因为有很多人都在使用,项目的迭代会持续进行,相当于大家都在为同一个项目不断提供经验,不断修复问题,项目会越来越趋于健壮;优点还有很多,就不在此一一列举,至于上图所提到的缺点,笔者认为,刚好相反,优质的开源OA或者说开源软件反而更加安全,理由如下:1、一般来说,作为开发者或者企业在开源自己的项目之前,会仔细审核自己的项目。原因很简单,写得太渣了,不太好意思开源,人都是要面子的,开发者也一样。所以选择Star和Fork数较多的,正在迭代更新的开源项目一般不会有太大的问题;2、在一个项目开源,并且有一定数量的Star和Fork数之后(比如1000以上),使用项目的开发者或者用户会不断提交BUG或者反馈问题,随便一次次迭代,用户遇到的问题会一个个都被解决,用户会逼开源项目越来越好;3、如果选择的项目是真正的开源项目(没有任何jar包闭源),使用者可以更清楚地看到每一行代码,也可以自己动手修复那些自己找出来的问题。开源社区的每一位贡献着也会积极地修复自己能找到的安全漏洞,让整个项目更加安全可靠。综上,选择优质的开源项目,开源OA,相比闭源的项目更加安全可靠。至于上图中所说的开源项目便宜,这也应该是大多数人心底想法。选择开源软件的确会节约成本,但其实开源和免费,开源和便宜并不能直接划等号。选择开源软件,肯定也是需要一定的成本的,只是这些成本有可能不是RMB而已。比如,需要大量的精力研究源码,修改源码以达到项目的需求。笔者认为,如果能选择一款优质的开源项目作为基础平台,然后在此基础上完成自己的项目建设,业务落地,适当购买技术支持服务也是应该的。第一,可以大幅度缩短自己的学习成本,在短期内让团队快速熟悉平台的开发和使用模式;第二,还可以为自己的项目购买一个“技术保障”,在项目需要进行性能优化,需要进行故障处理时有足够的技术资源的支持,保障系统的稳定运行。在此笔者也尝试着总结一下选择开源软件对企业带来的几个好处:1、更直观的了解供应商的技术能力在你投资工程和经济资源将产品整合到你的基础设施之前,需要确保产品的合格性:是否处于积极开发状态?是否有定期的漏洞修复和安全更新?产品是否能根据需求按时更新?最后一点或许比你想象的还要重要。解决方案必须满足产品需求。但需求会随市场及商业的变化而变化,如果产品不随之做出改变,未来就需要花费一笔不菲的迁移成本。而在开源的世界里,你可以综合产品的发展速度以及社区的健康程度来比较供应商。一个更积极、更多元化的社区能在一两年后开发出更好的产品,这是一个关键的参考因素。当然,供应商必须要有能力解决在项目发展过程中出现的不稳定性问题。最后,还需要供应商具备较长的支持周期,以避免更新混乱的出现。2、更有利于产品的长期发展福布斯杂志指出,90%的初创公司最后都会失败,而他们当中,只有不到一半的中小型公司存活期能超过5年。如果在产品开发的中途突然出现需要更换供应商的问题,那迁移的成本就很高了。所以,要避免选择只有一个供应商支持的产品。而开源使得社区成员能够协同编写软件。如 OpenStack 就是由多个公司及个体志愿者共同编写的。这么做,就能保证,在一个供应商出现问题的情况下,其他供应商能继续支持。而且,软件一经开源,企业就会长期投入开发团队以实现产品开发。使用源代码的好处就是,你可以聘用贡献者来保证开发的活跃性。3、项目更安全开源软件的代码通常也更加安全,因为它经由社区进行了更为彻底的审查和检查(并且出现的任何问题往往会更加努力地进行修补)。企业采用开源代码长久以来都是犹豫不决的态度,不过现在看来,对安全性的担忧似乎不应是一个问题。以开源的方式进行开发,可以很直观地看到,供应商是如何对待安全问题,以及是否在积极保证产品安全。研究源代码并执行独立代码审核,也可以及时地发现问题并解决问题。开源除了源代码开放外,开发的过程也是透明的,因此,你可以检查供应商是否遵循 ISO27001,云安全原则等基准行业标准开发流程。4、更多的用户导向开源能使顾客和用户直接看到并参与到产品开发中来,这比闭源软件开发更能了解客户的需求。供应商可能只关注产品的某一特定方面,而一个社区能致力于开发出更多的功能,能创造出对用户更有价值的产品。5、避免被厂商技术锁定的风险选择开源软件避免被锁定用于核心基础设施的专有软件会增加被供应商或技术锁定的风险。如果发生这种情况,企业就会收到供应商提升价格的要求,并且尝试到缺失灵活性的体验,还不能轻易摆脱他们的限制。不过企业对于真正开源解决方案的使用也应该谨慎,注意那些未完全开源,引入专有代码钩子的重新打包过的开源软件,这是天坑。6、更有利的许可典型的软件许可充斥这一些不公平条例,它通常是对产品供应商有利,而非客户。如果软件停止运行,或者如果供应商要求支付更多的费用,你甚至无法起诉供应商的不当行为。而像 GPL 一类的开源许可证就是为保护客户专门设计的,而不是供应商,它确保你按照自己的需求使用软件,而没有专制限制。总结:我们相信开源,支持开源我们相信开源本身所蕴含的的开放、协作与自由的精神必然引领越来越多的开发者和用户离开传统的商业软件的阵营。因为开源,有无数的中小企业可以享受信息化升级带来的便利;因为开源,你可以自己修复那个古老的bug,甚至通过定制升级目前的功能;因为开源,无数的使用者和开发者一起参与了使用和测试,软件更加稳定与可用;因为开源,在垄断软件巨头以外客户找到一个替代的解决方案;因为开源,开发者与其他专业人士可以进行全球化协作与创作,史无前例的协作规模汇聚了众人的智慧;因为开源,客户不再受到恶意的开发者的绑架, 开放的代码让他们可以随时换人;因为开源,非主流软件的生产国不用担心国家安全的问题,开源是没有国界的;因为开源,大笔的软件授权的费用将被节约,客户可以将资源用于对核心业务的关注。
08
2021-04
企业中的考勤管理,用开源协同OA如何做好? - O2OA国产信息系统低代码开发平台
企业中的考勤问题一般有以下几点:考勤申请复杂:请假单、加班单、出差单等申请都是纸质流通,难以保存,程序麻烦。考勤数据繁琐:考勤需要人力采集大量的数据,然后进行计算、汇总、审批上报。考勤流于形式:人情考勤、异地考勤导致考勤数据弄虚作假、滞后。考勤报表制作:因为缺少多维度数据分析与展现的数据平台,人力制作考勤报表尤为费劲。考勤排班复杂:因为员工们的上班时间、工作性质都有所不同,所以排班管理非常耗费人力,还容易滋生各种矛盾。这些考勤问题频繁出现,原因最终还是要归咎到不完善的考勤系统之上,毕竟光凭“人力”出现的漏洞实在是太多了,而且“人力贵”的大趋势也是大家有目共睹的。有一款实用的考勤系统,不仅可以解放人工资源、减轻人工统计的各类负担,还可以简化工作流程、提升工作效率。O2OA开源办公开发平台就是这样一款OA办公系统,可以帮助企业进行轻松的考勤管理。1.考勤管理功能清爽的界面截图:2.如何查询出勤明细:3.系统自动生成出勤率统计:4.个人考勤统计也可以简单查询:5.公司出勤明细:6.支持数据导入,更加灵活:7.根据部门等不同,进行考勤人员配置:8.个性排班设置:9.法定假期也可以简单设置,让放假不再是考勤难题:10.工作考勤场所设置,设置考勤范围,避免“排队打卡”:11.考勤管理中布置了申诉功能,领导可以进行一键审批:
08
2021-04
这款开源协同办公OA项目,用来做固定资产管理试试吧! - O2OA国产信息系统低代码开发平台
企业为生产产品、提供劳务、出租或者经营管理而持有的、使用时间超过12个月并且价值达到一定标准的非货币性资产,包括房屋、建筑、机器、机械、运输工具以及其他与生产经营活动有关的设备、器具、工具等都被统一称作固定资产。固定资产非常重要,不仅是企业管理的一项重要工作,更是保证企业正常开展各项经营业务的物质基础,也是财务管理工作的重要组成部分。企业的不断发展意味着固定资产的不断增加,因此,资产管理也随之成为企业发展的一个重要问题,类如定期维护缺乏、资产管理不规范、账实不符合等等,长此以往,企业的固定资产信息丢失、闲置都是常见的情况。此时站在企业角度,就需要有一个工具,来提高固定资产的使用效率,加强固定资产管理。O2OA办公系统中的资产管理,正是这样一个实用工具,接下来一起看看它的功能吧!1.资产台账以实物为基础,为单位的每一个资产赋予一个唯一的编码录入系统中,详细记录资产信息。避免出现设备不清、资产不明、闲置浪费、虚增资产和资产流失等问题。2.功能流程对固定资产实物从入库、领用、调拨、盘点、维修到报废的整个生命周期进行全方位准确监管,避免资产的遗漏、失踪。3.视图统计多维度统计资产台账信息,资产使用盘点等信息,更加快速有效的对资产使用进行查看统计处理。4.资产首页界面清晰友好、操作简单,即使小白也能轻松上手。O2OA的智能资产管理模块下,通过简单的操作,利用动态数据化优势,更科学地加强了企业的资产管理,提高了资产管理效率。同时O2OA办公系统拥有开源免费的优势,能够最低“零成本”助力企业升级,帮助企业摆脱资产无序状态,进一步降低企业成本,帮助资产合理分配。
06
2021-04
不要再为会议浪费时间!开源企业OA开发平台如是说 - O2OA国产信息系统低代码开发平台
企业开会是常事,为的是解决企业经营大小问题,但是正是这会议之间,大有文章。现在为了开会而开会的人非常多,只是随便开个会,领导在台上滔滔不绝三小时,下面玩手机二个半钟,会议之后,概是一问三不知;一个企业,会议室就那么几间,但是部门却多许多倍,每天用会议室还得靠抢的,抢不到又得把会议往后延迟;每次突然开会,根本没有准备的时间,手头的工作还没处理好就匆匆忙忙去奔赴一场低效会议……那一个优秀的企业,会选择怎么样来进行会议管理呢?这就要谈谈OA办公系统下,会议管理的作用了。接下来就以O2OA举例,来说说OA办公系统下,企业的“会议管理”之转型:①让大家知道会议“在哪开”,会议场地防冲突。提前决定好会议室,提交会议室申请,确定好会议室的使用时间,避免公司内部的“会议室之争”。②让会议不再“突然”,提前预约提高会议参与度。O2OA支持会议预约,提前做好会议规划,设定好会议的日期和时间,向参会者描述此次会议“准备讨论什么”“接下来要做什么”,让大家提前做好准备,才能事半功倍。③被选中的参会人员,会议邀请都有提示。会议邀请发起后,参会者都会接收到提示弹窗,以防错漏会议消息。④根据自己的时间安排,来选择拒绝or接受邀请。或许某一个会议刚好跟你的重要工作在时间上相撞了,那你当然可以选择拒绝会议邀请,告知领导这个时间你不能参与会议。快速反馈,更有利于让领导合理的安排出高效会议的时间。⑤按照自己的习惯来查看会议。O2OA中的会议管理功能还支持多种查看模式,每种模式都有自己的特色。不管是会议的日期时间、还是会议的内容,通通都能看到。O2OA作为一款开源免费的OA办公开发平台,仅需简单的技术搭建,就可以打造出一款功能齐全,几乎“零成本”的OA办公系统,PC端或是移动端,都可以进行同步。其中的会议管理功能适用于企事业单位的日常会议,再搭配上“日程安排”“脑图”“在线会议”等多个功能模块,能够在最大程度上帮助企事业单位达到会议最高效的状态,即“会而必议、议而必决、决而必行”。
标杆案例 /
BENCHMARKING CASES
更多案例 /
MORE CASES
合作伙伴说O2OA /
WHAT PARTNERS SAY ABOUT O2OA
CEO 王维航
定制化的平台可以让我们的企业管理理念最终体现到流程,数据管理中。
中台事业群副总裁 墙辉(玄难)
世界是平的,企业也应该是平的
CEO 王伟力
O2OA是国内少有的信息化快速开发平台,让企业技术人员更关心业务,加速企业需求的落地。
总经理 陈栋
很高兴能在众多流程产品中选择了O2OA,希望能一如既往的提供高效和创新的管理产品。
技术文摘 /
TECHNICAL ABSTRACTS
在O2OA中使用网络会议(二):Openmeetings与O2OA认证配置
@O2OA @Openmeetings @单点认证 @网络会议O2OA支持将o2server本身作为OAUTH服务器,也支持将o2server作为客户端接入到其他的OAUTH服务器中。此例中,我们以O2Server本身作为OAUTH服务器,这也是通常的配置方案,O2Server中有完整的组织人员信息,并且投入协同办公使用。一、O2OA相关配置以管理员身份登录O2OA:并且打开系统设置:在OAUTH客户端配置区域添加一个oauth配置:填写内容如下:配置内容:客户号(ClientId):openmeetings客户密钥:openmeetings映射(Maaping){ login:(return person.getMobile() + '_ys';) firstname:(return person.getName();) lastname:(return '';) email:(return person.getMobile() + '_ys@o2oa.net';) country:(return 'CN';) salutation:(return person.getGenderType().toString() == 'm' ? '1':'2';) }注意,在配置中,O2OA与openmeetings的登录用户关联信息为mobile,也就是手机号,系统会自动在openmeetings系统内注册手机号加"_ys"的用户名,此处可以根据需求修改。填写完成后保存,如下图所示。二、Openmeetings相关配置以管理员身份登录Openmeetings:点击ADMINISTRATOR - OAUTH:如下图所示界面:在右侧OAUTH2 config中填入相应的配置,如下图所示:重定向URL:https://localhost:5443/openmeetings/oauth/1   这里的1是指配置的编号,这一行不能编辑,在保存时自动生成,需要修改为正确的IP或者域名信息。修改application.base.url信息修改方法如下:点击ADMINISTRATOR - 配置信息,查询系统配置查找配置信息:修改配置信息后保存。修改完成之后继续完成单点认证内容配置。配置内容如下:名称:O2OA 链接图标:http://172.16.1.48/favicon.ico _客户id:openmeetings _客户密码:openmeetings 重定向URL:https://172.16.93.9:5443/openmeetings/oauth/1 请求密钥:http://172.16.1.48/x_desktop/oauth2.html?redirect_uri={$redirect_uri}&response_type=code&client_id={$client_id} Request token method:POST 请求令牌网址:http://172.16.1.48:20020/x_organization_assemble_authentication/jaxrs/oauth/token 请求令牌属性:code={$code}&client_id={$client_id}&client_sceret={$client_secret}&redirect_uri={$redirect_uri}&grant_type=authorization_code Request info method:GET 请求信息网址:http://172.16.1.48:20020/x_organization_assemble_authentication/jaxrs/oauth/info?access_token={$access_token}User mapping:映射说明:OM User attributeOAuth User attribute说明firstnamefirstnameaddress.emailemailloginlogin登录账号,对应O2OA配置里的Login,在Openmeetings用户里登录名要能对得上lastnamelastnameaddress.countrycountry验证配置结果打开Openmeetings,我们发现在登录界面多了一个O2OA的认证组件,如下图所示:点击之后,会跳转到O2OA登录页面:使用O2OA内注册的人员登录后,会再次跳转回到openmeetings系统内,并且完成用户的注册(请不要使用xadmin用户登录 ,没有手机号码,单点不会成功。)至此,单点认证配置完成。
2021
03月
15
开源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
在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在安装过程中,设置用户kms,密码:123456。root密码可以在安装完成后进行修改。操作系统Ubuntu18.04安装完成,正在下载更新:3)修改root密码安装完成后,重启服务器,进入登录界面:使用kms用户登录系统:kms/123456修改root密码为123456sudo passwd root先输入kms用户密码 123456,再设置root密码(UNIX密码)。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 disable2、安装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
03月
15
办公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-f也是有顺序的):a、执行主表单事件 queryLoad -> beforeLoad -> beforeModulesLoad;b、根据组件在主表单的位置从上到下,从里到外执行组件的queryLoad->postLoad->load事件;c、执行主表单事件 postLoad;c、子表单、子页面、部件上的直接事件不会被执行,但子表单里组件的事件也是根据 规则b 执行;d、由于子表单、子页面、部件是异步加载,这些组件内的组件事件在异步加载后分别执行;e、执行主表单事件 afterModulesLoad -> afterLoad;f、当 Tab 组件、子表单、公文管理器等组件被设置为延迟加载的时候,主表单加载的时候,这些组件内的子组件在不会加载。当这些组件被激活的时候,根据 规则b 执行事件。表单加载时触发的直接事件说明:表单的直接事件说明queryLoad 表单加载前触发。数据(businessData)、预加载脚本和表单html已经就位。beforeLoad表单加载前触发。已提示抢办锁定。beforeModulesLoad表单的所有组件加载前触发,此时表单的样式和js head已经加载。postLoad 表单加载后触发。主表单的组件加载完成,但不保证子表单、子页面、部件加载完成。afterModulesLoad表单的所有组件加载后触发。表单包含有子表单、子页面、部件时,此事件会在这些组件加载后触发。afterLoad表单加载后触发。表单包含有子表单、子页面、部件时,此事件会在这些组件加载后触发。
2021
01月
05
办公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办公系统:Centos7.5 安装Rabbitmq笔记
一、erlang编译安装rabbitmq是erlang语言编写的,安装rabbitmq之前,需要先安装erlang,这里用erlang的源码进行安装,erlang安装包官网下载地址:http://erlang.org/download/$ wget http://erlang.org/download/otp_src_23.1.tar.gz $ tar -zxvf otp_src_23.1.tar.gz $ cd otp_src_23.1 # 这里要新建一个erlang文件夹,因为erlang编译安装默认是装在/usr/local下的bin和lib中,这里我们将他统一装到/usr/local/erlang中,方便查找和使用。 $ mkdir -p /usr/local/erlang # 在编译之前,必须安装以下依赖包 $ yum install -y make gcc gcc-c++ m4 openssl openssl-devel ncurses-devel unixODBC unixODBC-devel java java-devel $ ./configure --prefix=/usr/local/erlang编译之前需要安装依赖的软件环境:1、安装配置Java环境如果不安装编译最后会提示:[1]."no java compile found"#创建/usr/java/目录 $ mkdir -p /usr/java/ $ cd /usr/java #上传jdk-8u172-linux-x64.tar.gz到服务器,可以使用rz命令,上传本地文件 $ yum install lrzsz $ rz #解压 java安装包 $ tar -zxvf jdk-8u172-linux-x64.tar.gz #配置环境变量 $ vim /etc/profile #java environment export JAVA_HOME=/usr/java/jdk1.8.0_172 export CLASSPATH=.:${JAVA_HOME}/jre/lib/rt.jar:${JAVA_HOME}/lib/dt.jar:${JAVA_HOME}/lib/tools.jar export PATH=$PATH:${JAVA_HOME}/bin #使配置文件生效 $ source /etc/profile #检查是否安装成功 $ java --version2、安装UnixODBC如果不安装编译最后会提示:"odbc: ODBC library - link check failed"$ yum install unixODBC.x86_64 unixODBC-devel.x86_643、安装wx driver如果不安装编译最后会提示:"wx: Can not link the wx driver, wx will NOT be useable"此提示其实可以忽略,不影响编译。4、安装wxWidgetserlang依赖wxWidgets,如果不安装编译最后会提示:“wx not found”#安装wxWidgets的依赖gtk,>2.0版本或者>3.0版本都可以 $ yum install gtk2-devel.x86_64 #或者 $ yum install gtk3-devel.x86_645、安装fop.noarch如果不安装编译最后会提示:"documentation : fop is missing. Using fakefop to generate placeholder PDF files."$ yum install fop.noarch编译过程报错提示内容如下:成功编译之后,可以进行安装。6、执行make && makeinstall 进行编译安装$ make && make install编译安装完成:二、erlang环境变量配置erlang安装完成之后,在/usr/local/erlang会增加lib和bin目录,如下图所示:然后编辑/etc/profile,将/usr/local/erlang/bin这个文件夹加入到环境变量中:$ vim /etc/profile在profile文件最后添加,export PATH=$PATH:/usr/local/erlang/bin######### 添加如下内容 ############### export PATH=$PATH:/usr/local/erlang/bin ########################################执行source /etc/profile命令,使环境变量生效:$ source /etc/profile到此,既安装完成,直接输入erl,验证安装是否成功:三、安装RabbitMQ1、版本选择安装之前,需要去官网查看一下rabbitmq版本对erlang版本的一个支持情况,官网地址:http://www.rabbitmq.com/which-erlang.html我们安装的erlang是最新的23.1版本,所以,rabbitmq也要安装最新的3.8.8,3.8.9官方文档:http://www.rabbitmq.com/install-generic-unix.html2、下载安装过程下载并解压安装程序# 下载源码包 $ wget https://github.com/rabbitmq/rabbitmq-server/releases/download/v3.8.9/rabbitmq-server-generic-unix-3.8.9.tar.xz # 解压 $ tar -xvf rabbitmq-server-generic-unix-3.8.9.tar.xz -C /usr/local/修改环境变量使用VIM编辑器打开/etc/profile文件:$ vim /etc/profile在文件的最后添加环境变量内容:export PATH=$PATH:/usr/local/rabbitmq_server-3.8.9/sbin执行source /etc/profile使环境变量的修改生效:$ source /etc/profile添加web管理插件$ rabbitmq-plugins enable rabbitmq_managementRabbit配置文件默认rabbitmq是没有配置文件的,需要去官方github上,复制一个配置文件模版过来,最新的3.7.0以上的版本可以使用新的key-value形式的配置文件rabbitmq.conf,和原来erlang格式的advanced.config相结合,解决一下key-value形式不好定义的配置。github地址:https://github.com/rabbitmq/rabbitmq-server/tree/master/docshttps://github.com/rabbitmq/rabbitmq-server/blob/v3.8.x/docs/advanced.config.examplehttps://github.com/rabbitmq/rabbitmq-server/blob/v3.8.x/docs/rabbitmq.conf.example将配置文件advanced.config.example和rabbitmq.conf.example两个文件的内容保存到文件并且改名后复制到 /usr/local/rabbitmq_server-3.8.9/etc/rabbitmq/ 下成为advanced.config和rabbitmq.conf。如:启动RabbitMQ配置完成后就可以启动rabbitmq服务了,其实没有配置文件也是可以启动服务的。# 后台启动rabbitmq服务 $ /usr/local/rabbitmq_server-3.8.9/sbin/rabbitmq-server -detachedrabbitmq运行日志目录:/usr/local/rabbitmq_server-3.8.9/var/log停止RabbitMQ$ /usr/local/rabbitmq_server-3.8.9/sbin/rabbitmqctl stopRabbitMQ管理控制台启用了rabbitmq的管理插件,会有一个web管理界面,默认监听端口15672,将此端口在防火墙上打开,则可以访问web界面:guest 无法登录的问题使用默认的用户 guest / guest (此也为管理员用户)登陆,会发现无法登陆,报错:User can only log in via localhost那是因为默认是限制了guest用户只能在本机登陆,也就是只能登陆localhost:15672我们可以通过修改配置文件rabbitmq.conf,取消这个限制: loopback_users这个项就是控制访问的,如果只是取消guest用户的话,只需要loopback_users.guest = false 即可。loopback_users.guest = false修改配置文件/usr/local/rabbitmq_server-3.8.9/etc/rabbitmq/rabbitmq.conf的内容:登录完成后进入控制台:OK,到此rabbitmq就算是装好了,rabbitmq的webui功能比较齐全,可以做到很多东西,包括常见的用户管理,权限管理,vhost管理等等。四、RabbitMQ常用命令总的来说,使用WebUI已经非常方便了,可以实现基本常用的管理操作。当然除了用WebUI,还有用命令行:下面列举一下常用的一些命令行操作:服务启动停止:启动: rabbitmq-server -detached停止: rabbitmqctl stop插件管理:插件列表: rabbitmq-plugins list 启动插件: rabbitmq-plugins enable XXX   (XXX为插件名)停用插件: rabbitmq-plugins disable XXX用户管理:添加用户: rabbitmqctl add_user username password删除用户: rabbitmqctl delete_user username修改密码: rabbitmqctl change_password username newpassword设置用户角色: rabbitmqctl set_user_tags username tag列出用户: rabbitmqctl list_users权限管理:列出所有用户权限: rabbitmqctl list_permissions查看制定用户权限: rabbitmqctl list_user_permissions username清除用户权限: rabbitmqctl clear_permissions [-p vhostpath] username设置用户权限: rabbitmqctl set_permissions [-p vhostpath] username conf write read                          conf: 一个正则匹配哪些资源能被该用户访问                          write:一个正则匹配哪些资源能被该用户写入                          read:一个正则匹配哪些资源能被该用户读取 OK,就介绍到这里。这只是单机安装rabbitmq的单节点,且是使用了比较麻烦的源码安装。
2020
11月
19
我们的客户 /
OUR CUSTOMERS
产品资讯: 400-888-0545 0571-88480535
媒体资讯: 17764580538
邮件地址:
O2OA开发平台官网:
官方微博
官方微信
Copyright © 2020 Zoneland All Rights Reserved. 浙ICP备10211689号 浙公网安备 33010602002582号
五大平台
产品特色
内置应用
移动办公
业务实现
新闻资讯
标杆案例
更多案例
技术文摘
我们的客户
首页