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
在线办公:将工作任务变得清晰有条理 - O2OA国产信息系统低代码开发平台
在我们的日常工作中,一般都是将一整堆工作排在一段指定时间之内完成,但是这样一来,许多人的“拖延症”会对工作效率产生负面影响,一些临时调度的任务也无法很好完成。工作管理功能,是一款能够将工作任务全面结构化、过程化,将个人与企业融合起来,加强工作协同,确保信息化和规范化的管理软件产品。以下我们来看看O2OA平台中的工作管理系统包含的5个主要的产品特点:▼看板式工作管理:拥有看板式工作管理视图后,上班打开电脑即可清楚看到需要进行的任务或是已经完成的任务。也能用不同的代表色对自己的任务进行规划,把握好工作的节奏感,将“拖延症”抛至脑后,保证工作效率。▼加强团队协作:现在企业发展大趋势下,工作不再是“一个人”等于全部,优秀的团队协作才能够带动长远发展。工作管理系统能够让工作任务动态得到展现,让所有的工作参与者都看到工作进度,及时进行追踪和跟进,加强整体的团队协作,保证“不掉队”。▼自由创建项目任务:根据自己的安排,可以自由创建项目任务,并且设定完成时间、紧急情况等。举例来说,设定的一天计划就是执行日常任务和活动的基础,按照周期性来进行分配每日的工作项目相关任务。▼轻松管理工作项目:工作项目可以分类成不同的类型,比如已完成/未完成、星标项目/收藏项目、市场组项目/管理组项目……遇到此类不同的情况,个人项目比较多且繁杂时,就可以利用工作管理,将任务进行整理分组,让工作更加井井有条。▼适用于多行业模板管理:目前行业姿态百花齐放,故不管是金融、电信、政务、科研等等,此工作管理系统都可以做出相关行业的工作管理模板。O2OA办公平台中的工作管理系统,主要是以扁平化管理思想为理论基础,以任务过程化管理为核心,通过领导者、管理者对日常任务的管理和分配,上线企事业单位的内部协同办公,任务过程追踪和经验知识的积累。O2OA作为一款开源免费的OA办公开发平台,仅需几步简单的技术搭建,就可以打造出一款功能齐全,几乎“零成本”的OA办公系统,不管是PC端还是移动端,都可以进行同步。如果您正在寻找一款“小而美”的OA办公系统,不如来尝试一下O2OA吧!
14
2021-05
14
2021-05
电子政务系统:优化政务工作流程,提高办公效率的话 - O2OA国产信息系统低代码开发平台
版式公文的主要作用有:颁布法规、指挥管理、交流信息、宣传教育、商洽协调、凭证依据。是政务部门传输信息的重要纽带,想要进一步优化政务工作流程,提高办公效率的话,搭建也电子化公文管理平台是非常有必要的。下面我们来看看O2OA办公系统的电子化公文管理平台,有什么样的亮点和细节:①PC端的政务系统界面,不管是发文、收文、文件传阅、会议管理,还是日程安排、工作报告,O2OA功能全部覆盖,力保格式的严谨性和规范性,同时也让权责流程清晰可寻。②政府内部各个部门、分子机构之间对于公文流转有固化的流程需求,O2OA搭建的电子公文系统可查询流程记录,及时了解任务进行情况,让电子化流通更清晰。③传统公文环境下,公文撰写特别怕格式不规范,O2OA办公系统的公文处理单从审批用词、发文的字体字号、红头格式都符合国家规定标准,格式标准化,让办公中套红更简单,工作效率得到提高。④O2OA在查看公文模板时,直接可以查阅网页版公文红头文件,符合国家政府机关标准公文格式,查阅更加便捷。⑤ O2OA电子公文支持转word模式操作,简单操作易上手,编辑效率大大提升。⑥信息流通过程越复杂,追责就越麻烦,而O2OA公文管理支持修改内容保留痕迹,让任何一步修改和流转都有迹可循,安全可靠。⑦ O2OA办公系统可以设置多个常用意见,审批处理更为快捷。⑧O2OA办公系统支持短信提醒事务办理,在线办理签收审批,同时也可以用手机直接进行文件手写批注,打破时间和空间的限制,办公更加便利。总体来说,政务部门搭建一个电子化公文管理平台,能够加速推动无纸化办公,化解政务部门中的繁杂程序,做到移动办公全面化,优化提高政务办公效率,让人民满意度进一步提高。O2OA作为一款开源免费的OA开发平台,仅需简单的几步部署,就可以搭建一款适合企业、政务工作部门、国企事业单位适合使用的电子化办公管理平台。
14
2021-05
办公OA系统是什么? - O2OA国产信息系统低代码开发平台
OA即办公自动化,主要是帮助管理者进行组织人员的管理运作。OA办公系统可以实现企事业单位内部的协同办公,多部门、跨地域办公的问题都将不再是问题。日常工作中,需要手动进行统计、采集、记录的事情,使用OA办公系统都可以代替完成。除了这些简单的事务,OA办公对于企事业单位,还有以下作用:一、推行“无纸化绿色办公”推行OA办公系统,支持无纸化办公保护环境的同时降低企业运营成本。在企业日常工作中,一纸一笔都是公司的资产,日积月累,也是一笔巨大的消耗,使用OA办公系统后,电子文件可以完美替代纸质文件,节约成本的同时,也解决了文件存放的问题。二、推进企业信息化管理进程近几年,企事业单位越来越追求整体的信息化进程。拥有OA办公系统后,所有的工作流程变成电子化处理,设置多条工作流后,领导审批、签章都会根据工作流程自动移交到下一步,打破时间空间上的限制,更有自动提醒功能,防止工作的错漏。三、时间不限、空间不限每次想找领导审批,被告知领导出差了;临时来了个紧急工作任务,没有办法及时应对等等这些问题都是传统办公模式下的固有弊端。但是在OA办公下,不限时间不限空间,PC和手机、PAD都可以随时随地办公,实现整体资源有效共享,即使你不在工位前,也能处理组织内部所有事宜。四、企业资源安全性加强传统的办公模式下,纸质文件容易丢失、企业人才离职后也会带走大量客户资源,导致企业的文件机密泄露。OA办公系统下,每位员工对应职位权限不同,文件查阅的范围也不同;在OA办公系统下,也有客户资源统计的功能,方便办公的同时,也避免了客户资源的流失。五、资源有效共享传统办公模式下,企业各部门之间,有资源共享的滞后性,但是通过OA办公系统,企业部门之间的信息资源都趋于透明化、共享化。(当然信息的共享透明都是在员工权限的前提下进行提供的)这样就打破了信息孤岛、资源孤岛的现象,根据不同的工作任务,有效实现信息数据共享。综上所述,对于企事业单位而言,日常工作中的流程审批,通知公告,企业资产,财务结算等等任务都可以通过OA办公系统进行扁平化的简单管理,提升企事业单位整体的管理运营水平。O2OA作为一款开源免费的OA办公开发平台,基于J2EE架构,集成移动办公、智能办公,支持私有化部署,自适应负载能力的企业信息化系统建设平台,基于AGPL协议开放源代码的企业信息化系统需求定制开发解决方案,让企业最低“零成本”进行OA办公系统的开发,为企事业单位信息化推波助澜。
13
2021-05
企业OA系统:内容管理一定要好用! - O2OA国产信息系统低代码开发平台
随着互联网技术的发展,各种各样的信息都可以在一个网页里呈现,但是网页的信息衍生的非常快速繁多,整理这些大量的“内容”,需要耗费大量的人力物力和财力,为了减少成本、提高效率,OA系统的内容管理的功能就应运而生了。当内容管理和OA管理系统相结合时,又会碰撞出什么样的火花呢?在办公时,公司内部总会有最新动态的推送、各种通知、考勤数据、各类文件更新等等,有时候找这些信息所在的位置,会浪费不少的时间。但是在办公OA系统中嵌入内容管理平台,就可以将这些零散的信息进行新的整合,使得文档数据更易储存,更易搜索,让企业中的“业务数据孤岛、知识数据孤岛、桌面数据孤岛”这三大孤岛不复存在。以O2OA举例,让我们一起来看OA管理系统中的内容管理平台是什么样的。在O2OA中,选择内容管理平台,最终可呈现如下图所示。(图中栏目有最新动态、信息报送、最新文件、通知公告、值班系统、资产管理、学习园地、短信回复、领导日程安排、信息发布,其他的栏目也可以根据企业需要来新建)在OA系统中创建以上界面之前,可以选择“新建栏目”,可以填写栏目名称、栏目别名、栏目描述、栏目排序、栏目类型,其中栏目图标可以自由选择。设置完我们的栏目后,点开它,就可以开始配置栏目。就以“信息报送”这个栏目为例,可以看到栏目配置中有分类配置、表单配置、列表配置、数据配置、脚本配置、资源文件的添加以及栏目属性的修改。在这里,你可以利用OA管理系统发布公司的通知、公告等等信息,满足政府与企业内部员工与管理阶层,以及外部合作厂商、客户与企业投资者对内容的需求。以发布公司公告为例,只需要点击“+”号,即可添加新分类。同时,内容管理中的表单配置也是一大特色。在表单配置中,可以选择空白表单、编辑类表单、阅读类表单、数据录入类表单。系统提供的表单模板,可以帮助用户减少配置的工作量,点击自己需要的表单模板后,可以看到快捷工具栏、控件工具栏、表单编辑区、属性编辑区四个部分,设置好表单后,点击保存即可。(具体的控件以及快捷工具栏的操作指导可以在官网的使用手册中查看)O2OA系统中的表单可以分类设置,编辑类表单还是阅读类表单,可以根据需求自由选择。下面来讲讲O2OA办公系统上,内容管理功能中的“列表配置”。列表配置主要是用来表述数据,不同的列表能够展现不同的数据内容,新增列表也只需点击“+”号。提前配置好表单,再点击新建列表后,系统将弹出列表关联表单的对话框,选择展现的数据所在的表单即可。在数据配置中点击“+”号可以新建数据字典,数据字典属性编辑内容有:“名称”、“别名”和“描述”,同时可以查看数据字典属性“JSON”和“TEXT”格式的脚本。在脚本配置中,点击“+”号即可在栏目中新建一个脚本,脚本属性编辑内容有:“名称”、“别名”和“描述”。选择脚本样式,可以将脚本编辑区调整为你喜欢的格局,包括背景颜色、字体颜色、高亮颜色等。(*点击可查看大图)最后的栏目属性中,点击右侧编辑即可重新修改应用属性。当然,栏目图标也可以重新修改上传、可见范围、发布者和管理者也可以修改。(*点击可查看大图)更改可见范围包括“设置可用身份”、“设置可用部门”和“设置可用公司”,分别对应可以使用这个流程应用的个人、部门和公司。(*点击可查看大图)以上就是对开源免费O2OA开发平台中内容管理平台的简单介绍。使用O2OA中的内容管理平台,不管是政府还是企业都可以把正确、实时的内容传递给适当的人,并进行最有效率的管理,能够大幅降低工作中花费在数据管理、查询与检索上的时间与成本。将OA与内容管理结合起来,更能够确保信息的正确性,为政企事业单位提供一款高扩展性、低成本的文档、程序代码等信息相结合内容平台。
13
2021-05
建设企业信息化系统,用这款全开源的企业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平台还有许多其他的功能,目前也在持续更新迭代中。我们十分欢迎大家的使用,也非常希望能有更多的意见和建议。
13
2021-05
OA系统的工作流程,真的很重要吗? - O2OA国产信息系统低代码开发平台
1. 工作流程是什么?在了解OA办公系统的时候,经常会看到OA厂商的介绍中包含有工作流程一栏,但是很少有人跟你仔细解释“什么是工作流程”,今天小编就来跟大家谈谈OA办公系统的大头——工作流程。工作流程,物如其名,就是工作事项的流向顺序。组织内部的某项业务,从开始到结束,经过多个部门、岗位、环节协调后,形成一条具有逻辑节点的“铁路线”。只有这条路线不堵塞,工作效率才能变高。用浅显的说法来说工作流程就是“管理”:开一个会议、发一个邮件、审阅一张表格……这些看似简单的日常工作管理,也是由一个个流程节点组成的。这些节点反映到OA系统中,就表现成字段、路径、流转意见、表单等等,这些都被称为“工作流程”。因为各项工作之间都是动态联系的,所以一款优秀的OA办公系统中,组织体系尤为重要:它需要适应组织的动态灵活变化,适应多层级多维度的分权体系。2.工作流程的分类在不同的组织管理中,包含着不同的工作流程,每一个不同的工作流程,更是内含了不同的管理内容、管理要求。这些“要素不同”决定了工作流程的类型。从管理内容的不同中,我们将工作流程分为以下五种:①权限流——对流程对象进行二次赋权②数据流——比如资产领用流程可以直接影响到资产的库存数据③工作流程的流程——管理流程的流程④控制流——比如预算的数据可以控制实际报销的流程⑤审批流——最常见的的存在形式当然,以上的工作流程正常情况下都是组合存在的,审批流、权限流、数据流、控制流都会同时在一个工作流程中出现。3.工作流程对于企业的发展就企业而言,拥有一个严谨的工作流程,可以大大提升公司的工作效率。比如根据表单的内容,选择流程自动流向;根据工作岗位的不同,根据岗位等级进行自动流转;根据部门的不同,自动选择正确的程序流转;根据审批结果的选择,选择不同的流程走向……工作流程越为智能,愈能够更好地响应企业管理需求的变化。所以,一款优秀的OA办公系统,一定要拥有相当的灵活性,及时响应企业办公需求。O2OA作为一款开源免费的OA办公开发平台,流程管理平台中,确保基于任务驱动,开放式服务驱动,高灵活性、扩展性,事件定义丰富。包含人工、自动、拆分、合并、并行、定时、服务调用、子流程等功能。应用场景丰富,可轻松实现公文、合同、项目管理等复杂工作流应用。让企业最低“零成本”拥有属于自己的“办公效率加速”利器。
12
2021-05
企业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号
首页