
# 关键词:页面集成、单点登录、页面跳转、门户应用卡片点击、门户应用页签
# 一、需求
在许多业务场景中,由于客户已有系统在长期稳定使用,或功能页面在苍穹上重构代价巨大等因素,需要将现有系统中的功能页面直接嵌入到苍穹中以供业务平滑使用,故涉及到一个非常常见的业务场景:苍穹与第三方系统进行页面集成。用户登录苍穹之后,在 **系统门户首页的应用中心点击指定应用卡片** 后,系统自动**单点登录**第三方系统并在 **门户应用页签层** 打开第三方系统的指定页面,然后用户可自由进行业务操作。
# 二、思路与方案
用户登录苍穹后,在系统门户首页的应用中心点击任何一个应用卡片,均会打开该应用的应用首页界面。但本案例需求是打开一个第三方系统页面,故我们可考虑将该应用的应用首页替换成第三方系统页面即可。
但我们通过分析在门户首页应用中心点击应用卡片打开其首页界面的底层实现逻辑(**MyAppAbstract.itemClick(ItemClickEvent) → MyAppAbstract.gotoApp(JSONObject, GoAppEnum, String) → OpenPageUtils.openApp(String, String, Map<String, Object>, IFormView, String) → OpenPageUtils.openAppPage(String, Map<String, Object>)**)可知,代码中一定要用到被打开的页面(即应用首页)的视图模型,如果我们直接将应用首页替换成第三方系统页面,该页面在苍穹平台中并没有一个视图模型(即:IFormView)。
因此我们可考虑将第三方系统页面通过IFrame控件嵌套在空白动态表单中,这样即可通过该动态表单的视图模型IFormView来达到最终目的。但如果采用该方案,我们还需在代码取消打开该应用默认的应用界面,转而打开动态表单页面,这个过程较繁琐,我们可直接在应用首页页面上预置IFrame控件,并将其绑定第三方系统页面的URL,且隐藏掉该应用首页上的其他控件,从而实现用户点击应用卡片后自动打开第三方系统页面。
# 三、实现过程
## 3.1 准备工作
苍穹系统:http://172.20.14.30:8080/ierp
第三方系统:本案例以另一套苍穹环境进行模拟,其访问地址:http://172.20.240.133:8080/ierp
统一身份认证服务系统:https://api.kingdee.com
## 3.2 注册应用
与知识 [苍穹应用卡片触发 | 在新浏览器窗口打开第三方带会话信息页面 ](https://vip.kingdee.com/article/519536360827567360?productLineId=29&isKnowledge=2) $3.2节一致,请自行查阅原文内容。
## 3.3 在苍穹系统中开发单点登录金蝶云平台插件(CldPlatformSSOPlugin)
与知识 [苍穹应用卡片触发 | 在新浏览器窗口打开第三方带会话信息页面 ](https://vip.kingdee.com/article/519536360827567360?productLineId=29&isKnowledge=2) $3.3节一致,请自行查阅原文内容。
## 3.4 二开干预应用首页界面展示第三方系统页面(TrdSysPageFormPlugin)
### 1.在被点击的应用的应用首页设计器中,新增IFrame控件,并调整样式属性(扩展比率设置为1),其设计器界面如下图所示
*备注:
应用首页设计器中其它不需要的控件,在控件树分支顶层节点(即:Flex控件/flexpanelap)的可见性去掉“初始可见”即可。*

### 2.在应用首页中注册表单插件(TrdSysPageFormPlugin),为上一步中IFrame控件绑定第三方系统页面URL
```language
@Override
public void afterBindData(EventObject evt) {
String trdSysTargetUrl = null;
try {
trdSysTargetUrl = OpenTrdPageUtils.getTrdSysTargetUrl(false);
} catch (Exception e) {
this.getView().showMessage(e.getMessage());
}
// 为IFrame控件设置URL
IFrame iFrame = this.getView().getControl(KEY_IFRAME_TRDSYSPAGE);
if (StringUtils.isNotEmpty(trdSysTargetUrl)) {
iFrame.setSrc(trdSysTargetUrl);
}
super.afterBindData(evt);
}
```
## 3.5 (单点登录第三方系统并)返回待打开页面的URL(OpenTrdPageUtils)
与知识 [苍穹应用卡片触发 | 在新浏览器窗口打开第三方带会话信息页面](https://vip.kingdee.com/article/519536360827567360?productLineId=29&isKnowledge=2) $3.6节一致,请自行查阅原文内容。
## 3.6 在第三方系统中开发单点登录金蝶云平台插件(CloudPlatformSSOAuth)
与知识 [苍穹应用卡片触发 | 在新浏览器窗口打开第三方带会话信息页面](https://vip.kingdee.com/article/519536360827567360?productLineId=29&isKnowledge=2) $3.7节一致,请自行查阅原文内容。
# 四、效果图
## 4.1 登录苍穹系统


## 4.2 苍穹门户首页
### 1.旧版门户首页

### 2.新版门户首页


## 4.3 第三方系统
### 1.旧版门户

### 2.新版门户


# 五、开发环境版本
不限
# 六、注意事项
1.本案例因涉及两台服务,开发过程中存在
**跨域问题,可通过以火狐浏览器访问避免**,生产环境请自行处理。
2.本案例
不需要针对旧版门户页面(我的应用/tenant_myapp)和新版门户页面(我的应用(new)/bos_portal_myapp_new)进行扩展开发。
3.在首页门户应用页签层打开第三方系统页面,因受平台限制必须要有view,故不能直接打开第三方页面URL,需通过IFrame控件将其嵌套在空白动态表单中,然后去打开该动态表单。
4.文章中代码展示不全,
**附件中包含案例所有页面元数据、Java源码,如有需要,请自行下载**。
# 七、参考资料
[开发平台](https://vip.kingdee.com/knowledge/specialDetail/218022218066869248?productLineId=29)
[学习成长中心](https://developer.kingdee.com/school?productLineId=29)
[登录认证专题](https://vip.kingdee.com/knowledge/specialDetail/228892721203874816?productLineId=29)
[苍穹产品目录](https://developer.kingdee.com/knowledge?productLineId=29#tabMain) —— 系统服务云 —— 系统管理 —— 登录认证
[单点登录集成](https://developer.kingdee.com/school/243812482044022016?productLineId=29)(视频)
[使用SSO时启用账密登录功能介绍](https://developer.kingdee.com/article/329216123843848960?productLineId=29&isKnowledge=2)
[金蝶云平台oauth2流程说明](https://cloud.kingdee.com/help/document/detail?item=448&doc=3023)
[第三方SSO登录接口开发](https://dev.kingdee.com/sub/index/docsNew/91158357-8127-426b-917a-bd4fe4702245)
[【统一身份认证】第三方集成单点登录](https://developer.kingdee.com/article/359709414254707456?share_fromuid=&productLineId=29&islogin=true)
[单点登录插件,访问指定的数据中心,金蝶云单点登录](https://developer.kingdee.com/article/215788160662549248?productLineId=29)
[参数设计](https://developer.kingdee.com/school/239057950495561472?topicId=239384541469947648&stageId=239384770730604288&pathId=239410657773565696&productLineId=29)
[新门户新特性功能介绍](https://developer.kingdee.com/article/335013711855208960?productLineId=29&isKnowledge=2)
[新门户 - 新应用菜单导航与框架介绍](https://developer.kingdee.com/article/315543456133322496?productLineId=29&isKnowledge=2)
如何在苍穹门户首页点击应用卡片后单点打开第三方系统页面(二).zip