-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathtutorial.html
More file actions
324 lines (280 loc) · 91.2 KB
/
Copy pathtutorial.html
File metadata and controls
324 lines (280 loc) · 91.2 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
<!doctype html><html lang=en data-theme=light data-api-base=/api data-cap-base data-page-kind=tutorial data-page-slug=abap-cloud-ui-from-interface data-page-title="Generate your own custom UI Service based on a Business Object Interface" data-page-tags="tutorial>beginner,programming-tool>abap-development,software-product>sap-business-technology-platform" data-page-step-count=5><head><meta charset=utf-8><meta name=viewport content="width=device-width,initial-scale=1"><link rel=icon type=image/svg+xml href=/img/sap-logo.svg><link rel=preconnect href=https://ui5.sap.com crossorigin><title>Generate your own custom UI Service based on a Business Object Interface | SAP Developers Tutorials</title><meta name=description content="Business Object Interfaces are provided by SAP in order to release business objects such as the business objects SalesOrder or PurchaseRequistion so that these …"><link rel=canonical href=https://developers.sap.com/tutorials/abap-cloud-ui-from-interface/><meta name=robots content="index, follow, max-image-preview:large, max-snippet:-1, max-video-preview:-1"><meta name=content-signal content="index=yes, ai-train=no, ai-search=yes"><meta name=keywords content="tutorial>beginner,programming-tool>abap-development,software-product>sap-business-technology-platform"><meta name=author content="Andre Fischer"><link rel=alternate href=https://developers.sap.com/tutorials/abap-cloud-ui-from-interface.html><meta property="og:site_name" content="SAP Developers Tutorials"><meta property="og:type" content="article"><meta property="og:title" content="Generate your own custom UI Service based on a Business Object Interface"><meta property="og:description" content="Business Object Interfaces are provided by SAP in order to release business objects such as the business objects SalesOrder or PurchaseRequistion so that these business objects can used or extended by …"><meta property="og:url" content="https://developers.sap.com/tutorials/abap-cloud-ui-from-interface/"><meta property="og:image" content="https://developers.sap.com/img/og-default.png"><meta property="og:image:width" content="1200"><meta property="og:image:height" content="630"><meta property="og:locale" content="en_US"><meta property="article:author" content="Andre Fischer"><meta property="article:section" content="programming-tool>abap-development"><meta property="article:tag" content="tutorial>beginner"><meta property="article:tag" content="programming-tool>abap-development"><meta property="article:tag" content="software-product>sap-business-technology-platform"><meta property="article:modified_time" content="2024-06-18T09:21:28Z"><meta name=twitter:card content="summary_large_image"><meta name=twitter:site content="@sapdevs"><meta name=twitter:title content="Generate your own custom UI Service based on a Business Object Interface"><meta name=twitter:description content="Business Object Interfaces are provided by SAP in order to release business objects such as the business objects SalesOrder or PurchaseRequistion so that these business objects can used or extended by …"><meta name=twitter:image content="https://developers.sap.com/img/og-default.png"><script type=application/ld+json>{"@context":"https://schema.org","@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"\"Home\"","item":"\"https://developers.sap.com/\""},{"@type":"ListItem","position":2,"name":"\"Tutorials\"","item":"\"https://developers.sap.com/tutorials/\""},{"@type":"ListItem","position":3,"name":"\"Generate your own custom UI Service based on a Business Object Interface\"","item":"\"https://developers.sap.com/tutorials/abap-cloud-ui-from-interface/\""}]}</script><script type=application/ld+json>{"@context":"https://schema.org","@type":"HowTo","name":"\"Generate your own custom UI Service based on a Business Object Interface\"","description":"\"Business Object Interfaces are provided by SAP in order to release business objects such as the business objects SalesOrder or PurchaseRequistion so that these business objects can used or extended by customers using the ABAP Cloud development model. By defining so called stability contracts it is thus possible to use such C1-released Business object interfaces within other software components. Also customers and partners can use this approach if they want to allow the usage of their business objects within other software components.\"","totalTime":"\"PT15M\"","datePublished":"\"2024-06-18\"","dateModified":"\"2024-06-18\"","educationalLevel":"\"beginner\"","author":{"@type":"Person","name":"\"Andre Fischer\""},"publisher":{"@id":"https:\/\/developers.sap.com/#organization"},"step":[{"@type":"HowToStep","position":1,"name":"\"Find the released Business Object Interface\""},{"@type":"HowToStep","position":2,"name":"\"Publish service and test the application\""},{"@type":"HowToStep","position":3,"name":"\"Troubleshooting\""},{"@type":"HowToStep","position":4,"name":"\"More information\""},{"@type":"HowToStep","position":5,"name":"\"Test yourself\""}]}</script><script type=application/ld+json>{"@context":"https://schema.org","@type":"FAQPage","mainEntity":[{"@type":"Question","name":"\"What will I learn?\"","acceptedAnswer":{"@type":"Answer","text":"\"How do generate your own Custom UI Service based on a C1-released [Business Object Interface](https://help.sap.com/docs/abap-cloud/abap-rap/business-object-interface). For this tutorial we will use the Business Object Interface `I_BankTP` which is also available in SAP BTP ABAP Environment trial systems. How to identify which authorization objects are needed to consume a SAP C1-released Business Object Interface.\""}},{"@type":"Question","name":"\"What do I need before I start?\"","acceptedAnswer":{"@type":"Answer","text":"\"SAP BTP, ABAP Environment SAP S/4HANA, ABAP Environment A package (e.g. `ZDEMO_UI_INTERFACE_###`) located in the software component ZLOCAL ---\""}},{"@type":"Question","name":"\"How long does this take?\"","acceptedAnswer":{"@type":"Answer","text":"\"15 minutes\""}},{"@type":"Question","name":"\"What level is this?\"","acceptedAnswer":{"@type":"Answer","text":"\"beginner\""}}]}</script><link rel=stylesheet href=https://unpkg.com/fundamental-styles@0.41.4/dist/icon.css><style>@font-face{font-family:sap-icons;src:url(https://ui5.sap.com/resources/sap/ui/core/themes/sap_horizon/fonts/SAP-icons.woff2)format("woff2");font-weight:400;font-style:normal;font-display:swap}</style><link rel=stylesheet href=/css/sap-theme-vars.css><link rel=stylesheet href=/css/sap-horizon-dark.css><link rel=stylesheet href=/css/chroma-light.css><link rel=stylesheet href=/css/chroma-dark.css><link rel=stylesheet href=/css/sap-fundamental.css><link rel=stylesheet href=/css/ui5-overrides.css><link rel=stylesheet href=/css/print.css media=print><script>const t=localStorage.getItem("theme")||(matchMedia("(prefers-color-scheme:dark)").matches?"dark":"light");document.documentElement.dataset.theme=t,t==="dark"&&document.documentElement.classList.add("dark"),localStorage.getItem("reader")==="on"&&(document.documentElement.dataset.reader="on"),document.documentElement.dataset.pageKind==="tutorial"&&(document.documentElement.dataset.hydrated="false"),document.addEventListener("click",function(e){if(e.target.closest('[data-action="toggle-theme"]')){var t=document.documentElement,n=t.dataset.theme==="dark"?"light":"dark";t.dataset.theme=n,t.classList.toggle("dark",n==="dark"),localStorage.setItem("theme",n)}}),document.addEventListener("DOMContentLoaded",function(){setTimeout(function(){document.documentElement.dataset.hydrated==="false"&&(document.documentElement.dataset.hydrated="true")},2e3)})</script><link rel=stylesheet href=/css/joule.css><script type=application/ld+json>{"@context":"https://schema.org","@graph":[{"@type":"Organization","@id":"https://developers.sap.com/#organization","name":"\"SAP Developers Tutorials\"","url":"https://developers.sap.com/","logo":"https://developers.sap.com/img/sap-logo.svg","sameAs":["https://www.youtube.com/@sapdevs","https://community.sap.com/","https://learning.sap.com/","https://github.com/SAP-samples"]},{"@type":"WebSite","@id":"https://developers.sap.com/#website","url":"https://developers.sap.com/","name":"\"SAP Developers Tutorials\"","publisher":{"@id":"https://developers.sap.com/#organization"},"potentialAction":{"@type":"SearchAction","target":"https://developers.sap.com/?q={search_term_string}","query-input":"required name=search_term_string"}}]}</script></head><body><ui5-shellbar id=app-shellbar primary-title="Tutorial Platform" show-notifications notifications-count><img slot=logo src=/img/sap-logo.svg alt=SAP height=24>
<ui5-shellbar-item id=sb-search icon=search text="Search ⌘K"></ui5-shellbar-item><ui5-shellbar-item id=joule-trigger icon=da text=Joule hidden></ui5-shellbar-item><ui5-shellbar-item id=sb-nav icon=menu2 text=Navigate></ui5-shellbar-item><ui5-shellbar-item id=sb-share icon=share-2 text="Share link"></ui5-shellbar-item><ui5-shellbar-item id=sb-reader icon=documents text="Reader mode (f)"></ui5-shellbar-item><ui5-shellbar-item id=sb-help icon=question-mark text=Help></ui5-shellbar-item><ui5-shellbar-item id=sb-theme icon=dark-mode text="Toggle theme"></ui5-shellbar-item><ui5-avatar slot=profile id=sb-avatar icon=person-placeholder size=XS interactive></ui5-avatar></ui5-shellbar><ui5-popover id=sb-nav-popover placement=Bottom horizontal-align=End hide-arrow><ui5-list id=nav-list separators=None><ui5-li icon=course-book data-href=/>Tutorials</ui5-li>
<ui5-li icon=flight data-href=/app-space>App Space</ui5-li>
<ui5-li icon=sys-monitor data-href=/event-display>Event Display</ui5-li>
<ui5-li class=nav-auth-only icon=complete data-href=/me hidden>My Completions</ui5-li>
</ui5-list></ui5-popover><ui5-popover id=sb-share-popover placement=Bottom horizontal-align=End hide-arrow header-text="Share & feedback"><div class=share-popover__body><div class=share-popover__section><div class=share-popover__heading>Page link</div><div class=share-popover__row><ui5-input id=share-url-input readonly aria-label="Page URL"></ui5-input><ui5-button id=share-copy-btn design=Emphasized icon=copy>Copy</ui5-button></div><div class=share-popover__status id=share-status aria-live=polite></div></div><div class=share-popover__section><div class=share-popover__heading>Feedback</div><ui5-list separators=None class=share-popover__list><ui5-li icon=discussion-2 data-href="https://answers.sap.com/questions/ask.html?topics=tutorial-navigator&topics=tutorials-abap-cloud-ui-from-interface" data-external>Ask the community</ui5-li>
<ui5-li icon=write-new-document data-href="https://github.com/sap-tutorials/Tutorials/issues/new?title=Generate%20your%20own%20custom%20UI%20Service%20based%20on%20a%20Business%20Object%20Interface" data-external>Contribute suggestion</ui5-li>
<ui5-li icon=email data-action=tutorial-feedback data-slug=abap-cloud-ui-from-interface>Give feedback</ui5-li></ui5-list></div><div class=share-popover__section><div class=share-popover__heading>Share this tutorial</div><ui5-list separators=None class=share-popover__list><ui5-li icon=post data-href="https://www.facebook.com/sharer/sharer.php?u=https%3a%2f%2fdevelopers.sap.com%2ftutorials%2fabap-cloud-ui-from-interface%2f" data-external>Facebook</ui5-li>
<ui5-li icon=customer-and-contacts data-href="https://www.linkedin.com/sharing/share-offsite/?url=https%3a%2f%2fdevelopers.sap.com%2ftutorials%2fabap-cloud-ui-from-interface%2f" data-external>LinkedIn</ui5-li>
<ui5-li icon=email data-href="mailto:?subject=Generate%20your%20own%20custom%20UI%20Service%20based%20on%20a%20Business%20Object%20Interface&body=Check out this SAP tutorial: https%3a%2f%2fdevelopers.sap.com%2ftutorials%2fabap-cloud-ui-from-interface%2f">Email</ui5-li></ui5-list></div></div></ui5-popover><ui5-popover id=sb-user-popover placement=Bottom horizontal-align=End hide-arrow><div class=user-popover__content><div class=user-popover__header><ui5-avatar id=user-avatar-large icon=person-placeholder size=XL></ui5-avatar><div id=user-name class=user-popover__name></div><div id=user-email class=user-popover__email></div></div><hr class=user-popover__separator><a href=https://account.sap.com class=user-popover__link target=_blank rel=noopener>Manage my Account</a>
<a href=https://www.youtube.com/@sapdevs class=user-popover__link target=_blank rel=noopener>SAP Developers ↗</a>
<a href=https://learning.sap.com class=user-popover__link target=_blank rel=noopener>Learnings ↗</a>
<a href=https://community.sap.com class=user-popover__link target=_blank rel=noopener>Community ↗</a><hr class=user-popover__separator><ui5-button id=logout-btn design=Negative>Logout</ui5-button></div></ui5-popover><script>(function(){const o=document.getElementById("app-shellbar"),i=document.getElementById("sb-avatar"),C=document.getElementById("user-avatar-large"),d=document.getElementById("user-name"),y=document.getElementById("user-email"),r=document.getElementById("sb-nav-popover"),s=document.getElementById("sb-share-popover"),e=document.getElementById("sb-user-popover"),h=document.getElementById("share-url-input"),m=document.getElementById("share-status"),x=document.getElementById("share-copy-btn"),u=document.getElementById("logout-btn"),c=document.getElementById("sb-theme"),a=document.getElementById("sb-reader");let f=!1;function p(t){[r,s,e].forEach(e=>{e!==t&&e.open&&(e.open=!1)})}function g(e,t){p(e),e.open?e.open=!1:(e.opener=t,e.open=!0)}o.querySelectorAll("ui5-shellbar-item").forEach(e=>{e.addEventListener("click",t=>{const n=e.id,o=t.detail?.targetRef||e;n==="sb-search"?typeof window.openCommandPalette=="function"&&window.openCommandPalette():n==="joule-trigger"?window.joule&&typeof window.joule.open=="function"&&window.joule.open():n==="sb-nav"?g(r,o):n==="sb-share"?(h.value=window.location.href,m.textContent="",g(s,o)):n==="sb-help"?window.open("https://community.sap.com","_blank"):n==="sb-theme"?w():n==="sb-reader"&&j()})}),o.addEventListener("profile-click",t=>{if(!f){window.location.href="/login?returnTo="+encodeURIComponent(window.location.pathname+window.location.search);return}p(e),e.open?e.open=!1:(e.opener=t.detail.targetRef,e.open=!0)});function v(e){const t=e.getAttribute("data-href");if(!t||t==="#")return;e.hasAttribute("data-external")?window.open(t,"_blank","noopener,noreferrer"):window.location.href=t}document.querySelectorAll("#sb-nav-popover ui5-li").forEach(e=>{e.addEventListener("click",()=>{v(e),r.open=!1})}),document.querySelectorAll("#sb-share-popover ui5-li").forEach(e=>{e.addEventListener("click",()=>{const t=e.getAttribute("data-action");if(t==="tutorial-feedback"){const t=e.getAttribute("data-slug")||"";s.open=!1,typeof window.openTutorialFeedbackPopup=="function"&&window.openTutorialFeedbackPopup(t);return}v(e),s.open=!1})}),x.addEventListener("click",()=>{const t=h.value||window.location.href,e=e=>{m.textContent=e?"Copied to clipboard":"Press Ctrl+C to copy"};if(navigator.clipboard&&window.isSecureContext)navigator.clipboard.writeText(t).then(()=>e(!0),()=>e(!1));else try{const n=document.createElement("input");n.value=t,document.body.appendChild(n),n.select();const s=document.execCommand("copy");n.remove(),e(s)}catch{e(!1)}}),u.addEventListener("click",()=>{try{for(let e=sessionStorage.length-1;e>=0;e--){const t=sessionStorage.key(e);t&&t.indexOf("joule.")===0&&sessionStorage.removeItem(t)}}catch{}window.location.href="/logout"});function w(){const t=document.documentElement,e=t.dataset.theme==="dark"?"light":"dark";t.dataset.theme=e,t.classList.toggle("dark",e==="dark");try{localStorage.setItem("theme",e)}catch{}c.icon=e==="dark"?"light-mode":"dark-mode"}c.icon=document.documentElement.dataset.theme==="dark"?"light-mode":"dark-mode";function j(){const e=document.documentElement,t=e.dataset.reader==="on";t?delete e.dataset.reader:e.dataset.reader="on";try{localStorage.setItem("reader",t?"off":"on")}catch{}l()}function l(){if(!a)return;const e=document.documentElement.dataset.reader==="on";a.icon=e?"decline":"documents",a.text=e?"Exit reader (f)":"Reader mode (f)"}l(),document.addEventListener("keydown",e=>{if(e.key!=="f"&&e.key!=="F")return;if(e.ctrlKey||e.metaKey||e.altKey)return;const t=e.target;if(t&&(t.tagName==="INPUT"||t.tagName==="TEXTAREA"||t.isContentEditable))return;const n=document.activeElement;if(n&&n.tagName&&n.tagName.toLowerCase().startsWith("ui5-")){const e=n.tagName.toLowerCase();if(e==="ui5-input"||e==="ui5-textarea"||e==="ui5-multi-input"||e==="ui5-combobox"||e==="ui5-multi-combobox")return}e.preventDefault(),j()});function _(e,t,n){let s=(e?.[0]||"")+(t?.[0]||"");!s&&n&&(s=n[0]),s&&[i,C].forEach(e=>{e.removeAttribute("icon"),e.setAttribute("initials",s.toUpperCase()),e.setAttribute("color-scheme","Accent6")})}const b="joule.user.v1",O=6e4;function n(){try{const t=sessionStorage.getItem(b);if(!t)return null;const e=JSON.parse(t);return!e||!e.value?null:Date.now()-e.ts>O?null:e.value}catch{return null}}function t(e){if(!e)return;const t=e.givenName||e.firstName||"",n=e.familyName||"",s=e.id||"";f=!0,d.textContent=(t+" "+n).trim()||s,y.textContent=e.email||"",document.documentElement.dataset.authenticated="true",_(t,n,s),i.setAttribute("accessible-name",d.textContent),document.documentElement.dataset.user=JSON.stringify({firstName:t}),document.querySelectorAll(".nav-auth-only").forEach(e=>e.removeAttribute("hidden"))}async function E(){try{const s=await fetch("/auth/user",{credentials:"include",redirect:"follow"});if(s.redirected||!s.ok){const e=n();e&&t(e);return}const o=s.headers.get("content-type")||"";if(!o.includes("application/json")){const e=n();e&&t(e);return}const e=await s.json();if(!e||!e.authenticated){const e=n();e&&t(e);return}const i={firstName:e.givenName,givenName:e.givenName,familyName:e.familyName,email:e.email,id:e.id};try{sessionStorage.setItem(b,JSON.stringify({ts:Date.now(),value:i}))}catch{}t(e)}catch(s){console.debug("[header/checkAuth] fetch failed, attempting cache fallback",s);const e=n();e&&t(e)}}customElements.whenDefined("ui5-shellbar").then(E),window.handleLogout=()=>u.click(),window.handleProfileClick=()=>o.dispatchEvent(new CustomEvent("profile-click",{detail:{targetRef:i}}))})()</script><ui5-progress-indicator id=nav-progress hide-value value=0 class=nav-progress-bar hidden></ui5-progress-indicator><div id=reading-progress class=reading-progress hidden></div><main><nav class=tutorial-breadcrumbs aria-label=Breadcrumb><ul class=fd-breadcrumb><li class=fd-breadcrumb__item><a class=fd-breadcrumb__link href=/>Tutorial Navigator</a></li><li class=fd-breadcrumb__separator aria-hidden=true></li><li class="fd-breadcrumb__item fd-breadcrumb__item--current"><button type=button id=nav-dropdown-toggle class=breadcrumb-dropdown-toggle aria-expanded=false aria-haspopup=true>
Generate your own custom UI Service based on a Business Object Interface <span class=breadcrumb-chevron>▾</span></button></li></ul><div id=nav-dropdown-mount data-slug=abap-cloud-ui-from-interface class=nav-dropdown-container></div></nav><div id=tutorial-feedback-popup class="popup-overlay popup-hidden" onclick="event.target===this&&closePopups()"><div class=popup-card><button type=button class=popup-close onclick=closePopups() aria-label=Close>×</button><div id=tutorial-feedback-mount></div></div></div><script>window.openTutorialFeedbackPopup=function(e){if(closePopups(),document.getElementById("tutorial-feedback-popup").classList.remove("popup-hidden"),window.mountTutorialFeedback){window.mountTutorialFeedback(e,"tutorial-feedback-popup");return}const t=document.createElement("script");t.type="module",t.src="/js/tutorial-feedback.js",t.onload=()=>window.mountTutorialFeedback(e,"tutorial-feedback-popup"),document.head.appendChild(t)};function closePopups(){const e=document.getElementById("tutorial-feedback-popup");e&&e.classList.add("popup-hidden")}</script><style>.op-page{max-width:1200px;margin:0 auto;padding:0}.op-header{position:sticky;top:0;z-index:30;background:var(--sapObjectHeader_Background,var(--sapBackgroundColor));border-bottom:1px solid var(--sapObjectHeader_BorderColor,var(--sapList_BorderColor));padding:1rem 1.5rem .5rem}.op-header__title{font-size:1.625rem;font-weight:600;margin:0 0 .25rem;color:var(--sapObjectHeader_TitleTextColor,var(--sapTextColor));line-height:1.25}.op-header__description{margin:0 0 .75rem;color:var(--sapObjectHeader_TextColor,var(--sapContent_LabelColor));font-size:.9375rem}.op-header__chips{display:flex;flex-wrap:wrap;gap:.5rem;align-items:center;margin-bottom:.75rem}.op-chip{display:inline-flex;align-items:center;gap:.25rem;padding:.125rem .625rem;border-radius:999px;background:var(--sapInfobar_Background,var(--sapList_Background));color:var(--sapTextColor);border:1px solid var(--sapList_BorderColor);font-size:.8125rem;line-height:1.5}.op-chip__icon{opacity:.7;font-size:.875rem}.op-chip--tag{background:var(--sapButton_Lite_Background,transparent);border-color:var(--sapButton_Lite_BorderColor,var(--sapList_BorderColor))}.op-progress{display:inline-flex;align-items:center;gap:.5rem;margin-left:auto;font-size:.8125rem;color:var(--sapContent_LabelColor)}.op-progress__ring{--size:32px;--pct:0;width:var(--size);height:var(--size);border-radius:50%;background:conic-gradient(var(--sapBrandColor,#0070f2) calc(var(--pct) * 1%),var(--sapList_BorderColor) 0);display:inline-flex;align-items:center;justify-content:center;position:relative}.op-progress__ring::after{content:"";width:calc(var(--size) - 6px);height:calc(var(--size) - 6px);border-radius:50%;background:var(--sapObjectHeader_Background,var(--sapBackgroundColor));position:absolute}.op-progress__label{position:relative;z-index:1;font-size:.6875rem;font-weight:600;color:var(--sapTextColor)}.op-anchor{margin:0 -1.5rem}.op-anchor ui5-tabcontainer{--_ui5-v2_0_0-rc_3_TabContainer_default_overflow_button_padding:0}.op-body{padding:1.5rem}.op-section{scroll-margin-top:180px;padding-top:2.5rem}.op-section:first-child{padding-top:1rem}.op-section+.op-section{border-top:1px solid var(--sapList_BorderColor);margin-top:1.5rem}.op-section__heading{font-size:1.125rem;font-weight:600;margin:0 0 .75rem;color:var(--sapTextColor)}.op-discussion__cta{display:flex;flex-wrap:wrap;gap:.75rem;margin-top:1rem}.op-discussion__hint{color:var(--sapContent_LabelColor);font-size:.9375rem;margin:0 0 .5rem}.op-wizard-wrap{margin:0 0 1rem}.op-wizard-wrap ui5-wizard::part(step-content){display:none}.op-twocol{display:grid;grid-template-columns:minmax(0,1fr)320px;gap:1.5rem;align-items:start}.op-twocol>.tutorial-right-col{position:sticky;top:160px;align-self:start}@media(max-width:960px){.op-twocol{grid-template-columns:1fr}.op-twocol>.tutorial-right-col{position:static}}#op-mobile-fab{position:fixed;right:1rem;bottom:1rem;z-index:40;display:none}@media(max-width:960px){#op-mobile-fab{display:inline-flex}}#op-mobile-sheet::part(content){padding:0;max-height:70vh;overflow-y:auto}#op-mobile-sheet::part(header),#op-mobile-sheet::part(footer){padding:.5rem 1rem}.op-sheet__header{display:flex;align-items:center;justify-content:space-between;width:100%;font-weight:600}.op-sheet__footer{display:flex;gap:.5rem;justify-content:space-between;width:100%}@media(prefers-reduced-motion:reduce){:root{--u18-reduce-motion:1}}#op-mobile-sheet::part(root){position:fixed;bottom:0;left:0;right:0;width:100%;max-width:100%;max-height:80vh;border-radius:.75rem .75rem 0 0;margin:0;transform:none;top:auto}</style><div class=op-page><header class=op-header><h1 class=op-header__title>Generate your own custom UI Service based on a Business Object Interface</h1><p class=op-header__description>Business Object Interfaces are provided by SAP in order to release business objects such as the business objects SalesOrder or PurchaseRequistion so that these business objects can used or extended by customers using the ABAP Cloud development model. By defining so called stability contracts it is thus possible to use such C1-released Business object interfaces within other software components. Also customers and partners can use this approach if they want to allow the usage of their business objects within other software components.</p><div class=op-header__chips><span class=op-chip><span class=op-chip__icon>🎓</span>beginner</span>
<span class=op-chip><span class=op-chip__icon>⏱</span>15 min</span>
<span class="op-chip op-chip--tag">ABAP Development</span><span class="op-chip op-chip--tag">Beginner</span><span class="op-chip op-chip--tag">SAP Business Technology Platform</span>
<span class=op-progress id=op-progress data-step-count=5><span class=op-progress__ring id=op-progress-ring style=--pct:0><span class=op-progress__label id=op-progress-label>0/5</span></span></span></div><div class=op-anchor><ui5-tabcontainer id=op-anchor content-background-design=Transparent header-background-design=Transparent no-auto-selection><ui5-tab data-section=overview text=Overview selected></ui5-tab><ui5-tab data-section=prerequisites text=Prerequisites></ui5-tab><ui5-tab data-section=steps text=Steps></ui5-tab><ui5-tab data-section=resources text=Resources></ui5-tab><ui5-tab data-section=discussion text=Discussion></ui5-tab></ui5-tabcontainer></div></header><div class=op-body><main class="tutorial-main op-twocol"><div><section id=op-overview class=op-section data-op-section><h2 class=op-section__heading>Overview</h2><div class=tutorial-banners data-slug=abap-cloud-ui-from-interface></div><div class=tutorial-meta><span class=meta-item><span class=meta-icon>🎓</span>
<span class=meta-level>beginner</span>
</span><span class=meta-item><span class=meta-icon>⏱</span>
<span>15 min.</span>
</span><span class=meta-tags><svg class="meta-icon-svg" viewBox="0 0 16 16" width="14" height="14"><path d="M2 2h5.5L14 8.5 8.5 14 2 7.5V2zm3 1.5a1.5 1.5.0 100 3 1.5 1.5.0 000-3z" fill="currentColor" opacity=".6"/></svg>
<span class=tutorial-tag>ABAP Development</span><span class=tutorial-tag>Beginner</span><span class=tutorial-tag>SAP Business Technology Platform</span></span></div><div class=you-will-learn><h3>You will learn</h3><ul><li><span class=check-icon>✔</span> How do generate your own Custom UI Service based on a C1-released <a href=https://help.sap.com/docs/abap-cloud/abap-rap/business-object-interface>Business Object Interface</a>. For this tutorial we will use the Business Object Interface <code>I_BankTP</code> which is also available in SAP BTP ABAP Environment trial systems.</li><li><span class=check-icon>✔</span> How to identify which authorization objects are needed to consume a SAP C1-released Business Object Interface.</li></ul></div><div class=tutorial-author-line><div class=author-line-section><img src="https://github.com/anfisc.png?size=40" alt="Andre Fischer" class=author-line-avatar onerror='this.classList.add("tutorial-hidden"),this.nextElementSibling.classList.remove("tutorial-hidden")'>
<span class="author-line-avatar author-line-avatar-placeholder tutorial-hidden">A</span>
<a href=https://github.com/anfisc class=author-line-name target=_blank rel=noopener>Andre Fischer</a>
<span class=author-line-date>June 18, 2024</span></div><div class="author-line-section author-line-created"><span class=author-line-label>Created by</span>
<svg class="author-line-icon" viewBox="0 0 16 16" width="14" height="14"><path d="M5 1v2H3v10h10V3h-2V1h2a1 1 0 011 1v11a1 1 0 01-1 1H3a1 1 0 01-1-1V2a1 1 0 011-1h2zm6 0v2H5V1h6zM4 6h8v1H4V6zm0 2.5h5v1H4v-1z" fill="currentColor" opacity=".6"/></svg>
<span class=author-line-date>June 18, 2024</span></div><div class="author-line-section author-line-contributors"><span class=author-line-label>Contributors</span><div class=author-line-avatars><a href=https://github.com/anfisc class=author-line-contrib-avatar-link target=_blank rel=noopener title="Andre Fischer"><img src="https://github.com/anfisc.png?size=28" alt="Andre Fischer" class=author-line-contrib-avatar onerror='this.style.display="none",this.nextElementSibling.style.display="flex"'>
<span class="author-line-contrib-avatar author-line-avatar-placeholder" style=display:none>A</span></a></div></div></div><script>(function(){document.querySelectorAll(".author-line-expand-btn").forEach(function(e){e.addEventListener("click",function(){var t=e.parentElement,n=t.classList.toggle("is-open");e.setAttribute("aria-expanded",n)})}),document.addEventListener("click",function(e){document.querySelectorAll(".author-line-expand-wrapper.is-open").forEach(function(t){t.contains(e.target)||(t.classList.remove("is-open"),t.querySelector("button").setAttribute("aria-expanded","false"))})})})()</script></section><section id=op-prerequisites class=op-section data-op-section><h2 class=op-section__heading>Prerequisites</h2><div class=tutorial-prerequisites><h3>Prerequisites</h3><ul><li>SAP BTP, ABAP Environment</li><li>SAP S/4HANA, ABAP Environment</li><li>A package (e.g. <code>ZDEMO_UI_INTERFACE_###</code>) located in the software component ZLOCAL</li><li><hr></li></ul></div></section><section id=op-steps class=op-section data-op-section><h2 class=op-section__heading>Steps</h2><div class=op-wizard-wrap><ui5-wizard id=op-step-wizard><ui5-wizard-step data-step-target=step-1 title-text="Step 1" subtitle-text="Find the released Business Object Interface" selected></ui5-wizard-step><ui5-wizard-step data-step-target=step-2 title-text="Step 2" subtitle-text="Publish service and test the application"></ui5-wizard-step><ui5-wizard-step data-step-target=step-3 title-text="Step 3" subtitle-text=Troubleshooting></ui5-wizard-step><ui5-wizard-step data-step-target=step-4 title-text="Step 4" subtitle-text="More information"></ui5-wizard-step><ui5-wizard-step data-step-target=step-5 title-text="Step 5" subtitle-text="Test yourself"></ui5-wizard-step></ui5-wizard></div><div id=progress-bar data-step-count=5 data-slug=abap-cloud-ui-from-interface></div><div class=step-controls><a href=# onclick="return expandAllSteps(),!1">Open all</a>
<a href=# onclick="return collapseAllSteps(),!1">Close all</a></div><div class=tutorial-steps><div id=step-1 class=tutorial-step data-step=1><div class=step-header data-action=toggle-step><span class=step-check-circle></span><div class=step-header-text><span class=step-label>Step 1</span>
<span class=step-title-text>Find the released Business Object Interface</span></div><span class=step-toggle-icon>—</span></div><div class=step-body><hr class=step-divider><div class=step-content><ol><li><p>In the Project Explorer select the <strong>Released Objects</strong> tree and then the node <code>USE_IN_CLOUD_DEVELOPMENT</code>. Here you have to open the folder <strong>Core Data Services</strong> and then the folder <strong>Behavior Definitions</strong> where you find the C1-released Business Object Interface <code>I_BankTP</code>.</p><p><figure class=tutorial-figure><img src="/img-cdn/?u=https%3A%2F%2Fraw.githubusercontent.com%2Fsap-tutorials%2Fabap-core-development%2Fmain%2Ftutorials%2Fabap-cloud-ui-from-interface%2F001-find-interface.png&w=1440" srcset="/img-cdn/?u=https%3A%2F%2Fraw.githubusercontent.com%2Fsap-tutorials%2Fabap-core-development%2Fmain%2Ftutorials%2Fabap-cloud-ui-from-interface%2F001-find-interface.png&w=480 480w, /img-cdn/?u=https%3A%2F%2Fraw.githubusercontent.com%2Fsap-tutorials%2Fabap-core-development%2Fmain%2Ftutorials%2Fabap-cloud-ui-from-interface%2F001-find-interface.png&w=960 960w, /img-cdn/?u=https%3A%2F%2Fraw.githubusercontent.com%2Fsap-tutorials%2Fabap-core-development%2Fmain%2Ftutorials%2Fabap-cloud-ui-from-interface%2F001-find-interface.png&w=1440 1440w" sizes="(max-width: 640px) 100vw, (max-width: 1024px) 90vw, 1440px" alt=interface width=591 height=450 loading=lazy decoding=async data-zoomable=true><figcaption class=tutorial-figcaption>interface</figcaption></figure></p></li><li><p>Right-click on the interface <code>I_BankTP</code> and select <strong>Generate ABAP Repository Objects</strong></p><p><figure class=tutorial-figure><img src="/img-cdn/?u=https%3A%2F%2Fraw.githubusercontent.com%2Fsap-tutorials%2Fabap-core-development%2Fmain%2Ftutorials%2Fabap-cloud-ui-from-interface%2F002-start-generator.png&w=1440" srcset="/img-cdn/?u=https%3A%2F%2Fraw.githubusercontent.com%2Fsap-tutorials%2Fabap-core-development%2Fmain%2Ftutorials%2Fabap-cloud-ui-from-interface%2F002-start-generator.png&w=480 480w, /img-cdn/?u=https%3A%2F%2Fraw.githubusercontent.com%2Fsap-tutorials%2Fabap-core-development%2Fmain%2Ftutorials%2Fabap-cloud-ui-from-interface%2F002-start-generator.png&w=960 960w, /img-cdn/?u=https%3A%2F%2Fraw.githubusercontent.com%2Fsap-tutorials%2Fabap-core-development%2Fmain%2Ftutorials%2Fabap-cloud-ui-from-interface%2F002-start-generator.png&w=1440 1440w" sizes="(max-width: 640px) 100vw, (max-width: 1024px) 90vw, 1440px" alt=interface width=783 height=451 loading=lazy decoding=async data-zoomable=true><figcaption class=tutorial-figcaption>interface</figcaption></figure></p></li><li><p>Select <strong>OData UI Service</strong> and then <strong>Next</strong></p><p><figure class=tutorial-figure><img src="/img-cdn/?u=https%3A%2F%2Fraw.githubusercontent.com%2Fsap-tutorials%2Fabap-core-development%2Fmain%2Ftutorials%2Fabap-cloud-ui-from-interface%2F003-odata-ui-service.png&w=1440" srcset="/img-cdn/?u=https%3A%2F%2Fraw.githubusercontent.com%2Fsap-tutorials%2Fabap-core-development%2Fmain%2Ftutorials%2Fabap-cloud-ui-from-interface%2F003-odata-ui-service.png&w=480 480w, /img-cdn/?u=https%3A%2F%2Fraw.githubusercontent.com%2Fsap-tutorials%2Fabap-core-development%2Fmain%2Ftutorials%2Fabap-cloud-ui-from-interface%2F003-odata-ui-service.png&w=960 960w, /img-cdn/?u=https%3A%2F%2Fraw.githubusercontent.com%2Fsap-tutorials%2Fabap-core-development%2Fmain%2Ftutorials%2Fabap-cloud-ui-from-interface%2F003-odata-ui-service.png&w=1440 1440w" sizes="(max-width: 640px) 100vw, (max-width: 1024px) 90vw, 1440px" alt=generator width=908 height=891 loading=lazy decoding=async data-zoomable=true><figcaption class=tutorial-figcaption>generator</figcaption></figure></p></li><li><p>Select the package <code>ZDEMO_UI_INTERFACE_###</code> by pressing the <strong>Browse</strong> button and press <strong>Next</strong>.</p><p><figure class=tutorial-figure><img src="/img-cdn/?u=https%3A%2F%2Fraw.githubusercontent.com%2Fsap-tutorials%2Fabap-core-development%2Fmain%2Ftutorials%2Fabap-cloud-ui-from-interface%2F004-select-package.png&w=1440" srcset="/img-cdn/?u=https%3A%2F%2Fraw.githubusercontent.com%2Fsap-tutorials%2Fabap-core-development%2Fmain%2Ftutorials%2Fabap-cloud-ui-from-interface%2F004-select-package.png&w=480 480w, /img-cdn/?u=https%3A%2F%2Fraw.githubusercontent.com%2Fsap-tutorials%2Fabap-core-development%2Fmain%2Ftutorials%2Fabap-cloud-ui-from-interface%2F004-select-package.png&w=960 960w, /img-cdn/?u=https%3A%2F%2Fraw.githubusercontent.com%2Fsap-tutorials%2Fabap-core-development%2Fmain%2Ftutorials%2Fabap-cloud-ui-from-interface%2F004-select-package.png&w=1440 1440w" sizes="(max-width: 640px) 100vw, (max-width: 1024px) 90vw, 1440px" alt=generator width=906 height=889 loading=lazy decoding=async data-zoomable=true><figcaption class=tutorial-figcaption>generator</figcaption></figure></p></li><li><p>The generator finishes with the <em>Configure Generator</em> screen. When you want to change the names of the repository objects that will be generated you can do so by selecting the entries <strong>Service Projection Entities</strong>, <strong>Service Projection Behavior</strong>, <strong>Service Definition</strong> and <strong>Service Binding</strong>.</p><p><figure class=tutorial-figure><img src="/img-cdn/?u=https%3A%2F%2Fraw.githubusercontent.com%2Fsap-tutorials%2Fabap-core-development%2Fmain%2Ftutorials%2Fabap-cloud-ui-from-interface%2F005-configure-generator.png&w=1440" srcset="/img-cdn/?u=https%3A%2F%2Fraw.githubusercontent.com%2Fsap-tutorials%2Fabap-core-development%2Fmain%2Ftutorials%2Fabap-cloud-ui-from-interface%2F005-configure-generator.png&w=480 480w, /img-cdn/?u=https%3A%2F%2Fraw.githubusercontent.com%2Fsap-tutorials%2Fabap-core-development%2Fmain%2Ftutorials%2Fabap-cloud-ui-from-interface%2F005-configure-generator.png&w=960 960w, /img-cdn/?u=https%3A%2F%2Fraw.githubusercontent.com%2Fsap-tutorials%2Fabap-core-development%2Fmain%2Ftutorials%2Fabap-cloud-ui-from-interface%2F005-configure-generator.png&w=1440 1440w" sizes="(max-width: 640px) 100vw, (max-width: 1024px) 90vw, 1440px" alt=generator width=1252 height=889 loading=lazy decoding=async data-zoomable=true><figcaption class=tutorial-figcaption>generator</figcaption></figure></p></li><li><p>When selecting <strong>Service Projection Entities</strong> you can change the suggested name of the CDS projection view(s).</p><p><figure class=tutorial-figure><img src="/img-cdn/?u=https%3A%2F%2Fraw.githubusercontent.com%2Fsap-tutorials%2Fabap-core-development%2Fmain%2Ftutorials%2Fabap-cloud-ui-from-interface%2F006-configure-generator.png&w=1440" srcset="/img-cdn/?u=https%3A%2F%2Fraw.githubusercontent.com%2Fsap-tutorials%2Fabap-core-development%2Fmain%2Ftutorials%2Fabap-cloud-ui-from-interface%2F006-configure-generator.png&w=480 480w, /img-cdn/?u=https%3A%2F%2Fraw.githubusercontent.com%2Fsap-tutorials%2Fabap-core-development%2Fmain%2Ftutorials%2Fabap-cloud-ui-from-interface%2F006-configure-generator.png&w=960 960w, /img-cdn/?u=https%3A%2F%2Fraw.githubusercontent.com%2Fsap-tutorials%2Fabap-core-development%2Fmain%2Ftutorials%2Fabap-cloud-ui-from-interface%2F006-configure-generator.png&w=1440 1440w" sizes="(max-width: 640px) 100vw, (max-width: 1024px) 90vw, 1440px" alt="Service Projection Entities" width=1254 height=891 loading=lazy decoding=async data-zoomable=true><figcaption class=tutorial-figcaption>Service Projection Entities</figcaption></figure></p></li><li><p>When selecting <strong>Service Projection Behavior</strong> you can change the suggested name of the <strong>Behavior Implementation Class</strong>. In addition you can decide whether your UI shall support draft as well when the underlying RAP business object provides draft, by checking <strong>with draft</strong>.</p><p><figure class=tutorial-figure><img src="/img-cdn/?u=https%3A%2F%2Fraw.githubusercontent.com%2Fsap-tutorials%2Fabap-core-development%2Fmain%2Ftutorials%2Fabap-cloud-ui-from-interface%2F007-configure-generator.png&w=1440" srcset="/img-cdn/?u=https%3A%2F%2Fraw.githubusercontent.com%2Fsap-tutorials%2Fabap-core-development%2Fmain%2Ftutorials%2Fabap-cloud-ui-from-interface%2F007-configure-generator.png&w=480 480w, /img-cdn/?u=https%3A%2F%2Fraw.githubusercontent.com%2Fsap-tutorials%2Fabap-core-development%2Fmain%2Ftutorials%2Fabap-cloud-ui-from-interface%2F007-configure-generator.png&w=960 960w, /img-cdn/?u=https%3A%2F%2Fraw.githubusercontent.com%2Fsap-tutorials%2Fabap-core-development%2Fmain%2Ftutorials%2Fabap-cloud-ui-from-interface%2F007-configure-generator.png&w=1440 1440w" sizes="(max-width: 640px) 100vw, (max-width: 1024px) 90vw, 1440px" alt="Service Projection Behavior" width=1252 height=889 loading=lazy decoding=async data-zoomable=true><figcaption class=tutorial-figcaption>Service Projection Behavior</figcaption></figure></p></li><li><p>When selecting <strong>Service Definition</strong> you can change the suggested name of the <strong>Service Definition Name</strong>.</p><p><figure class=tutorial-figure><img src="/img-cdn/?u=https%3A%2F%2Fraw.githubusercontent.com%2Fsap-tutorials%2Fabap-core-development%2Fmain%2Ftutorials%2Fabap-cloud-ui-from-interface%2F008-configure-generator.png&w=1440" srcset="/img-cdn/?u=https%3A%2F%2Fraw.githubusercontent.com%2Fsap-tutorials%2Fabap-core-development%2Fmain%2Ftutorials%2Fabap-cloud-ui-from-interface%2F008-configure-generator.png&w=480 480w, /img-cdn/?u=https%3A%2F%2Fraw.githubusercontent.com%2Fsap-tutorials%2Fabap-core-development%2Fmain%2Ftutorials%2Fabap-cloud-ui-from-interface%2F008-configure-generator.png&w=960 960w, /img-cdn/?u=https%3A%2F%2Fraw.githubusercontent.com%2Fsap-tutorials%2Fabap-core-development%2Fmain%2Ftutorials%2Fabap-cloud-ui-from-interface%2F008-configure-generator.png&w=1440 1440w" sizes="(max-width: 640px) 100vw, (max-width: 1024px) 90vw, 1440px" alt="Service Definition" width=1252 height=889 loading=lazy decoding=async data-zoomable=true><figcaption class=tutorial-figcaption>Service Definition</figcaption></figure></p></li><li><p>When selecting <strong>Service Binding</strong> you can change the suggested name of the <strong>Service Binding Name</strong>. By pressing <strong>Next</strong> you can start the generation process.</p><p><figure class=tutorial-figure><img src="/img-cdn/?u=https%3A%2F%2Fraw.githubusercontent.com%2Fsap-tutorials%2Fabap-core-development%2Fmain%2Ftutorials%2Fabap-cloud-ui-from-interface%2F009-configure-generator.png&w=1440" srcset="/img-cdn/?u=https%3A%2F%2Fraw.githubusercontent.com%2Fsap-tutorials%2Fabap-core-development%2Fmain%2Ftutorials%2Fabap-cloud-ui-from-interface%2F009-configure-generator.png&w=480 480w, /img-cdn/?u=https%3A%2F%2Fraw.githubusercontent.com%2Fsap-tutorials%2Fabap-core-development%2Fmain%2Ftutorials%2Fabap-cloud-ui-from-interface%2F009-configure-generator.png&w=960 960w, /img-cdn/?u=https%3A%2F%2Fraw.githubusercontent.com%2Fsap-tutorials%2Fabap-core-development%2Fmain%2Ftutorials%2Fabap-cloud-ui-from-interface%2F009-configure-generator.png&w=1440 1440w" sizes="(max-width: 640px) 100vw, (max-width: 1024px) 90vw, 1440px" alt="Service Binding" width=1254 height=891 loading=lazy decoding=async data-zoomable=true><figcaption class=tutorial-figcaption>Service Binding</figcaption></figure></p></li><li><p>The wizard shows an overview of the repository objects that are going to be generated. Press <strong>Next</strong>.</p><p><figure class=tutorial-figure><img src="/img-cdn/?u=https%3A%2F%2Fraw.githubusercontent.com%2Fsap-tutorials%2Fabap-core-development%2Fmain%2Ftutorials%2Fabap-cloud-ui-from-interface%2F010-abap-artifacts-list.png&w=1440" srcset="/img-cdn/?u=https%3A%2F%2Fraw.githubusercontent.com%2Fsap-tutorials%2Fabap-core-development%2Fmain%2Ftutorials%2Fabap-cloud-ui-from-interface%2F010-abap-artifacts-list.png&w=480 480w, /img-cdn/?u=https%3A%2F%2Fraw.githubusercontent.com%2Fsap-tutorials%2Fabap-core-development%2Fmain%2Ftutorials%2Fabap-cloud-ui-from-interface%2F010-abap-artifacts-list.png&w=960 960w, /img-cdn/?u=https%3A%2F%2Fraw.githubusercontent.com%2Fsap-tutorials%2Fabap-core-development%2Fmain%2Ftutorials%2Fabap-cloud-ui-from-interface%2F010-abap-artifacts-list.png&w=1440 1440w" sizes="(max-width: 640px) 100vw, (max-width: 1024px) 90vw, 1440px" alt=eclipse width=1252 height=889 loading=lazy decoding=async data-zoomable=true><figcaption class=tutorial-figcaption>eclipse</figcaption></figure></p></li><li><p>Select a transport or create a new transport and press <strong>Finish</strong> to start the generation of the repository objects.</p><p><figure class=tutorial-figure><img src="/img-cdn/?u=https%3A%2F%2Fraw.githubusercontent.com%2Fsap-tutorials%2Fabap-core-development%2Fmain%2Ftutorials%2Fabap-cloud-ui-from-interface%2F011-select-transport.png&w=1440" srcset="/img-cdn/?u=https%3A%2F%2Fraw.githubusercontent.com%2Fsap-tutorials%2Fabap-core-development%2Fmain%2Ftutorials%2Fabap-cloud-ui-from-interface%2F011-select-transport.png&w=480 480w, /img-cdn/?u=https%3A%2F%2Fraw.githubusercontent.com%2Fsap-tutorials%2Fabap-core-development%2Fmain%2Ftutorials%2Fabap-cloud-ui-from-interface%2F011-select-transport.png&w=960 960w, /img-cdn/?u=https%3A%2F%2Fraw.githubusercontent.com%2Fsap-tutorials%2Fabap-core-development%2Fmain%2Ftutorials%2Fabap-cloud-ui-from-interface%2F011-select-transport.png&w=1440 1440w" sizes="(max-width: 640px) 100vw, (max-width: 1024px) 90vw, 1440px" alt=eclipse width=1252 height=889 loading=lazy decoding=async data-zoomable=true><figcaption class=tutorial-figcaption>eclipse</figcaption></figure></p></li></ol></div><div class=step-validation-mount data-step=1></div><div class=step-actions><button class="fd-button fd-button--emphasized" data-action=mark-done data-step=1>Done</button></div></div></div><div id=step-2 class=tutorial-step data-step=2><div class=step-header data-action=toggle-step><span class=step-check-circle></span><div class=step-header-text><span class=step-label>Step 2</span>
<span class=step-title-text>Publish service and test the application</span></div><span class=step-toggle-icon>+</span></div><div class=step-body hidden><hr class=step-divider><div class=step-content><ol><li><p>When the generation process is finished a new tab with the generated Service Binding will be opened. Click <strong>Publish</strong> to publish the service binding locally. In the project explorer you can see all objects that have been generated.</p><p><figure class=tutorial-figure><img src="/img-cdn/?u=https%3A%2F%2Fraw.githubusercontent.com%2Fsap-tutorials%2Fabap-core-development%2Fmain%2Ftutorials%2Fabap-cloud-ui-from-interface%2F012-result-service-binding.png&w=1440" srcset="/img-cdn/?u=https%3A%2F%2Fraw.githubusercontent.com%2Fsap-tutorials%2Fabap-core-development%2Fmain%2Ftutorials%2Fabap-cloud-ui-from-interface%2F012-result-service-binding.png&w=480 480w, /img-cdn/?u=https%3A%2F%2Fraw.githubusercontent.com%2Fsap-tutorials%2Fabap-core-development%2Fmain%2Ftutorials%2Fabap-cloud-ui-from-interface%2F012-result-service-binding.png&w=960 960w, /img-cdn/?u=https%3A%2F%2Fraw.githubusercontent.com%2Fsap-tutorials%2Fabap-core-development%2Fmain%2Ftutorials%2Fabap-cloud-ui-from-interface%2F012-result-service-binding.png&w=1440 1440w" sizes="(max-width: 640px) 100vw, (max-width: 1024px) 90vw, 1440px" alt=result width=1714 height=556 loading=lazy decoding=async data-zoomable=true><figcaption class=tutorial-figcaption>result</figcaption></figure></p><p><figure class=tutorial-figure><img src="/img-cdn/?u=https%3A%2F%2Fraw.githubusercontent.com%2Fsap-tutorials%2Fabap-core-development%2Fmain%2Ftutorials%2Fabap-cloud-ui-from-interface%2F013-result-project-explorer.png&w=1440" srcset="/img-cdn/?u=https%3A%2F%2Fraw.githubusercontent.com%2Fsap-tutorials%2Fabap-core-development%2Fmain%2Ftutorials%2Fabap-cloud-ui-from-interface%2F013-result-project-explorer.png&w=480 480w, /img-cdn/?u=https%3A%2F%2Fraw.githubusercontent.com%2Fsap-tutorials%2Fabap-core-development%2Fmain%2Ftutorials%2Fabap-cloud-ui-from-interface%2F013-result-project-explorer.png&w=960 960w, /img-cdn/?u=https%3A%2F%2Fraw.githubusercontent.com%2Fsap-tutorials%2Fabap-core-development%2Fmain%2Ftutorials%2Fabap-cloud-ui-from-interface%2F013-result-project-explorer.png&w=1440 1440w" sizes="(max-width: 640px) 100vw, (max-width: 1024px) 90vw, 1440px" alt=result width=673 height=557 loading=lazy decoding=async data-zoomable=true><figcaption class=tutorial-figcaption>result</figcaption></figure></p></li><li><p>Select the entity set <code>ZC_BankTP</code> and click <strong>Preview</strong> or double-click on the entity set <code>ZC_BankTP</code>. This will start the SAP Fiori Elements preview.</p><p><figure class=tutorial-figure><img src="/img-cdn/?u=https%3A%2F%2Fraw.githubusercontent.com%2Fsap-tutorials%2Fabap-core-development%2Fmain%2Ftutorials%2Fabap-cloud-ui-from-interface%2F014-start-fiori-elements-preview.png&w=1440" srcset="/img-cdn/?u=https%3A%2F%2Fraw.githubusercontent.com%2Fsap-tutorials%2Fabap-core-development%2Fmain%2Ftutorials%2Fabap-cloud-ui-from-interface%2F014-start-fiori-elements-preview.png&w=480 480w, /img-cdn/?u=https%3A%2F%2Fraw.githubusercontent.com%2Fsap-tutorials%2Fabap-core-development%2Fmain%2Ftutorials%2Fabap-cloud-ui-from-interface%2F014-start-fiori-elements-preview.png&w=960 960w, /img-cdn/?u=https%3A%2F%2Fraw.githubusercontent.com%2Fsap-tutorials%2Fabap-core-development%2Fmain%2Ftutorials%2Fabap-cloud-ui-from-interface%2F014-start-fiori-elements-preview.png&w=1440 1440w" sizes="(max-width: 640px) 100vw, (max-width: 1024px) 90vw, 1440px" alt="Fiori Elements Preview" width=1597 height=514 loading=lazy decoding=async data-zoomable=true><figcaption class=tutorial-figcaption>Fiori Elements Preview</figcaption></figure></p></li><li><p>In the preview of your app press the button <strong>Create</strong> to create a new bank.</p><p><figure class=tutorial-figure><img src="/img-cdn/?u=https%3A%2F%2Fraw.githubusercontent.com%2Fsap-tutorials%2Fabap-core-development%2Fmain%2Ftutorials%2Fabap-cloud-ui-from-interface%2F015-create-new-bank.png&w=1440" srcset="/img-cdn/?u=https%3A%2F%2Fraw.githubusercontent.com%2Fsap-tutorials%2Fabap-core-development%2Fmain%2Ftutorials%2Fabap-cloud-ui-from-interface%2F015-create-new-bank.png&w=480 480w, /img-cdn/?u=https%3A%2F%2Fraw.githubusercontent.com%2Fsap-tutorials%2Fabap-core-development%2Fmain%2Ftutorials%2Fabap-cloud-ui-from-interface%2F015-create-new-bank.png&w=960 960w, /img-cdn/?u=https%3A%2F%2Fraw.githubusercontent.com%2Fsap-tutorials%2Fabap-core-development%2Fmain%2Ftutorials%2Fabap-cloud-ui-from-interface%2F015-create-new-bank.png&w=1440 1440w" sizes="(max-width: 640px) 100vw, (max-width: 1024px) 90vw, 1440px" alt=Fiori width=1854 height=651 loading=lazy decoding=async data-zoomable=true><figcaption class=tutorial-figcaption>Fiori</figcaption></figure></p></li><li><p>Enter values in the fields <strong>Bank Country / Region</strong> e.g. <code>CZ</code> and <strong>Bank Key</strong> e.g. <code>1234</code> and press <strong>Continue</strong>.</p><p><figure class=tutorial-figure><img src="/img-cdn/?u=https%3A%2F%2Fraw.githubusercontent.com%2Fsap-tutorials%2Fabap-core-development%2Fmain%2Ftutorials%2Fabap-cloud-ui-from-interface%2F016-create-new-bank.png&w=1440" srcset="/img-cdn/?u=https%3A%2F%2Fraw.githubusercontent.com%2Fsap-tutorials%2Fabap-core-development%2Fmain%2Ftutorials%2Fabap-cloud-ui-from-interface%2F016-create-new-bank.png&w=480 480w, /img-cdn/?u=https%3A%2F%2Fraw.githubusercontent.com%2Fsap-tutorials%2Fabap-core-development%2Fmain%2Ftutorials%2Fabap-cloud-ui-from-interface%2F016-create-new-bank.png&w=960 960w, /img-cdn/?u=https%3A%2F%2Fraw.githubusercontent.com%2Fsap-tutorials%2Fabap-core-development%2Fmain%2Ftutorials%2Fabap-cloud-ui-from-interface%2F016-create-new-bank.png&w=1440 1440w" sizes="(max-width: 640px) 100vw, (max-width: 1024px) 90vw, 1440px" alt=Fiori width=484 height=454 loading=lazy decoding=async data-zoomable=true><figcaption class=tutorial-figcaption>Fiori</figcaption></figure></p></li><li><p>The object page opens and you have to provide data for the remaining mandatory fields such as the <strong>Bank Name</strong>.</p><p><figure class=tutorial-figure><img src="/img-cdn/?u=https%3A%2F%2Fraw.githubusercontent.com%2Fsap-tutorials%2Fabap-core-development%2Fmain%2Ftutorials%2Fabap-cloud-ui-from-interface%2F017-create-new-bank.png&w=1440" srcset="/img-cdn/?u=https%3A%2F%2Fraw.githubusercontent.com%2Fsap-tutorials%2Fabap-core-development%2Fmain%2Ftutorials%2Fabap-cloud-ui-from-interface%2F017-create-new-bank.png&w=480 480w, /img-cdn/?u=https%3A%2F%2Fraw.githubusercontent.com%2Fsap-tutorials%2Fabap-core-development%2Fmain%2Ftutorials%2Fabap-cloud-ui-from-interface%2F017-create-new-bank.png&w=960 960w, /img-cdn/?u=https%3A%2F%2Fraw.githubusercontent.com%2Fsap-tutorials%2Fabap-core-development%2Fmain%2Ftutorials%2Fabap-cloud-ui-from-interface%2F017-create-new-bank.png&w=1440 1440w" sizes="(max-width: 640px) 100vw, (max-width: 1024px) 90vw, 1440px" alt=Fiori width=1276 height=949 loading=lazy decoding=async data-zoomable=true><figcaption class=tutorial-figcaption>Fiori</figcaption></figure></p></li></ol></div><div class=step-validation-mount data-step=2></div><div class=step-actions><button class="fd-button fd-button--emphasized" data-action=mark-done data-step=2>Done</button></div></div></div><div id=step-3 class=tutorial-step data-step=3><div class=step-header data-action=toggle-step><span class=step-check-circle></span><div class=step-header-text><span class=step-label>Step 3</span>
<span class=step-title-text>Troubleshooting</span></div><span class=step-toggle-icon>+</span></div><div class=step-body hidden><hr class=step-divider><div class=step-content><ol><li><p>When your development user does not have the authorization to create new banks you will receive the following error message: <strong>You are not authorized to create bank data for country/region CZ.</strong></p><p><figure class=tutorial-figure><img src="/img-cdn/?u=https%3A%2F%2Fraw.githubusercontent.com%2Fsap-tutorials%2Fabap-core-development%2Fmain%2Ftutorials%2Fabap-cloud-ui-from-interface%2F020-missing-authorizations.png&w=1440" srcset="/img-cdn/?u=https%3A%2F%2Fraw.githubusercontent.com%2Fsap-tutorials%2Fabap-core-development%2Fmain%2Ftutorials%2Fabap-cloud-ui-from-interface%2F020-missing-authorizations.png&w=480 480w, /img-cdn/?u=https%3A%2F%2Fraw.githubusercontent.com%2Fsap-tutorials%2Fabap-core-development%2Fmain%2Ftutorials%2Fabap-cloud-ui-from-interface%2F020-missing-authorizations.png&w=960 960w, /img-cdn/?u=https%3A%2F%2Fraw.githubusercontent.com%2Fsap-tutorials%2Fabap-core-development%2Fmain%2Ftutorials%2Fabap-cloud-ui-from-interface%2F020-missing-authorizations.png&w=1440 1440w" sizes="(max-width: 640px) 100vw, (max-width: 1024px) 90vw, 1440px" alt=result width=908 height=216 loading=lazy decoding=async data-zoomable=true><figcaption class=tutorial-figcaption>result</figcaption></figure></p></li><li><p>In order to identify the missing authorizations you can check the <strong>Knowledge Transfer Document</strong> of <code>I_BANKTP</code>. Either open it using the shortcut <strong>Ctrl+Shift+A</strong> or navigate to it in the Project Explorer as shown as shown below.</p><p><figure class=tutorial-figure><img src="/img-cdn/?u=https%3A%2F%2Fraw.githubusercontent.com%2Fsap-tutorials%2Fabap-core-development%2Fmain%2Ftutorials%2Fabap-cloud-ui-from-interface%2F022-check-own-context.png&w=1440" srcset="/img-cdn/?u=https%3A%2F%2Fraw.githubusercontent.com%2Fsap-tutorials%2Fabap-core-development%2Fmain%2Ftutorials%2Fabap-cloud-ui-from-interface%2F022-check-own-context.png&w=480 480w, /img-cdn/?u=https%3A%2F%2Fraw.githubusercontent.com%2Fsap-tutorials%2Fabap-core-development%2Fmain%2Ftutorials%2Fabap-cloud-ui-from-interface%2F022-check-own-context.png&w=960 960w, /img-cdn/?u=https%3A%2F%2Fraw.githubusercontent.com%2Fsap-tutorials%2Fabap-core-development%2Fmain%2Ftutorials%2Fabap-cloud-ui-from-interface%2F022-check-own-context.png&w=1440 1440w" sizes="(max-width: 640px) 100vw, (max-width: 1024px) 90vw, 1440px" alt=result width=447 height=324 loading=lazy decoding=async data-zoomable=true><figcaption class=tutorial-figcaption>result</figcaption></figure></p></li><li><p>As you can see the business object <code>I_BankTP</code> checks for the authorization objects <code>F_BNKA_MAO</code> and <code>F_BNKA_INT</code>.</p><p><figure class=tutorial-figure><img src="/img-cdn/?u=https%3A%2F%2Fraw.githubusercontent.com%2Fsap-tutorials%2Fabap-core-development%2Fmain%2Ftutorials%2Fabap-cloud-ui-from-interface%2F021-check-own-context.png&w=1440" srcset="/img-cdn/?u=https%3A%2F%2Fraw.githubusercontent.com%2Fsap-tutorials%2Fabap-core-development%2Fmain%2Ftutorials%2Fabap-cloud-ui-from-interface%2F021-check-own-context.png&w=480 480w, /img-cdn/?u=https%3A%2F%2Fraw.githubusercontent.com%2Fsap-tutorials%2Fabap-core-development%2Fmain%2Ftutorials%2Fabap-cloud-ui-from-interface%2F021-check-own-context.png&w=960 960w, /img-cdn/?u=https%3A%2F%2Fraw.githubusercontent.com%2Fsap-tutorials%2Fabap-core-development%2Fmain%2Ftutorials%2Fabap-cloud-ui-from-interface%2F021-check-own-context.png&w=1440 1440w" sizes="(max-width: 640px) 100vw, (max-width: 1024px) 90vw, 1440px" alt=result width=1543 height=798 loading=lazy decoding=async data-zoomable=true><figcaption class=tutorial-figcaption>result</figcaption></figure></p></li></ol></div><div class=step-validation-mount data-step=3></div><div class=step-actions><button class="fd-button fd-button--emphasized" data-action=mark-done data-step=3>Done</button></div></div></div><div id=step-4 class=tutorial-step data-step=4><div class=step-header data-action=toggle-step><span class=step-check-circle></span><div class=step-header-text><span class=step-label>Step 4</span>
<span class=step-title-text>More information</span></div><span class=step-toggle-icon>+</span></div><div class=step-body hidden><hr class=step-divider><div class=step-content><p>When you want to learn how to create authorizations please have a look at the following tutorial <a href=https://developers.sap.com/tutorials/abap-environment-authorization-control.html#603b6dda-dcfa-4b38-8734-fa03b8e70150>Providing Authorization Control for a Business Configuration Maintenance Object</a>.</p><p>When you want to trace authorization checks please make use of <em>Display Authorization Trace</em> app.</p></div><div class=step-validation-mount data-step=4></div><div class=step-actions><button class="fd-button fd-button--emphasized" data-action=mark-done data-step=4>Done</button></div></div></div><div id=step-5 class=tutorial-step data-step=5><div class=step-header data-action=toggle-step><span class=step-check-circle></span><div class=step-header-text><span class=step-label>Step 5</span>
<span class=step-title-text>Test yourself</span></div><span class=step-toggle-icon>+</span></div><div class=step-body hidden><hr class=step-divider><div class=step-content></div><div class=step-validation-mount data-step=5></div><div class=step-actions><button class="fd-button fd-button--emphasized" data-action=mark-done data-step=5>Done</button></div></div></div></div></section><section id=op-resources class=op-section data-op-section><h2 class=op-section__heading>Resources</h2><div class=next-steps><h3 class=next-steps-heading>Next Steps</h3><div class=next-steps-rail data-recommend-slug=abap-cloud-ui-from-interface><h4 class=next-steps-rail-heading>Related Tutorials</h4><div class=next-steps-grid data-recommend-target><a href=/tutorials/abap-environment-create-abapdoc class=next-steps-rail-card data-recommend-card><span class=next-steps-label>TUTORIAL</span>
<span class=next-steps-title data-recommend-title>Create ABAPDoc Comments in Your Class in ABAP Environment</span>
<span class=next-steps-meta data-recommend-meta><span class=next-steps-time-icon>⏱</span> 10 min.
</span></a><a href=/tutorials/abap-environment-create-cds-mde class=next-steps-rail-card data-recommend-card><span class=next-steps-label>TUTORIAL</span>
<span class=next-steps-title data-recommend-title>Create an ABAP Core Data Services (CDS) View in SAP BTP, ABAP Environment</span>
<span class=next-steps-meta data-recommend-meta><span class=next-steps-time-icon>⏱</span> 45 min.
</span></a><a href=/tutorials/abap-dev-create-table class=next-steps-rail-card data-recommend-card><span class=next-steps-label>TUTORIAL</span>
<span class=next-steps-title data-recommend-title>Create an ABAP Database Table and Relevant ABAP Dictionary Objects</span>
<span class=next-steps-meta data-recommend-meta><span class=next-steps-time-icon>⏱</span> 75 min.</span></a></div><template data-recommend-template><a href=/tutorials/__placeholder__ class=next-steps-rail-card data-recommend-card><span class=next-steps-label>TUTORIAL</span>
<span class=next-steps-title data-recommend-title>__placeholder__</span></a></template></div></div><div class=tutorial-nav-bottom><div class=nav-spacer></div></div></section><section id=op-discussion class=op-section data-op-section><h2 class=op-section__heading>Discussion</h2><p class=op-discussion__hint>Share feedback on this tutorial or join the conversation in SAP Community.</p><div id=tutorial-rating-mount data-slug=abap-cloud-ui-from-interface></div><div class=op-discussion__cta><ui5-button design=Default icon=discussion-2 onclick="openTutorialFeedbackPopup('abap-cloud-ui-from-interface')">Submit detailed feedback</ui5-button>
<ui5-button design=Default icon=post onclick="window.open('https://community.sap.com/t5/forums/searchpage/tab/message?q=abap-cloud-ui-from-interface', '_blank')">Discuss in Community</ui5-button></div></section></div><aside class=tutorial-right-col><aside class=tutorial-sidebar><nav class=step-toc aria-label=Steps><h4>Steps</h4><ul class=step-toc-list><li class=step-toc-item data-toc-step=1><a href=#step-1><span class=step-toc-circle>1</span>
<span class=step-toc-text><span class=step-toc-label>Step 1:</span> Find the released Business Object Interface</span></a></li><li class=step-toc-item data-toc-step=2><a href=#step-2><span class=step-toc-circle>2</span>
<span class=step-toc-text><span class=step-toc-label>Step 2:</span> Publish service and test the application</span></a></li><li class=step-toc-item data-toc-step=3><a href=#step-3><span class=step-toc-circle>3</span>
<span class=step-toc-text><span class=step-toc-label>Step 3:</span> Troubleshooting</span></a></li><li class=step-toc-item data-toc-step=4><a href=#step-4><span class=step-toc-circle>4</span>
<span class=step-toc-text><span class=step-toc-label>Step 4:</span> More information</span></a></li><li class=step-toc-item data-toc-step=5><a href=#step-5><span class=step-toc-circle>5</span>
<span class=step-toc-text><span class=step-toc-label>Step 5:</span> Test yourself</span></a></li></ul><a href=# class=step-toc-back onclick='return window.scrollTo({top:0,behavior:"smooth"}),!1'>Back to Top</a></nav></aside></aside></main></div></div><ui5-button id=op-mobile-fab design=Emphasized icon=menu2 accessible-name="Open step list">Steps</ui5-button>
<ui5-dialog id=op-mobile-sheet accessible-name="Tutorial step navigator"><div slot=header class=op-sheet__header><span id=op-sheet-title>Step <span id=op-sheet-current>1</span> of <span id=op-sheet-total>5</span></span>
<ui5-button id=op-sheet-close design=Transparent icon=decline accessible-name="Close step list"></ui5-button></div><ui5-busy-indicator id=op-mobile-busy delay=0><ui5-list id=op-mobile-step-list mode=None><ui5-li data-step-number=1 data-step-target=step-1 type=Active icon>1. Find the released Business Object Interface</ui5-li>
<ui5-li data-step-number=2 data-step-target=step-2 type=Active icon>2. Publish service and test the application</ui5-li>
<ui5-li data-step-number=3 data-step-target=step-3 type=Active icon>3. Troubleshooting</ui5-li>
<ui5-li data-step-number=4 data-step-target=step-4 type=Active icon>4. More information</ui5-li>
<ui5-li data-step-number=5 data-step-target=step-5 type=Active icon>5. Test yourself</ui5-li></ui5-list></ui5-busy-indicator><div slot=footer class=op-sheet__footer><ui5-button id=op-sheet-prev design=Transparent>Previous</ui5-button>
<ui5-button id=op-sheet-mark design=Emphasized>Mark Done</ui5-button>
<ui5-button id=op-sheet-next design=Default>Next</ui5-button></div></ui5-dialog><button id=joule-step-fab class=joule-step-fab type=button hidden aria-label="Get help with this step from Joule">
<span class="joule-mark joule-mark--small" aria-hidden=true><svg width="24" height="24" viewBox="0 0 122 120" fill="none"><path fill-rule="evenodd" clip-rule="evenodd" d="M46.6026 37C45.3357 37 44.1364 37.5715 43.3379 38.5556L24.9405 61.23C23.7324 62.7189 23.6834 64.8368 24.8211 66.3802L61.616 116.29C62.4087 117.365 63.6647 118 65 118 66.3353 118 67.5913 117.365 68.384 116.29l36.795-49.9098C106.317 64.8368 106.268 62.7189 105.06 61.23L86.6621 38.5556C85.8636 37.5715 84.6643 37 83.3974 37H46.6026zM88.3249 63.5392c-8.6819-1.4644-11.4602-8.2903-12.378-12.5595C75.8477 50.5577 75.302 50.5825 75.2276 51.0045c-1.4636 8.6874-8.2851 11.4674-12.5517 12.3858C62.2543 63.4896 62.2791 64.0357 62.7008 64.1101c8.6819 1.4645 11.4601 8.2903 12.3779 12.5596C75.178 77.0917 75.7237 77.0668 75.7981 76.6449c1.4635-8.6875 8.2851-11.4675 12.5516-12.3859C88.7714 64.1598 88.7466 63.6137 88.3249 63.5392z" fill="currentColor"/><path d="M101.542 20.3013C102.16 23.126 104.031 27.6422 109.878 28.6111 110.162 28.6604 110.179 29.0217 109.895 29.0874 107.022 29.695 102.428 31.5343 101.442 37.2822 101.392 37.5614 101.024 37.5778 100.958 37.2986 100.34 34.4739 98.4685 29.9578 92.6215 28.9888 92.3375 28.9396 92.3208 28.5783 92.6048 28.5126 95.4782 27.9049 100.072 26.0656 101.058 20.3178 101.108 20.0386 101.476 20.0222 101.542 20.3013z" fill="currentColor"/><path d="M42.2811.302036C43.1925 4.53904 45.9515 11.3133 54.5733 12.7667 54.9921 12.8406 55.0167 13.3826 54.598 13.4811c-4.237.9114-11.0113 3.6704-12.4647 12.2922C42.0594 26.1921 41.5174 26.2167 41.4189 25.798c-.9114-4.237-3.6704-11.0113-12.2922-12.4647C28.7079 13.2594 28.6833 12.7174 29.102 12.6189 33.339 11.7075 40.1133 8.94848 41.5667.326668 41.6406-.0921059 42.1826-.116738 42.2811.302036z" fill="currentColor"/><path d="M16.7874 26.3048C17.395 29.1782 19.2344 33.7722 24.9822 34.7579 25.2614 34.808 25.2778 35.1755 24.9986 35.2423 22.174 35.8604 17.6578 37.7315 16.6889 43.5784 16.6396 43.8624 16.2783 43.8791 16.2126 43.5951 15.605 40.7218 13.7657 36.1277 8.01778 35.1421 7.7386 35.092 7.72218 34.7244 8.00136 34.6576 10.826 34.0395 15.3422 32.1685 16.3111 26.3215 16.3604 26.0375 16.7217 26.0208 16.7874 26.3048z" fill="currentColor"/></svg>
</span><span class=joule-step-fab__label>Help with this step</span>
</button>
<script id=tutorial-data type=application/json>"[{\"number\":1,\"title\":\"Find the released Business Object Interface\"},{\"number\":2,\"title\":\"Publish service and test the application\"},{\"number\":3,\"title\":\"Troubleshooting\"},{\"number\":4,\"title\":\"More information\"},{\"number\":5,\"title\":\"Test yourself\",\"validation\":[{\"correctAnswer\":\"Interface CDS view.\",\"id\":\"validate-5\",\"options\":[\"Table.\",\"Interface CDS view.\",\"Projection CDS view.\"],\"question\":\"Which is the starting point of this generator to generate a custom UI? Choose one answer only.\",\"type\":\"multiple-choice\"}]}]"</script><script src=/js/tutorial.js defer></script><script type=module src=/js/nav-dropdown.js></script><script type=module src=/js/tutorial-rating.js defer></script><script type=module>
const tabs = document.getElementById('op-anchor');
const sections = Array.from(document.querySelectorAll('[data-op-section]'));
if (tabs && sections.length) {
tabs.addEventListener('tab-select', (e) => {
const t = e.detail.tab;
const id = t?.dataset?.section;
if (!id) return;
const target = document.getElementById('op-' + id);
if (target) target.scrollIntoView({ behavior: 'smooth', block: 'start' });
});
const tabBySection = new Map();
tabs.querySelectorAll('ui5-tab').forEach(t => tabBySection.set(t.dataset.section, t));
let active = null;
const io = new IntersectionObserver((entries) => {
const visible = entries.filter(e => e.isIntersecting)
.sort((a, b) => a.boundingClientRect.top - b.boundingClientRect.top);
if (!visible.length) return;
const id = visible[0].target.id.replace(/^op-/, '');
if (id === active) return;
active = id;
tabBySection.forEach((tab, key) => {
if (key === id) tab.setAttribute('selected', '');
else tab.removeAttribute('selected');
});
}, { rootMargin: '-160px 0px -50% 0px', threshold: 0 });
sections.forEach(s => io.observe(s));
}
function updateRing() {
const ring = document.getElementById('op-progress-ring');
const label = document.getElementById('op-progress-label');
const wrap = document.getElementById('op-progress');
if (!ring || !label || !wrap) return;
const total = parseInt(wrap.dataset.stepCount || '0', 10) || 0;
const completed = document.querySelectorAll('.tutorial-step.completed').length;
const pct = total ? Math.round((completed / total) * 100) : 0;
ring.style.setProperty('--pct', String(pct));
label.textContent = `${completed}/${total}`;
}
const stepsRoot = document.querySelector('.tutorial-steps');
if (stepsRoot) {
new MutationObserver(updateRing).observe(stepsRoot, { subtree: true, attributes: true, attributeFilter: ['class'] });
}
setTimeout(updateRing, 250);
const wizard = document.getElementById('op-step-wizard');
if (wizard) {
let isProgrammaticScroll = false;
let scrollTimer = null;
wizard.addEventListener('step-change', (e) => {
if (isProgrammaticScroll) return;
const step = e.detail?.step;
const targetId = step?.dataset?.stepTarget;
if (!targetId) return;
const anchor = document.getElementById(targetId);
if (!anchor) return;
isProgrammaticScroll = true;
anchor.scrollIntoView({ behavior: 'smooth', block: 'start' });
clearTimeout(scrollTimer);
scrollTimer = setTimeout(() => { isProgrammaticScroll = false; }, 800);
});
const wizardSteps = new Map();
wizard.querySelectorAll('ui5-wizard-step').forEach(ws => {
const target = ws.dataset.stepTarget;
if (target) wizardSteps.set(target, ws);
});
function syncCompletion() {
wizardSteps.forEach((ws, targetId) => {
const stepEl = document.getElementById(targetId);
if (stepEl?.classList.contains('completed')) ws.setAttribute('icon', 'complete');
else ws.removeAttribute('icon');
});
}
if (stepsRoot) {
new MutationObserver(syncCompletion).observe(stepsRoot, {
subtree: true, attributes: true, attributeFilter: ['class']
});
}
setTimeout(syncCompletion, 250);
}
const fab = document.getElementById("op-mobile-fab");
const sheet = document.getElementById("op-mobile-sheet");
const list = document.getElementById("op-mobile-step-list");
const busy = document.getElementById("op-mobile-busy");
const closeBtn = document.getElementById("op-sheet-close");
const prevBtn = document.getElementById("op-sheet-prev");
const nextBtn = document.getElementById("op-sheet-next");
const markBtn = document.getElementById("op-sheet-mark");
const currentLabel = document.getElementById("op-sheet-current");
const opWizard = document.getElementById("op-step-wizard");
const reduceMotion = window.matchMedia("(prefers-reduced-motion: reduce)").matches;
const SCROLL_DELAY = reduceMotion ? 0 : 400;
const tutorialSlug =
document.querySelector("#progress-bar")?.getAttribute("data-slug") ||
document.querySelector("#tutorial-rating-mount")?.getAttribute("data-slug") ||
"";
function getStepCount() {
return list?.querySelectorAll("ui5-li").length || 0;
}
function getCurrentStepFromWizard() {
if (!opWizard) return 1;
const steps = Array.from(opWizard.querySelectorAll("ui5-wizard-step"));
const idx = steps.findIndex((s) => s.hasAttribute("selected"));
return idx >= 0 ? idx + 1 : 1;
}
function getCurrentStepFromViewport() {
const sections = Array.from(document.querySelectorAll(".tutorial-step"));
if (!sections.length) return 1;
const center = window.innerHeight / 2;
let bestIdx = 0;
let bestDist = Infinity;
sections.forEach((el, i) => {
const rect = el.getBoundingClientRect();
if (rect.bottom < 0 || rect.top > window.innerHeight) return;
const dist = Math.abs(rect.top - center);
if (dist < bestDist) {
bestDist = dist;
bestIdx = i;
}
});
return bestIdx + 1;
}
function getCurrentStep() {
return opWizard ? getCurrentStepFromWizard() : getCurrentStepFromViewport();
}
function setBoundaryDisabled(current, total) {
if (prevBtn) prevBtn.disabled = current <= 1;
if (nextBtn) nextBtn.disabled = current >= total;
}
function syncListFromDom() {
if (!list) return;
const total = getStepCount();
const current = getCurrentStep();
const completed = new Set(
Array.from(document.querySelectorAll(".tutorial-step.completed")).map((el) =>
Number(el.dataset.step || el.id.replace(/^step-/, "")),
),
);
list.querySelectorAll("ui5-li").forEach((li) => {
const n = Number(li.dataset.stepNumber);
li.toggleAttribute("selected", n === current);
if (completed.has(n)) li.setAttribute("icon", "accept");
else li.removeAttribute("icon");
});
if (currentLabel) currentLabel.textContent = String(current);
setBoundaryDisabled(current, total);
}
function scrollToStep(n) {
const el = document.getElementById(`step-${n}`);
if (!el) return false;
el.scrollIntoView({ behavior: reduceMotion ? "auto" : "smooth", block: "start" });
return true;
}
function openSheet() {
if (!sheet) return;
syncListFromDom();
sheet.setAttribute("open", "");
}
function closeSheet() {
sheet?.removeAttribute("open");
}
fab?.addEventListener("click", openSheet);
closeBtn?.addEventListener("click", closeSheet);
list?.addEventListener("item-click", (e) => {
const item = e.detail?.item;
const n = Number(item?.dataset?.stepNumber);
if (!n || !scrollToStep(n)) return;
if (busy) busy.active = true;
setTimeout(() => {
if (busy) busy.active = false;
closeSheet();
}, SCROLL_DELAY);
});
prevBtn?.addEventListener("click", () => {
const current = getCurrentStep();
if (current <= 1) return;
if (scrollToStep(current - 1)) {
requestAnimationFrame(() => requestAnimationFrame(syncListFromDom));
}
});
nextBtn?.addEventListener("click", () => {
const current = getCurrentStep();
const total = getStepCount();
if (current >= total) return;
if (scrollToStep(current + 1)) {
requestAnimationFrame(() => requestAnimationFrame(syncListFromDom));
}
});
markBtn?.addEventListener("click", () => {
const current = getCurrentStep();
if (typeof window.completeStep === "function" && tutorialSlug) {
window.completeStep(tutorialSlug, current);
syncListFromDom();
}
});
const stepObserver = new MutationObserver(() => {
if (sheet?.hasAttribute("open")) syncListFromDom();
});
const opStepsRoot = document.querySelector(".tutorial-steps");
if (opStepsRoot) stepObserver.observe(opStepsRoot, { attributes: true, subtree: true, attributeFilter: ["class"] });
if (opWizard) stepObserver.observe(opWizard, { attributes: true, subtree: true, attributeFilter: ["selected"] });
window.opGetCurrentStep = function () {
const n = getCurrentStep();
const stepEl = document.getElementById("step-" + n);
const heading = stepEl?.querySelector(".step-title-text")?.textContent?.trim() || "";
return { slug: tutorialSlug, n: n, heading: heading };
};
</script></main><style>.site-footer{display:flex;flex-wrap:wrap;gap:.5rem 1rem;align-items:center;padding:.75rem 1.5rem}.site-footer__nav{flex:auto}.site-footer__nav-list{list-style:none;margin:0;padding:0;display:flex;flex-wrap:wrap;gap:.25rem 1.25rem;align-items:center}.site-footer__nav-list a,.site-footer__nav-list button{color:inherit;text-decoration:none;font-size:.875rem;background:0 0;border:0;padding:0;cursor:pointer;font:inherit}.site-footer__nav-list a:hover,.site-footer__nav-list button:hover{text-decoration:underline}.site-footer__copyright{font-size:.8125rem;color:var(--sapNeutralTextColor,#666);flex:initial;margin-left:auto;white-space:nowrap}@media(max-width:720px){.site-footer__copyright{margin-left:0;flex-basis:100%}}</style><footer class="site-footer fd-bar fd-bar--footer" aria-label="Site information"><nav class=site-footer__nav aria-label="Site information"><ul class=site-footer__nav-list><li><a href=/privacy/>Privacy</a></li><li><a href=https://www.sap.com/about/legal/terms-of-use.html target=_blank rel="noopener noreferrer">Terms of Use</a></li><li><a href=https://www.sap.com/about/legal/impressum.html target=_blank rel="noopener noreferrer">Legal Disclosure</a></li><li><a href=https://www.sap.com/about/legal/copyright.html target=_blank rel="noopener noreferrer">Copyright</a></li><li><a href=https://www.sap.com/about/legal/trademark.html target=_blank rel="noopener noreferrer">Trademark</a></li><li><a href=https://www.sap.com/dashboard/newsletters.html target=_blank rel="noopener noreferrer">Newsletter</a></li><li><button type=button data-action=manage-cookies>Cookie Preferences</button></li></ul></nav><div class=site-footer__copyright>© 2026 SAP SE or an SAP affiliate company. All rights reserved.</div></footer><script>(function(){document.addEventListener("click",function(e){var t=e.target.closest('[data-action="manage-cookies"]');if(!t)return;e.preventDefault(),window.consent&&typeof window.consent.show=="function"&&window.consent.show()})})()</script><div id=joule-panel hidden role=dialog aria-modal=false aria-labelledby=joule-panel-title><header class=joule-panel__header><span class="joule-mark joule-mark--small" aria-hidden=true><svg width="24" height="24" viewBox="0 0 122 120" fill="none"><path fill-rule="evenodd" clip-rule="evenodd" d="M46.6026 37C45.3357 37 44.1364 37.5715 43.3379 38.5556L24.9405 61.23C23.7324 62.7189 23.6834 64.8368 24.8211 66.3802L61.616 116.29C62.4087 117.365 63.6647 118 65 118 66.3353 118 67.5913 117.365 68.384 116.29l36.795-49.9098C106.317 64.8368 106.268 62.7189 105.06 61.23L86.6621 38.5556C85.8636 37.5715 84.6643 37 83.3974 37H46.6026zM88.3249 63.5392c-8.6819-1.4644-11.4602-8.2903-12.378-12.5595C75.8477 50.5577 75.302 50.5825 75.2276 51.0045c-1.4636 8.6874-8.2851 11.4674-12.5517 12.3858C62.2543 63.4896 62.2791 64.0357 62.7008 64.1101c8.6819 1.4645 11.4601 8.2903 12.3779 12.5596C75.178 77.0917 75.7237 77.0668 75.7981 76.6449c1.4635-8.6875 8.2851-11.4675 12.5516-12.3859C88.7714 64.1598 88.7466 63.6137 88.3249 63.5392z" fill="currentColor"/><path d="M101.542 20.3013C102.16 23.126 104.031 27.6422 109.878 28.6111 110.162 28.6604 110.179 29.0217 109.895 29.0874 107.022 29.695 102.428 31.5343 101.442 37.2822 101.392 37.5614 101.024 37.5778 100.958 37.2986 100.34 34.4739 98.4685 29.9578 92.6215 28.9888 92.3375 28.9396 92.3208 28.5783 92.6048 28.5126 95.4782 27.9049 100.072 26.0656 101.058 20.3178 101.108 20.0386 101.476 20.0222 101.542 20.3013z" fill="currentColor"/><path d="M42.2811.302036C43.1925 4.53904 45.9515 11.3133 54.5733 12.7667 54.9921 12.8406 55.0167 13.3826 54.598 13.4811c-4.237.9114-11.0113 3.6704-12.4647 12.2922C42.0594 26.1921 41.5174 26.2167 41.4189 25.798c-.9114-4.237-3.6704-11.0113-12.2922-12.4647C28.7079 13.2594 28.6833 12.7174 29.102 12.6189 33.339 11.7075 40.1133 8.94848 41.5667.326668 41.6406-.0921059 42.1826-.116738 42.2811.302036z" fill="currentColor"/><path d="M16.7874 26.3048C17.395 29.1782 19.2344 33.7722 24.9822 34.7579 25.2614 34.808 25.2778 35.1755 24.9986 35.2423 22.174 35.8604 17.6578 37.7315 16.6889 43.5784 16.6396 43.8624 16.2783 43.8791 16.2126 43.5951 15.605 40.7218 13.7657 36.1277 8.01778 35.1421 7.7386 35.092 7.72218 34.7244 8.00136 34.6576 10.826 34.0395 15.3422 32.1685 16.3111 26.3215 16.3604 26.0375 16.7217 26.0208 16.7874 26.3048z" fill="currentColor"/></svg></span><h2 id=joule-panel-title class=joule-panel__title>Joule</h2><button type=button class=joule-panel__icon-btn data-action=expand aria-label=Expand>
<svg viewBox="0 0 16 16" aria-hidden="true"><path d="M2 2h5v2H4v3H2zM9 2h5v5h-2V4H9zM2 9h2v3h3v2H2zM12 9h2v5H9v-2h3z"/></svg>
</button>
<button type=button class=joule-panel__icon-btn data-action=overflow aria-label="More options" aria-haspopup=menu aria-expanded=false aria-controls=joule-panel-overflow>
<svg viewBox="0 0 16 16" aria-hidden="true"><circle cx="3" cy="8" r="1.4"/><circle cx="8" cy="8" r="1.4"/><circle cx="13" cy="8" r="1.4"/></svg>
</button>
<button type=button class="joule-panel__icon-btn joule-panel__close" aria-label=Close>
<svg viewBox="0 0 16 16" aria-hidden="true"><path d="M3 3l10 10M13 3 3 13" stroke="currentColor" stroke-width="2" fill="none" stroke-linecap="round"/></svg></button></header><div class=joule-panel__overflow id=joule-panel-overflow hidden role=menu><button type=button role=menuitem data-overflow=clear>Clear chat</button>
<button type=button role=menuitem data-overflow=ai-notice>AI Notice</button></div><section class=joule-panel__banner hidden></section><div class=joule-panel__body><section class=joule-panel__hero><div class=joule-panel__hero-mark><span class="joule-mark joule-mark--large" aria-hidden=true><svg width="64" height="64" viewBox="0 0 122 120" fill="none"><path fill-rule="evenodd" clip-rule="evenodd" d="M46.6026 37C45.3357 37 44.1364 37.5715 43.3379 38.5556L24.9405 61.23C23.7324 62.7189 23.6834 64.8368 24.8211 66.3802L61.616 116.29C62.4087 117.365 63.6647 118 65 118 66.3353 118 67.5913 117.365 68.384 116.29l36.795-49.9098C106.317 64.8368 106.268 62.7189 105.06 61.23L86.6621 38.5556C85.8636 37.5715 84.6643 37 83.3974 37H46.6026zM88.3249 63.5392c-8.6819-1.4644-11.4602-8.2903-12.378-12.5595C75.8477 50.5577 75.302 50.5825 75.2276 51.0045c-1.4636 8.6874-8.2851 11.4674-12.5517 12.3858C62.2543 63.4896 62.2791 64.0357 62.7008 64.1101c8.6819 1.4645 11.4601 8.2903 12.3779 12.5596C75.178 77.0917 75.7237 77.0668 75.7981 76.6449c1.4635-8.6875 8.2851-11.4675 12.5516-12.3859C88.7714 64.1598 88.7466 63.6137 88.3249 63.5392z" fill="currentColor"/><path d="M101.542 20.3013C102.16 23.126 104.031 27.6422 109.878 28.6111 110.162 28.6604 110.179 29.0217 109.895 29.0874 107.022 29.695 102.428 31.5343 101.442 37.2822 101.392 37.5614 101.024 37.5778 100.958 37.2986 100.34 34.4739 98.4685 29.9578 92.6215 28.9888 92.3375 28.9396 92.3208 28.5783 92.6048 28.5126 95.4782 27.9049 100.072 26.0656 101.058 20.3178 101.108 20.0386 101.476 20.0222 101.542 20.3013z" fill="currentColor"/><path d="M42.2811.302036C43.1925 4.53904 45.9515 11.3133 54.5733 12.7667 54.9921 12.8406 55.0167 13.3826 54.598 13.4811c-4.237.9114-11.0113 3.6704-12.4647 12.2922C42.0594 26.1921 41.5174 26.2167 41.4189 25.798c-.9114-4.237-3.6704-11.0113-12.2922-12.4647C28.7079 13.2594 28.6833 12.7174 29.102 12.6189 33.339 11.7075 40.1133 8.94848 41.5667.326668 41.6406-.0921059 42.1826-.116738 42.2811.302036z" fill="currentColor"/><path d="M16.7874 26.3048C17.395 29.1782 19.2344 33.7722 24.9822 34.7579 25.2614 34.808 25.2778 35.1755 24.9986 35.2423 22.174 35.8604 17.6578 37.7315 16.6889 43.5784 16.6396 43.8624 16.2783 43.8791 16.2126 43.5951 15.605 40.7218 13.7657 36.1277 8.01778 35.1421 7.7386 35.092 7.72218 34.7244 8.00136 34.6576 10.826 34.0395 15.3422 32.1685 16.3111 26.3215 16.3604 26.0375 16.7217 26.0208 16.7874 26.3048z" fill="currentColor"/></svg></span></div><p class=joule-panel__hero-greeting data-default-greeting="Hello, How can I help you?"></p><div class=joule-panel__starters role=list></div></section><section class=joule-panel__chat hidden><div class=joule-panel__transcript aria-live=polite></div></section></div><section class=joule-panel__ai-notice hidden aria-labelledby=joule-ai-notice-title><header class=joule-panel__ai-notice-header><button type=button class=joule-panel__icon-btn data-action=ai-notice-back aria-label=Back>
<svg viewBox="0 0 16 16" aria-hidden="true"><path d="M10 2 4 8l6 6" stroke="currentColor" stroke-width="2" fill="none" stroke-linecap="round" stroke-linejoin="round"/></svg></button><h3 id=joule-ai-notice-title>AI Notice</h3></header><div class=joule-panel__ai-notice-body><p>Joule is an AI assistant. Generative AI may produce inaccurate, incomplete, or biased information. Always verify important details before acting on them.</p><p>Conversations are sent to SAP-hosted large language models for processing. Do not include personal data, credentials, or confidential information in your messages.</p><p>Joule's responses are based on the SAP tutorial catalog and may not reflect the latest product changes. For authoritative guidance, consult the linked tutorials and official SAP documentation.</p></div></section><footer class=joule-panel__footer><form class=joule-panel__form autocomplete=off><input class=joule-panel__input name=message type=text placeholder="Message Joule" aria-label="Message Joule">
<button type=submit class=joule-panel__send aria-label=Send>
<svg viewBox="0 0 24 24" aria-hidden="true"><path d="M3 11.5 21 3l-8.5 18-2.5-8z" fill="currentColor"/></svg></button></form><p class=joule-panel__disclaimer>Joule uses AI. Verify results.</p></footer></div><script id=joule-starters type=application/json>{"tutorial":["Summarize this tutorial in 3 bullets.","What do I need before I start?","I'm stuck on the current step — help me debug."],"tutorial-step":["I'm stuck on Step {n}: {heading}.","Explain Step {n} in simpler terms.","What should I check before moving to the next step?"],"search":["Find me a CAP getting-started tutorial.","Show me ABAP Cloud tutorials for beginners.","What missions cover SAP BTP?"],"mission":["Explain this mission's path.","Which tutorial should I do first?","What skills will I have after completing this?"],"group":["What's in this group?","Suggest a learning order.","What's the next group after this one?"],"generic":["What's new in SAP BTP?","Help me find a tutorial.","Explain CAP in 30 seconds."]}</script><div id=cmd-palette></div><ui5-popover id=glossary-popover placement=Bottom hide-arrow class=glossary-popover><div class=glossary-popover__body><div class=glossary-popover__term></div><p class=glossary-popover__definition></p><a class=glossary-popover__link target=_blank rel=noopener>Learn more →</a></div></ui5-popover><script>window.__glossary={terms:{ABAP:{definition:"SAP's proprietary language for business logic — modern ABAP Cloud enforces clean-core principles.",link:"https://help.sap.com/docs/abap-cloud",term:"Advanced Business Application Programming"},ADT:{definition:"Eclipse-based IDE for ABAP and ABAP Cloud development on S/4HANA and BTP ABAP environment.",link:"https://help.sap.com/docs/abap-cloud/abap-development-tools-user-guide",term:"ABAP Development Tools"},ATC:{definition:"ABAP's static analysis and code-quality tool — gates ABAP Cloud transports against clean-core rules.",link:"https://help.sap.com/docs/abap-cloud/abap-development-tools-user-guide/abap-test-cockpit",term:"ABAP Test Cockpit"},AppRouter:{definition:"Edge service that handles XSUAA login, token forwarding, and routing to backend services on BTP.",link:"https://www.npmjs.com/package/@sap/approuter",term:"SAP Application Router"},BAS:{definition:"BTP-hosted cloud IDE for SAP development — CAP, Fiori, ABAP, integration, mobile.",link:"https://help.sap.com/docs/bas",term:"SAP Business Application Studio"},BTP:{definition:"SAP's unified cloud platform for building, extending, and integrating applications.",link:"https://www.sap.com/products/technology-platform.html",term:"SAP Business Technology Platform"},CAP:{definition:"Framework of languages, libraries, and tools for building enterprise services with CDS.",link:"https://cap.cloud.sap",term:"SAP Cloud Application Programming Model"},CDS:{definition:"SAP's modeling language for data, services, and UI annotations — the heart of CAP.",link:"https://cap.cloud.sap/docs/cds/",term:"Core Data Services"},CF:{definition:"One of the BTP runtime environments; the platform-as-a-service layer where most CAP apps deploy.",link:"https://help.sap.com/docs/btp/sap-business-technology-platform/cloud-foundry-environment",term:"Cloud Foundry"},CQL:{definition:"CAP's typed query language — superset of SQL with associations, paths, and projections.",link:"https://cap.cloud.sap/docs/cds/cql",term:"Core Data Services Query Language"},CSN:{definition:"JSON representation of a compiled CDS model — what CAP runtimes consume at runtime.",link:"https://cap.cloud.sap/docs/cds/csn",term:"Core Schema Notation"},Fiori:{definition:"SAP's design system and UX framework for consistent, role-based business applications.",link:"https://experience.sap.com/fiori-design/",term:"SAP Fiori"},HANA:{definition:`SAP's columnar in-memory database; "HANA Cloud" is the managed BTP offering.`,link:"https://www.sap.com/products/technology-platform/hana.html",term:"SAP HANA"},HDB:{definition:"The HANA in-memory database engine itself — `hdb` is also the name of the Node.js driver.",link:"https://help.sap.com/docs/hana-cloud-database",term:"SAP HANA Database"},HDI:{definition:"Schema-isolated container model for deploying database artifacts to SAP HANA Cloud.",link:"https://help.sap.com/docs/hana-cloud-database/sap-hana-cloud-sap-hana-database-developer-guide-for-cloud-foundry-multitarget-applications-sap-business-application-studio/sap-hana-deployment-infrastructure-hdi",term:"HANA Deployment Infrastructure"},IAS:{definition:"SAP's standalone IdP for SAML/OIDC authentication; replaces or complements the XSUAA tenant IdP.",link:"https://help.sap.com/docs/identity-authentication",term:"SAP Cloud Identity Services — Identity Authentication"},IDP:{definition:"A trusted service that authenticates users and issues identity assertions (SAML/OIDC).",link:"https://en.wikipedia.org/wiki/Identity_provider",term:"Identity Provider"},JWT:{definition:"Compact, signed token format used by XSUAA and IAS to carry identity and scope claims.",link:"https://jwt.io/introduction",term:"JSON Web Token"},Kyma:{definition:"BTP's managed Kubernetes runtime — Kyma adds serverless, eventing, and service mesh on top of K8s.",link:"https://help.sap.com/docs/btp/sap-business-technology-platform/kyma-environment",term:"SAP BTP Kyma Runtime"},MTA:{definition:"Deployment archive format that bundles BTP modules, services, and resources into one unit.",link:"https://help.sap.com/docs/btp/sap-business-technology-platform/multitarget-applications-in-cloud-foundry-environment",term:"Multitarget Application"},MTX:{definition:"CAP's framework (@sap/cds-mtxs) for SaaS subscription, tenant isolation, and tenant-specific extensions.",link:"https://cap.cloud.sap/docs/guides/multitenancy/",term:"Multitenancy and Extensibility"},OAuth:{definition:"Authorization framework for delegated access — XSUAA and IAS issue OAuth bearer tokens (JWTs).",link:"https://oauth.net/2/",term:"OAuth 2.0"},OData:{definition:"REST-based protocol for queryable APIs, used as CAP's default service protocol.",link:"https://www.odata.org/",term:"Open Data Protocol"},OIDC:{definition:"Identity layer on top of OAuth 2.0 — adds an ID token for authentication on top of access tokens.",link:"https://openid.net/connect/",term:"OpenID Connect"},ORD:{definition:"SAP's open standard for describing and discovering APIs, events, and data products across systems.",link:"https://open-resource-discovery.github.io/specification/",term:"Open Resource Discovery"},PaaS:{definition:"Cloud model where the platform manages runtimes and services — BTP is SAP's PaaS offering.",link:"https://www.sap.com/products/technology-platform.html",term:"Platform as a Service"},RAP:{definition:"ABAP-side programming model for building Fiori apps and OData services on S/4HANA and BTP ABAP.",link:"https://help.sap.com/docs/abap-cloud/abap-rap/abap-restful-application-programming-model",term:"ABAP RESTful Application Programming Model"},"S/4HANA":{definition:`SAP's flagship ERP suite running on the HANA database; "Cloud" and "on-premise" editions share core APIs.`,link:"https://www.sap.com/products/erp/s4hana.html",term:"SAP S/4HANA"},SAPUI5:{definition:"Licensed enterprise edition of UI5 with additional controls; OpenUI5 is the open-source subset.",link:"https://sapui5.hana.ondemand.com/",term:"SAPUI5"},SaaS:{definition:"Multi-tenant cloud delivery model — CAP supports SaaS via the MTX (multi-tenancy extension) layer.",link:"https://help.sap.com/docs/btp/sap-business-technology-platform/develop-multitenant-saas-applications-in-cloud-foundry-environment",term:"Software as a Service"},UI5:{definition:"SAP's enterprise JavaScript framework for building Fiori apps; ui5-webcomponents is its successor for embedding.",link:"https://sapui5.hana.ondemand.com/",term:"SAPUI5 / OpenUI5"},XSUAA:{definition:"BTP's identity and authorization service — issues JWTs, manages scopes and role collections.",link:"https://help.sap.com/docs/btp/sap-business-technology-platform/authorization-and-trust-management-service-in-cloud-foundry-environment",term:"Extended Services for User Account and Authentication"}}}</script><ui5-toast id=step-toast placement=BottomCenter></ui5-toast><ui5-dialog id=image-lightbox accessible-name="Image viewer" class=lightbox-dialog><div slot=header class=lightbox-header><ui5-title level=H4 class=lightbox-title></ui5-title><ui5-button icon=decline design=Transparent class=lightbox-close tooltip=Close></ui5-button></div><div class=lightbox-viewport data-lightbox-viewport><div class=lightbox-rail><img class="lightbox-img lightbox-img--current" alt>
<img class="lightbox-img lightbox-img--incoming" alt hidden></div></div><div slot=footer class=lightbox-footer><ui5-button icon=navigation-left-arrow design=Transparent class=lightbox-prev tooltip=Previous></ui5-button><ui5-button icon=zoom-out design=Transparent class=lightbox-zoom-out tooltip="Zoom out"></ui5-button><span class=lightbox-zoom-level aria-live=polite>100%</span>
<ui5-button icon=zoom-in design=Transparent class=lightbox-zoom-in tooltip="Zoom in"></ui5-button><ui5-button icon=reset design=Transparent class=lightbox-reset tooltip="Reset zoom"></ui5-button><ui5-button icon=download design=Transparent class=lightbox-download tooltip="Download image"></ui5-button><ui5-button icon=navigation-right-arrow design=Transparent class=lightbox-next tooltip=Next></ui5-button></div></ui5-dialog><script defer src=/js/consent.js></script><script defer src=/js/vendor/markdown-it.min.js></script><script defer src=/js/vendor/purify.min.js></script><script defer src=/js/joule-render.js></script><script src=/js/joule.js defer></script><script src=/js/cmd-palette.js defer type=module></script><script type=module src=/js/ui5-bootstrap.js></script></body></html>