在数字化转型的背景下,现代企业的诸多业务系统(合同管理系统,OA,邮件,客户管理系统等)已经可以用浏览器直接使用,但是word,excel,ppt等Office文档在业务系统中还经常以*.docx,*.xlsx,*.pptx的附件的形式存在,用户依然需要先下载到本地,然后用Office打开编辑,完成后再上传回去。那么如何实现对业务系统中Office文档的多人在线编辑,实现业务系统的体验闭环和应用创新?答案是和zOffice在线文档系统集成。
zOffice简介
zOffice提供云端Office能力,包括word、excel、ppt三类办公文档的在线协同编辑,通过专业级的文档能力,高效的协作体验,内容级的安全管控,丰富的集成开发接口,来赋能企业的业务系统,帮助业务系统实现文档在线预览和编辑,文档操作过程全部线上进行,完成在线办公的场景闭环。
zOffice链接:https://www.filez.com/zoffice
集成介绍文档: https://lenovocloud.zbox.filez.com/l/a0OsO0
多人在线编辑的三要素:
zOffice最大化简化集成复杂度,把多人在线编辑的需求抽象成“人”、“物”、“权”三要素:
- 人:zOffice系统需要知道当前是哪个用户正在打开编辑;
- 物:即当前编辑的是哪个文档,zOffice系统需要能在打开的时候获取该文档的文件流,保存的时候把经过修改的文件流回传给业务系统;
- 权:即“人”对“物”的访问权限,zOffice系统在某“人”要打开编辑某“物”的时候,需要验证该人对文档是否有读取/写回等访问权限。
以上三要素的管理和提供方都是业务系统,zOffice系统和业务系统通过约定好的前后端接口来获取三要素的信息。
根据三要素信息传递方式的不同,有两种集成方式:
方式一:“后端集成”。
zOffice和业务系统通过约定好的服务端对服务端接口获取三要素信息。适用于业务系统服务端代码可以修改,前端代码不需要改动太多的场景。
- 人:业务系统服务端实现 /{context}/profiles GET接口用于根据cookie返回当前用户的信息,zOffice服务端调用该接口获取用户信息,返回值示例如下:
Get http://172.16.52.223/v2/context/profiles (其中172.16.52.223假定为业务系统的服务端地址)返回
{
"id": "301",
"display_name": "docstest02",
"email": "docstest02@lenovo.com",
"photo_url": "/testOrg/people/301.png",
"name": "docstest02",
"job_title": ""
"org_name": "",
"org_id": "",
}
- 物:业务系统服务端实现 /{context}/{docId}/content GET/POST接口,供zOffice获取和回传文件内容流。
- 权:业务系统服务端实现 /{context}/{docId}/meta GET接口,供zOffice获取当前用户对当前文档的权限信息,例如针对docId为123的文档调用GET meta接口返回值示例如下:
Get http://172.16.52.223/v2/context/123/meta 返回
{
"id": "123" //必须有,
"name": "/study/Nodejs/Demo/mytest.xlsx", //必须包含文件的扩展名
"modified_at": "2020-03-25T02:57:38.000Z",//必须有
"created_by": { //必须有
"id": "301", //必须有
"email": "docstest02@lenovo.com", // 可选
"name": "docstest02" // 可选
},
"permissions": { //必须有
"write": "true", //必须有,控制文档是否可以被编辑
"read": "true", //必须有
“download”: false, //可选。
“print”: true //可选。
},
"size": 9897, //必须有
}
业务系统服务端实现上述3个rest接口并且和zOffice服务端配置连通后,用户在浏览器里点击 https://oa.demo.com/docs/app/thirdparty-rest/123/edit/content 即打开zOffice在线编辑id为“123”的文档。
方式二:“前端集成”。
zOffice系统需要的“人”“物”“权”的相关信息都从业务系统前端用url参数的形式传递给zOffice服务器。适用于业务系统的服务端代码不方便修改,前端js代码可以修改,并且业务系统已经具备了从前端上传下载文档,获取用户信息,获取权限信息等功能。
例如,用户在浏览器点击文档123时,业务系统的前端js直接构造如下的地址并用window.open或iframe src的形式打开zOffice在线编辑:
https://oa.demo.com/docs/app/driver-callback? action=edit&repoId=thirdparty&docId=123 &userinfo=xxxxxx&meta=yyyyyy&downloadUrl=zzzzzz&uploadUrl=zzzzzz
- 人:即userinfo=xxxxxx部分,业务系统前端js代码按照上述profiles返回值格式构造好传入;
- 物:即downloadUrl=zzzzzz 用于指定下载文件流的url;uploadUrl=zzzzzz 用于指定回传文件流的url;
- 权:即meta=yyyyyy部分,业务系统前端js代码按照上述meta返回值格式构造好传入。
总结
综上,业务系统的开发者可以根据情况选择“后端集成”或“前端集成”的方式集成zOffice,简单快捷的实现多人在线编辑功能。