You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

func_docEvents.js 8.4KB

7 months ago
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251
  1. // 打印前监听事件
  2. function OnWorkbookBeforePrint(doc) {
  3. return;
  4. }
  5. //切换窗口时触发的事件
  6. function OnWindowActivate() {
  7. console.log("OnWindowActivate" + "=======================");
  8. var l_doc = wps.EtApplication().ActiveWorkbook;
  9. SetCurrDocEnvProp(l_doc); // 设置当前文档对应的用户名
  10. showOATab(); // 根据文件是否为OA文件来显示OA菜单再进行刷新按钮
  11. setTimeout(activeTab, 2000); // 激活页面必须要页签显示出来,所以做1秒延迟
  12. return;
  13. }
  14. /**
  15. * 作用:判断OA文档是否被另存为了
  16. */
  17. function CheckIfOADocSaveAs(doc) {
  18. if (!doc) {
  19. return;
  20. }
  21. // 获取OA文档的原始保存路径
  22. var l_Path = GetDocParamsValue(doc, "SourcePath");
  23. // 原路径和当前文件的路径对比
  24. return l_Path == doc.FullName;
  25. }
  26. // 当文件保存前触发的事件
  27. function OnWorkbookBeforeSave(doc) {
  28. console.log("OnWorkbookBeforeSave");
  29. //设置变量,判断是否当前用户按了自定义的OA文件保存按钮
  30. var l_IsOADocButtonSave = false;
  31. l_IsOADocButtonSave = wps.PluginStorage.getItem("OADocUserSave");
  32. //根据传入参数判断当前文档是否能另存为,默认不能另存为
  33. if (pCheckCurrOADocCanSaveAs(doc) == false) { //先根据OA助手的默认设置判断是否允许OA文档另存为操作
  34. //如果配置文件:OA文档不允许另存为,则再判断
  35. //2、判断当前OA文档是否不落地文档
  36. if (pIsOnlineOADoc(doc) == true) {
  37. //如果是不落地文档,则判断是否是系统正在保存
  38. if (l_IsOADocButtonSave == false) {
  39. alert("来自OA的不落地文档,禁止另存为本地文档!");
  40. //如果是OA文档,则禁止另存为
  41. wps.ApiEvent.Cancel = true;
  42. }
  43. } else {
  44. //这里要再判断OA文档是否被用户另存为
  45. if (l_IsOADocButtonSave == false) {
  46. doc.Save(); //直接保存本地就行
  47. //如果是OA文档,则禁止另存为
  48. wps.ApiEvent.Cancel = true;
  49. } else {}
  50. }
  51. }
  52. //保存文档后,也要刷新一下Ribbon按钮的状态
  53. showOATab();
  54. return;
  55. }
  56. //文档保存前关闭事件
  57. /**
  58. * 作用:
  59. * @param {*} doc
  60. */
  61. function OnWorkbookBeforeClose(doc) {
  62. console.log('OnWorkbookBeforeClose');
  63. var l_fullName = doc.FullName;
  64. var l_bIsOADoc = false;
  65. l_bIsOADoc = CheckIfDocIsOADoc(doc); //判断是否OA文档要关闭
  66. if (l_bIsOADoc == false) { // 非OA文档不做处理
  67. return;
  68. }
  69. //判断是否只读的文档,或受保护的文档,对于只读的文档,不给予保存提示
  70. if (pISOADocReadOnly(doc) == false) {
  71. if (doc.Saved == false) { //如果OA文档关闭前,有未保存的数据
  72. if (wps.confirm("系统文件有改动,是否提交后关闭?" + "\n" + "确认后请按上传按钮执行上传操作。取消则继续关闭文档。")) {
  73. wps.ApiEvent.Cancel = true;
  74. return;
  75. }
  76. }
  77. }
  78. doc.Close(false); //保存待定的更改。
  79. closeEtIfNoDocument(); // 判断文件个数是否为0,若为0则关闭组件
  80. wps.FileSystem.Remove(l_fullName);
  81. }
  82. //文档保存后关闭事件
  83. function OnWorkbookAfterClose(doc) {
  84. console.log("OnWorkbookAfterClose");
  85. var l_NofityURL = GetDocParamsValue(doc, "notifyUrl");
  86. if (l_NofityURL) {
  87. l_NofityURL = l_NofityURL.replace("{?}", "3"); //约定:参数为3则文档关闭
  88. console.log("" + l_NofityURL);
  89. NotifyToServer(l_NofityURL);
  90. }
  91. pRemoveDocParam(doc); // 关闭文档时,移除PluginStorage对象的参数
  92. pSetetAppUserName(); // 判断文档关闭后,如果系统已经没有打开的文档了,则设置回初始用户名
  93. }
  94. //文档打开事件
  95. function OnWorkbookOpen(doc) {
  96. //设置当前新增文档是否来自OA的文档
  97. // if (wps.PluginStorage.getItem("IsInCurrOADocOpen") == false) {
  98. // //如果是用户自己在WPS环境打开文档,则设置非OA文档标识
  99. // pSetNoneOADocFlag(doc);
  100. // }
  101. OnWindowActivate();
  102. ChangeOATabOnDocOpen(); //打开文档后,默认打开Tab页
  103. }
  104. //新建文档事件
  105. function OnWorkbookNew(doc) {
  106. //设置当前新增文档是否来自OA的文档
  107. // if (wps.PluginStorage.getItem("IsInCurrOADocOpen") == false) {
  108. // //如果是用户自己在WPS环境打开文档,则设置非OA文档标识
  109. // pSetNoneOADocFlag(doc);
  110. // }
  111. ChangeOATabOnDocOpen(); // 打开OA助手Tab菜单页
  112. wps.ribbonUI.Invalidate(); // 刷新Ribbon按钮的状态
  113. }
  114. /**
  115. * 作用:判断当前文档是否是只读文档
  116. * 返回值:布尔
  117. */
  118. function pISOADocReadOnly(doc) {
  119. if (!doc) {
  120. return false;
  121. }
  122. var l_openType = GetDocParamsValue(doc, "openType"); // 获取OA传入的参数 openType
  123. if (l_openType == "") {
  124. return false;
  125. }
  126. try {
  127. if (!!l_openType.protectType) {
  128. return true;
  129. } // 保护
  130. } catch (err) {
  131. return false;
  132. }
  133. }
  134. /**
  135. * 作用:根据当前活动文档的情况判断,当前文档适用的系统参数,例如:当前文档对应的用户名称等
  136. */
  137. function SetCurrDocEnvProp(doc) {
  138. if (!doc) return;
  139. var l_bIsOADoc = false;
  140. l_bIsOADoc = pCheckIfOADoc(doc);
  141. //如果是OA文件,则按OA传来的用户名设置WPS OA助手WPS用户名设置按钮冲突
  142. if (l_bIsOADoc == true) {
  143. var l_userName = GetDocParamsValue(doc, "userName");
  144. if (l_userName != "") {
  145. wps.EtApplication().UserName = l_userName;
  146. return;
  147. }
  148. }
  149. //如果是非OA文件或者参数的值是空值,则按WPS安装默认用户名设置
  150. wps.EtApplication().UserName = wps.PluginStorage.getItem("WPSInitUserName");
  151. }
  152. /*
  153. 入口参数:doc
  154. 功能说明:判断当前文档是否能另存为本地文件
  155. 返回值:布尔值true or false
  156. */
  157. function pCheckCurrOADocCanSaveAs(doc) {
  158. //如果是非OA文档,则允许另存为
  159. if (CheckIfDocIsOADoc(doc) == false) return true;
  160. //对于来自OA系统的文档,则获取该文档对应的属性参数
  161. var l_CanSaveAs = GetDocParamsValue(doc, "CanSaveAs");
  162. //判断OA传入的参数
  163. if (typeof (l_CanSaveAs) == "boolean") {
  164. return l_CanSaveAs;
  165. }
  166. return false;
  167. }
  168. /**
  169. * 作用:判断文档关闭后,如果系统已经没有打开的文档了,则设置回初始用户名
  170. */
  171. function pSetetAppUserName() {
  172. //文档全部关闭的情况下,把WPS初始启动的用户名设置回去
  173. if (wps.EtApplication().Workbooks.Count == 1) {
  174. var l_strUserName = wps.PluginStorage.getItem("WPSInitUserName");
  175. wps.EtApplication().UserName = l_strUserName;
  176. }
  177. }
  178. /**
  179. * 作用:文档关闭后,删除对应的PluginStorage内的参数信息
  180. * 返回值:没有返回值
  181. * @param {*} doc
  182. */
  183. function pRemoveDocParam(doc) {
  184. if (!doc) return;
  185. wps.PluginStorage.removeItem(doc.FullName);
  186. return;
  187. }
  188. /**
  189. * 作用:判断当前文档是否从OA来的文档,如果非OA文档(就是本地新建或打开的文档,则设置EnumOAFlag 标识)
  190. * 作用:设置非OA文档的标识状态
  191. * @param {*} doc
  192. * 返回值:无
  193. */
  194. function pSetNoneOADocFlag(doc) {
  195. if (!doc) return;
  196. var l_param = wps.PluginStorage.getItem(doc.FullName); //定义JSON文档参数
  197. var l_objParams = new Object();
  198. if (l_param) {
  199. l_objParams = JSON.parse(l_param);
  200. }
  201. l_objParams.isOA = EnumOAFlag.DocFromNoOA; // 新增非OA打开文档属性
  202. wps.PluginStorage.setItem(doc.FullName, JSON.stringify(l_objParams)); // 存入内存中
  203. }
  204. /**
  205. * 作用:根据设置判断打开文件是否默认激活OA助手工具Tab菜单
  206. * 返回值:无
  207. */
  208. function ChangeOATabOnDocOpen() {
  209. var l_ShowOATab = true; //默认打开
  210. l_ShowOATab = wps.PluginStorage.getItem("ShowOATabDocActive");
  211. if (l_ShowOATab == true) {
  212. if (wps.ribbonUI)
  213. wps.ribbonUI.ActivateTab("WPSWorkExtTab"); //新建文档时,自动切换到OA助手状态
  214. else
  215. wps.ActivateTab("WPSWorkExtTab"); //新建文档时,自动切换到OA助手状态
  216. }
  217. }