ExMobi应用插件运行在Mplus平台的相关功能扩展说明

zhangyihui11@fiberhome
   2016-01-21 09:36:59发布  2017-07-28 09:00:18更新 6收藏, 2427浏览
M-Plus专区
0

ExMobi应用插件可直接运行在Mplus平台下,相应的,依托Mplus平台,ExMobi应用插件也可以实现一些扩展功能。
    
1.单点登陆功能

       确切的说是“伪单点登陆”,即Mplus客户端登陆时要输入LDAP域账户,而假如ExMobi应用插件适配的业务系统的登陆账号也和LDAP域帐号一致,那么这种场景下,在Mplus客户端的工作台页面内点击ExMobi应用插件快捷方式图标进入ExMobi应用插件时,Mplus就可直接把Ldap域帐号信息传递给ExMobi应用插件,在Exmobi应用插件的入口页面即可获取到mplus客户端传递进来的参数。详细实现步骤:

  • 在Mplus的web管理平台,用机构管理员帐号登陆,然后在“应用管理”模块里上传ExMobi应用插件时,启用“应用启动传参”选项,然后在下方的传值参数里设置username和password的传值参数username=${username}&password=${password}Image

  • Mplus客户端只能打开Exmobi应用插件的入口页面,所以,在Exmobi应用插件的入口页面里通过以下代码获取传递进来的域帐号的username和密码,然后在js函数里直接执行登陆业务系统的操作:
var username = window.getNativeParameter(\"username\");
var pwd = window.getNativeParameter(\"password\");

注:如果要实现真正的单点登录功能,可以参考后面介绍的“待办提醒”功能,通过Mplus服务端开放的第三方单点登录接口实现单点登录,但是这要求第三方业务系统本身在pc端需实现单点登录功能!

2.应用插件功能模块快捷入口功能
    该功能为将Exmobi应用中模块级功能提至企业移动门户中展示,用户可以选择自己关心的功能模块,并在首页特定区域展示,点击应用中的功能模块可以直接进入应用并同时打开相应的功能,其次门户上可以对该模块展示上角标,用于展示模块待处理流程数量。
          Example: 在Epower应用中,我们可以将各种待办流程 提至企业移动门户,用户可以直接点击各个待办流程图标即可打epower应用,并直接进入该待办流程列表,其次在移动门户的待办快捷菜单右上角,可以展示用户存在多少条待办未处理:
Image

实现步骤:

  • Exmobi应用插件代码修改
           首先是应用插件目录结构的修改,适配人员需在client文件夹下新增"modules"目录,用于存放Mplus客户端展示的ExMobi应用插件模块列表,如下图:Image

其中modules.xml是应用插件模块快捷入口以及获取角标接口配置文件,图片是Mplus客户端中显示的ExMobi应用插件内各个功能模块相对应的图标,只能是png格式的图片。

modules.xml文件的详细节点配置说明:

参数上级节点范围描述
modules 1 根节点
payload modules 1    角标获取根节点,Mplus客户端要展现的所有应用插件模块角标数字一次性请求改节点下定义的http接口获得
url payload 1    应用插件模块右上角角标的获取地址,通过这个地址,获取用户关注的模块的角标地址。 这个地址去模块中地址的区别是可以一次请求获取所有关注模块角标。免去单个模块请求导致的网络耗时,刷新慢等问题。该请求采用post方式,请求内容参见param字段值。请求提格式如:username=${username}&password=${password}&modules=${modules}例:username=aa&password=bb&modules=待办提醒、通知公告、加班申请、license申请(请注意,模块名字参数,多个参数间通过中文顿号连接)响应格式如下:例:{"appid":"epower","corner":{"待办提醒":"1","通知公告":"0","加班申请":"1","license申请":"1"}}其中appid用于设置本应用idcorner用于设置角标返回的对象。
param payload1    URL请求的请求体,其中可用业务变量为${username},${password},${token},${modules}其中modules是用户勾选的本应用的待办模块名称。
module modules [1..n]应用插件模块节点,一个应用可以存在多个应用插件功能模块
modulenamemodule 1模块名称,即显示在Mplus客户端页面的应用插件功能模块名称
moduleimgmodule 1    图标地址,即显示在Mplus客户端页面的应用插件功能模块图片地址(图片必须位于Exmobi应用插件的client/modules目录下
scheme module 1点击模块后,打开应用的传参,其中可用业务变量为${username},${password},${token}
defaultflag module 1应用插件模块是否缺省被选中,0为默认不选中,1为默认选中


     Example:

<?xml version=\"1.0\" encoding=\"UTF-8\"?>
<modules version=\"1.0\">
<payload>
  <url>http://${ip}:${port}/process/notify/epowernew/arkclient</url>
  <param>username=${username}&amp;password=${password}&amp;modules=${modules}</param>
</payload>
<module>
  <modulename>第三方采购</modulename>
  <moduleimg>xsrb.png</moduleimg>
  <scheme>username=${username}&amp;password=${password}&amp;moduleid=110&amp;modulename=第三方采购</scheme>
  <defaultflag>0</defaultflag>
</module>
 
<module>
  <modulename>客户审批</modulename>
  <moduleimg>gcrb.png</moduleimg>
  <scheme>username=${username}&amp;password=${password}&amp;moduleid=1&amp;modulename=客户审批</scheme>
  <defaultflag>0</defaultflag>
</module>
</modules>

       这个modules.xml配置文件示例代码是公司的Epower系统Exmobi应用插件内的,例如“第三方采购”这个功能模块,在Epower系统中,请求不同流程种类的url中仅仅是moduleid这个关键参数不同,每个流程种类都对应了一个moduleid参数,而这个参数,在epower系统内,是固定的,所以每个区分每个流程的关键参数moduleid可以预先通过分析epower系统的抓包获知,然后直接写死在modules.xml里,而modulename参数是该流程模块的中文名字用来显示在该待办流程列表页面的titlebar控件里;
       username和password是登陆epower系统要用到的,这个帐号体系就是ldap域服务器的帐号也就是登陆mplus客户端的帐号,所以可以通过${username}的形式让mplus客户端直接传递进来,参考前面提到的伪单点登陆功能,即使是叫“应用插件功能模块快捷入口”,但是实际上mplus客户端也只是负责打开exmobi应用插件的入口页面,所以实际项目场景中,还是要在exmobi应用插件的入口页面利用得到的Ldap域帐号实现隐藏登陆过程
     <url>节点中定义的是一个给mplus客户端请求获取所关注的应用插件功能模块的待办数据角标http接口,从这个http接口的格式大家也能看出来,这其实就是ExMobi的直推推送机制中,exmobi服务端开放出来的供外部访问的http接口,所以,在Exmobi应用插件的jsp目录下,我们必须建立一个jsp来实现这个http接口,这个jsp里必须根据mplus请求时提交的username、password、modules这三个参数执行登陆epower系统,然后从登陆后的主页上抓取modules参数内规定的流程模块的待办数据,输出给mplus客户端,它的输出内容必须是一段json格式数据,格式如下:

{\"appid\":\"epower\",\"corner\":{\"出差申请\":\"1\",\"通知公告\":\"0\",\"加班申请\":\"1\",\"license申请\":\"1\"}}

这里请注意,要想让这个作为http接口的jsp输出上述的格式数据,不要忘了在mapp.xml里做出如下设置

<config>
                <!-- 设置让服务端输出jsp内自定义响应,否则角标的jsp接口无法正常输出数字 -->
    <httppushrsp restrainrsp=\"false\"/>
</config>
  • Mplus服务端设置
    Exmobi应用插件修改完毕,在上传到Mplus服务端的时候,必须在上传时的“模块信息”区域设置“全局角标地址开关”为“是”,这样Mplus客户端在展现应用插件模块快捷入口图标时,才会在模块图标角标上显示功能模块待办数据角标,如下图:


Image

截图中的“全局角标地址”、“全局角标参数”、各个功能模块的名字以及传递的参数,都是Mplus服务端自动读取上传的ExMobi应用插件内的modules.xml配置文件获得的。

  • 如何自定义参数

       无论是前面介绍多的单点登陆还是应用插件功能模块快捷入口功能,都能直接获取登陆mplus客户端的Ldap域帐号和密码,那么假如应用插件适配的业务系统登录或者是进入后续某个功能界面的时候除了这两个参数之外还需要其他参数应该怎么办呢?对此,Mplus平台也支持自定义参数来传递进ExMobi应用插件中。

      首先得先申明下自定义参数,具体步骤是在Mplus服务端的“系统管理”——>“机构设置”里设置,在“机构基础参数配置”——>“用户自定义属性配置”里新增自定义参数名、属性key值,添加完后记得保存“机构基础参数配置”:

Image


   至于这个申明的自定义参数值的来源,有三个途径:
<1>通过Ldap域服务器同步,在“组织架构同步配置”——>“人员扩展属性对应列表”里选中上一步中新增的自定义参数,填写LDAP对应值
Image

然后保存,这样设置完成后,如果LDAP服务器里每个用户信息里刚好有个参数名就是上面的“LDAP对应值”里填写的名字,那么在Mplus这侧,就能像读取username和password一样,读取到这个自定义参数的值了。

<2>通过“用户管理”里批量导入用户时设置,在用户管理里,是可以通过导入符合模板要求的excel来批量添加用户的,每个用户的“职位”这个自定义参数值就可以通过excel导入来设置:
Image

Image

<3>通过“用户管理”里,单独给每个用户修改信息时设置


      新增自定义参数后,在“单点登陆”功能中需要使用这个参数,则在上传应用插件时,在“应用启动传参”处设置,参考username和password的设置方式,nation=${nation};同样的,在“应用插件功能模块快捷入口”功能中需要使用,则在modules.xml配置文件中设置,详细请回顾上文中的步骤。

3.推送功能
       在ExMobi中间件平台体系下,我们是利用ExMobi服务端的pns推送引擎,以直推的形式来实现push推送,而当ExMobi应用插件运行在Mplsu平台下,就无法利用pns推送引擎来实现直推了,因此对于推送需求的场景,Mplus平台通过第三方接入接口的方式来实现推送消息到ExMobi应用插件。
    Mplus平台下推送消息有两种方式,分别是推送到系统消息和待办提醒里,如下图:
Image     

Image  

   Image
这两种推送方式的区别是“系统消息”仅仅是起到通知消息的作用,只推送到mplus客户端,用户在“系统消息”列表里无法点击消息打开Exmobi应用插件进行后续处理操作,而“待办提醒”列表里的提醒消息,用户点击消息后可直接打开Exmobi应用插件进行后续处理。在实际项目场景中,ExMobi应用插件需要用到的推送一般都是要有后续处理操作的,下面就以推送消息至“待办提醒”为例详细介绍如何请求Mplus的第三方接口。
       首先来看下推送消息至Mplus客户端“待办提醒”内的原理图:
Image

    从上图可以看到, 和Exmobi平台下的直推机制类似,触发推送这个动作,一样要由第三方业务系统请求Mplus服务端提供的推送接口来实现。
      Mplus服务端开放了一系列第三方接入的接口,待办提醒接口只是其中一个,这些接口都是http接口,既然是http接口,那么就有对接口地址、请求参数、响应体的要求,这些说明都在附件的文档里,大家可以下载下面的接口文档附件查看详细接口说明:
========================================================
Mobileark第三方接入方案.zip(0.27M 下载次数:241)
========================================================
       所有接口请求地址都是统一的https://{ip}:{port}/thirdpartaccess ,请求参数分为系统级参数接口级参数,系统级参数是不管第三方请求哪个接口,都要在请求体中携带这些参数,接口级参数,各个接口的要求不一,具体可以查阅文档;
      以“待办提醒”接口(在《MobileArk第三方接入方案.doc》文档里对应名称叫“待办事件”接口)为例,它要求提交的参数:

  • 系统级参数

      appKey、format、mehtod、v、local、sign;
appKey参数——是要在Mplus的服务端配置生成的,生成步骤如下:
       用系统管理员帐号登录Mplus服务端,选择“系统参数配置”——>“外部接入配置”,点击“新增外部接入”,填写appKey和密钥参数,如下图
Image


Image

“接入关键字”里填写的值就是appKey参数值,下面的“接入密钥”里填写的值是secret密钥,在生成sign参数的过程中需要用到;这个配置的外部接入参数,原则上建议一个app建一个(不管是Exmobi应用还是第三方应用)。

sign参数——不管哪个接口提交的所有参数(sign本身除外),都要按照下列规则排列然后进行SHA1加密

/**
         * Sign签名方法为: 
         *        首先 按参数key字母a-z顺序将所有参数名和参数值成一个字符串:
         *        appKey00001assignedLicenseNum1formatjsonlocalezh_CNmemowebapi1methodmobileark.addorgorgCodewebapi1orgNamewebapi11v1.0
         *        假设,appKey为00001的 secret(应用密钥) 是“asd”,则将“asd ”分别添加到以上请求参数串的头部和尾:
         *        asdappKey00001assignedLicenseNum1formatjsonlocalezh_CNmemowebapi1methodmobileark.addorgorgCodewebapi1orgNamewebapi11v1.0asd
         *        对以上字符串进行SHA1签名运算,将签名值转换为十六进制的编码串,得到: 
         *        762C1F1B50B40F92F89B4A45C34E82CC4678FE2B
         */

其中的“secret应用密钥”即上一步在服务端配置appKey参数的时候设置的“接入密钥”。
    这个加密方法,我已经用java封装好了现成的方法,大家可以点下面的链接下载参考下,用这个方法只要把除sign以外的所有系统级参数和接口级参数放到map对象里,再调用getSign方法即可生成sign参数:
================================================================================================
java生成sign参数方法.zip(0.00M 下载次数:144)

================================================================================================

  • 接口级参数

      ecid、loginId、appid、appName、appType、events
ecid——机构标识,管理员在Mplus服务端为每个企业分配的标识,也是在Mplus客户端的“服务器设置”里设置的机构标;
loginId——是要业务系统要推送的目标在ldap域服务器上的域帐号(多个推送目标帐号中间用英文逗号连接,如“huangnan,zhangyihui”);
appid——Exmobi应用插件的appid(即Exmobi应用插件代码config.xml文件中appid节点文本);
appName——应用名称(显示在mplus“待办提醒”消息列表里,该条消息来自哪个应用,可自定义,一般保持与Exmobi应用插件名称一致);
events——事件列表参数,业务系统希望通过推送给用户的所有跟自身业务相关的参数,都组装成json对象的格式,放在events参数内,如下面的格式:

{
    \"events\": [
        {
            \"title\": \"会议通知\",
            \"summary\": \"明天上午开会\",
            \"scheme\": \"username=${username}&password=${password}&content=明天上午集成开发部在大会议室开会\"
        },
        {
            \"title\": \"放假通知\",
            \"summary\": \"十一放假安排\",
            \"scheme\": \"detail=10月1日至7日放假\"
        }
    ]
}

上面的events示例参数中,构建出了两个事件,那么mplus一旦经待办事件接口收到了这个参数,就会在客户端“待办提醒”列表里构建出两条消息,title是待办提醒消息标题,summary是待办提醒消息摘要,scheme里是具体当用户点击待办提醒消息打开ExMobi应用插件入口页面时要传递的跟业务相关的参数。

Image


  • 响应体


参数 描述
resultCode String 结果1:成功,2:部分成功,3:全部失败
failloginid String[] 失败的用户列表,只在2的情况下返回



响应体示例:

{\"resultCode\":\"2\",\"failloginid\":[\"huangnan\",\"zhangyihui\"]}

   总结:前面介绍过的伪单点登录、应用插件功能模块快捷入口、推送消息至待办提醒功能,Mplus客户端一律只能打开Exmobi应用插件的入口页面,传递的参数也只能传到入口页面,所以后续的处理操作就是Exmobi应用插件自身的代码逻辑需要实现的了!

       最后给大家分享个完整的Exmobi应用插件示例——《小纸条》,这个应用插件实现了在Mplus体系下,对接的Ldap域内各用户传递消息的功能,它里面运用到了Mplus服务端提供的“待办事件”接口、“机构”接口、“部门”接口、“成员”接口。在这个应用插件的功能场景下,不存在“第三方业务系统”,或者说它自身就是业务系统,所以朝Mplus服务端暴露的接口发起http请求的操作,是在这个应用插件的服务端代码里完成的。
      《小纸条》这个应用插件示例也提供给大家一种场景下的解决方案,就是当Exmobi应用插件适配的业务系统因客观原因无法做出修改时,触发推送的动作就可以交由exmobi这侧的应用插件服务端代码完成,但是这种解决方案的局限性就是只有通过exmobi这侧用户的操作才能触发推送,而用户在pc端操作业务系统提交的业务系统请求是无法触发推送的。
===============================================
小纸条.zip(0.39M 下载次数:295)
===============================================
     提醒大家下,如果是在Exmobi服务端jsp下去请求Mplus的接口,大多数人容易犯一个错误哦!这个错误是什么呢?点这个链接查看吧!













来源: ExMobi应用插件运行在Mplus平台的相关功能扩展说明

下载APP
扫码下载栗子社区APP