推荐使用WPS2019专业版,版本号为v11.8.2.10255。Windows仅支持10255及其以上专业版。注意:最好使用10255版本,其他版本未过测试。你可以打开WPS,点击右上角设置图标,在关于WPS后面可以看到当前软件的版本号。
使用WPS加载项最重要一点是:保证本机已安装WPS专业版,并且对版本有严格要求,只有从金山供应商购买的WPS并且由供应商提供的WPS安装程序才能使用加载项。
所有个人从金山官网下载的WPS均不支持加载项。
进入后台管理后,选择点击"系统参数设置":
在"正文类型"中选择"Word正文",并确定继续:
首次访问,或者重启电脑,均需要启动服务(用于唤醒wps进程):
点击后,可能浏览器会弹出申请打开链接的弹窗(这是浏览器访问金山接口的安全机制控制),此时可勾选复选框后,单击红框中的按钮即可:
此时可能会弹出如下窗口,这时直接点击启动服务即可(根据电脑性能等影响,可能wps接口无法立即给出响应导致),重新再启动,如果多次无法启动,则需要判断当前wps版本是否支持加载项:
然后点击重新加载,刷新页面:
然后重新选择在"正文类型"中选择"Word正文",并确定继续,此时可以成功打开WPS服务。
此时点击"Word正文",可以直接弹出WPS服务:
进入WPS文字后,点击右上角退出后,会回到浏览器界面,此时点击窗口中显示的打开正文,仍然可以重新进入:
最后就可以使用WPS加载项编辑内容了:
开发或者分析问题时,可能需要开启调试模式。
【Windows环境】
进入安装目录,找到oem.ini文件,可能在WPSOffice>11.8.2.10255>office6>cfgs目录下面:
然后【support】增加配置JsApiShowWebDebugger=true:
【信创环境】
卸载:sudodpkg-rxxx
安装:sudodpkg-ixxx
sudochmod-R777/opt/apps/cn.wps.wps-office-pro/files/
2、修改oem.ini:
uos环境:龙芯
cd/opt/apps/cn.wps.wps-office-pro/files/kingsoft/wps-office/office6/cfgs
linux:银河麒麟
cd/opt/kingsoft/wps-office/office6/cfgs
开始修改:
vimoem.ini
JsApiShowWebDebugger=true
3、重启:
cd/opt/apps/cn.wps.wps-office-pro/files/bin
国产机修改后重启:终端执行quickstartofficerestart
查找publish.xml文件
windows:我的电脑地址栏中输入:%appdata%\kingsoft\wps\jsaddons
linux:我的电脑地址栏中输入:~/.local/share/Kingsoft/wps/jsaddons
WPS打开文档后,鼠标点到页签,按alt+F12:
按了之后会弹出类似浏览器控制台(该控制台主要可调试WPS内部触发的加载项逻辑,例如OA触发打开文件)
"任务窗格"的点击事件需要跟踪,把鼠标放在任务窗格,点ALT+F12
(该控制台主要可调试"任务窗格"点击后的逻辑,例如点击左侧的"保存"按钮)
OA触发wps客户端执行业务代码的逻辑在wps.js中,通过调用_WpsInvoke方法来调用wps_sdk.js(金山提供的)来和wps客户端通讯。
wps客户端的代码在apps-common工程,代码分别为表格和和文字的,代码逻辑是一模一样,只是表格的语法不一样,因此只要看了文字的功能,表格也就明白:
打开在线文档,oa浏览器触发wps客户端,在wps的func_oastarter.js文件的dispatcher()方法,这个方法是web页面调用WPS的方法入口:
而在这里面,定义了如何打开在线文档的方法,涉及到了位于wps.js文件里面的函数OnlineEditDoc():
OA浏览器触发wps的最后代码位于wps.js,打开文档方法OnlineEditDoc():
该函数的主要功能实际上是修改参数以及调用_WpsInvoke()函数,参数的修改对象是一个全局WPS上下文类型,该对象指定了很多属性来表示WPS文件的各种状态:
OnlineEditDoc()修改了3个属性(业务中会根据他们来进行些控制,这个不是最主要的,分析时可全局搜索),分别是:
\"renderWpsFlag\":wps渲染标记\"wpsCloseFlag\":wps打开文档标记\"changeFlag\":是否调用模板标记OnlineEditDoc()根据业务情况和参数传值来修改这些属性的的值:
只要需要打开WPS,必然需要经过_WpsInvoke方法,这是调用wps客户端的最后一个业务方法:
改方法会调用wps_sdk.js(金山提供)的方法和wps客户端通讯,这个文件是金山给我们提供的,我们不做任何修改,如果需要修改,则和master反馈。
1、消息监听
消息通知有消息监听的形式,比如WPS文字监听函数,通过传入参数的信息,来设定文档的属性,实现一个信息的传递功能。例如WPS客户端对文档保存、修改、关闭等操作,需要告诉oa,则通过改消息机制来实现:
表格信息监听的方式如出一辙,也是通过传递的参数信息来判断和修改对象的属性值:
2、心跳机制
wps和oa服务器通讯,目前我们使用的是类似一个心跳的机制,下边是它时序图:
当需要使用加载项时,OA页面会触发生成
3、保存文档
进入WPS,点击保存,触发点击事件:
跟踪代码,此时会调用方法OnAction(),最终相应的执行OnBtnSaveToServer()方法:
继续跟踪OnBtnSaveToServer()方法,进入func_tabcontrol.js文件的OnBtnSaveToServer()方法:
进入核心代码行uploadToServer()方法的调用,然后在这里奇怪的是,我进入该行代码的执行,但是显现的并不是我想看到的那个函数(可能是一些浏览器显示乱跳的问题,我们可以使用debugger来强制使用断点进入):
进入后调用的是这一行,也就是调用btnShowDoc()函数的最末行,而不是uploadToServer()的第一行:
随后执行函数onAutoUploadSuccess(),执行完该函数过后,:
4、保存文档回调
保存文档回调的关键代码是对象WpsConstent的saveFileCallBack()方法:
文件wps.js
①判断是否有专业签章函数
fileId:文件Id
ClientType:客户端类型(wps或et),若不传将被设置为wps
返回值为boolean
②函数_WpsInvoke
funcs:调用的函数名,JSON格式
OAAssistType:客户端类型,若不传将被设置为wps
调用wpsFunc去做判断,其中info的值为{"HasSpecialSignature":fileId...}
判断结果将传入回调函数的参数result
文件func_oastarter.js
①判断是否有金格专业签章
判断doc中sheet的每一项的shape的每一项,有三种情况均可确定有金格专业签章,满足任意一项均可returntrue。
①文件wps.js
传入funcs的函数名为"HasPicSignature"
与专业签章逻辑一致
②文件func_oastarter.js
含义:OA主动发起请求到wps客户端(wps加载项)中请求文档是否处于打开状态。
1、OA主动发起请求
apps-common\src\main\webapp\common\office\js\wps.js
2、wps客户端接收
apps-common\src\main\webapp\common\wpsOfficeAssist\WpsOAAssist\js\common\func_oastarter.js
3、根据本地是否存在对应的文件id判断是否文档已经打开
含义:OA主动发起请求到wps客户端(wps加载项)中进行在线套红处理。
1、OA主动发起
3、wps客户端处理
apps-common\src\main\webapp\common\wpsOfficeAssist\WpsOAAssist\js\common\func_docProcess.js
先判断文档是否存在,后执行判断权限是否允许,执行套红操作。
含义:OA主动发起请求到wps客户端(wps加载项)中进行获取公文域或书签数量,参数为文件id。
2、wps客户端接收处理
3、根据文件id处理文件
含义:OA主动发起请求到wps客户端(wps加载项)中进行获取书签名。
1、OA发起
3、逻辑处理
含义:OA主动发起请求到wps客户端(wps加载项)中进行删除书签操作。
2、wps客户端处理
更新权限等操作会调用该函数
paramObj:参数对象
直接调用_WpsInvoke函数
无需设置ClientType
需要设置ClientType
调用addParamsToDoc函数并刷新权限
文件func_docProcess.js
具体的合并两个params的操作
②文件func_docProcess.js
调用_WpsInvoke
①获取国际化信息
文件baseOffice.js
②从oa缓存中获取国际化信息
含义:在打开的wps客户端的当前打开文档中调起打印页面设置框。进行文档的打印实现。
1、入口函数
wpsOfficeAssist\wpsOfficeAssist\WpsOAAssist\taskpane.html
2、执行打印逻辑
a.获取当前激活文档:wpsApp.ActiveDocument
b.延时加载打印逻辑:wpsApp.CommandBars.ExecuteMso("FilePrint");
wpsOfficeAssist\wpsOfficeAssist\WpsOAAssist\js\common.js
含义:根据OA系统传递的数据进行任务窗格功能性的动态渲染与Ribbon按钮(wps上层默认功能按钮)是否可用,以及默认功能重写。
初始化菜单的参数:
params:OA参数
根据OA参数更新菜单权限:
调起加载taskpane.html
渲染任务窗格:
b.getEnabled:是否生效。
c.onAction:自定义执行逻辑。
wpsOfficeAssist\wpsOfficeAssist\WpsOAAssist\js\common\func_tabcontrol.js
含义:简单说对历史编辑做一个展示,并提供选择权限进行一个历史编辑版本的信息展示。
1、执行逻辑
在任务窗格有花脸功能的情况下,点击对应花脸按钮,执行打开弹框逻辑,获取花脸数据,展示在弹框区域中,以进度项方式展示,点击对应任务项,获取对应任务项数据,切换并渲染新页面。打开只读文件。最后关闭弹框,关闭花脸模式。
2、弹框逻辑
a.入口函数
花脸此处使用了vue.js的展示和执行函数方式。
3、展示花脸弹框信息
执行函数:listHualian
发起ajax请求,获取花脸信息。
4、点击花脸对应任务项功能
a.执行函数:open
b.参数:item每一个花脸任务项信息。
渲染新的界面并切换:
含义:对文档的历史编辑痕迹进行一个清楚,然后保存全新的文档到服务器中。
WpsOAAssist\js\common\func_tabcontrol.js
2、清稿后需要保存到服务器中,并刷新花脸
①文件baseOffice.js
②文件handWrite_n.js
每次重启电脑都会提示启动服务
因为重启电脑,wps进程就会退出。下次使用必定会启动服务来唤起wps,这个我们已经找过金山技术,他们无法做到自动启动,据说是系统安全有限制,无法实现重启电脑来自动启动wps。
无法启动服务或者wps无法唤起
注意:请务必确认,当前WPS版本是专业版,window是10255,信创是10290。(大于该版本的未全面测试)
1:文件地址栏输入%AppData%回车,进入如下地址,看看加载项的配置路径文件
如果有其他的xml,则删掉,只保留publish.xml。
2:打开publish.xml,只保留自己访问OA的ip地址的配置,有其他的,则全部删掉。