@abap2ui5/嵌入式控制
运行 abap2UI5 (中文(简体) ) 应用程序在任何UI5应用程序内.
abap2UI5 纯在ABAP中构建 UI5 应用程序: 实施 ABAP 类
z2ui5_if_app 决定视图并处理所有事件。 这个包裹
此应用程序进入 UI5 应用作为普通控件, 在您自己的旁边
控件 :
<mvc:View xmlns:mvc="sap.ui.core.mvc" xmlns:z2ui5="z2ui5.embed">
<z2ui5:Container app="Z2UI5_CL_UI5_APP_HI_WORLD" height="400px"/>
</mvc:View>
包裹是控制,没有别的。 Abap2UI5 前端它包装 由ABAP2UI5安装的应用程序对讲机产生,所以它总是有 版本的后端, 你的应用程序从来没有携带它的副本.
安装
npm install @abap2ui5/embed-control
然后两个条目 在你的应用程序. ui5.yaml - 这样 ui5 build 复制控件
输入您的应用程序ui5 serve 服务它反正:
builder:
settings:
includeDependency:
- "@abap2ui5/embed-control"
manifest.json - 控件的命名空间:
"sap.ui5": {
"resourceRoots": { "z2ui5.embed": "./thirdparty/z2ui5/embed/" }
}
这栋楼把它投入 dist/thirdparty/z2ui5/embed/ 和你的部署
把它和应用程序的其他文件一样。 未下关 resources/页:1
部署到ABAP系统的应用程序回答每个问题 <app>/resources/ 从路径
UI5系统库. 相对资源根是独立的
在SAP Fiori的发射板上.
没有其他任何设备部署在任何地方:控制器是一个平板模块(否) 组件,没有库),所以没有涉及ABAP系统的应用索引条目, 而任何数量的应用程序都可以携带自己的副本.
使用
在 XML 视图中,如上或代码中:
sap.ui.require(["z2ui5/embed/Container"], (Container) => {
new Container({
app: "ZCL_MY_ABAP2UI5_APP",
params: { customer: "4711" },
height: "600px",
}).placeAt("content");
});
| 财产 | 类型 | 默认 | |
|---|---|---|---|
app | 字符串 | ABAP课要跑. 空的时候没有开始 | |
endpoint | 字符串 | /sap/bc/z2ui5 | 此服务器上的 abap2UI5 HTTP 服务路径 - 绝对, 或相对于页面地址( a) <base> 没有查询或片段。 前端被从中装入,圆通去取. 见 后端 |
params | 对象 | { name: "value" },由应用程序读取 client->get( )-t_comp_params· ; { name: ["a", "b"] } 在一个名称下将数个值交接。 一个值是 null 或者说 undefined 被忽略; 一个对象作为 JSON 文本被移交 | |
ownsPage | 布尔 | false | 将页面交给应用程序 -- -- 用于此控件的一页,而不是其他的:该应用程序在自己的一页上有它拥有的东西 -- -- URL散列(hash路由, set_push_state, (中文(简体) ), hash_replace,浏览器在路由应用程序之间回向和前进,重新加载时恢复的路由,文档标题和favicon,环行旅行期间的全局繁忙指示器,浏览器的"leave page?"提示未保存的更改. Off,他们是你的应用程序:嵌入式应用程序留下标题,favicon和散列,忙于自己的区域,没有引起快感. 当您的页面拥有比控件更强的功能时——一个Fiori元素对象页面,就把它放下. 每页一个这样的控制。 一个变化开始新的应用程序, 像其中之一 app, (中文(简体) ), endpoint 或者说 params需要abap2UI5 1.147.0,读取它(控制卡) ownsHash 以它发誓,一个年长的人忽视它 |
ownsHash | 布尔 | false | 更古老、更狭窄的名字 ownsPage:将网页的 URL 散列交给应用 - 对于一个是这个控制而不是其他的页面, 没有任何路径: 应用然后像它自己的一页(hash路由, set_push_state, (中文(简体) ), hash_replace,浏览器返回并转发到路由应用程序之间,重新装入时恢复的路由). 当您的应用路线通过散列时, 离开它 - 一个 Fiori 元素对象页面。 每页一个这样的控制。 一个变化开始新的应用程序, 像其中之一 app, (中文(简体) ), endpoint 或者说 params。需要abap2UI5 1.147.0, 将整个页面交给它, 至于 ownsPage;一个更年长的人忽略它 |
width | CSSS 大小 | 100% | |
height | CSSS 大小 | 100% | 应用程序装满了容器 - 给它一个高度, 或有一个母程序。 更改 width 或者说 height 更改所在区域大小; 运行中的应用程序没有重新启用 |
| 活动 | 参数 | |
|---|---|---|
componentCreated | component | 该应用的组件存在( 第一次回合正在进行) |
componentFailed | reason | 无法创建 - 端点不是此服务器上的路径, 前端无法装入, 或者组件失败 |
| 方法 | |
|---|---|
restart() | 结束运行的会话, 并用当前启动应用程序 app, (中文(简体) ), endpoint 财务报告和审定财务报表 params - 应用程序从头开始,或者在后面再试一次 componentFailed |
每个控制是它的 拥有 abap2UI5 会话 - 两个控制器是相同的
类不共享状态。 变化 app, (中文(简体) ), endpoint 或者说 params 结束
运行会话并开始新的会话; restart() 将同样与
值; 破坏控件也会结束它。 三个都是
普通的属性,所以它们可以 绑在你的模型 - params 实值
与运行中的应用程序的起始值进行比较,所以绑定
在新对象中交接相同的参数时,不会重新启动
应用程序,以及 endpoint 在另一个拼法中命名同一地点(a)
沿着斜线走,一条相对的路径)也一样.
两起事件都是同步发生的 在开始的渲染之后
app - 包含一个被拒绝的终点 。 失败的开始不重复
本身:更改三个属性之一,或调用 restart()。一个
隐形控件( n)visible="false"开始到显示为止;a
运行的应用程序随状态而运行,而其控制却被隐藏.
实例
使用软件包的完整示例
abap2UI5/样品-嵌入式控制, (中文(简体) ),
分会 standard,所有的包 从npm:
freestyle/- 一个UI5自由式的应用程序,有三个控制器,同样作为BSPZ2UI5_HOST尝试在系统上用平地取出fiori-elements/- 菲奥里元素应用软件,控制在 自定义 其对象页面的章节: abap2UI5 应用程序获得对象的密钥 作为参数的页面fiori-elements-v2/- Fiori元素应用程序 奥达塔V2 与 控制在一个 对象页面扩展名,则 RAP服务 其内容为:; 在树枝上rap所有这一切都是为了一个abapGit拉上一个带有RAP的系统card/- 一个 UI 整合卡 sAP 构建工作区,运行任何 abap2UI5 app:类为卡参数,后端为卡 目标
它的README走过包裹被接通的地方.
后端
应用在ABAP系统上运行
abap2UI5 已安装
及其 HTTP 服务(默认) /sap/bc/z2ui5)活动. 控制需求
abap2UI5 1.145.0或以后,其服务答案 ?z2ui5-bundle - 进
节点是 @abap2ui5/node-runtime 1.145.0, 联合呼吁程序
@cap2ui5/cds-plugin 0.3.1, 运行在它上:
GET /sap/bc/z2ui5?z2ui5-bundle the frontend as one script - loaded once per page
POST /sap/bc/z2ui5 the roundtrips, one session per control
GET /sap/bc/z2ui5 abap2UI5's own page, unchanged
更古老的 abap2UI5 答案及其页面; 控件再起火
componentFailed ("没有abap2UI5前端在.")而不是开始.
1.145.0还没有这样做. abap2UI5 1.146.0 修复所有这些 1.145.0 自行计划:
- URL散列是前端的. 1.145.0 清理东道主的散列物
第一次回合和每次回合之后: Fiori 元素对象页返回
sAP Building Work Zone 在其列表中留下一张卡片。 还有
主机散列形状像abap2UI5自己的深层链接,
#/app/<CLASS>,获胜 页:1app属性 - 该类开始代替。 路途经过 hash - 一个 Fiori 元素应用程序, 一个带有 UI5 路由器的应用程序, SAP Build Work 区 - 需要1.146.0或以后, 谁的前端知道它是 嵌入并留给您的应用( abap2UI5 677e71b, #2808) . - 没有CSRF标志性的握手. SAP approuter 路由检查 CSRF 令牌
默认( e)
cds add approuter生成这样的路径)和 1.145.0 发送 无 - 每一次往返都以403"X-CSRF-Token: request"拒绝. 给 服务路线"csrfProtection": false; abap2UI5 的自产地 检查保持原地。 1.146.0 获取该标志 403 (bap2UI5 #2802) (英语).
每一次释放都要通过ABAP2UI5主体和1.145.0测试
(单位:千美元)@abap2ui5/node-runtime 1.145.0) - 没有需要的散列. 这个
软件包记录其 package.json (单位:千美元)abap2ui5.minBackend),以及
这是测试安装的版本.
页面和服务必须共享一个来源. abap2UI5 拒绝 a
后谁 Origin 指定另一个主机而不是它自己的(其CSRF防御),以及
控制只从此服务器上的路径装入前端 - a
endpoint 解决另一个来源 被拒绝,因为会发生什么
后面是您页面中运行的代码。 所以浏览器通过您到达服务
app的出处 :
- 已部署 - 应用软件来自同一系统(BSP、发射板)或
approuter / 目的地路线
/sap/bc/z2ui5对它 ui5 serve- 代理中件转发/sap对系统,像ui5-middleware-simpleproxy输入 实例。 。 。 . 它重写Host并告诉后端 dev 服务器的主机在X-Forwarded-Host,该ABap2UI5比较了浏览器的Origin与 (默认受托;check_trust_forwarded_host在用户退出时)
内容-安全政策: 前端是一个 <script src> 属于自己的
源代码,其中每个模块都是函数 - 没有从一个函数中评估
绳子。 一个主机 script-src 'self' 没有 'unsafe-eval' 不需要任何东西
额外(UI5 1.71) 'unsafe-eval') (中文(简体) ).
UI5 库
嵌入式应用程序加载了 UI5 库中的 ABAP 视图名称 。 与UI5
服务于框架的CLI(framework: 内 ui5.yaml),列出每个库
您的ABAP应用软件使用那里, 不仅仅是您自己观点使用的 - 你好
例如,世界应用需要 sap.ui.layout - 还有 sap.ui.codeeditor, (中文(简体) ),
abap2UI5的开发工具(嵌入式app中的Ctrl+F12)需要. A 类
在浏览器控制台中缺少包含脚本的库失败
出错; 部署到一个系统的应用程序拥有这个系统的每一个库.
支持的UI5版本
与abap2UI5同层: OpenUI5 / SAPUI5 1.71 联合国 及后会. 这个 自由式实例在1.71和1.136上测试,Fiori元素实例 用于SAPUI5 1.136上的OData V4和V2,OpenUI5 1.136上的卡.
您的应用程序工具: UI5 CLI 3 或 4 - 该软件包 ui5.yaml 实值
specVersion 3.0,每个发行都与两者相建.
已知的限制
- 每页前端一个: 第一个开始的控件决定
前端的端点来自; 每个控件仍然发送其圆通
到它的终点。 和别人分享负载的控制器
自己的终点,并看到它失败,尝试过自己的终点一次. A 类
捆绑装入主机本身 - a
<script src="<endpoint>?z2ui5-bundle">它的一页,使其温暖 - 是照原样,不再加载. - 主页的移动设置,有abap2UI5 1.146.0及更早.
sap.m.App,嵌入式前端的根,运行 UI5 的sap/ui/util/Mobile.init当它被创建时——每页一次,使用 设置谁先称呼它。 在主机页面上没有sap.m.App它本身,使height: 100%打开<html>,添加视图元标记 用于禁用缩放和格式检测元标记,并在 iOS turn 上 本地滚动关闭( n)position: fixed打开<html>并隐藏 浏览器的UI. abap2UI5 1.147.0先打电话, 所有东西都关了,所以主机保持它的页面;什么留在电话上,或者 平板电脑是可网络应用元标记sap.m.App设定于每 翻译。 嵌入式应用程序根部的1.14.7.0是一个sap.m.NavContainer,没有设置ownsPage根为 页:1sap.m.App再说一遍,在应用程序的一页。 主持人sap.m.App它本身在任何释放时都不受影响. - 从兄弟会BSP自定义控制
z2ui5_cci编号 :z2ui5_ccc(bap2UI5-addons/海关控制,客户自己的图书馆) 将系统置于自身前缀下的代理 - SAP 构建工作 Zone 目的代理, 带有前缀的 approuter 路由 - 需要 abap2UI5 1.147.0 (英语). 在那之前,捆绑者会命名他们的路径 因为系统有他们,/sap/bc/ui5_ui5/sap/z2ui5_cci,这是东道主的 源代码没有;从那时起,在其捆绑的名称上它就是节点 请在下面,前端放上控件的前缀endpoint于诸根前. 控制器里没有什么变化. - abap2UI5的构建是为了拥有整个页面. 它的嵌入模式离开
您的应用程序的 URL( 自1.14. 6. 0 起) - 除非
ownsHash手握散块 背书(从1.14.7.0起) -- -- 和从1.14.7.0起还从文档 标题、 favicon 、 繁忙指示器和“ 离开页面” 。 提示 好吧,除非ownsPage将页面递回;在那之前有一个嵌入式应用程序 在回合中显示全局繁忙指标,并可能设置 当ABAP应用程序要求时,文档标题和favicon。 其余的就是 临璶ㄓ (单位:千美元)积压项目) (中文(简体) ). 最多1.146.0个嵌入式应用使其根成为sap.m.App,则 全屏根:主题本身的背景和高度 百分百在每一个祖先 直到控制区。 从1.147.0起 这是一个sap.m.NavContainer仅填充区域,除非ownsPage把页面拿回来。 在1.146.0之前,该应用程序还采用 当它开始时,从应用程序中的任何位置聚焦 - 根聚焦 中的第一个字段,并且ABAP app 可将焦点设定为 不错. - 嵌入式前端的全页行为. 它的错误对话框
"重新开始" - 和"重新开始" 在其致命错误屏幕上 - 重新装入整个
页面,包含您的应用程序。 它的开发者工具包扎
window.console应用程序运行时的方法(浏览器控制台继续工作;其源 链接指向包件),并在文档上收听 Ctrl+F12. - 持住活计. 嵌入式应用程序组件属于您的应用程序
组件, 控件的所有者和 abap2UI5 前端不
支持 保持活性:一个宣布它的应用程序( )
sap.ui5/keepAlive, UI5 数据 1.88+)报告它有一个嵌入式应用程序时没有保存-活性支持,如UI5 对每个没有它的嵌入组件.
里面的东西
| 路径 | |
|---|---|
src/Container.js | 控制系统, z2ui5.embed.Container |
src/Container.css | 它的样式表, 由控件加载 |
ui5.yaml | 服务 src/ 下级 /thirdparty/z2ui5/embed/ |
CHANGELOG.md | 每一次发布 |
许可证
麻省理工学院