详解企业移动门户之子应用嵌入实现方法

在企业移动门户中,如正益工作,可以支持第三方子应用的嵌入,让移动门户无限扩展更多功能:工作报告、移动OA、考勤、公告等等。如何实现子应用的嵌入呢?本文将为你详细介绍使用AppCan开发的实现方法。

上面是企业移动门户中的子应用嵌入界面,当我们点击上图中的点击区域(除去下面导航)都将进入子应用,换句话就是子应用的入口。要实现以上功能,我们通过uexAppStoreMgr插件进行处理。

1、初始化uexAppStoreMgr插件

uexAppStoreMgr.open(storeIp);//storeIp为emm提供的应用商店地址,

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

具体方法如下:

uexAppStoreMgr.cbGetAppStoreHost = function(a,b,c){

//C为协同开发上配置的地址

}

uexAppStoreMgr.getAppStoreHost();

2、获取应用列表

uexAppStoreMgr.cbGetAppList = function(mid,type,data){

//返回应用的列表信息,包括类型,是否已安装、版本等信息,此处添加处理代码即可,通常通知显示应用的页面显示此应用列表

}

var dataJson={"type":"searchAppList","key":""};//获取所有的应用,当type为installAppFromAllList时是获取已安装的应用

uexAppStoreMgr.getAppList(JSON.stringify(dataJson));

3、应用启动或者下载

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

uexAppStoreMgr.cbLoadWidget = function(a, b, c) {

var obj = JSON.parse(c);

var status = obj.status;

//根据status的不同处理代码

if (status == 0) {

} else if (status == 1) {

appcan.window.openToast(’正在打开’);

opening = 1;

uexWidget.cbStartWidget = function(opId, dataType, data) {

opening = 0;

appcan.window.closeToast();

}

uexWidget.startWidget(obj.data.appId, ’10’, ’’, 参数, ’250’, obj.data.appKey);

} else if (status ==  2) {

uexAppStoreMgr.loadWidget(obj.data);

}

}

uexAppStoreMgr.loadWidget(json);//json为获取列表时每条数据的json串,直接传入即可。

如果未安装将进行下载,下载有回调,可以提示用户

uexAppStoreMgr.onStartDownload = function(){

uexAppStoreMgr.cbGetProgress = function(a, b, c) {

//此处c为下载的进度

}

}

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

4、获取卡片列表

此插件还提供获取卡片列表的方法,卡片信息列表中包含应用信息,所以相关的启动应用可参考上面的方法。

uexAppStoreMgr.cbGetTiles = function(a, b, c) {

//emm上配置的卡片信息在此获取,之后显示可自行处理

}

uexAppStoreMgr.getTiles();

此方法获取的卡片列表,就是显示最上方图片的基础数据。

5、解析卡片数据显示

返回的卡片数据如下:

{

"status": "ok",

"appList": [{

"appKey": "xxxxx",

"appId": "xxxxx",

"iconLoc": "xxx",//icon地址

"name": "客户关系管理",

"curVersion": "00.00.0018",

"pkgUrl": "xxx.zip",//子应用包地址

"appType": "工具",

"appCategory": "AppCanWgt",

"maxVersion": "00.00.0018",

"installVersion": "00.00.0008",

"shortImg1": "",

"shortImg2": "",

"shortImg3": "",

"tilesList": [{

"defaultTab": true,

"icon": "",

"param": {//卡片具体数据

"cardType": "备用",

"cardId": "crm_card",

"describe": "建立客户,联系人,分配销售机会",

"cardBtn": [{

"operation": "top,refresh,delete",

"type": "collapse"

}],

"header": {

"headerIcon": "http"

},

"content": [{

"label": "线索",

"url": "http://xxxx",

"refresh": "86400000"

},

{

"label": "客户",

"url": "http://xxxx",

"refresh": "86400000"

},

{

"label": "机会",

"url": "http://xxxx",

"refresh": "86400000"

}]

},

"startPage": "",

"systime": 0,

"tabUrl": "",

"template": "建立客户,联系人,分配销售机会",

"tilesId": "28",

"tilesPath": "",

"tilesname": "CRM",

"uiStyle": "",

"version": "1"

}]

}]

}

上面的数据中tilesList中的就是具体的卡片显示数据。

前端代码根据此数据显示具体样式。tilesList中的数据在EMM中进行配置。

6、数据来源配置

此图为emm环境应用管理中的某一应用界面,在此界面中添加相关的应用卡片,卡片为xml格式。根据的卡片接口获取到此xml配置,即tilesList中的数据。

Xml样式:

<?xml version="1.0" encoding="utf-8" standalone="no"?>

<widget appId="1" version="00.00.0000">

<item>

<icon>icon.png</icon>//PC端icon

<tabUrl></tabUrl>

<refreshtime>86400000</refreshtime>//卡片刷新时间

<name>企业CIS</name>//pc端标题名称

<defaultTab>true</defaultTab>//是否默认显示到首页卡片

<version>v1</version>//版本

<param>具体参数</param>

</item>

</widget>

具体参数如下:

{//卡片具体数据

"cardType": "备用",//卡片类型:entrance快捷入口,其他是卡片,目前未做其他种类处理

"cardId": "crm_card",//卡片唯一标识,同时也是卡片在首页中div的id

"describe": "建立客户,联系人,分配销售机会",

"cardBtn": [{

"operation": "top,refresh,delete",//置顶、刷新、删除

"type": "collapse"//组合按钮------"btn"//支持单个按钮

}],

"header": {

"headerIcon": "http"

},

"content": [{

"label": "线索",

"url": "http://xxxx",此标题下的内容路径

"refresh": "86400000"

},

{

"label": "客户",

"url": "http://xxxx",

"refresh": "86400000"

},

{

"label": "机会",

"url": "http://xxxx",

"refresh": "86400000"

}]

}

当配置完卡片后,还要在EMM上配置角色,权限等来控制卡片的接入。开发者根据卡片参数展示卡片(即:子应用入口),设置事件处理调用子应用,就是通过上面的第三点进行启动、下载等操作来完成。

时间: 2024-10-26 10:16:00

详解企业移动门户之子应用嵌入实现方法的相关文章

Yii 框架里数据库操作详解-[增加、查询、更新、删除的方法 &#39;AR模式&#39;]

public function getMinLimit () {        $sql = "...";        $result = yii::app()->db->createCommand($sql);        $query = $result->queryAll();         return array (                $query [0] ['max'],         );    } $connection=Yii::

android handle详解2 主线程给子线程发送消息

按照android handler详解分析的原理我们可以知道,在主线程中创建handle对象的时候,主线程默认创建了一个loop对象使用threalocal函数将loop对象和主线程绑定. 我们能不能在子线程中创建一个loop对象和子线程绑定了实际上是可以的 这样我们就在子线程中创建了一个looper对象,将looper对象和子线程绑定了,在子线程中执行Loop.loop()函数的内部是开启了一个死循环对消息队列中的消息进行遍历,所以子线程是永远不会退出的. 当我们在主线程中调用获得subHan

fiddler界面详解(转自:子信风蓝蓝)

原文地址:http://www.cnblogs.com/chengchengla1990/p/5681775.html Statistics 页签 完整页签如下图: Statistics 页签显示当前用户选择的 Sessions 的汇总信息,包括:选择的 Sessions 总数.发送字节数.接收字节数.响应类型的汇总表.世界各地通过不同请求方式所需的时间等. Statistics 页签底部图表 Show Chart 可以将汇总结果显示为一个饼状图,按照响应类型,在饼图中显示不同的比例和不同的色块

[C#详解] (1) 自动属性、初始化器、扩展方法

代码下载:点我下载 目录 前言 属性与自动属性 属性 自动属性 初始化器 对象初始化器 集合初始化器 扩展方法 无参数扩展方法 带参数扩展方法 结尾 前言 首先祝大家2015新年快乐! 新的一年,新的开始.来博客园安家已经快两个月了.每天看博客.写博客.评论.回答博问已经渐渐养成了一种习惯.可以很明显的感觉到泡在博客园里真的可以学到很多,不论是技术文章的还是一些记叙经历.抒发感想的随笔,都让我从各个方面受益良多.不知道大家是否和我一样,就是感觉博客园有一种特殊的魔力,让你没事就想上去看一眼,看上

详解jQuery uploadify文件上传插件的使用方法

uploadify这个插件是基于js里面的jquery库写的.结合了ajax和flash,实现了这个多线程上传的功能. 现在最新版为3.2.1. 在线实例 实例中用到的php文件UploaderDemo.php请在页面下方下载 引入文件 <link rel="stylesheet" type="text/css" href="uploadify.css" /> <script type="text/javascript

详解WordPress中简码格式标签编写的基本方法

WordPress 简码是一种类似于论坛标签的东西,格式类似于把尖括号换成中括号的 Html 标签.简码很多人叫做短代码,但官方的翻译应该是简码,在这里纠正一下. 简码的开发的逻辑比较简单,主要就是添加.删除和判断,会在本文全部介绍. 简码格式 简码的格式非常灵活,可以是有属性.无属性.闭合.非闭合等等: [example] [example]内容[/example] [example attr="属性" attr-hide="1"]内容[/example] [ex

java多线程详解(6)-线程间的通信wait及notify方法

Java多线程间的通信 本文提纲 一. 线程的几种状态 二. 线程间的相互作用 三.实例代码分析 一. 线程的几种状态 线程有四种状态,任何一个线程肯定处于这四种状态中的一种:(1). 产生(New):线程对象已经产生,但尚未被启动,所以无法执行.如通过new产生了一个线程对象后没对它调用start()函数之前.(2). 可执行(Runnable):每个支持多线程的系统都有一个排程器,排程器会从线程池中选择一个线程并启动它. 当一个线程处于可执行状态时,表示它可能正处于线程池中等待排排程器启动它

《HTTP协议详解》读书笔记---请求篇之情求方法

之前对于网络这一块不是很清楚,值知道TCP/IP协议,三次握手四次握手之类的很笼统,零碎的知识,现在打算系统学习下网络相关的知识,先从http协议开始. 本人,还是新手,对于一些知识如果有理解错误的,欢迎各位大牛指正,小弟先谢过了哈... -------------------------------------------------------------------正文开始-----------------------------------------------------------

详解MYSQL中重命名procedure的一种方法

最近有用到对存储过程(procedure)重命名的功能,在网上找了一下资料都没有讲到在mysql中是如何实现的,当然可以删掉再重建,但是应该有别的方法,在“mysql”这个数据库(自带)中找了一下,发现两张表:func.proc,发现func表是空的,proc表记录了有关procedure和function有关的信息. 尝试对proc表进行更新,重命名成功了! 原文地址:https://www.cnblogs.com/tacatno/p/10921942.html