C4C url Mashup的跳转工作原理 - 新的浏览器窗口是如何打开的

举报
汪子熙 发表于 2022/03/28 21:52:45 2022/03/28
【摘要】 一个例子:我在SalesLead TI页面的这个tab里配置了一个url Mashup,点击之后会跳转到bing的页面:然而从Chrome开发者工具的Elements标签页里并未看到target url.这个mashupID末尾为10,我在运行时点击之后:在Chrome开发者工具的network标签页里,看到一个HTTP请求去读取Mashup component:下图可见,我们在RUI里创建...

一个例子:

我在SalesLead TI页面的这个tab里配置了一个url Mashup,点击之后会跳转到bing的页面:

然而从Chrome开发者工具的Elements标签页里并未看到target url.


这个mashupID末尾为10,我在运行时点击之后:

在Chrome开发者工具的network标签页里,看到一个HTTP请求去读取Mashup component:

下图可见,我们在RUI里创建Mashup,保存之后生成的也是一个UI component:





相关的Mashup实现文件:



https://c4cstatic.hana.ondemand.com/resourcesvc/2002.2.1.0.1583807562475/SAP_UI/HTML5/resources/sap/client/mashup/common/util/Util-dbg.js

https://c4cstatic.hana.ondemand.com/resourcesvc/2002.2.1.0.1583807562475/SAP_UI/HTML5/resources/sap/client/mashup/rt/util/InportAdapter-dbg.js

注意,url mashup lazy load,未点超链接之前,没有url生成,也没有上述这些文件的加载。
点击超链接之后:



传递到Mashup的输入参数,在InportAdapter._getSystemParameters里生成:







下面这行代码执行完之后,新的Chrome tab就打开了:

that.emit(“inportFired”, mData);

InportFire的处理函数:



从inport里解析出action:


跳转的目的地已经维护在oAction变量里了:

oService.createUrl, 开始拼凑Mashup的url了:


https://c4cstatic.hana.ondemand.com/resourcesvc/2002.2.1.0.1583807562475/SAP_UI/HTML5/resources/sap/client/mashup/common/model/MashupComponentModelService-dbg.js?eval

最后打开浏览器新窗口的代码是在window.open里实现的:


下图这个Mashup无法在HTML和url之间切换,说明其类型为url Mashup.

没有选择port binding:

也就意味着除了系统默认的几个字段之外,再无其他可以的输入参数供该Mashup绑定。

仅有 S y s t e m 这个结构下的字段可供绑定。我将 System这个结构下的字段可供绑定。我将 System的EmployeeID字段绑定到bing查询的query字段里。

这样,当我将该Mashup配置到UI上时,点击该超链接,会自动弹出bing搜索页面并根据我当前登录用户的employee ID进行搜索:


先看最后达到的效果,下图蓝色矩形框是我自开发的UI,里面的ID 25234来自C4C标准的Lead UI里的Lead ID。这个值是如何从Lead Thing Inspector UI传递到Embedded Component的input field里的呢?

新建一个Embedded Component,data model标签页里,选择Lead这个标准的BO. 创建一个Data field LeadID,将其和BO字段ID绑定。

新建一个input field,其值绑定到data field LeadID上。

剩下的问题是这个Embedded Component运行时,LeadID如何被赋以对应的值。

另外新建一个data field leadID,不对其做绑定。

新建一个inport,取名fromLead, 创建一个参数ObjectID, 这个名称可以随便取。ParameterBinding, 选择将其绑定到/Root/inport/leadID上。

RequestFireOnInitialization设置为true,onFire属性需要为其绑定一个event handler:

创建一个event handler,取名readLead,明细如下:

最后将该Embedded Component添加到Sales Lead TI页面时,将TI页面的outport里的参数SalesLeadID同Embedded Component inport的参数ObjectID绑定即可。

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。