子应用接入文档

1、消息列表

子应用接入文档 - 图1

上面是SAAS消息版子应用嵌入界面,当我们点击上图中的提醒、待办事项或者未完成工作区域都将进入子应用或打开新页面,换句话就是子应用的入口。这三项是子应用预设好的消息入口,通过统一接口实现。

取用户已授权可用子应用列表

用户通过uexEMM.login登录emm后会返回这个用户已授权可用子应用appList,appList中包含app的appId。

获取子应用msgList

我们规定统一规则获取每一个子应用对外提供的msgList(如同上图显示的三项入口)。规则如下:请求接口:租户简称+'.'+appId+".saas.appcan.cn/emoa/message"请求参数:tenantId(租户Id),accessToken(emm登录返回的token)请求方式:post返回数据:

  1. {
  2. "status" : "000",
  3. "msg" : {
  4. "list" : [{
  5. "createdAt" : "2016-04-08 15:59:00",
  6. "title" : "方法反反复复反复反复",
  7. "total" : 38,
  8. "url" : {
  9. "appId" : "EMOA",
  10. "action" : "openwindow",
  11. "param" : {
  12. "data" : "todoList.html"
  13. }
  14. },
  15. "icon" : "https://42.96.172.127:18443/oaapp/icon/todo1.png",
  16. "header" : "未完成工作"
  17. }, {
  18. "title" : "苏荣秋的请假申请单!",
  19. "createdAt" : "2016-04-20 16:38",
  20. "total" : 104,
  21. "url" : {
  22. "appId" : "EMOA",
  23. "action" : "openwindow",
  24. "param" : {
  25. "data" : "todealList.html"
  26. }
  27. },
  28. "icon" : "https://42.96.172.127:18443/oaapp/icon/todo.png",
  29. "header" : "待办事项"
  30. }, {
  31. "title" : "地铁7号线完成地铁7号线完成",
  32. "createdAt" : "2016-04-26 14:26:12",
  33. "total" : 34,
  34. "url" : {
  35. "appId" : "EMOA",
  36. "action" : "openwindow",
  37. "param" : {
  38. "data" : "remindList.html"
  39. }
  40. },
  41. "icon" : "https://42.96.172.127:18443/oaapp/icon/remind.png",
  42. "header" : "提醒"
  43. }
  44. ]
  45. }
  46. }

上面返回的数据中url下action可以处理不同情况:

  • 1) openwindow打开普通窗口,打开预置在app中的网页代码,param下的data是要启动的页面
  • 2) Web打开web页面
  • 3) appcanWidget启动widget子应用,子应用的appId,在此子应用下param下的data是要跳转到的指定页面注:在上述这个子应用中,在这个接口中我们还将子应用的登录写到了里面。

 

2、应用列表

子应用接入文档 - 图2

上面是应用列表显示页面,这里可以进入应用并打开应用功能清单页面。在这里我们通过uexAppStoreMgr插件进行处理。

初始化uexAppStoreMgr插件
  1. uexAppStoreMgr.open(storeIp);//storeIp为emm提供的应用商店地址,

此地址如果不在代码中写死也可以在协同开发上的打包开关设置,uexAppStoreMgr插件提供获取此配置的地址方法具体方法如下:

  1. uexAppStoreMgr.cbGetAppStoreHost = function(a,b,c){
  2. //C为协同开发上配置的地址
  3. }
  4. uexAppStoreMgr.getAppStoreHost();

子应用接入文档 - 图3

目前的saas版的正益工作是写死的应用商店地址。

获取应用列表
  1. uexAppStoreMgr.cbGetAppList = function(mid,type,data){
  2. //返回应用的列表信息,包括类型,是否已安装、版本等信息,此处添加处理代码即可,通常通知显示应用的页面显示此应用列表
  3. }
  4. var dataJson={"type":"searchAppList","key":""};//获取所有的应用,当type为installAppFromAllList时是获取已安装的应用
  5. uexAppStoreMgr.getAppList(JSON.stringify(dataJson));
应用启动或者下载

uexAppStoreMgr提供方法loadwidget,此方法会自动处理widget和native类型的应用,如果没下载将自动进行下载,如果已下载,native类型的将自动启动,widget类型的可以在loadwidget的回调方法中启动widget。代码如下:

  1. uexAppStoreMgr.cbLoadWidget = function(a, b, c) {
  2. var obj = JSON.parse(c);
  3. var status = obj.status;
  4. //根据status的不同处理代码
  5. if (status == 0) {
  6. } else if (status == 1) {
  7. appcan.window.openToast('正在打开');
  8. opening = 1;
  9. uexWidget.cbStartWidget = function(opId, dataType, data) {
  10. opening = 0;
  11. appcan.window.closeToast();
  12. }
  13. uexWidget.startWidget(obj.data.appId, '10', '', 参数, '250', obj.data.appKey);
  14. } else if (status == 2) {
  15. uexAppStoreMgr.loadWidget(obj.data);
  16. }
  17. }
  • uexAppStoreMgr.loadWidget(json);//json为获取列表时每条数据的json串,直接传入即可。如果未安装将进行下载,下载有回调,可以提示用户
  1. uexAppStoreMgr.onStartDownload = function(){
  2. uexAppStoreMgr.cbGetProgress = function(a, b, c) {
  3. //此处c为下载的进度
  4. }
  5. }

由于应用的类型还有一种是web类型的,如果此种类型可自行处理,如打开新窗口,在新窗口中打开浮动窗口,浮动窗口的url为web地址。

3、子应用docker访问规则

mas等子应用的服务都在docker中,这些服务对外提供统一的域名规则:

  1. 租户简称+"."+appId+".saas.appcan.cn/

根据此规则,我们就可以将子应用saas化访问。