https://raw.githubusercontent.com/ajmaradiaga/feeds/main/scmt/topics/SAP-BTP-Kyma-runtime-blog-posts.xmlSAP Community - SAP BTP, Kyma runtime2025-04-24T05:00:29.981652+00:00python-feedgenSAP BTP, Kyma runtime blog posts in SAP Communityhttps://community.sap.com/t5/technology-blogs-by-sap/sap-btp-kyma-headless-kubeconfig-with-sap-cloud-identity-services-and-kyma/ba-p/13766809SAP BTP Kyma headless kubeconfig with SAP Cloud Identity Services and kyma environment bindings2024-12-22T16:18:44.853000+01:00quovadishttps://community.sap.com/t5/user/viewprofilepage/user-id/743<H2 id="toc-hId-1020354092">Implementing SAP Kyma headless kubeconfig with</H2><UL><LI>a custom SAP Cloud Identity Services as SAP Kyma cluster OIDC provider</LI><LI>kymaruntime environment service bindings</LI></UL><P>Let's see how...</P><H3 id="toc-hId-952923306">Table of Contents</H3><UL><LI><A href="https://dev.to/quovadis/sap-btp-kyma-blueprints-2cjf#oidc-kubeconfig" target="_blank" rel="noopener nofollow noreferrer">kubeconfig with the authorization-code authentication flow.</A></LI><LI><A href="https://dev.to/quovadis/sap-btp-kyma-blueprints-2cjf#headless-kubeconfig" target="_blank" rel="noopener nofollow noreferrer">kubeconfig with the password grant type authentication flow</A></LI><LI><A href="https://dev.to/quovadis/sap-btp-kyma-blueprints-2cjf#service-bindings-kubeconfig" target="_blank" rel="noopener nofollow noreferrer">kubeconfig with kyma runtime environment service bindings</A></LI><LI><P><A href="https://dev.to/quovadis/sap-btp-kyma-blueprints-2cjf#additional-resource" target="_blank" rel="noopener nofollow noreferrer">References</A></P></LI></UL><div class="lia-spoiler-container"><a class="lia-spoiler-link" href="#" rel="nofollow noopener noreferrer">Spoiler</a><noscript> (Highlight to read)</noscript><div class="lia-spoiler-border"><div class="lia-spoiler-content"><A href="https://dev.to/quovadis/sap-btp-kyma-blueprints-2cjf" target="_blank" rel="noopener nofollow noreferrer">https://dev.to/quovadis/sap-btp-kyma-blueprints-2cjf</A><BR /><BR /><P>Let me help break down this comprehensive information about SAP BTP Kyma kubeconfig authentication methods.<BR /><BR />Let's understand each approach and their specific use cases.</P><P>The three main authentication methods for Kyma kubeconfig are:</P><P>1. Authorization Code Flow (OIDC)<BR />This is the standard approach for interactive users. It requires individual users to be defined in the SAP ID tenant and have appropriate RBAC cluster-admin role bindings. While this method works well for direct user interaction, it isn't suitable for automated processes since it requires manual authentication.</P><P>2. Password Grant Type Flow<BR />This method is designed for headless environments like CI/CD pipelines or automated workflows. It requires:<BR />- A custom SAP Cloud Identity Service tenant<BR />- A public client OIDC application<BR />- A technical user with credentials stored securely<BR />- The configuration uses a bash script to obtain tokens automatically</P><P>3. Kyma Runtime Environment Service Bindings<BR />This approach provides service account tokens during the Kyma runtime environment provisioning.<BR />Key points:<BR />- Requires a cis-local plan Cloud Management service instance<BR />- Tokens are obtained through the SAP Provisioning Service environment bindings API<BR />- Provides the simplest configuration but requires proper setup of the environment binding</P><P>For implementing automated workflows, the Password Grant Type Flow offers the most flexibility while maintaining security through technical user credentials. The Kyma Runtime Environment Service Bindings approach is ideal when working directly with the provisioning process.</P><P>Let me know if you'd like me to elaborate on any of these authentication methods or their specific implementation details.<BR /><BR /></P></div><noscript><div class="lia-spoiler-noscript-container"><div class="lia-spoiler-noscript-content">https://dev.to/quovadis/sap-btp-kyma-blueprints-2cjfLet me help break down this comprehensive information about SAP BTP Kyma kubeconfig authentication methods.Let's understand each approach and their specific use cases.The three main authentication methods for Kyma kubeconfig are:1. Authorization Code Flow (OIDC)This is the standard approach for interactive users. It requires individual users to be defined in the SAP ID tenant and have appropriate RBAC cluster-admin role bindings. While this method works well for direct user interaction, it isn't suitable for automated processes since it requires manual authentication.2. Password Grant Type FlowThis method is designed for headless environments like CI/CD pipelines or automated workflows. It requires:- A custom SAP Cloud Identity Service tenant- A public client OIDC application- A technical user with credentials stored securely- The configuration uses a bash script to obtain tokens automatically3. Kyma Runtime Environment Service BindingsThis approach provides service account tokens during the Kyma runtime environment provisioning.Key points:- Requires a cis-local plan Cloud Management service instance- Tokens are obtained through the SAP Provisioning Service environment bindings API- Provides the simplest configuration but requires proper setup of the environment bindingFor implementing automated workflows, the Password Grant Type Flow offers the most flexibility while maintaining security through technical user credentials. The Kyma Runtime Environment Service Bindings approach is ideal when working directly with the provisioning process.Let me know if you'd like me to elaborate on any of these authentication methods or their specific implementation details.</div></div></noscript></div></div><P><A title="SAP BTP Kyma blueprints" href="https://dev.to/quovadis/sap-btp-kyma-blueprints-2cjf" target="_blank" rel="noopener nofollow noreferrer"><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="293414_GettyImages-78724113_small_jpg.jpg" style="width: 724px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/204327i65BBD832167E08C4/image-size/large?v=v2&px=999" role="button" title="293414_GettyImages-78724113_small_jpg.jpg" alt="293414_GettyImages-78724113_small_jpg.jpg" /></span></A></P><div class="lia-spoiler-container"><a class="lia-spoiler-link" href="#" rel="nofollow noopener noreferrer">Spoiler</a><noscript> (Highlight to read)</noscript><div class="lia-spoiler-border"><div class="lia-spoiler-content"><P>Let me explain the Password Grant Type authentication flow for SAP BTP Kyma in detail.</P><P> </P><P>```hcl<BR /># First, set up the Identity Application entitlement in your subaccount<BR />resource "btp_subaccount_entitlement" "identity_application" {<BR />subaccount_id = data.btp_subaccount.context.id<BR />service_name = "identity"<BR />plan_name = "application"<BR />}</P><P># Reference the service plan for the identity application<BR />data "btp_subaccount_service_plan" "identity_application" {<BR />depends_on = [btp_subaccount_entitlement.identity_application]<BR />subaccount_id = data.btp_subaccount.context.id<BR />offering_name = "identity"<BR />name = "application"<BR />}</P><P># Create the Identity Application service instance with specific OAuth2 configuration<BR />resource "btp_subaccount_service_instance" "identity_application" {<BR />depends_on = [btp_subaccount_trust_configuration.custom_idp]<BR />subaccount_id = data.btp_subaccount.context.id<BR />name = "ias-local"<BR />serviceplan_id = data.btp_subaccount_service_plan.identity_application.id</P><P># Detailed configuration for the Identity Application<BR />parameters = jsonencode({<BR /># Set access to public for broader accessibility<BR />user-access = "public"<BR /><BR /># OAuth2 configuration specifying allowed grant types and token policies<BR />oauth2-configuration = {<BR />grant-types = [<BR />"authorization_code",<BR />"authorization_code_pkce_s256",<BR />"password", # Enable password grant type for headless authentication<BR />"refresh_token"<BR />],<BR />token-policy = {<BR />token-validity = 3600, # Access token valid for 1 hour<BR />refresh-validity = 15552000, # Refresh token valid for 180 days<BR />refresh-usage-after-renewal = "off",<BR />refresh-parallel = 3,<BR />access-token-format = "default"<BR />},<BR />public-client = true, # Enable public client mode<BR />redirect-uris = [<BR />"<A href="https://dashboard.kyma.cloud.sap" target="_blank" rel="noopener nofollow noreferrer">https://dashboard.kyma.cloud.sap</A>",<BR />"<A href="http://localhost:8000" target="_blank" rel="noopener nofollow noreferrer">http://localhost:8000</A>"<BR />]<BR />},<BR /><BR /># Configure how user identifiers are determined<BR />subject-name-identifier = {<BR />attribute = "mail",<BR />fallback-attribute = "none"<BR />},<BR /><BR /># Map assertion attributes to specific user properties<BR />assertion-attributes = {<BR />email = "mail",<BR />groups = "companyGroups",<BR />first_name = "firstName",<BR />last_name = "lastName",<BR />login_name = "loginName",<BR />mail = "mail",<BR />scope = "companyGroups",<BR />user_uuid = "userUuid",<BR />locale = "language"<BR />},<BR /><BR /># Set the application name using variables<BR />name = "${var.BTP_KYMA_NAME}-${var.BTP_KYMA_PLAN}-${data.btp_subaccount.context.id}",<BR />display-name = "${var.BTP_KYMA_NAME}-${var.BTP_KYMA_PLAN}"<BR />})<BR />}</P><P>```</P><P>The Password Grant Type authentication flow is designed specifically for non-interactive, automated scenarios. Let me break down how it works and why each component is important:</P><P>The Setup Process:</P><P>1. Custom Identity Service Setup<BR />- You need to create a custom SAP Cloud Identity Service (IAS) tenant rather than using the default SAP ID Service<BR />- This gives you more control over authentication policies and user management<BR />- The service instance is configured as a public client, which is crucial for the password grant flow</P><P>2. OAuth2 Configuration<BR />- The setup enables multiple grant types, but specifically includes the "password" grant<BR />- Token policies are configured with specific validities:<BR />- Access tokens last for 1 hour (3600 seconds)<BR />- Refresh tokens last for 180 days (15552000 seconds)<BR />- The public client setting eliminates the need for client secrets</P><P>3. User Attribute Mapping<BR />- The configuration maps various user attributes (email, groups, name, etc.)<BR />- This mapping ensures that Kubernetes RBAC can properly identify and authorize users<BR />- The "mail" attribute serves as the primary identifier for users</P><P>Using the Authentication:</P><P>When this is set up, your automated processes can authenticate using a technical user's credentials. Here's how it works:</P><P>1. The process makes a POST request to the IAS token endpoint<BR />2. It provides:<BR />- The technical user's username and password<BR />- The client ID of your IAS application<BR />- The required scopes (typically "groups" and "email")<BR />3. The IAS service returns an ID token<BR />4. This token is then used for Kubernetes authentication</P><P>Security Considerations:</P><P>1. Technical User Management<BR />- Create a dedicated technical user in your IAS tenant<BR />- Assign minimum required permissions through groups<BR />- Regularly rotate the password<BR />- Store credentials in a secure vault or secret management system</P><P>2. Token Handling<BR />- Never log or expose the tokens<BR />- Implement proper error handling for token expiration<BR />- Use refresh tokens when appropriate to minimize password usage</P><P>3. Access Control<BR />- Implement proper RBAC policies in Kubernetes<BR />- Regularly audit access patterns<BR />- Monitor for suspicious authentication attempts</P><P>This authentication method is particularly useful for:<BR />- CI/CD pipelines<BR />- Automated deployment scripts<BR />- Monitoring systems<BR />- Backup solutions<BR />- Any other headless processes that need to interact with your Kyma cluster</P><P>Would you like me to elaborate on any particular aspect of this setup, such as the technical user creation process or specific security best practices?</P></div><noscript><div class="lia-spoiler-noscript-container"><div class="lia-spoiler-noscript-content">Let me explain the Password Grant Type authentication flow for SAP BTP Kyma in detail. ```hcl# First, set up the Identity Application entitlement in your subaccountresource "btp_subaccount_entitlement" "identity_application" {subaccount_id = data.btp_subaccount.context.idservice_name = "identity"plan_name = "application"}# Reference the service plan for the identity applicationdata "btp_subaccount_service_plan" "identity_application" {depends_on = [btp_subaccount_entitlement.identity_application]subaccount_id = data.btp_subaccount.context.idoffering_name = "identity"name = "application"}# Create the Identity Application service instance with specific OAuth2 configurationresource "btp_subaccount_service_instance" "identity_application" {depends_on = [btp_subaccount_trust_configuration.custom_idp]subaccount_id = data.btp_subaccount.context.idname = "ias-local"serviceplan_id = data.btp_subaccount_service_plan.identity_application.id# Detailed configuration for the Identity Applicationparameters = jsonencode({# Set access to public for broader accessibilityuser-access = "public"# OAuth2 configuration specifying allowed grant types and token policiesoauth2-configuration = {grant-types = ["authorization_code","authorization_code_pkce_s256","password", # Enable password grant type for headless authentication"refresh_token"],token-policy = {token-validity = 3600, # Access token valid for 1 hourrefresh-validity = 15552000, # Refresh token valid for 180 daysrefresh-usage-after-renewal = "off",refresh-parallel = 3,access-token-format = "default"},public-client = true, # Enable public client moderedirect-uris = ["https://dashboard.kyma.cloud.sap","http://localhost:8000"]},# Configure how user identifiers are determinedsubject-name-identifier = {attribute = "mail",fallback-attribute = "none"},# Map assertion attributes to specific user propertiesassertion-attributes = {email = "mail",groups = "companyGroups",first_name = "firstName",last_name = "lastName",login_name = "loginName",mail = "mail",scope = "companyGroups",user_uuid = "userUuid",locale = "language"},# Set the application name using variablesname = "${var.BTP_KYMA_NAME}-${var.BTP_KYMA_PLAN}-${data.btp_subaccount.context.id}",display-name = "${var.BTP_KYMA_NAME}-${var.BTP_KYMA_PLAN}"})}```The Password Grant Type authentication flow is designed specifically for non-interactive, automated scenarios. Let me break down how it works and why each component is important:The Setup Process:1. Custom Identity Service Setup- You need to create a custom SAP Cloud Identity Service (IAS) tenant rather than using the default SAP ID Service- This gives you more control over authentication policies and user management- The service instance is configured as a public client, which is crucial for the password grant flow2. OAuth2 Configuration- The setup enables multiple grant types, but specifically includes the "password" grant- Token policies are configured with specific validities:- Access tokens last for 1 hour (3600 seconds)- Refresh tokens last for 180 days (15552000 seconds)- The public client setting eliminates the need for client secrets3. User Attribute Mapping- The configuration maps various user attributes (email, groups, name, etc.)- This mapping ensures that Kubernetes RBAC can properly identify and authorize users- The "mail" attribute serves as the primary identifier for usersUsing the Authentication:When this is set up, your automated processes can authenticate using a technical user's credentials. Here's how it works:1. The process makes a POST request to the IAS token endpoint2. It provides:- The technical user's username and password- The client ID of your IAS application- The required scopes (typically "groups" and "email")3. The IAS service returns an ID token4. This token is then used for Kubernetes authenticationSecurity Considerations:1. Technical User Management- Create a dedicated technical user in your IAS tenant- Assign minimum required permissions through groups- Regularly rotate the password- Store credentials in a secure vault or secret management system2. Token Handling- Never log or expose the tokens- Implement proper error handling for token expiration- Use refresh tokens when appropriate to minimize password usage3. Access Control- Implement proper RBAC policies in Kubernetes- Regularly audit access patterns- Monitor for suspicious authentication attemptsThis authentication method is particularly useful for:- CI/CD pipelines- Automated deployment scripts- Monitoring systems- Backup solutions- Any other headless processes that need to interact with your Kyma clusterWould you like me to elaborate on any particular aspect of this setup, such as the technical user creation process or specific security best practices?</div></div></noscript></div></div><P> </P><div class="lia-spoiler-container"><a class="lia-spoiler-link" href="#" rel="nofollow noopener noreferrer">Spoiler</a><noscript> (Highlight to read)</noscript><div class="lia-spoiler-border"><div class="lia-spoiler-content"><P>Let me explain the Kyma Runtime Environment Bindings method, which provides a streamlined way to obtain cluster access through SAP BTP service bindings.</P><P> </P><P>```hcl<BR /># First, set up the Cloud Management Service instance<BR />resource "btp_subaccount_service_instance" "cis_service" {<BR />subaccount_id = data.btp_subaccount.context.id<BR />name = "cis-local"<BR />serviceplan_id = data.btp_subaccount_service_plan.cis_local.id<BR />}</P><P># Create the service binding for Cloud Management Service<BR />resource "btp_subaccount_service_binding" "cis_binding" {<BR />depends_on = [btp_subaccount_service_instance.cis_service]<BR />subaccount_id = data.btp_subaccount.context.id<BR />service_instance_id = btp_subaccount_service_instance.cis_service.id<BR />name = "cis-local-binding"<BR />}</P><P># Set up the Kyma runtime environment<BR />resource "btp_subaccount_service_instance" "kyma_runtime" {<BR />subaccount_id = data.btp_subaccount.context.id<BR />name = var.kyma_instance_name<BR />serviceplan_id = data.btp_subaccount_service_plan.kyma_runtime.id<BR /><BR />parameters = jsonencode({<BR />name = var.kyma_instance_name<BR />planName = var.kyma_plan_name<BR />shootName = var.shoot_name<BR />targetK8sVersion = var.kubernetes_version<BR />machineType = var.machine_type<BR />autoScalerMin = var.min_nodes<BR />autoScalerMax = var.max_nodes<BR />maxSurge = 1<BR />volumeSizeGb = var.volume_size<BR />diskType = "pd-standard"<BR />region = var.region<BR />workerCidr = var.worker_cidr<BR />servicesCidr = var.services_cidr<BR />podsCidr = var.pods_cidr<BR />})<BR />}</P><P># Create the service binding for Kyma runtime<BR />resource "btp_subaccount_service_binding" "kyma_binding" {<BR />depends_on = [btp_subaccount_service_instance.kyma_runtime]<BR />subaccount_id = data.btp_subaccount.context.id<BR />service_instance_id = btp_subaccount_service_instance.kyma_runtime.id<BR />name = "${var.kyma_instance_name}-binding"<BR />}</P><P>```</P><P>The Kyma Runtime Environment Bindings method works through the SAP BTP service binding mechanism. Let me break down how this approach functions and why it's particularly useful.</P><P>Understanding the Components:</P><P>1. Cloud Management Service (CIS)<BR />This service acts as a bridge between your BTP subaccount and the Kyma runtime. The CIS instance:<BR />- Manages service credentials<BR />- Handles authentication and authorization<BR />- Provides necessary APIs for runtime management<BR />- Must be provisioned with the cis-local plan</P><P>2. Kyma Runtime Instance<BR />The Kyma runtime itself needs specific configuration, including:<BR />- Kubernetes version specifications<BR />- Node pool configurations<BR />- Network settings<BR />- Resource allocations<BR />- Regional preferences</P><P>3. Service Bindings<BR />Two key bindings are created:<BR />- CIS binding: Provides access to cloud management capabilities<BR />- Kyma binding: Delivers the actual kubeconfig credentials</P><P>How the Authentication Works:</P><P>When you create a service binding to your Kyma runtime:<BR />1. The BTP Provisioning Service generates a service account in your Kyma cluster<BR />2. This service account receives appropriate RBAC permissions<BR />3. A kubeconfig file is generated containing a bearer token<BR />4. The token is automatically rotated and managed by the platform</P><P>Advantages of This Method:</P><P>1. Simplified Management<BR />- No need to manage separate credentials<BR />- Platform handles token rotation automatically<BR />- Reduced operational overhead<BR />- Integrated with BTP service management</P><P>2. Security Benefits<BR />- Tokens are managed by the platform<BR />- Clear audit trail through BTP<BR />- Automatic credential rotation<BR />- Integrated with BTP security controls</P><P>3. Operational Efficiency<BR />- Direct integration with BTP services<BR />- No additional authentication setup required<BR />- Works seamlessly with other BTP services<BR />- Easy to automate through infrastructure as code</P><P>Best Practices for Implementation:</P><P>1. Service Instance Names<BR />- Use consistent naming conventions<BR />- Include environment indicators<BR />- Make names descriptive and meaningful<BR />- Document naming patterns</P><P>2. Binding Management<BR />- Create separate bindings for different purposes<BR />- Monitor binding status<BR />- Implement proper error handling<BR />- Keep binding information secure</P><P>3. Access Control<BR />- Review generated RBAC permissions<BR />- Monitor service account usage<BR />- Implement proper security policies<BR />- Regular access audits</P><P>Common Use Cases:</P><P>This method is particularly useful for:<BR />- Development environments integrated with BTP<BR />- Automated deployment pipelines<BR />- Platform operations tools<BR />- Monitoring and logging systems<BR />- Any scenario where tight BTP integration is desired</P><P>The bindings method provides a more automated and platform-integrated approach compared to other authentication methods. Would you like me to elaborate on any specific aspect, such as the binding creation process or how to manage multiple environments?</P></div><noscript><div class="lia-spoiler-noscript-container"><div class="lia-spoiler-noscript-content">Let me explain the Kyma Runtime Environment Bindings method, which provides a streamlined way to obtain cluster access through SAP BTP service bindings. ```hcl# First, set up the Cloud Management Service instanceresource "btp_subaccount_service_instance" "cis_service" {subaccount_id = data.btp_subaccount.context.idname = "cis-local"serviceplan_id = data.btp_subaccount_service_plan.cis_local.id}# Create the service binding for Cloud Management Serviceresource "btp_subaccount_service_binding" "cis_binding" {depends_on = [btp_subaccount_service_instance.cis_service]subaccount_id = data.btp_subaccount.context.idservice_instance_id = btp_subaccount_service_instance.cis_service.idname = "cis-local-binding"}# Set up the Kyma runtime environmentresource "btp_subaccount_service_instance" "kyma_runtime" {subaccount_id = data.btp_subaccount.context.idname = var.kyma_instance_nameserviceplan_id = data.btp_subaccount_service_plan.kyma_runtime.idparameters = jsonencode({name = var.kyma_instance_nameplanName = var.kyma_plan_nameshootName = var.shoot_nametargetK8sVersion = var.kubernetes_versionmachineType = var.machine_typeautoScalerMin = var.min_nodesautoScalerMax = var.max_nodesmaxSurge = 1volumeSizeGb = var.volume_sizediskType = "pd-standard"region = var.regionworkerCidr = var.worker_cidrservicesCidr = var.services_cidrpodsCidr = var.pods_cidr})}# Create the service binding for Kyma runtimeresource "btp_subaccount_service_binding" "kyma_binding" {depends_on = [btp_subaccount_service_instance.kyma_runtime]subaccount_id = data.btp_subaccount.context.idservice_instance_id = btp_subaccount_service_instance.kyma_runtime.idname = "${var.kyma_instance_name}-binding"}```The Kyma Runtime Environment Bindings method works through the SAP BTP service binding mechanism. Let me break down how this approach functions and why it's particularly useful.Understanding the Components:1. Cloud Management Service (CIS)This service acts as a bridge between your BTP subaccount and the Kyma runtime. The CIS instance:- Manages service credentials- Handles authentication and authorization- Provides necessary APIs for runtime management- Must be provisioned with the cis-local plan2. Kyma Runtime InstanceThe Kyma runtime itself needs specific configuration, including:- Kubernetes version specifications- Node pool configurations- Network settings- Resource allocations- Regional preferences3. Service BindingsTwo key bindings are created:- CIS binding: Provides access to cloud management capabilities- Kyma binding: Delivers the actual kubeconfig credentialsHow the Authentication Works:When you create a service binding to your Kyma runtime:1. The BTP Provisioning Service generates a service account in your Kyma cluster2. This service account receives appropriate RBAC permissions3. A kubeconfig file is generated containing a bearer token4. The token is automatically rotated and managed by the platformAdvantages of This Method:1. Simplified Management- No need to manage separate credentials- Platform handles token rotation automatically- Reduced operational overhead- Integrated with BTP service management2. Security Benefits- Tokens are managed by the platform- Clear audit trail through BTP- Automatic credential rotation- Integrated with BTP security controls3. Operational Efficiency- Direct integration with BTP services- No additional authentication setup required- Works seamlessly with other BTP services- Easy to automate through infrastructure as codeBest Practices for Implementation:1. Service Instance Names- Use consistent naming conventions- Include environment indicators- Make names descriptive and meaningful- Document naming patterns2. Binding Management- Create separate bindings for different purposes- Monitor binding status- Implement proper error handling- Keep binding information secure3. Access Control- Review generated RBAC permissions- Monitor service account usage- Implement proper security policies- Regular access auditsCommon Use Cases:This method is particularly useful for:- Development environments integrated with BTP- Automated deployment pipelines- Platform operations tools- Monitoring and logging systems- Any scenario where tight BTP integration is desiredThe bindings method provides a more automated and platform-integrated approach compared to other authentication methods. Would you like me to elaborate on any specific aspect, such as the binding creation process or how to manage multiple environments?</div></div></noscript></div></div>2024-12-22T16:18:44.853000+01:00https://community.sap.com/t5/technology-blogs-by-sap/cap-java-implementation-for-authorization-management-service-ams/ba-p/13972405CAP-JAVA implementation for Authorization Management Service (AMS)2024-12-27T10:35:32.060000+01:00Harvey_Yaohttps://community.sap.com/t5/user/viewprofilepage/user-id/1511351<H2 id="toc-hId-1078412903">Basic concept of AMS</H2><P>To learn the basic concept of AMS, like what is <STRONG>Authorization Management Service (AMS)</STRONG>, how it works and what is the <STRONG>Policy</STRONG>, you can refer to the article writen by <a href="https://community.sap.com/t5/user/viewprofilepage/user-id/248561">@kevin_li</a> .</P><P><A href="https://community.sap.com/t5/technology-blogs-by-sap/authorization-management-service-in-sap-cloud-identity-service/bc-p/13966914#M177778" target="_self">Authorization Management Service in SAP Cloud Identity Service</A> </P><P>This Blog is specifically to introduce one of the implementation of AMS in our project, that is, how CAP-JAVA based application integrate with AMS.</P><H2 id="toc-hId-881899398">General dev flow</H2><P>Assume that you already have a fine run CAP-JAVA application, you can simply follow this steps to integrate AMS to your application:</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="dev flow.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/205379i7DFDBE4BFD4F0C23/image-size/medium?v=v2&px=400" role="button" title="dev flow.png" alt="dev flow.png" /></span></P><P>Make sure you are using the latest version of these dependencies.</P><P>First include the ams dependency in your package.json.</P><P> </P><P> </P><P> </P><P> </P><pre class="lia-code-sample language-json"><code> "devDependencies": {
"@sap/ams-dev": "^2"
},
"dependencies": {
"@sap/cds-dk": "^8.6.0"
},</code></pre><P> </P><P> </P><P> </P><P> </P><P> Run the following command to add AMS to your project.</P><P> </P><P> </P><P> </P><P> </P><pre class="lia-code-sample language-bash"><code>npm i
cds add ias
cds add ams</code></pre><P> </P><P> </P><P> </P><P> </P><P>It automatically add the related dependencies in your srv/pom.xml, make sure you are using the latest version. (<SPAN>**</SPAN>At least >= 2.0.0<SPAN>**</SPAN>)</P><P> </P><P> </P><P> </P><P> </P><pre class="lia-code-sample language-markup"><code><sap.cloud.security.ams.version>2.0.0</sap.cloud.security.ams.version></code></pre><P> </P><P> </P><P> </P><P> </P><P>If you are using <STRONG><EM>DwC(if you don't use it, skip this step), </EM></STRONG>Upgrade your<STRONG><EM> sap.cloud.sdk to version >= 5.12.0. </EM></STRONG>The DwC Auth token issue has been fixed from this version.</P><DIV><DIV><PRE><SPAN><cloud-sdk.version</SPAN><SPAN>>5.15.0</cloud-sdk.version></SPAN></PRE></DIV></DIV><P> </P><P> </P><P> </P><P> </P><pre class="lia-code-sample language-markup"><code> <!-- Deploy with Confidence -->
<dependency>
<groupId>com.sap.dwc</groupId>
<artifactId>util-cap</artifactId>
<version>${dwc.version}</version>
<exclusions>
<exclusion>
<groupId>com.sap.dwc</groupId>
<artifactId>util-mutual-authentication</artifactId>
</exclusion>
</exclusions>
</dependency></code></pre><P> </P><P> </P><P> </P><P> </P><P> </P><H2 id="toc-hId-685385893">Authorization Model Design</H2><P>Follow the guide provided by CAP, you can use annotations to restrict the authorization of APIs and Entities.</P><P>Official guideline by <STRONG><EM>cloud-authorization-client-library-java </EM></STRONG>gives a very detailed information of how to handle it.</P><P>[removed by moderator]</P><H2 id="toc-hId-488872388">Assign and check your policy</H2><P>Again, Li's article gives a very general introduction of how to do this.</P><P><A href="https://community.sap.com/t5/technology-blogs-by-sap/authorization-management-service-in-sap-cloud-identity-service/bc-p/13966914#M177778" target="_self">Authorization Management Servic e in SAP Cloud Identity Service</A> </P>2024-12-27T10:35:32.060000+01:00https://community.sap.com/t5/enterprise-resource-planning-blogs-by-members/sap-business-technology-platform-btp/ba-p/13982222SAP Business Technology Platform (BTP)2025-01-10T07:37:50.178000+01:00mickaelquesnothttps://community.sap.com/t5/user/viewprofilepage/user-id/150004<DIV class=""><DIV class=""><DIV class=""><SPAN class=""><SPAN>The SAP Business Technology Platform (BTP) is a Platform-as-a-Service (PaaS) offering from SAP that provides a comprehensive suite of services and tools for businesses to:<BR /><BR />Integrate and extend SAP applications: BTP allows you to seamlessly connect and enhance existing SAP solutions (like S/4HANA) with new functionalities and integrations.<BR />Build new business applications: You can develop custom applications using various programming languages, frameworks, and tools, tailored to specific business needs.<BR />Analyze data and gain insights: BTP provides tools for data warehousing, business intelligence, and advanced analytics, enabling data-driven decision-making.<BR />Automate business processes: You can automate repetitive tasks and workflows using robotic process automation (RPA) and workflow management capabilities.<BR />Implement intelligent technologies: BTP offers access to AI, machine learning, and Internet of Things (IoT) services, enabling you to build intelligent applications and solutions.<BR /><BR />In essence, SAP BTP acts as a central hub for innovation and digital transformation within an organization's SAP landscape.<BR /><BR />Here's a breakdown of its key roles:<BR /><BR />Integration: BTP facilitates seamless integration between SAP and non-SAP systems, both on-premise and in the cloud. This allows businesses to connect their entire IT landscape and create end-to-end business processes.<BR />Extension: BTP enables you to extend the functionality of existing SAP applications without modifying the core code. This ensures that customizations don't interfere with future updates and upgrades.<BR />Innovation: BTP provides a platform for developing new and innovative applications that address specific business challenges and opportunities. This empowers businesses to create unique solutions that differentiate them from their competitors.<BR />Agility: BTP offers a flexible and scalable environment for developing and deploying applications. This allows businesses to respond quickly to changing market conditions and customer demands.<BR /><BR />Key components of SAP BTP:<BR /><BR />SAP Integration Suite: Connects various systems and applications.<BR />SAP Extension Suite: Enables extending existing SAP solutions.<BR />SAP Analytics Cloud: Provides business intelligence and analytics capabilities.<BR />SAP Data Management Suite: Offers tools for data warehousing and data management.<BR />SAP Intelligent Technologies: Includes AI, machine learning, and IoT services.<BR /><BR />In simple terms:<BR /><BR />Imagine your core SAP system as the engine of your business. SAP BTP is like a workshop next to it, providing all the tools and resources you need to:<BR /><BR />Tune the engine: Optimize existing processes and functionalities.<BR />Add new parts: Build new applications and integrations.<BR />Monitor performance: Analyze data and gain insights.<BR />Automate tasks: Streamline workflows and improve efficiency.</SPAN></SPAN></DIV><DIV class=""> </DIV><DIV class=""><SPAN class=""><SPAN>By leveraging SAP BTP, businesses can unlock the full potential of their SAP investments and drive digital transformation across their organization.</SPAN></SPAN></DIV><DIV class=""> </DIV></DIV></DIV><DIV class=""><DIV class=""> </DIV><DIV class=""><A title="Linkedin Post" href="https://www.linkedin.com/posts/mickaelquesnot_the-sap-business-technology-platform-btp-activity-7281219256862576640-tXTf?utm_source=share&utm_medium=member_desktop" target="_self" rel="nofollow noopener noreferrer">https://www.linkedin.com/posts/mickaelquesnot_the-sap-business-technology-platform-btp-activity-7281219256862576640-tXTf?utm_source=share&utm_medium=member_desktop</A></DIV></DIV>2025-01-10T07:37:50.178000+01:00https://community.sap.com/t5/technology-blogs-by-members/join-amp-gather-in-sap-cloud-platform-integration/ba-p/13983494Join & Gather in SAP Cloud Platform Integration2025-01-14T16:21:54.532000+01:00VAMSIKRISHNAKALEhttps://community.sap.com/t5/user/viewprofilepage/user-id/1901049<P><STRONG>In SAP Cloud Platform Integration (CPI), the Join and Gather steps are crucial for orchestrating message flows, particularly when dealing with multiple messages that need to be combined or synchronized.</STRONG></P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="vamsikk_8-1736703563093.png" style="width: 747px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/211002iDEB61C7008E2523D/image-dimensions/747x264?v=v2" width="747" height="264" role="button" title="vamsikk_8-1736703563093.png" alt="vamsikk_8-1736703563093.png" /></span></P><P>XML Payload:</P><P><PersonalDetails><BR /><PersonalDetail><BR /><PersonalID>9655</PersonalID><BR /><PersonalNumber>1</PersonalNumber><BR /><Name>vamsi</Name><BR /><Pnumber>765426567568</Pnumber><BR /><Email>smoething@gmail.com</Email><BR /><State>AndhraPradesh</State><BR /><Martialstatus>No</Martialstatus><BR /><Job>Software Engineer</Job><BR /></PersonalDetail></PersonalDetails></P><P><STRONG>Join:</STRONG></P><P>The Join step is used to bring together messages from different routes or branches within a single integration flow. It acts as a synchronization point, ensuring that all messages from specified routes have arrived before proceeding further.</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="vamsikk_7-1736703540866.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/211001i90037138C44EA75B/image-size/medium?v=v2&px=400" role="button" title="vamsikk_7-1736703540866.png" alt="vamsikk_7-1736703540866.png" /></span></P><P> </P><P><STRONG>Key Features:</STRONG></P><UL><LI><STRONG>Synchronization: </STRONG>Ensures that all messages from the specified routes are available before proceeding.</LI><LI><STRONG>No Message Modification: </STRONG>The Join step itself does not modify the content of the messages. It simply brings them together.</LI><LI><STRONG>Routing Flexibility: </STRONG>Messages can be routed to different branches based on conditions or other criteria.<BR /><P><STRONG>Gather:</STRONG></P><P><STRONG>The Gather step merges multiple messages into a single message. This is useful when you need to combine data from different sources or create a summary message.</STRONG></P><P><STRONG>Key Features:</STRONG></P><UL><LI><STRONG>Message Combination</STRONG>: Merges multiple messages into a single message.</LI><LI><STRONG>Combination Strategies: </STRONG>Offers various strategies for combining messages, such as appending, concatenating, or creating a collection.</LI><LI><STRONG>Conditional Gathering: </STRONG>Can be configured to gather messages based on specific conditions.</LI></UL><P><STRONG>In Gather steps, there are two tabs:</STRONG></P><OL><LI><STRONG>General</STRONG>: You can give any meaningful name.</LI><LI><STRONG>Aggregator Strategy: </STRONG>In this tab, several options are present to perform operations.</LI></OL><P><STRONG>Incoming Format:</STRONG></P><P><STRONG>You can select which format to apply; here, four formats are available:</STRONG></P><UL><LI><STRONG>Any</STRONG>: If you want to combine any incoming messages independent of their format.</LI><LI><STRONG>Plaintext: </STRONG>If messages from different routes are in plain text format.</LI><LI><STRONG>XML (Different Format)</STRONG> If messages from different routes are in different XML formats<STRONG>.</STRONG></LI><LI><STRONG>XML (Same Format)</STRONG> If messages from different routes are in the same XML format.<BR /><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="vamsikk_5-1736703413243.png" style="width: 525px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/210999i6CFB0615577A1877/image-dimensions/525x327?v=v2" width="525" height="327" role="button" title="vamsikk_5-1736703413243.png" alt="vamsikk_5-1736703413243.png" /></span></P></LI><LI><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Screenshot 2025-01-12 154145.png" style="width: 624px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/211015i09C13C82DA20ADFB/image-size/large?v=v2&px=999" role="button" title="Screenshot 2025-01-12 154145.png" alt="Screenshot 2025-01-12 154145.png" /></span></LI></UL><P><STRONG>Aggregation Algorithm:</STRONG></P><UL><LI><STRONG>Combine</STRONG>: Can only be selected if you have chosen XML (Same Format) or XML (Different Format) for the Incoming Format. This option combines the incoming messages without any conditions. The messages are combined in Multimapping format.<BR /><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="vamsikk_0-1736703218946.png" style="width: 573px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/210994i5065C2AF9647C194/image-dimensions/573x248?v=v2" width="573" height="248" role="button" title="vamsikk_0-1736703218946.png" alt="vamsikk_0-1736703218946.png" /></span><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="combine differentformat.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/211009i3597FD532F8507DC/image-size/large?v=v2&px=999" role="button" title="combine differentformat.png" alt="combine differentformat.png" /></span></P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="sameformatcombine.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/211013i55A05D2B8135059A/image-size/large?v=v2&px=999" role="button" title="sameformatcombine.png" alt="sameformatcombine.png" /></span><BR /><BR /></P><P> </P><P> </P></LI><LI><STRONG>Combine at XPath: </STRONG>Can only be selected if you have chosen XML (Same Format) for the Incoming Format. This option combines the incoming messages at the specified XPath.<span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="vamsikk_1-1736703240581.png" style="width: 651px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/210995i644117C85A4776F6/image-dimensions/651x350?v=v2" width="651" height="350" role="button" title="vamsikk_1-1736703240581.png" alt="vamsikk_1-1736703240581.png" /></span><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="vamsikk_6-1736703486462.png" style="width: 641px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/211000i85378D38B6C9BCB6/image-dimensions/641x434?v=v2" width="641" height="434" role="button" title="vamsikk_6-1736703486462.png" alt="vamsikk_6-1736703486462.png" /></span><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="combinesameformat.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/211014i7F1A1992E72F58E0/image-size/large?v=v2&px=999" role="button" title="combinesameformat.png" alt="combinesameformat.png" /></span></P></LI><LI><STRONG>Tar & Zip: Specify</STRONG><SPAN> a simple expression to define unique file names within the archive. If not specified, the header CamelFileName is evaluated. In case the header is not available at runtime, a unique file name will be generated.</SPAN><BR /><BR /></LI></UL></LI></UL>2025-01-14T16:21:54.532000+01:00https://community.sap.com/t5/technology-blogs-by-sap/developing-running-and-monitoring-langchain-applications-on-sap-btp/ba-p/13988466Developing, Running, and Monitoring LangChain Applications on SAP BTP2025-01-17T02:44:44.618000+01:00takayuki_tanakahttps://community.sap.com/t5/user/viewprofilepage/user-id/109430<P><SPAN>This article is translated version of the original Japanese blog:<BR /><A class="" href="https://community.sap.com/t5/technology-blogs-by-sap/sap-btp%E4%B8%8A%E3%81%A7langchain%E3%82%A2%E3%83%97%E3%83%AA%E3%82%B1%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E3%82%92%E9%96%8B%E7%99%BA-%E5%AE%9F%E8%A1%8C-%E7%9B%A3%E8%A6%96%E3%81%99%E3%82%8B/ba-p/13960786" target="_blank">SAP BTP上でLangChainアプリケーションを開発・実行・監視する</A></SPAN></P><P><SPAN> </SPAN></P><H4 id="toc-hId-1337680795"><SPAN>Introduction</SPAN></H4><P><SPAN>In today’s rapidly advancing era of generative AI, the demand for applications integrating AI technologies is increasing, aiming to enhance business process efficiency and create added value. SAP BTP (Business Technology Platform) has gained significant attention as a flexible and scalable platform for extending SAP S/4HANA Cloud and other business systems. Particularly, building applications leveraging generative AI on SAP BTP is the key to unlocking new possibilities.</SPAN></P><P><SPAN>This blog provides a step-by-step guide to developing, operating, and monitoring large language model (LLM) applications on SAP BTP. Using the “gpt-4o” model provided by Azure OpenAI as an example, we will cover everything from configuring LLM access using SAP AI Launchpad to deploying LangChain applications with SAP Build Code, and monitoring them using Langfuse. By the end, you will have a clear understanding of how to maximize the potential of SAP BTP to build scalable AI solutions.</SPAN></P><P><SPAN>We hope this blog helps you learn the technical fundamentals of application development with generative AI and take your first steps toward applying them in real business scenarios.</SPAN></P><DIV><HR /></DIV><H3 id="toc-hId-1012084571"><SPAN>Steps</SPAN></H3><H4 id="toc-hId-944653785"><SPAN>Prerequisites</SPAN></H4><UL><LI><P><SPAN>SAP AI Launchpad / SAP AI Core (Extended Plan) / SAP Build Code is activated.</SPAN></P></LI><LI><P><SPAN>A Full-Stack Application-type DevSpace is created using SAP Build Code.</SPAN></P></LI></UL><DIV><HR /></DIV><H3 id="toc-hId-619057561"><SPAN>1. Accessing Powerful LLMs via Generative AI Hub</SPAN></H3><P><SPAN>Access external powerful LLMs through Generative AI Hub in SAP AI Launchpad. First, check the available models listed in the SAP Note below as needed:</SPAN></P><P><A href="https://me.sap.com/notes/3437766" target="_blank" rel="noopener noreferrer"><SPAN>https://me.sap.com/notes/3437766</SPAN></A></P><P><SPAN>For this guide, we’ll use the “gpt-4o” model provided by Azure OpenAI.</SPAN></P><OL><LI><P><SPAN>In SAP AI Launchpad, navigate to the working resource group, and go to “ML Operations” => “Settings” from the left pane. Click “Create” in the top right corner to create an LLM access configuration.</SPAN></P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="1_settings.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/213208i3F98BB6AC6FE40E1/image-size/large?v=v2&px=999" role="button" title="1_settings.png" alt="1_settings.png" /></span></P></LI><LI><P><SPAN>Input the information as shown in the image. The name can be arbitrary; in this case, we’ll use “gpt-4o.”</SPAN></P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="2_settings.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/213209i61E8803F9FD33EBC/image-size/large?v=v2&px=999" role="button" title="2_settings.png" alt="2_settings.png" /></span></P></LI><LI><P><SPAN>On the next page, configure the type and version of the LLM to use. Refer to the aforementioned SAP Note for the modelName and modelVersion.</SPAN></P><P><SPAN><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="3_settings.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/213210i588136F055C88BFB/image-size/large?v=v2&px=999" role="button" title="3_settings.png" alt="3_settings.png" /></span></SPAN></P></LI><LI><P><SPAN>After completing the settings, ensure that the modelName is displayed as “gpt-4o.” Click the “Create Deployment” button in the top right corner based on this startup configuration.</SPAN></P><P><SPAN><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="4_completedSettings.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/213212i32B8FBC6232E6F1C/image-size/large?v=v2&px=999" role="button" title="4_completedSettings.png" alt="4_completedSettings.png" /></span></SPAN></P></LI><LI><P><SPAN>You can configure the startup time and other settings, but proceed with the default settings for this example. Once successful, you should see the following screen. Wait for the LLM access point to be created and activated; its current status should display “Running.”</SPAN></P><P><SPAN><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="5_deployment.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/213213i35AB32AEE10EDE03/image-size/large?v=v2&px=999" role="button" title="5_deployment.png" alt="5_deployment.png" /></span></SPAN></P></LI></OL><P><SPAN>The setup of Generative AI Hub is now complete.</SPAN></P><DIV><HR /></DIV><H3 id="toc-hId-422544056"><SPAN>2. Preparing a LangChain Application with SAP Build Code and Connecting it to Langfuse Pre-deployed on SAP BTP</SPAN></H3><P><SPAN>Next, deploy a LangChain application to SAP BTP, Cloud Foundry Runtime using SAP Build Code. In our previous blog, we deployed Langfuse, a monitoring platform for LLM applications, on SAP BTP, Kyma Runtime. If you haven’t yet referred to it, please check it out here:</SPAN></P><P><SPAN><A class="" href="https://community.sap.com/t5/technology-blogs-by-sap/deploying-langfuse-on-sap-btp-kyma-runtime/ba-p/13988485" target="_blank">Deploying Langfuse on SAP BTP, Kyma Runtime</A></SPAN></P><P><SPAN>For this guide, clone a sample application from GitHub:</SPAN></P><P> </P><P> </P><P> </P><pre class="lia-code-sample language-bash"><code>git clone https://github.com/watwatwhat/Langfuse_LangChain_onSAPBTP.git</code></pre><P> </P><P> </P><P> </P><P><SPAN>The application is structured as a Multi-Target Application (MTA), and you can deploy it easily using the default command-line tools available in SAP Build Code.</SPAN></P><H4 id="toc-hId-355113270"><SPAN>Key Points in the Source Code:</SPAN></H4><UL><LI><P><SPAN>Using Generative AI Hub SDK to utilize LangChain via SAP AI Core.</SPAN></P></LI></UL><P> </P><P> </P><P> </P><pre class="lia-code-sample language-python"><code>from gen_ai_hub.proxy.langchain.openai import OpenAIEmbeddings as g_OpenAIEmbeddings
from gen_ai_hub.proxy.langchain.openai import ChatOpenAI as g_ChatOpenAI</code></pre><P> </P><P> </P><P> </P><P> </P><P> </P><P> </P><P> </P><pre class="lia-code-sample language-python"><code>proxy_client = get_proxy_client('gen-ai-hub') # <- GenAIHubプロキシ
embeddings = g_OpenAIEmbeddings(proxy_model_name=embedding_model) # <- SAP AI Core経由のOpenAI Embeddingモデル
llm = g_ChatOpenAI(proxy_model_name=model_option, proxy_client=proxy_client, temperature=0.0) # <- SAP AI Core経由のOpenAI Chatモデル</code></pre><P> </P><P> </P><P> </P><P> </P><UL><LI><P><SPAN>Sending logs to Langfuse.</SPAN></P></LI></UL><P> </P><P> </P><P> </P><pre class="lia-code-sample language-python"><code>agent = create_react_agent(
llm=llm,
tools=tools,
prompt=prompt
)
agent_executor = AgentExecutor(
agent=agent,
tools=tools,
handle_parsing_errors=True,
verbose=True,
max_iterations=5
)
from langfuse.callback import CallbackHandler
langfuse_handler = CallbackHandler(
public_key="XXXXXXX",
secret_key="XXXXXXX",
host="http://XXXXXXXX:3000"
)
response = agent_executor.invoke({"input": input}, config={"callbacks": [langfuse_handler]})</code></pre><P> </P><P> </P><P> </P><P><SPAN>Retrieve the connection information from Langfuse’s UI by clicking the “Configure Tracing” button on the dashboard page. For use with LangChain, open the LangChain tab and copy the code snippet.</SPAN></P><P><SPAN><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="6_apiKey.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/213215i54EEFA74D2ABBF86/image-size/large?v=v2&px=999" role="button" title="6_apiKey.png" alt="6_apiKey.png" /></span></SPAN></P><P><SPAN>Deployment Steps:</SPAN></P><OL><LI><P><SPAN>Navigate to the cloned directory and build the project:</SPAN></P></LI></OL><P> </P><P> </P><P> </P><pre class="lia-code-sample language-bash"><code>mbt build</code></pre><P> </P><P> </P><P> </P><OL><LI><P><SPAN>Deploy the generated mtar file to SAP BTP, Cloud Foundry Runtime. After logging in with </SPAN><SPAN>cf login</SPAN><SPAN>, specify the target organization and space:</SPAN></P></LI></OL><P> </P><P> </P><P> </P><pre class="lia-code-sample language-bash"><code>cf login
cf deploy mta_archives/langfuse-test-app_1.0.0.mtar</code></pre><P> </P><P> </P><P> </P><OL><LI><P><SPAN>Once deployment is complete, access the application via the internet. Retrieve the application URL using the following command:</SPAN></P></LI></OL><P> </P><P> </P><P> </P><pre class="lia-code-sample language-bash"><code>cf apps</code></pre><P> </P><P> </P><P> </P><P><SPAN>For this example, the application is published as “langfuse-langchain-srv,” and the URL will be displayed alongside it. Let’s run the LangChain application.</SPAN></P><DIV><HR /></DIV><H3 id="toc-hId-29517046"><SPAN>3. Running Inference Chains with LangChain and Checking Traces on Langfuse</SPAN></H3><P><SPAN>Using Postman installed on your local PC, send requests to this Python application. When executed, the AI agent will perform inference on SAP BTP, Cloud Foundry Runtime, and return results.</SPAN></P><P><SPAN><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="7_postman.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/213216iC2850517C6D1080A/image-size/large?v=v2&px=999" role="button" title="7_postman.png" alt="7_postman.png" /></span></SPAN></P><P><SPAN>Translation: <BR /></SPAN></P><TABLE border="1" width="100%"><TBODY><TR><TD width="50%">Japanese</TD><TD width="50%">English</TD></TR><TR><TD width="50%">3の3乗根は?</TD><TD width="50%">What is the cube root of 3?</TD></TR><TR><TD width="50%">3の3乗根は約1.442です。計算機を使用して求めました。</TD><TD width="50%">The cube root of 3 is approximately 1.442. It was calculated using a calculator.</TD></TR></TBODY></TABLE><P><SPAN>Since this example includes a trace handler using Langfuse, check the traces via Langfuse’s UI by navigating to “Tracing” => “Traces.” You will see a list of traces as shown below:</SPAN></P><P><SPAN><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="8_tracelist.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/213217i5591A5263F054D76/image-size/large?v=v2&px=999" role="button" title="8_tracelist.png" alt="8_tracelist.png" /></span></SPAN></P><P><SPAN>Inspect the details. The right-hand pane displays the sequence of actions performed by the AI agent implemented in LangChain. Selecting the topmost element reveals the input and output in the left-hand pane.</SPAN></P><P><SPAN><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="9_inout.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/213218i30A44F02FF35891C/image-size/large?v=v2&px=999" role="button" title="9_inout.png" alt="9_inout.png" /></span></SPAN></P><P><SPAN>Following the right-hand pane, you can confirm that the “calculator” tool was used. This tool, passed to the AI agent in the LangChain source code, was appropriately selected for the task “What is the cube root of 3?” The AI agent deemed this action suitable and used it.</SPAN></P><P><SPAN><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="10_cal.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/213219iBD88D9143F86BA59/image-size/large?v=v2&px=999" role="button" title="10_cal.png" alt="10_cal.png" /></span></SPAN></P><P><SPAN>The statistics are also reflected on the dashboard:</SPAN></P><P><SPAN><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="11_dashboard.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/213220i1B2B07F2AFCEC343/image-size/large?v=v2&px=999" role="button" title="11_dashboard.png" alt="11_dashboard.png" /></span></SPAN></P><P><SPAN>While this scenario only used the calculator tool, real-world use cases can become more complex. The products introduced in this blog will prove even more effective in such scenarios.</SPAN></P><DIV><HR /></DIV><H3 id="toc-hId--166996459"><SPAN>Conclusion</SPAN></H3><P><SPAN>This blog introduced the steps to develop, run, and monitor LLM applications using SAP BTP. From configuring Generative AI Hub via SAP AI Launchpad to deploying LangChain applications with SAP Build Code and monitoring them with Langfuse, we hope this guide demonstrated the potential of SAP BTP.</SPAN></P><P><SPAN>Applications integrated with generative AI bring new value to traditional business processes, enabling more efficient and flexible system operations. Additionally, utilizing monitoring tools like Langfuse allows for detailed analysis of AI behavior and inference results, improving reliability and optimizing operations.</SPAN></P><P><SPAN>As generative AI and LLM technologies continue to evolve, their applications across various use cases will grow. Through application development based on SAP BTP, we hope you accelerate your organization’s digital transformation. May this blog serve as the first step toward achieving that goal.</SPAN></P><P><SPAN>We look forward to seeing your continued efforts in leveraging SAP BTP and generative AI-related technologies for new challenges.</SPAN></P>2025-01-17T02:44:44.618000+01:00https://community.sap.com/t5/technology-blogs-by-sap/deploying-langfuse-on-sap-btp-kyma-runtime/ba-p/13988485Deploying Langfuse on SAP BTP, Kyma Runtime2025-01-17T03:16:13.022000+01:00takayuki_tanakahttps://community.sap.com/t5/user/viewprofilepage/user-id/109430<P><SPAN>This is the translated version of original Japanese blog:<BR /><A class="" href="https://community.sap.com/t5/technology-blogs-by-sap/llm%E7%9B%A3%E8%A6%96%E3%83%84%E3%83%BC%E3%83%ABlangfuse%E3%82%92sap-btp-kyma-runtime%E3%81%AB%E3%83%87%E3%83%97%E3%83%AD%E3%82%A4%E3%81%97%E3%81%A6%E3%81%BF%E3%81%9F/ba-p/13960621" target="_blank">LLM監視ツールLangfuseをSAP BTP, Kyma runtimeにデプロイしてみた</A><BR /></SPAN></P><H2 id="toc-hId-1079515418"><SPAN>Introduction</SPAN></H2><P><SPAN>This time, we will introduce a step-by-step guide to deploying Langfuse, an open-source LLM application monitoring tool, on the Kubernetes-compatible runtime SAP BTP, Kyma runtime. Monitoring is an unavoidable issue when utilizing generative AI, and we hope this blog will be helpful to you.</SPAN></P><H3 id="toc-hId-1012084632"><SPAN>Overview</SPAN></H3><P><SPAN>As generative AI becomes deeply integrated into our daily lives and work, many companies and individuals are advancing their use of applications such as chatbots and automation tools. These are being utilized across various fields, from automating customer support and enhancing data analysis to planning new products and services.</SPAN></P><P><SPAN>One particularly noteworthy application involves using AI agents like LangChain. LangChain is a powerful framework adopted by many developers to generate advanced responses by combining multiple tools and external data sources. However, operating these AI agents comes with new challenges.</SPAN></P><H3 id="toc-hId-815571127"><SPAN>Common Challenges</SPAN></H3><P><SPAN>Some common issues include:</SPAN></P><UL><LI><P><SPAN><STRONG>Managing prompt quality and model performance</STRONG></SPAN><SPAN>: Designing appropriate prompts and selecting models are essential to improving response accuracy, but accurately evaluating their effectiveness can be difficult.</SPAN></P></LI><LI><P><SPAN><STRONG>Tracing external APIs and tools</STRONG></SPAN><SPAN>: Understanding the behavior of external services used by AI agents and quickly identifying causes of issues when they occur are crucial.</SPAN></P></LI><LI><P><SPAN><STRONG>Monitoring errors and response times</STRONG></SPAN><SPAN>: Real-time monitoring of performance metrics (e.g., response times, error rates) in the operating environment is essential.</SPAN></P></LI><LI><P><SPAN><STRONG>Leveraging user feedback</STRONG></SPAN><SPAN>: Continuously understanding how well generative AI responses meet user expectations and incorporating improvements is necessary.</SPAN></P></LI></UL><P><SPAN>To address these challenges, developers strongly feel the need for tools that allow detailed monitoring and evaluation of AI agents' operations and facilitate rapid improvements. Against this backdrop, specialized monitoring platforms for LLM applications, such as Langfuse, are gaining attention.</SPAN></P><H2 id="toc-hId-489974903"><SPAN>What is Langfuse?</SPAN></H2><P><SPAN>Langfuse is an open-source LLMOps platform that supports the development, monitoring, evaluation, and debugging of applications leveraging large language models (LLMs). It supports the entire lifecycle of generative AI products, from development and testing to large-scale monitoring and debugging.</SPAN></P><H3 id="toc-hId-422544117"><SPAN>Key Features and Benefits</SPAN></H3><UL><LI><P><SPAN><STRONG>Open-source availability</STRONG></SPAN><SPAN>: Langfuse is provided as open-source, allowing for self-hosting. This makes customization and long-term use easier.</SPAN></P></LI><LI><P><SPAN><STRONG>Integration with various frameworks</STRONG></SPAN><SPAN>: Langfuse seamlessly integrates with major LLM frameworks like LangChain and LlamaIndex, making it easy to incorporate into existing workflows.</SPAN></P></LI><LI><P><SPAN><STRONG>Detailed traceability</STRONG></SPAN><SPAN>: It captures the complete context of products, including external API calls, tools, and prompts, enabling detailed tracking of application behavior.</SPAN></P></LI><LI><P><SPAN><STRONG>Real-time metrics monitoring</STRONG></SPAN><SPAN>: Real-time monitoring of key performance indicators such as response times, error rates, and throughput allows for prompt responses.</SPAN></P></LI><LI><P><SPAN><STRONG>Collecting user feedback</STRONG></SPAN><SPAN>: Feedback from users can be gathered to improve application performance and user experience.</SPAN></P></LI><LI><P><SPAN><STRONG>Evaluation and testing features</STRONG></SPAN><SPAN>: By setting up evaluation workflows using LLMs or human annotations, developers can compare the performance of different models and prompts. A/B testing can also be used to determine the best solution.</SPAN></P></LI><LI><P><SPAN><STRONG>Flexible deployment</STRONG></SPAN><SPAN>: Langfuse supports deployment in various environments, such as on-premises or cloud, allowing for flexibility based on project scale.</SPAN></P></LI></UL><P><SPAN>These features make Langfuse a powerful tool for LLM application developers, enabling them to improve application quality and operate efficiently.</SPAN></P><H3 id="toc-hId-226030612"><SPAN>Reference</SPAN></H3><P><A href="https://langfuse.com/jp" target="_blank" rel="noopener nofollow noreferrer"><SPAN>https://langfuse.com/jp</SPAN></A></P><H2 id="toc-hId--99565612"><SPAN>Deployment Steps</SPAN></H2><P><SPAN>Let’s now introduce the procedure for hosting Langfuse on SAP BTP.</SPAN></P><H3 id="toc-hId--166996398"><SPAN>Prerequisites</SPAN></H3><UL><LI><P><SPAN>An account with access to SAP BTP, Kyma runtime.</SPAN></P></LI><LI><P><SPAN><STRONG>kubectl CLI</STRONG></SPAN><SPAN>, </SPAN><SPAN><STRONG>helm CLI</STRONG></SPAN><SPAN>, and </SPAN><SPAN><STRONG>kubelogin</STRONG></SPAN><SPAN> installed in the local development environment. If not installed, refer to the following links:</SPAN></P><UL><LI><P><A href="https://kubernetes.io/docs/tasks/tools/" target="_blank" rel="noopener nofollow noreferrer"><SPAN>kubectl</SPAN></A></P></LI><LI><P><A href="https://helm.sh/ja/docs/intro/install/" target="_blank" rel="noopener nofollow noreferrer"><SPAN>helm</SPAN></A></P></LI><LI><P><A href="https://github.com/int128/kubelogin#setup" target="_blank" rel="noopener nofollow noreferrer"><SPAN>kubelogin</SPAN></A></P></LI></UL></LI></UL><H3 id="toc-hId--363509903"><SPAN>Step 1: Setting up Kyma Environment in SAP BTP</SPAN></H3><P><SPAN>First, enable SAP BTP, Kyma runtime on SAP BTP, and grant user permissions. Refer to the following tutorial for details:</SPAN></P><P><SPAN><A>https://developers.sap.com/tutorials/cp-kyma-getting-started.html</A></SPAN></P><H3 id="toc-hId--560023408"><SPAN>Step 2: Configuring kubectl and Verifying Connection</SPAN></H3><P><SPAN>Refer to the URL below for connecting kubectl to SAP Kyma runtime:</SPAN></P><P><A href="https://help.sap.com/docs/btp/sap-business-technology-platform/access-kyma-instance-using-kubectl" target="_blank" rel="noopener noreferrer"><SPAN>https://help.sap.com/docs/btp/sap-business-technology-platform/access-kyma-instance-using-kubectl</SPAN></A></P><H4 id="toc-hId--1125171289"><SPAN>Retrieve the kubeconfig.yaml File</SPAN></H4><P><SPAN>Download the kubeconfig file from the SAP BTP Cockpit by clicking the Kubeconfig URL link, which starts downloading a configuration file named </SPAN><SPAN><STRONG>kubeconfig.yaml</STRONG></SPAN><SPAN>. Use this file to connect kubectl to SAP BTP, Kyma runtime.</SPAN></P><P><SPAN><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="1_kubeconfig.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/213221i9046F338D54100AD/image-size/large?v=v2&px=999" role="button" title="1_kubeconfig.png" alt="1_kubeconfig.png" /></span></SPAN></P><P><SPAN>Translation of texts in picture:</SPAN></P><TABLE border="1" width="100%"><TBODY><TR><TD width="50%">Japanese</TD><TD width="50%">English</TD></TR><TR><TD width="50%">クリックすると、kubeconfig.yamlがダウンロードされる</TD><TD width="50%">When you click here, kubecounfig.yaml get downloaded</TD></TR></TBODY></TABLE><H4 id="toc-hId--1321684794"><SPAN>Verify Connection</SPAN></H4><P><SPAN>Run the following commands in the terminal to load the cluster settings for SAP BTP, Kyma runtime and ensure proper configuration. Replace </SPAN><SPAN>/path/to/kubeconfig.yaml</SPAN><SPAN> with your environment’s path. Note that the commands below are for macOS. For Windows, refer to the appropriate commands in the linked documentation.</SPAN></P><P> </P><P> </P><pre class="lia-code-sample language-bash"><code>export KUBECONFIG=/path/to/kubeconfig.yaml
kubectl config get-contexts</code></pre><P> </P><P> </P><P><SPAN><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="2_kubeconfigSet.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/213222iDD4ED7F4551B1257/image-size/large?v=v2&px=999" role="button" title="2_kubeconfigSet.png" alt="2_kubeconfigSet.png" /></span></SPAN></P><P><SPAN>Translation of texts in picture:</SPAN></P><TABLE border="1" width="100%"><TBODY><TR><TD width="50%" height="30px">Japanese</TD><TD width="50%" height="30px">English</TD></TR><TR><TD width="50%" height="57px">kubeconfig.yamlを配置したパスを、KUBECONFIGという環境変数にセットする</TD><TD width="50%" height="57px">Set the path where kubeconfig.yaml is located to environment variable "KUBECONFIG".</TD></TR><TR><TD height="85px">kubectl config get-contexts により、正しくkubeconfig.yamlが読み込まれていることを確認する</TD><TD height="85px">Make sure kubeconfig.yaml is properly read by the system with the command "kubectl config get-contexts".</TD></TR></TBODY></TABLE><P><SPAN>If successful, proceed to deploy Langfuse.</SPAN></P><H3 id="toc-hId--1224795292"><SPAN>Step 3: Deploying Langfuse to SAP BTP, Kyma Runtime</SPAN></H3><P><SPAN>Refer to the official guide below to deploy langfuse-k8s:</SPAN></P><P><A href="https://langfuse.com/self-hosting/kubernetes-helm" target="_blank" rel="noopener nofollow noreferrer"><SPAN>https://langfuse.com/self-hosting/kubernetes-helm</SPAN></A></P><H4 id="toc-hId--1714711804"><SPAN>Clone the Source Code</SPAN></H4><P> </P><P> </P><pre class="lia-code-sample language-bash"><code>git clone https://github.com/langfuse/langfuse-k8s.git
cd langfuse-k8s/charts/langfuse </code></pre><P> </P><P> </P><H4 id="toc-hId--1911225309"><SPAN><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="3_cloneLangfuse_k8s.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/213223iF11FB9FDFE7BF02C/image-size/large?v=v2&px=999" role="button" title="3_cloneLangfuse_k8s.png" alt="3_cloneLangfuse_k8s.png" /></span></SPAN></H4><H4 id="toc-hId--2107738814"><SPAN>Create a Namespace</SPAN></H4><P><SPAN>Create a namespace for testing on SAP BTP, Kyma runtime:</SPAN></P><P> </P><P> </P><pre class="lia-code-sample language-bash"><code>kubectl create namespace langfuse-v3-preview</code></pre><P> </P><P> </P><H4 id="toc-hId-1990714977"><SPAN><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="4_createNamespace.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/213224iB6E2FA5E5B7507D9/image-size/large?v=v2&px=999" role="button" title="4_createNamespace.png" alt="4_createNamespace.png" /></span></SPAN></H4><P><SPAN>Translation of texts in picture:</SPAN></P><TABLE border="1" width="100%"><TBODY><TR><TD width="50%">Japanese</TD><TD width="50%">English</TD></TR><TR><TD width="50%">ネームスペースを作成する</TD><TD width="50%">Create namespace.</TD></TR></TBODY></TABLE><P>This procedure will create the namespace on SAP BTP, Kyma Runtime, where the Langfuse is going to be deployed.</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="5_createdNS.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/213226iAA5A7FD76F7B2716/image-size/large?v=v2&px=999" role="button" title="5_createdNS.png" alt="5_createdNS.png" /></span></P><H4 id="toc-hId-1794201472"><SPAN>Deploy Using Helm</SPAN></H4><P><SPAN>Using Helm, a Kubernetes package manager, update dependencies and deploy to the namespace created:</SPAN></P><P> </P><P> </P><pre class="lia-code-sample language-bash"><code>helm dependency update
helm install langfuse . -n langfuse-v3-preview</code></pre><P> </P><P> </P><H3 id="toc-hId-1891090974"><SPAN><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="6_deploy.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/213225i4D410CAF9DB6CEC2/image-size/large?v=v2&px=999" role="button" title="6_deploy.png" alt="6_deploy.png" /></span></SPAN></H3><H3 id="toc-hId-1694577469"><SPAN>Step 4: Accessing the Langfuse UI</SPAN></H3><H4 id="toc-hId-1372844648"><SPAN>Check Deployment Status</SPAN></H4><P><SPAN>Run the following command to check the deployment status:</SPAN></P><P> </P><P> </P><pre class="lia-code-sample language-bash"><code>kubectl get services -n langfuse-v3-preview</code></pre><P> </P><P> </P><P><SPAN><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="7_clusterIP.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/213227i63EB5DB83204A458/image-size/large?v=v2&px=999" role="button" title="7_clusterIP.png" alt="7_clusterIP.png" /></span></SPAN></P><P>According to this, the connection type of the langfuse-web application is set to ClusterIP, and no External-IP has been assigned, which makes it inaccessible from the outside. Therefore, we will execute the following command.</P><P> </P><P> </P><pre class="lia-code-sample language-bash"><code>kubectl edit service langfuse-web -n langfuse-v3-preview</code></pre><P> </P><P> </P><P><SPAN>This command allows you to make changes to the configuration of langfuse-web. Let’s rewrite the settings as shown below. With this configuration, an External IP will be assigned after a short wait.</SPAN></P><H4 id="toc-hId-1176331143"><SPAN>Update Service Type</SPAN></H4><P><SPAN>Modify the settings as follows to allow for an External IP to be assigned:</SPAN></P><P> </P><P> </P><pre class="lia-code-sample language-yaml"><code>spec:
type: LoadBalancer ## Previously set as Cluster IP</code></pre><P> </P><P> </P><H4 id="toc-hId-979817638"><SPAN>Confirm Access</SPAN></H4><P><SPAN>Confirm access to the Langfuse UI by executing:</SPAN></P><P> </P><P> </P><pre class="lia-code-sample language-bash"><code>kubectl get services -n langfuse-v3-preview</code></pre><P> </P><P> </P><P><SPAN>Access using the following URL:</SPAN></P><P> </P><P> </P><pre class="lia-code-sample language-bash"><code>http://<External-IP>:<Port></code></pre><P> </P><P> </P><H4 id="toc-hId-783304133"><SPAN><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="8_externalIP.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/213228i7C2529C57AB9116C/image-size/large?v=v2&px=999" role="button" title="8_externalIP.png" alt="8_externalIP.png" /></span></SPAN></H4><P><SPAN><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="10_langfuse_signup.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/213231i2111AED7BEDDA9A0/image-size/large?v=v2&px=999" role="button" title="10_langfuse_signup.png" alt="10_langfuse_signup.png" /></span></SPAN></P><H4 id="toc-hId-586790628"> </H4><H4 id="toc-hId-390277123"><SPAN>Sign Up and Log In</SPAN></H4><P><SPAN>The above is the top screen when accessing the application. First, create an account by clicking on "Sign Up."</SPAN></P><H4 id="toc-hId-193763618"><SPAN><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="9_langfuse_welcome.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/213229iB54D1F4C0B35EADD/image-size/large?v=v2&px=999" role="button" title="9_langfuse_welcome.png" alt="9_langfuse_welcome.png" /></span></SPAN></H4><P><SPAN>Even if redirected to </SPAN><SPAN><A href="http://localhost:3000" target="_blank" rel="noopener nofollow noreferrer">http://localhost:3000</A></SPAN><SPAN> (a browser error page may appear) after account creation, this can be ignored because default login callback is set to redirect users there. The user account should be created successfully. Reaccess the </SPAN><SPAN>http://<External IP>:<Port></SPAN><SPAN> URL and log in with the created account.</SPAN></P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="11_langfuse_home.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/213232iC8906D2487C7B60E/image-size/large?v=v2&px=999" role="button" title="11_langfuse_home.png" alt="11_langfuse_home.png" /></span></P><P>Once you do so, you will successfully log in as shown. After that, you can create an Organization and a Project with any name, which will eventually lead you to the dashboard screen.</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="12_langfuse_dashboard.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/213233i6D191480A6924A5D/image-size/large?v=v2&px=999" role="button" title="12_langfuse_dashboard.png" alt="12_langfuse_dashboard.png" /></span></P><H3 id="toc-hId-290653120"><SPAN>Conclusion</SPAN></H3><P><SPAN>In this blog, we introduced the procedure for deploying the OSS Langfuse on SAP BTP, Kyma runtime. By leveraging Langfuse’s support for Kubernetes deployment, we demonstrated how to build the environment with relative ease on the compatible SAP BTP, Kyma runtime.</SPAN></P><P><SPAN>In the next blog, we plan to explain how to integrate Langfuse with LangChain for debugging and monitoring generative AI applications. Stay tuned!<BR /></SPAN></P><P><SPAN>Next Blog:<BR /></SPAN></P><H3 id="toc-hId-94139615"><A title="Developing, Running, and Monitoring LangChain Applications on SAP BTP" href="https://community.sap.com/t5/technology-blogs-by-sap/developing-running-and-monitoring-langchain-applications-on-sap-btp/ba-p/13988466" target="_blank">Developing, Running, and Monitoring LangChain Applications on SAP BTP</A></H3><P><SPAN> </SPAN></P>2025-01-17T03:16:13.022000+01:00https://community.sap.com/t5/technology-blogs-by-members/aggregators-streamlining-message-handling-in-integration-flows/ba-p/13986318Aggregators: Streamlining Message Handling in Integration Flows2025-01-17T15:36:24.244000+01:00VAMSIKRISHNAKALEhttps://community.sap.com/t5/user/viewprofilepage/user-id/1901049<P>In integration flows, aggregators play a crucial role in collecting messages until a specific condition is met. Here's a breakdown of their functionality:</P><UL><LI><STRONG>Purpose:</STRONG> Aggregators gather messages across multiple executions of an integration flow, not just one.</LI><LI><STRONG>Process:</STRONG> If the flow receives three messages, the same aggregator instance collects all of them.</LI><LI><STRONG>Storage:</STRONG> Messages are stored in a data store (supports XML, plain text messages).<BR /><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="vamsikk_0-1736929826107.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/212147i6160620D5753225C/image-size/medium?v=v2&px=400" role="button" title="vamsikk_0-1736929826107.png" alt="vamsikk_0-1736929826107.png" /></span><P> </P></LI></UL><P><STRONG>Configuration:</STRONG></P><UL><LI><STRONG>General Tab:</STRONG> Assign a descriptive name to your aggregator for easy identification.</LI><LI><STRONG>Correlation Tab:</STRONG> Define the field used to group related messages. For instance, messages with the same "CustomerID" will be grouped together.</LI><UL><LI><STRONG>Example:</STRONG> Aggregating employee, personal, and student records based on their IDs. Messages with the same ID (e.g., "Emp123," "Per456," "Stu789") will be combined, while those with different IDs will be collected separately within the same aggregator.</LI><LI><DIV class=""> </DIV><DIV class=""> </DIV><DIV class=""> </DIV><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Screenshot 2025-01-08 174444.png" style="width: 782px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/212151iEAA158118F80D92A/image-size/large?v=v2&px=999" role="button" title="Screenshot 2025-01-08 174444.png" alt="Screenshot 2025-01-08 174444.png" /></span></P></LI></UL><LI><STRONG>Aggregation Strategy:</STRONG></LI></UL><OL><LI><STRONG>Incoming Format:</STRONG> Always set to XML, as aggregators currently support this format only.</LI><LI><STRONG>Aggregation Algorithm:</STRONG> Choose between two options:</LI></OL><UL><OL><UL><LI><STRONG>Combine:</STRONG> Concatenates collected messages in the order they are received.</LI><LI><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Screenshot 2025-01-08 174602.png" style="width: 877px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/212153i99A6DEAEE914B626/image-size/large?v=v2&px=999" role="button" title="Screenshot 2025-01-08 174602.png" alt="Screenshot 2025-01-08 174602.png" /></span></LI><LI><STRONG>Combine in Sequence:</STRONG> Orders/sorts collected messages based on a field specified in the "Message Sequence Expression" parameter.<BR /><DIV class=""> </DIV><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Screenshot 2025-01-08 174527.png" style="width: 925px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/212152i3BA493653523974B/image-size/large?v=v2&px=999" role="button" title="Screenshot 2025-01-08 174527.png" alt="Screenshot 2025-01-08 174527.png" /></span></LI></UL></OL></UL><P><STRONG>1.Message Sequence Expression (XPath):</STRONG> (Enabled only for "Combin<SPAN>e in Sequence")</SPAN></P><UL><OL><UL><LI>Define the XPath of the field used for sorting messages within the aggregator.</LI></UL></OL></UL><OL><LI><STRONG>Last Message Condition (XPath):</STRONG></LI></OL><UL><OL><UL><LI>Specify a field and its corresponding value to mark the end of message collection.</LI><LI><STRONG>Example:</STRONG> /PersonalDetails/PersonalDetail/PersonID = '1' - When an ID of "1" is received, the aggregator stops processing and proceeds to the next step.</LI></UL></OL></UL><OL><LI><STRONG>Completion Timeout (in minutes):</STRONG></LI></OL><UL><OL><UL><LI>Set the maximum time (in minutes) the aggregator waits for messages before processing the next steps in the pipeline.</LI></UL></OL></UL><OL><LI><STRONG>Data Store Name:</STRONG> (Usually auto-populated) This field displays the data store used for storing collected messages.<BR /><P>By understanding aggregators, you can optimize message handling within your integration flows, ensuring efficient processing and data management.<BR /><BR /></P><DIV class=""> </DIV><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="aggregator1.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/212155i60DA2D9140229651/image-size/large?v=v2&px=999" role="button" title="aggregator1.png" alt="aggregator1.png" /></span><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Screenshot 2025-01-08 175644.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/212156i4F58AC0A4247CC1D/image-size/large?v=v2&px=999" role="button" title="Screenshot 2025-01-08 175644.png" alt="Screenshot 2025-01-08 175644.png" /></span><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Screenshot 2025-01-08 175805.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/212157i62E8B1B0DF818F09/image-size/large?v=v2&px=999" role="button" title="Screenshot 2025-01-08 175805.png" alt="Screenshot 2025-01-08 175805.png" /></span></P></LI></OL>2025-01-17T15:36:24.244000+01:00https://community.sap.com/t5/crm-and-cx-blogs-by-sap/subscribing-sap-commerce-business-events-in-kyma-by-executing-serverless/ba-p/13990811Subscribing SAP Commerce business events in Kyma by executing serverless Functions2025-01-22T13:29:45.440000+01:00ksarnickihttps://community.sap.com/t5/user/viewprofilepage/user-id/1700269<H3 id="toc-hId-1209286953">Introduction</H3><P>A subject of this post is to show how to send business events like:</P><UL><LI>customer created</LI><LI>password forgotten</LI><LI>order created</LI><LI>product added to cart</LI></UL><P>from SAP Commerce to BTP, Kyma Runtime and subscribe to them by executing a serverless Function.</P><H3 id="toc-hId-1012773448">Prerequisites</H3><UL><LI>SAP Commerce instance installed</LI><LI><A href="https://help.sap.com/docs/btp/sap-business-technology-platform/getting-started-with-trial-account-in-kyma-environment" target="_self" rel="noopener noreferrer">SAP BTP global account & subaccount created and Trial Kyma environment enabled </A> </LI></UL><H3 id="toc-hId-816259943">Integrate SAP Commerce with BTP, Kyma Runtime</H3><P>1. Add following Kyma-related extensions in <STRONG>localextensions.xml</STRONG> file:</P><P> </P><pre class="lia-code-sample language-java"><code><extension name='kymaintegrationbackoffice' />
<extension name='kymaintegrationservices' /></code></pre><P> </P><P>2. Build & start a platform.</P><P>3. When SAP Commerce is up, go to: <STRONG><EM>System->Update </EM></STRONG>in HAC, select "<STRONG>Update Running System</STRONG>", then select extensions:</P><UL class="lia-list-style-type-circle"><LI><STRONG>kymaintegrationbackoffice</STRONG></LI><LI><STRONG>kymaintegrationservices</STRONG></LI></UL><P>and execute the update.</P><P>4. In Backoffice, go to: <EM><STRONG>System->API->Destination Targets</STRONG></EM>, select "<STRONG>Default_Template"</STRONG> and execute action: <STRONG>"Register Destination Target"</STRONG></P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="ksarnicki_0-1737375318251.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/214396i7E070E1DFD6D7601/image-size/medium?v=v2&px=400" role="button" title="ksarnicki_0-1737375318251.png" alt="ksarnicki_0-1737375318251.png" /></span></P><P>5. Provide following fields in the registration form:</P><UL class="lia-list-style-type-circle"><LI>Token URL: <EM>[<STRONG>will be available after registering SAP Commerce instance in BTP cockpit</STRONG>]</EM></LI><LI>New destination's id: <STRONG><EM>BTP_KYMA_RUNTIME</EM></STRONG></LI></UL><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="ksarnicki_2-1737375867322.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/214400i53F421BD1D41B85F/image-size/medium?v=v2&px=400" role="button" title="ksarnicki_2-1737375867322.png" alt="ksarnicki_2-1737375867322.png" /></span></P><H3 id="toc-hId-619746438">Register SAP Commerce in BTP cockpit and expose it to BTP, Kyma Runtime</H3><P>1. Enter the BTP global account and <SPAN>go to: </SPAN><STRONG><EM>System Landscape->Systems</EM> </STRONG>and select: "<STRONG>Add System"</STRONG>. Provide following fields in the form:</P><UL class="lia-list-style-type-circle"><LI><SPAN class="">System Type: select "<STRONG><EM>SAP Commerce Cloud</EM></STRONG>"</SPAN></LI><LI><SPAN class="">System Name: <STRONG><EM>local SAP Commerce instance</EM></STRONG></SPAN></LI></UL><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="ksarnicki_0-1737376870749.png" style="width: 706px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/214405i88E85A55A6ED4E84/image-dimensions/706x143?v=v2" width="706" height="143" role="button" title="ksarnicki_0-1737376870749.png" alt="ksarnicki_0-1737376870749.png" /></span></P><P>2. After adding the system, get the required token URL:</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="ksarnicki_1-1737377109709.png" style="width: 693px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/214407iB6284DC25AB2D381/image-dimensions/693x137?v=v2" width="693" height="137" role="button" title="ksarnicki_1-1737377109709.png" alt="ksarnicki_1-1737377109709.png" /></span></P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="ksarnicki_2-1737377890413.png" style="width: 681px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/214418i80A2F6C3FB485292/image-dimensions/681x80?v=v2" width="681" height="80" role="button" title="ksarnicki_2-1737377890413.png" alt="ksarnicki_2-1737377890413.png" /></span></P><P>3. Paste the token to previous form in SAP Commerce Backoffice and finish the registration:</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="ksarnicki_4-1737378025098.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/214420i4F72677EB56BABDB/image-size/medium?v=v2&px=400" role="button" title="ksarnicki_4-1737378025098.png" alt="ksarnicki_4-1737378025098.png" /></span></P><P>4. See newly created <STRONG>"BTP_KYMA_RUNTIME"</STRONG> destination target with configuration of API to be exposed and events to be emitted:</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="ksarnicki_5-1737378560496.png" style="width: 481px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/214422iF3F98F7C2E7CFC04/image-dimensions/481x362?v=v2" width="481" height="362" role="button" title="ksarnicki_5-1737378560496.png" alt="ksarnicki_5-1737378560496.png" /></span></P><P>5. Expose registered SAP Commerce system to BTP, Kyma Runtime. In BTP Cockpit (global account) go to: <STRONG><EM>System Landscape->Formations</EM> </STRONG>and select: "<STRONG>Create Formation"</STRONG>. In the form provide:</P><DIV class=""><DIV class=""><DIV class=""><DIV class=""><DIV class=""><DIV class=""><UL class="lia-list-style-type-circle"><LI>Formation Name: <EM><STRONG>SAP Commerce To Kyma</STRONG></EM></LI><LI>Formation Type: select "<EM><STRONG>Side-by-Side Extensibility with Kyma</STRONG></EM>"</LI><LI>Subaccount: select <EM><STRONG>[your_subaccount]</STRONG></EM></LI></UL><DIV class=""><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="ksarnicki_0-1737380378808.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/214433i31ED9780352466C8/image-size/medium?v=v2&px=400" role="button" title="ksarnicki_0-1737380378808.png" alt="ksarnicki_0-1737380378808.png" /></span></DIV></DIV><DIV class=""><DIV class=""><DIV class=""><P>6. In the next step, select registered system: <EM><STRONG>local SAP Commerce instance</STRONG></EM></P></DIV></DIV></DIV></DIV><DIV class=""><DIV class=""><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="ksarnicki_1-1737380486259.png" style="width: 461px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/214434i768F8B021CB0052C/image-dimensions/461x212?v=v2" width="461" height="212" role="button" title="ksarnicki_1-1737380486259.png" alt="ksarnicki_1-1737380486259.png" /></span><P>7. SAP Commerce system is exposed to Kyma now:</P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="ksarnicki_2-1737380806349.png" style="width: 460px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/214438i4A620C1F80962781/image-dimensions/460x245?v=v2" width="460" height="245" role="button" title="ksarnicki_2-1737380806349.png" alt="ksarnicki_2-1737380806349.png" /></span><H3 id="toc-hId-423232933">Configure Kyma and check if SAP Commerce is connected in Kyma dashboard</H3><P>1. Enter BTP cockpit <U>subaccount</U>, select <STRONG><EM>Overview</EM> </STRONG>from menu and go to <EM><STRONG>Kyma Environment</STRONG></EM> section. You should already have the Kyma environment enabled (if not, go to the link given in "<STRONG>Prerequisites" </STRONG>paragraph). Enter the Kyma dashboard:</P><P> </P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="ksarnicki_3-1737381386644.png" style="width: 579px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/214444iF826C3662344654A/image-dimensions/579x220?v=v2" width="579" height="220" role="button" title="ksarnicki_3-1737381386644.png" alt="ksarnicki_3-1737381386644.png" /></span><P>2. In "<STRONG>Cluster Details"</STRONG> (main view after selecting the cluster) go to: <STRONG><EM>Configuration->Modules</EM> </STRONG>and click "<STRONG>Add"</STRONG>.</P><P>3. Select following modules and add them:</P><UL class="lia-list-style-type-circle"><LI><STRONG>application-connector</STRONG> - to connect with registered SAP Commerce system in BTP</LI><LI><STRONG>eventing</STRONG> - to handle events emmited by SAP Commerce</LI><LI><STRONG>nats</STRONG> - to use NATS server as a backend for eventing</LI><LI><STRONG>serverless</STRONG> - to use serverless Kyma Functions</LI></UL><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="ksarnicki_0-1737383167009.png" style="width: 482px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/214458i1994AB8D9069123B/image-dimensions/482x431?v=v2" width="482" height="431" role="button" title="ksarnicki_0-1737383167009.png" alt="ksarnicki_0-1737383167009.png" /></span><P>4. To properly enable the eventing functionality, edit <STRONG>eventing</STRONG> module and set backend type to <EM><STRONG>NATS</STRONG>.</EM></P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="ksarnicki_1-1737389559079.png" style="width: 645px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/214519i461D94A3B75799F8/image-dimensions/645x332?v=v2" width="645" height="332" role="button" title="ksarnicki_1-1737389559079.png" alt="ksarnicki_1-1737389559079.png" /></span><P>5. Enter "<STRONG>Cluster Details"</STRONG> view and go to <STRONG><EM>Integration->Application</EM> </STRONG>and check if you see local SAP Commerce instance connected:</P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="ksarnicki_0-1737451274459.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/214823iB97A39B26B35D574/image-size/medium?v=v2&px=400" role="button" title="ksarnicki_0-1737451274459.png" alt="ksarnicki_0-1737451274459.png" /></span><P>If not, please check if "<STRONG>BTP_KYMA_RUNTIME</STRONG>" destination target has already "<STRONG>Registered</STRONG>" status in Backoffice.</P><H3 id="toc-hId-226719428">Create serverless Function and Subscription to SAP Commerce event</H3><P><SPAN>1. Create a serverless Function that logs the "<STRONG>customer created</STRONG>" event emitted by SAP Commerce after customer registration. Thus, go to <EM><STRONG>Namespaces</STRONG></EM> and select "<STRONG>default</STRONG>". Then go to <EM><STRONG>Workloads->Functions </STRONG></EM>and create the function.</SPAN></P><P><SPAN>2. Provide following fields in the form:</SPAN></P><UL class="lia-list-style-type-circle"><LI><SPAN>Name - <EM><STRONG>customer-created</STRONG></EM></SPAN></LI><LI>Source Type: <EM><STRONG>Inline</STRONG></EM></LI><LI>Language: <EM><STRONG>JavaScript</STRONG></EM></LI><LI>Runtime: <EM><STRONG>Node.js 20</STRONG></EM></LI><LI>Source:</LI></UL></DIV></DIV></DIV></DIV></DIV></DIV><P> </P><pre class="lia-code-sample language-javascript"><code> module.exports = {
main: async function (event, context) {
console.log("Customer created:", event.data);
return;
}
}</code></pre><P> </P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="ksarnicki_2-1737455134552.png" style="width: 641px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/214855i8777984060D9A5BB/image-dimensions/641x445?v=v2" width="641" height="445" role="button" title="ksarnicki_2-1737455134552.png" alt="ksarnicki_2-1737455134552.png" /></span></P><P> 3. After creating the function wait until its state is "<STRONG>Running</STRONG>":</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="ksarnicki_0-1737465145546.png" style="width: 782px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/214984i758C739A27DFB6A9/image-dimensions/782x45?v=v2" width="782" height="45" role="button" title="ksarnicki_0-1737465145546.png" alt="ksarnicki_0-1737465145546.png" /></span></P><P>4. In the Backoffice, in previously created <STRONG>BTP_KYMA_RUNTIME</STRONG> Destination Target, in <SPAN><STRONG>Destinations and Event Configurations </STRONG></SPAN>section there are pre-defined events' ids available, i.a.:</P><P>- <STRONG>customer.created.v1</STRONG> - emitted after customer registration</P><P>- <STRONG>order.created.v1</STRONG> - emitted after placing order</P><P>- <STRONG>password.forgotten.v1</STRONG> - emitted after password forgotten action triggered</P><P>- <STRONG>product.addtocart.v1</STRONG> - emitted after adding product to the cart</P><P>We will use <STRONG>customer.created.v1</STRONG> event in our example.</P><P>5. To subscribe the event, create a Subscription resource. In the Kyma dashboard (<STRONG>"default"</STRONG> namespace view) go to <STRONG><EM>Configuration->Subscriptions</EM> </STRONG>and create the Subscription. Provide following fields in the form:</P><UL class="lia-list-style-type-circle"><LI>Name: <EM><STRONG>customer-created-sub</STRONG></EM></LI><LI>Types: <EM><STRONG>customer.created.v1</STRONG></EM></LI><LI>Service: select "<EM><STRONG>customer-created" </STRONG></EM>(name of previously created Function)</LI><LI>Sink: <EM><STRONG>[automatically populated after selecting the service]</STRONG></EM></LI><LI>Type matching: <STRONG>Standard</STRONG></LI><LI>Source: select <EM><STRONG>mp-local-sap-commerce-instance </STRONG></EM>(previously connected SAP Commerce instance)</LI></UL><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="ksarnicki_0-1737467085441.png" style="width: 629px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/214994iA2A4C354D64B3007/image-dimensions/629x517?v=v2" width="629" height="517" role="button" title="ksarnicki_0-1737467085441.png" alt="ksarnicki_0-1737467085441.png" /></span></P><P>6. All configuration steps are finished when a Subscription has status <STRONG>"Ready"</STRONG>.</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="ksarnicki_1-1737467294518.png" style="width: 776px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/214995i7315AE3214CD14C4/image-dimensions/776x40?v=v2" width="776" height="40" role="button" title="ksarnicki_1-1737467294518.png" alt="ksarnicki_1-1737467294518.png" /></span></P><H3 id="toc-hId-30205923">Register new customer on the storefront to test "customer created" event </H3><P>1. Go to storefront and register new user:</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="ksarnicki_0-1738916444481.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/223183iACBEE6E615087FB3/image-size/medium?v=v2&px=400" role="button" title="ksarnicki_0-1738916444481.png" alt="ksarnicki_0-1738916444481.png" /></span></P><P>2. You should see similar logs about emitting the event to Kyma in the SAP Commerce:</P><P> </P><pre class="lia-code-sample language-java"><code>INFO [Thread-14] [KymaEventEmitStrategy] Event (EventId : df428555-e4d5-4436-aa21-f9a9994a8854) sending response : <200,{"event-id":"df428555-e4d5-4436-aa21-f9a9994a8854","status":"","reason":""},[content-length:"76", content-type:"application/json", date:"Tue, 21 Jan 2025 15:06:35 GMT", server:"istio-envoy", x-envoy-upstream-service-time:"36"]></code></pre><P> </P><P>3. In Kyma dashboard select "<STRONG>customer-created"</STRONG> Function previously created, go to <SPAN>section </SPAN><EM><STRONG>Replicas of the Function</STRONG></EM><SPAN> and select the replica, then go to <EM><STRONG>Containers</STRONG></EM> section and click "<STRONG>View Logs".</STRONG></SPAN></P><P>You can find following logs with the event payload produced by the function after <STRONG>"customer created"</STRONG> event.</P><P> </P><pre class="lia-code-sample language-javascript"><code>Customer created: {
customerId: '5c2ef4c2-e6a8-4094-bb53-8f08c7dcefe3',
customerUid: '************@gmail.com',
storeUid: 'electronics'
}</code></pre><P> </P><H3 id="toc-hId--166307582">Conclusion</H3><P>We used BTP, Kyma Runtime to subscribe business events emitted from SAP Commerce. Created serverless Function that was a subscriber just logged the event payload. Nevertheless, we can use the Function to execute any logic written in node.js or Python, like complex calculations, storing data in external database, calling the API exposed by SAP Commerce or integrating with 3rd party services. Function body itself can be defined in <STRONG>Inline</STRONG> mode (source code added during Function creation) or fetched from indicated <STRONG>Git repository</STRONG>.</P><P> </P>2025-01-22T13:29:45.440000+01:00https://community.sap.com/t5/technology-blogs-by-sap/sap-btp-kyma-runtime-apirule-migration-timelines/ba-p/13995712SAP BTP, Kyma runtime: APIRule migration - timelines2025-01-24T12:33:06.451000+01:00strekmhttps://community.sap.com/t5/user/viewprofilepage/user-id/45483<P>Hello everyone! A couple of months ago, I published two blog posts:</P><UL><LI><SPAN class=""><A class="" href="https://community.sap.com/t5/technology-blogs-by-sap/sap-btp-kyma-runtime-apirule-migration-noauth-and-jwt-handlers/ba-p/13882833" target="_blank">SAP BTP, Kyma runtime: APIRule migration—noAuth and jwt handlers</A></SPAN></LI><LI><A class="" href="https://community.sap.com/t5/technology-blogs-by-sap/sap-btp-kyma-runtime-apirule-migration-ory-oathkeeper-based-oauth2-handlers/ba-p/13896184" target="_blank"><SPAN class="">SAP BTP, </SPAN><SPAN class="">Kyma runtime: APIRule migration—ORY Oathkeeper based OAuth2 handlers</SPAN></A></LI></UL><P>The blog posts explain migration details focusing on<SPAN> </SPAN><SPAN class="">API</SPAN>. Now, I would like to focus on timelines and important milestones. </P><H2 id="toc-hId-1080352229"><SPAN>Timeline Overview</SPAN></H2><P><SPAN>Let's quickly recap the events surrounding the migration to the stable v2 version of APIRule. <SPAN class="">API</SPAN> Gateway 2.7.0, promoted to the regular channel on October 28, 2024, introduced a fully functional APIRule v2alpha1. At the same time, APIRule v1beta1 became deprecated and scheduled for deletion. These two events opened a testing window, allowing you to start testing the <SPAN class="">API</SPAN> and the migration procedure, report any bugs, and provide feedback. By the end of March 2025, we plan to extend the <SPAN class="">API</SPAN> Gateway module with stable APIRule v2, and APIRule v2alpha1 will become deprecated. This date also opens a migration window, letting you change your configurations to version v2. In mid-May 2025, APIRule v1beta1 will be deleted, and finally, in mid-June 2025, APIRule v2alpha1 will be deleted. Then, the <SPAN class="">API</SPAN> Gateway module will only serve stable APIRule v2. </SPAN></P><P><SPAN><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="Group 3 (25).png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/216507i4D7400D64E748FCB/image-size/large?v=v2&px=999" role="button" title="Group 3 (25).png" alt="Group 3 (25).png" /></span></SPAN></P><H2 id="toc-hId-883838724"><SPAN>Milestones</SPAN></H2><H3 id="toc-hId-816407938"><SPAN>October 28, 2024 - <STRONG>Introduced APIRule v2alpha1 (current state of the art)</STRONG></SPAN></H3><P>The<SPAN> </SPAN><SPAN class="">API</SPAN><SPAN> </SPAN>Gateway module introduced a fully functional APIRule v2alpha1 that, in the future, will replace version v1beta1. The v2alpha1<SPAN> </SPAN><SPAN class="">API</SPAN><SPAN> </SPAN>and its functionalities are considered stable and are expected to be promoted to v2 with minimal to no changes. APIRule v2alpha1 was introduced to give you the possibility to get familiar with the new<SPAN> </SPAN><SPAN class="">API</SPAN>, test it out, and share your feedback. The<SPAN> </SPAN><SPAN class="">API</SPAN><SPAN> </SPAN>Gateway module fully supports migration to version v2alpha1, ensuring zero downti<SPAN>me during the process. At this point, no immediate action is required. Do not underestimate this change, though, and start planning for the next milestone. We highly encourage you to test the migration process to estimate the required effort accurately and thoroughly understand the changes. Can you already migrate? Yes! We are not discouraging this approach as we fully support APIRule v2alpha1 and provide assistance in case of any issues. You must remember, though, that APIRule v2alpha1 is not the final version and will be removed in June 2025.</SPAN></P><TABLE><TBODY><TR><TD><P><SPAN>APIRule v2alpha1 is not the final version and will be removed in June 2025. Therefore, you must migrate all APIRules to version v2 by that date.</SPAN></P></TD></TR></TBODY></TABLE><H3 id="toc-hId-619894433"><SPAN>March 31, 2025 - <STRONG>APIRule v2 stable version</STRONG></SPAN></H3><P class="" data-unlink="true"><SPAN>That will be the day! APIRule v2 will come to life. On March 31, 2025, APIRule v2 will become the official stable version and the main serving version. This means that when you run the command '</SPAN>kubectl get apirules -A -o yaml`<SPAN>, APIRule v2 will be displayed by default. To request version v1beta1 or v2alpha2, you must explicitly specify these versions in the commands. For example, you can use `kubectl get apirules.v2alpha2.gateway.kyma-project.io my-rule -o yaml` or `kubectl get </SPAN>apirules.v1beta1.gateway.kyma-project.io <SPAN> my-rule -o yaml`. This is especially important if you rely on CI/CD tools or use the command-line interface to list deployed resources.</SPAN></P><TABLE><TBODY><TR><TD><P><SPAN>APIRule v2alpha1 and v2 are not fully compatible with v1beta1, so it might happen that v1beta1 rules, such as OAuth2 handlers, won't be fully displayed as v2alpha1 or v2.</SPAN></P></TD></TR></TBODY></TABLE><P class=""><SPAN>You might be wondering: What will happen to my old APIRules? The answer is nothing will change immediately. They will still be there and continue functioning until May 12, 2025. To view them, you must explicitly request the v1beta1 version.</SPAN></P><P class=""><STRONG>The introduction of v2 will start the migration window. During this period, migrating all APIRules from v1beta1 and v2alpha1 to the newest version, v2, is mandatory.</STRONG> If you are migrating from v1beta1, please refer to my previous blog posts for guidance. If you are migrating from v2alpha1, it should be as simple as changing the version. </P><H3 id="toc-hId-423380928"><SPAN>May 12, 2025 - <STRONG>APIRule v1beta1 end of life</STRONG></SPAN></H3><P class=""><STRONG>At this point, you must have all your APIRules migrated and saved in version v2. </STRONG>APIGateway Controller will stop serving APIRule v1beta1, <SPAN class="">the version will be removed from CustomResourceDefinition (CRD),</SPAN> and the API Gateway module will delete all unmigrated custom resources (CRs). However, your workloads exposed with APIRule v1beta1 will not be taken down. We will ensure everything keeps running.</P><P class=""><SPAN class="">Resources</SPAN> created by APIGateway Controller will not be deleted but will become unmanaged. This means you will be responsible for configuring and maintaining them according to your needs. <SPAN class="">Additionally, Ory Oathkeeper will no longer be managed by the API Gateway module, and if you have APIRules based on it, you will need to take over its management.</SPAN> The migration procedure from unmanaged resources to APIRule v2 will <STRONG><SPAN class="">not</SPAN></STRONG><SPAN class=""> be supported in an automated way</SPAN>. Therefore, it is very important that you complete the migration to v2 before May 12, 2025, from both versions v1beta1 <SPAN class="">and v2alpha1.</SPAN></P><H3 id="toc-hId-226867423"><SPAN>June 16, 2025 - <STRONG>APIRule v2alpha1 end of life</STRONG></SPAN></H3><P class="">Finally, v2alpha1 will be removed from the CRD, and all existing CRs will be stored as the v2 version. From now on, the only version of APIRule will be v2.</P><H2 id="toc-hId--98728801"><SPAN>Summary</SPAN></H2><P><SPAN>In this blog post, I outlined important events and their corresponding necessary actions. I hope this helps you understand what to expect and plan accordingly. If you have any concerns or feedback, <A href="https://community.sap.com/t5/c-khhcw49343/SAP+BTP%25252C+Kyma+runtime/pd-p/73554900100800003012" target="_blank">leave us a question</A>. </SPAN></P>2025-01-24T12:33:06.451000+01:00https://community.sap.com/t5/technology-blogs-by-sap/part-2-revenue-accounting-and-reporting-rar-with-genai-and-rag/ba-p/13998645Part 2: Revenue Accounting and Reporting (RAR) with GenAI and RAG2025-01-28T03:39:06.463000+01:00rugved88https://community.sap.com/t5/user/viewprofilepage/user-id/842167<DIV class=""> <span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Picture7.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/218029i7CE45DAF17D33CD5/image-size/large?v=v2&px=999" role="button" title="Picture7.png" alt="Picture7.png" /></span><P><STRONG>Introduction</STRONG></P><P><SPAN>The integration of Large Language Models (LLMs) with Retrieval-Augmented Generation (RAG) addresses critical automation challenges in revenue recognition processes. Traditional SAP Revenue Accounting and Reporting (RAR) systems, while robust, often require significant manual intervention for complex contract analysis and revenue timing decisions. By incorporating LLMs with RAG's precise information retrieval capabilities, organizations can now automate previously manual tasks while significantly reducing errors. The system achieves this by combining the pattern recognition capabilities of LLMs with RAG's ability to ground responses in verified revenue recognition rules and standards. This fusion of technologies provides particular value in complex scenarios such as multi-element arrangements, variable consideration contracts, and timing-sensitive revenue recognition, where traditional rule-based automation often falls short.</SPAN></P></DIV><DIV class=""> </DIV><DIV class=""><div class="video-embed-center video-embed"><iframe class="embedly-embed" src="https://cdn.embedly.com/widgets/media.html?src=https%3A%2F%2Fwww.youtube.com%2Fembed%2FWUOz7Nqkq_M%3Ffeature%3Doembed&display_name=YouTube&url=https%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3DWUOz7Nqkq_M&image=https%3A%2F%2Fi.ytimg.com%2Fvi%2FWUOz7Nqkq_M%2Fhqdefault.jpg&type=text%2Fhtml&schema=youtube" width="600" height="337" scrolling="no" title="Automating SAP RAR with AI (LLM & RAG) and BTP: Smarter Contract Management" frameborder="0" allow="autoplay; fullscreen; encrypted-media; picture-in-picture;" allowfullscreen="true"></iframe></div><BR /><H2 id="toc-hId-1080440737"><STRONG>Enhanced Architecture Overview</STRONG></H2><P><SPAN>The SAP Revenue Accounting and Reporting architecture can be enhanced with a sophisticated GenAI/RAG processing layer that seamlessly integrates with existing operational systems and core RAR components. This new layer sits between the operational systems (Sales and Distribution, Contract Accounts Receivable and Payable, and non-SAP systems) and the SAP S/4HANA Revenue Accounting and Reporting engine. Through standardized IC (Integration Component) interfaces, operational data flows into the GenAI/RAG layer where documents undergo intelligent processing via the document grounding component. The system leverages SAP HANA's vector store capabilities for efficient embedding storage and retrieval, while the RAG retrieval engine works in conjunction with the LLM integration layer to enhance the traditional RAR processes. This enhanced architecture maintains the core RAR functionality - including RAI processing, contract management, and BRFplus business rules - while augmenting each step of the five-step revenue recognition model with AI capabilities. The result is a more intelligent system that can handle complex revenue arrangements through automated contract analysis, performance obligation detection, and revenue recognition timing, all while maintaining compliance with IFRS 15 and ASC 606 standards.</SPAN></P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="svgviewer-png-output (1).png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/218015iB4972C0F416B7FEB/image-size/large?v=v2&px=999" role="button" title="svgviewer-png-output (1).png" alt="svgviewer-png-output (1).png" /></span><P> </P><H2 id="toc-hId-883927232"><STRONG>Integrated System Components</STRONG></H2><P><SPAN>The RAG architecture comprises four essential subsystems working in concert. The document grounding layer handles preprocessing through meta-tagging and intelligent chunking before generating embeddings for vector storage in SAP HANA. A specialized retrieval pipeline manages vector search operations and implements the re-ranking logic for contextual relevance. The feedback subsystem employs machine learning algorithms for continuous weight adjustment based on user interactions, while the generative layer leverages LLMs to synthesize contextually appropriate responses from retrieved information. This modular architecture ensures both system flexibility and maintainable complexity while supporting the specific demands of revenue recognition workflows.</SPAN></P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Picture3.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/218017iAEC3C2ECC42CEA09/image-size/large?v=v2&px=999" role="button" title="Picture3.png" alt="Picture3.png" /></span><P> </P><H2 id="toc-hId-687413727"><STRONG>Advanced Retrieval Mechanisms</STRONG></H2><P><SPAN>The retrieval architecture implements two sophisticated mechanisms for optimal document processing. The first mechanism (1-4 in fig below) employs a multi-stage search process starting with global vector similarity calculations across all document chunks, followed by local context refinement focused on top-ranked results. A weighted query refinement phase then incorporates high-ranking chunk terms to create context-aware queries, culminating in a final retrieval pass that aggregates the most relevant information.</SPAN></P><P><SPAN> </SPAN></P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Picture5.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/218019i26F28DE40B659948/image-size/large?v=v2&px=999" role="button" title="Picture5.png" alt="Picture5.png" /></span><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Picture6.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/218020i9D0E5EACFE0D7EE5/image-size/large?v=v2&px=999" role="button" title="Picture6.png" alt="Picture6.png" /></span><P><SPAN>The second mechanism (5 in fig above) utilizes feedback-driven weight adjustment, where initial embeddings and similarity scores form the foundation for an adaptive ML model. This model continuously evolves through user feedback integration, employing scaling factors to adjust chunk weights dynamically. The system stores these refined weights persistently, enabling progressive improvement in retrieval accuracy across multiple queries while maintaining complete audit trails for revenue recognition compliance.</SPAN></P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Picture4.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/218018i9EDD232E6559DE24/image-size/large?v=v2&px=999" role="button" title="Picture4.png" alt="Picture4.png" /></span><H2 id="toc-hId-490900222"><STRONG>Vector Database Integration</STRONG></H2><P><SPAN>SAP HANA's vector database capabilities form the backbone of the retrieval system, enabling efficient storage and querying of high-dimensional embeddings. The database architecture supports real-time indexing of new documents while maintaining rapid query performance through optimized index structures. Automated synchronization ensures consistency between the vector store and traditional relational data.</SPAN></P><H2 id="toc-hId-294386717"><STRONG>Performance Optimization</STRONG></H2><P><SPAN>Advanced caching mechanisms and query optimization techniques ensure rapid response times even with large document volumes. The system implements intelligent batching for vector operations, maximizing GPU utilization during embedding generation. Feedback-driven weight adjustments continuously refine the model's performance, with cosine similarity rates improving from 88.15% to over 95% through iterative optimization.</SPAN></P><H2 id="toc-hId-97873212"><STRONG>Future Outlook</STRONG></H2><P><SPAN>As retrieval technologies evolve, the integration with revenue management systems will become increasingly sophisticated. Emerging developments in sparse attention mechanisms and efficient indexing strategies promise to further enhance retrieval accuracy while reducing computational overhead. These advancements will enable more nuanced understanding of complex revenue arrangements while maintaining strict compliance with evolving standards.</SPAN></P><P>read part 1 here: <A href="https://community.sap.com/t5/technology-blogs-by-sap/part-1-sap-revenue-accounting-and-reporting-rar-foundation-for-modern/ba-p/13998790" target="_blank">Part 1: SAP Revenue Accounting and Reporting (RAR)... - SAP Community</A></P><P> </P><P> #SAP #RevenueRecognition #SAPRAR #AIinFinance #GenAI #RAG #LargeLanguageModels #MachineLearning #SAPBTP #ComplianceAutomation #SAPHANA #RevenueManagement #AdvancedRetrieval #FinancialInnovation #DigitalTransformation #ContractAnalysis #MultiElementArrangements #BusinessIntelligence #IFRS15 #ASC606 #VectorDatabase #AutomationInnovation</P><P> </P><P> </P></DIV>2025-01-28T03:39:06.463000+01:00https://community.sap.com/t5/technology-blogs-by-sap/part-1-sap-revenue-accounting-and-reporting-rar-foundation-for-modern/ba-p/13998790Part 1: SAP Revenue Accounting and Reporting (RAR): Foundation for Modern Revenue Management2025-01-28T04:19:37.812000+01:00rugved88https://community.sap.com/t5/user/viewprofilepage/user-id/842167<P><SPAN>In today's complex business environment, managing revenue recognition has become increasingly challenging, especially with the introduction of standards like IFRS 15 and ASC 606. Organizations across industries are grappling with intricate revenue streams, diverse contract types, and stringent compliance requirements. SAP Revenue Accounting and Reporting (RAR) emerges as a comprehensive solution to these challenges, providing automated and standardized revenue recognition processes that ensure compliance while improving efficiency.</SPAN></P><H2 id="toc-hId-1080441848"><FONT size="5"><STRONG>The Evolution of Revenue Recognition</STRONG></FONT></H2><P><SPAN>Revenue recognition has transformed significantly from simple invoice-based accounting to a sophisticated process that considers multiple performance obligations, complex pricing structures, and varying recognition patterns. SAP RAR addresses these modern requirements by providing a robust foundation built on three core pillars: contract management, revenue recognition engine, and seamless integration capabilities.</SPAN></P><P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="Untitled diagram-2025-01-24-194814.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/218106iDEC1B9A0F5D1119E/image-size/large?v=v2&px=999" role="button" title="Untitled diagram-2025-01-24-194814.png" alt="Untitled diagram-2025-01-24-194814.png" /></span></P><P> </P><H2 id="toc-hId-883928343"><FONT size="5"><STRONG>Understanding the Core Process</STRONG></FONT></H2><P><SPAN>The journey of revenue recognition in SAP RAR represents a sophisticated orchestration of multiple components working together to ensure accurate and compliant revenue processing. Let's explore this through a comprehensive real-world scenario that demonstrates the system's capabilities.</SPAN></P><P><SPAN>Consider TechServe Solutions, a technology company that offers both hardware and subscription-based software services. They've recently closed a deal that includes:</SPAN></P><UL><LI><SPAN>Enterprise Server Hardware: $100,000</SPAN></LI><LI><SPAN>Software License: $50,000/year for 3 years</SPAN></LI><LI><SPAN>Implementation Services: $30,000</SPAN></LI><LI><SPAN>Maintenance Support: $20,000/year for 3 years</SPAN></LI></UL><P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="Untitled diagram-2025-01-24-200945.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/218108iE167ADC43603CA9B/image-size/large?v=v2&px=999" role="button" title="Untitled diagram-2025-01-24-200945.png" alt="Untitled diagram-2025-01-24-200945.png" /></span></P><H3 id="toc-hId-816497557"><FONT size="5"><STRONG>Contract Inception and RAI Creation</STRONG></FONT></H3><P><SPAN>When the sales order is created, SAP RAR begins its sophisticated processing journey. The system automatically generates Revenue Accounting Items (RAIs) for each component of the deal. These RAIs serve as the foundation for all subsequent revenue recognition processes. During this phase, the system captures critical information including contract terms, pricing details, and delivery schedules.</SPAN></P><H3 id="toc-hId-619984052"><FONT size="5"><STRONG>Performance Obligation Breakdown</STRONG></FONT></H3><P><SPAN>SAP RAR's intelligent contract analysis capabilities automatically identify and separate distinct performance obligations within the contract. </SPAN></P><H3 id="toc-hId-423470547"><FONT size="5"><STRONG>Price Allocation and SSP Determination</STRONG></FONT></H3><P><SPAN>One of the most complex aspects of revenue recognition is the fair allocation of transaction prices. SAP RAR handles this through its sophisticated Standalone Selling Price (SSP) engine. For TechServe's contract:</SPAN></P><P><SPAN>The total contract value of $280,000 ($100,000 + $150,000 + $30,000 + $60,000) is allocated based on relative SSP values. SAP RAR automatically calculates these allocations while considering:</SPAN></P><UL><LI><SPAN>Market-based pricing data</SPAN></LI><LI><SPAN>Historical transaction analysis</SPAN></LI><LI><SPAN>Contract-specific adjustments</SPAN></LI><LI><SPAN>Volume discounts and bundling impacts</SPAN></LI></UL><H3 id="toc-hId-226957042"><FONT size="5"><STRONG>Revenue Recognition Scheduling</STRONG></FONT></H3><P><SPAN>Based on the performance obligations and price allocations, SAP RAR creates a detailed revenue recognition schedule. This automated process considers:</SPAN></P><OL><LI><STRONG>Time-Based Recognition</STRONG><SPAN> The software license and maintenance support revenues are scheduled over 36 months, with automatic recognition triggers at each period end.</SPAN></LI><LI><STRONG>Event-Based Recognition</STRONG><SPAN> Hardware revenue recognition is linked to delivery completion, while implementation revenue follows project milestone achievements.</SPAN></LI><LI><STRONG>Multi-Element Considerations</STRONG><SPAN> The system manages interdependencies between different performance obligations, ensuring proper revenue timing and allocation.</SPAN></LI></OL><H3 id="toc-hId-30443537"><FONT size="5"><STRONG>Financial Integration and Posting</STRONG></FONT></H3><P><SPAN>The final stage involves the seamless integration with financial systems through a three-step process:</SPAN></P><P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="Untitled diagram-2025-01-24-201606.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/218109iF15F39E965A4244B/image-size/medium?v=v2&px=400" role="button" title="Untitled diagram-2025-01-24-201606.png" alt="Untitled diagram-2025-01-24-201606.png" /></span></P><P><SPAN>This robust process ensures that every revenue dollar is properly recognized, tracked, and reported according to the relevant accounting standards while maintaining complete audit trails and documentation.</SPAN></P><H2 id="toc-hId--295152687"><STRONG>Technical Architecture and Integration</STRONG></H2><P><SPAN>At the heart of SAP RAR lies a sophisticated technical architecture that ensures seamless processing of revenue recognition requirements. The system integrates with various source systems through the Adapter Reuse Layer (ARL), which standardizes incoming data into Revenue Accounting Items (RAIs). These items then flow through the BRFplus rules engine, where business logic determines their treatment.</SPAN></P><P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="Untitled diagram-2025-01-24-200711.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/218110iD8F64F3357F70CB5/image-size/medium?v=v2&px=400" role="button" title="Untitled diagram-2025-01-24-200711.png" alt="Untitled diagram-2025-01-24-200711.png" /></span></P><P> </P><H2 id="toc-hId--491666192"><FONT size="5"><STRONG>The Role of Artificial Intelligence</STRONG></FONT></H2><P><SPAN>The integration of artificial intelligence in SAP RAR represents a significant leap forward in revenue recognition capabilities. Modern implementations leverage machine learning algorithms to analyze contract terms, predict revenue patterns, and identify potential recognition issues before they occur. Natural language processing capabilities help in automatically extracting key terms from contracts, while predictive analytics provide insights into future revenue trends.</SPAN></P><H2 id="toc-hId--688179697"><FONT size="5"><STRONG>Implementation Impact</STRONG></FONT></H2><P><SPAN>Organizations implementing SAP RAR experience transformative benefits across their revenue operations. Manual processing time typically reduces by up to 80%, while recognition accuracy improves to near-perfect levels. The system's ability to handle complex revenue scenarios while maintaining compliance with IFRS 15 and ASC 606 provides organizations with confidence in their financial reporting.</SPAN></P><H2 id="toc-hId--537438845"><FONT size="5"><STRONG>Future Outlook</STRONG></FONT></H2><P><SPAN>The future of revenue recognition in SAP RAR is closely tied to the advancement of intelligent technologies. As artificial intelligence and machine learning capabilities continue to evolve, we can expect even more sophisticated features in contract analysis, revenue prediction, and compliance automation. The system's ability to learn from historical patterns and adapt to new business scenarios will become increasingly valuable for organizations managing complex revenue streams.</SPAN></P><H2 id="toc-hId--733952350"><FONT size="5"><STRONG>Conclusion</STRONG></FONT></H2><P><SPAN>SAP Revenue Accounting and Reporting represents more than just a technical solution; it embodies a modern approach to revenue management that combines automation, intelligence, and compliance. As businesses continue to evolve with new revenue models and complex contracts, SAP RAR's robust foundation and forward-looking capabilities ensure that organizations can confidently manage their revenue recognition processes both today and in the future.<BR /><BR /><FONT color="#000080">The next chapter discusses the <STRONG>Business AI</STRONG> component built on <STRONG>SAP BTP</STRONG> services to make <STRONG>RAR </STRONG>fully autonomous. Don’t forget to check it out! <span class="lia-unicode-emoji" title=":smiling_face_with_sunglasses:">😎</span></FONT><BR /><A href="https://community.sap.com/t5/technology-blogs-by-sap/part-2-revenue-accounting-and-reporting-rar-with-genai-and-rag/ba-p/13998645" target="_blank">Part 2: Revenue Accounting and Reporting (RAR) wit... - SAP Community</A><BR /><BR />#SAP #RevenueRecognition #SAPRAR #IFRS15 #ASC606 #FinanceAutomation #RevenueManagement #ArtificialIntelligence #MachineLearning #Compliance #AccountingStandards #TechInnovation #BusinessEfficiency #DigitalTransformation #FinancialReporting #Automation #DataDriven #FutureOfFinance #ContractManagement #PerformanceObligations #AIinFinance #SAPSolutions #FinancialCompliance #RevenueAutomation #TechServeSolutions</SPAN></P><P> </P>2025-01-28T04:19:37.812000+01:00https://community.sap.com/t5/technology-blogs-by-sap/cline-for-sap-ai-core-bringing-cline-s-power-to-the-sap-ecosystem/ba-p/14005989Cline for SAP AI Core: Bringing Cline's Power to the SAP Ecosystem2025-02-03T23:31:50.031000+01:00schardosinhttps://community.sap.com/t5/user/viewprofilepage/user-id/316950<H2 id="toc-hId-1701884008"><SPAN>Introduction</SPAN></H2><P><SPAN>In the ever-evolving landscape of AI-assisted development, integrating advanced AI capabilities directly into your workflow can significantly enhance productivity and innovation. I'm excited to introduce </SPAN><SPAN><STRONG>Cline for SAP AI Core</STRONG></SPAN><SPAN>, a new Visual Studio Code (VS Code) extension that brings the power of SAP AI Core into the agentic coding experience of Cline. This extension enables SAP developers to seamlessly interact with state-of-the-art AI models through their SAP Business Technology Platform (BTP) accounts, unlocking new levels of efficiency in coding and business application development.</SPAN></P><H2 id="toc-hId-1505370503"><SPAN>Why Cline for SAP AI Core?</SPAN></H2><P><SPAN>The original Cline extension has been transformative for developers, offering an AI partner that plans before coding, ensuring thoughtful and efficient code generation. However, it doesn't integrate external AI providers outside its direct control. Recognizing the need for SAP AI Core support within the SAP development ecosystem, I created this dedicated extension to bridge the gap.</SPAN></P><P><SPAN>With </SPAN><SPAN><STRONG>Cline for SAP AI Core</STRONG></SPAN><SPAN>, developers working with SAP BTP can now access advanced AI models natively within their VS Code environment, ensuring a seamless and efficient workflow tailored for enterprise use.</SPAN></P><H2 id="toc-hId-1308856998"><SPAN>Key Features</SPAN></H2><UL><LI><P><SPAN><STRONG>Seamless Integration with SAP AI Core</STRONG></SPAN><SPAN>: Directly connect to AI Core services within VS Code, allowing for a unified development environment.</SPAN></P></LI><LI><P><SPAN><STRONG>Access to Advanced AI Models</STRONG></SPAN><SPAN>: Utilize models such as Claude 3.5 Sonnet, Claude 3 Sonnet, Claude 3 Haiku, Claude 3 Opus, GPT-4o, GPT-4o Mini, and GPT-4, empowering developers with capabilities like code completion, debugging assistance, and natural language understanding.</SPAN></P></LI><LI><P><SPAN><STRONG>Tailored for SAP BTP Users</STRONG></SPAN><SPAN>: Leverage your SAP AI Core infrastructure within Cline for AI-driven development and automation, enhancing productivity and innovation.</SPAN></P></LI></UL><H2 id="toc-hId-1112343493"><SPAN>How to Get Started</SPAN></H2><P><SPAN><STRONG>Installation</STRONG></SPAN><SPAN>:</SPAN></P><UL><LI><P><SPAN>Open VS Code.</SPAN></P></LI><LI><P><SPAN>Navigate to the Extensions tab (Windows: </SPAN><STRONG>Ctrl+Shift+X</STRONG>- <SPAN>Mac: </SPAN><STRONG>Cmd+Shift+X</STRONG><SPAN>).</SPAN></P></LI><LI><P><SPAN>Search for "Cline for SAP AI Core".</SPAN></P></LI><LI><P><SPAN>Click "Install" and restart VS Code if needed.</SPAN></P></LI></UL><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="cline.gif" style="width: 702px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/221436iE2CD5D1300B77B45/image-dimensions/702x340?v=v2" width="702" height="340" role="button" title="cline.gif" alt="cline.gif" /></span></P><P><SPAN><STRONG>Configuration</STRONG></SPAN><SPAN>:</SPAN></P><UL><LI><P><SPAN>Open Settings in Cline for SAP AI Core.</SPAN></P></LI><LI><P><SPAN>Select SAP AI Core as your API provider.</SPAN></P></LI><LI><P><SPAN>Enter the required authentication details:</SPAN></P><UL><LI><P><SPAN><STRONG>AI Core Client ID</STRONG></SPAN></P></LI><LI><P><SPAN><STRONG>AI Core Client Secret</STRONG></SPAN></P></LI><LI><P><SPAN><STRONG>AI Core Base URL</STRONG></SPAN><SPAN> (e.g., </SPAN><SPAN><A href="https://api.ai.internalprod.eu-central-1.aws.ml.hana.ondemand.com/v2" target="_blank" rel="noopener nofollow noreferrer">https://api.ai.internalprod.eu-central-1.aws.ml.hana.ondemand.com/v2</A></SPAN><SPAN>)</SPAN></P></LI><LI><P><SPAN><STRONG>AI Core Auth URL</STRONG></SPAN><SPAN> (e.g., </SPAN><SPAN><A href="https://aicoreexample.authentication.sap.hana.ondemand.com/oauth/token" target="_blank" rel="noopener nofollow noreferrer">https://aicoreexample.authentication.sap.hana.ondemand.com/oauth/token</A></SPAN><SPAN>)</SPAN></P></LI><LI><P><SPAN><STRONG>AI Core Resource Group</STRONG></SPAN></P></LI></UL></LI><LI><P><SPAN>Select your preferred </SPAN><SPAN><STRONG>AI Model</STRONG></SPAN><SPAN> from the list of available models.</SPAN></P></LI></UL><H2 id="toc-hId-915829988"><SPAN>Unlocking New Possibilities</SPAN></H2><P><SPAN>By integrating Cline with SAP AI Core, developers can:</SPAN></P><UL><LI><P><SPAN><STRONG>Enhance Code Quality</STRONG></SPAN><SPAN>: Leverage AI to generate well-structured code, reducing errors and improving maintainability.</SPAN></P></LI><LI><P><SPAN><STRONG>Automate Repetitive Tasks</STRONG></SPAN><SPAN>: Utilize AI to handle routine coding tasks, allowing developers to focus on more complex aspects of development.</SPAN></P></LI><LI><P><SPAN><STRONG>Accelerate Development Cycles</STRONG></SPAN><SPAN>: With AI assistance, rapidly prototype and develop applications, shortening time-to-market.</SPAN></P></LI></UL><P><SPAN>For a comprehensive tutorial on how Cline can transform your coding workflow, you might find the following video helpful:</SPAN></P><P><A href="https://www.youtube.com/watch?v=KjqQC4AnJ1I" target="_blank" rel="noopener nofollow noreferrer"><SPAN>Cline + VS Code Changed How I Code Forever</SPAN></A></P><P><SPAN>Additionally, to learn more about how to use Cline in your SAP development workflow, check out this resource:</SPAN></P><P><A href="https://community.sap.com/t5/application-development-blog-posts/unlocking-the-power-of-ai-assisted-abap-coding-with-vs-code-and-cline/ba-p/13994804" target="_blank"><SPAN>Unlocking the Power of AI-Assisted ABAP Coding with VS Code and Cline</SPAN></A></P><H2 id="toc-hId-719316483"><SPAN>Join the Future of AI-Assisted Development</SPAN></H2><P><SPAN><STRONG>Cline for SAP AI Core</STRONG></SPAN><SPAN> opens up new possibilities for AI-driven coding and automation within the SAP ecosystem. By seamlessly integrating </SPAN><SPAN><STRONG>SAP AI Core</STRONG></SPAN><SPAN> into VS Code, developers are empowered with cutting-edge AI models to enhance productivity and innovation.</SPAN></P><P><SPAN>Give it a try today and experience the future of AI-assisted SAP development!</SPAN></P><P><SPAN>I would love to hear your feedback and experiences! Let’s discuss in the comments below. <span class="lia-unicode-emoji" title=":rocket:">🚀</span></SPAN></P><P> </P>2025-02-03T23:31:50.031000+01:00https://community.sap.com/t5/technology-blogs-by-members/sap-s-shift-to-open-standards-a-strategic-move-or-happy-accident/ba-p/14004376SAP’s Shift to Open Standards – A Strategic Move or Happy Accident?2025-02-04T18:08:09.112000+01:00arunmaarirajhahttps://community.sap.com/t5/user/viewprofilepage/user-id/124788<H4 id="toc-hId-1960013855">Introduction</H4><P>11 years ago, when I began my career as an SAP Integration consultant, often times when I google for work related research, I’d see results from SAP SCN and SAP help pages only. Today, what has changed is that, I see results on the same question/theme, being addressed by blogs/sites that have nothing to do with the SAP tool/platform on which, I am working currently. But the answer/content that I read there somehow turns out to be highly relevant to the issue/topic I am researching currently, on the SAP tool/platform that I am working with.</P><P>Upon reflection, as a broader trend across various SAP products and platforms, there seem to be a strong adoption of industry standard technologies, protocols & frameworks, which in many cases are open-source as well. While SAP’s proprietary standards have influenced others in the ERP industry for a long time, this remarkable departure and SAP gravitating towards standards in many aspects, is something that prompted me to connect the dots and to share with the community. In this post, I’d like to list a few of the areas, where I have noticed this trend:</P><H4 id="toc-hId-1763500350">1) Integrations:</H4><UL><LI><A href="https://learning.sap.com/learning-journeys/managing-clean-core-for-sap-s-4hana-cloud/exploring-how-to-make-landscapes-core-compliant-1" target="_blank" rel="noopener noreferrer">REST, ODATA APIs encouraged instead of bapi/rfc, proxy, Idoc</A></LI><LI>Edge Integration Cell is based on Kubernetes containers, which is industry standard to package & distribute workloads, a necessary evolution from the SOA style platform that SAP PI/PO used to be.</LI><LI>Well documented APIs in Business Accelerator Hub than in <A href="https://community.sap.com/t5/technology-blogs-by-members/automate-it-an-overview-on-sap-pi-po-apis/ba-p/13432306" target="_blank">PI/PO days</A></LI><LI>SAP Cloud Integration being based on Apache camel open-source framework. By extension, this facilitates direct support for camel expression language as well as various <A href="https://www.enterpriseintegrationpatterns.com/patterns/messaging/" target="_blank" rel="noopener nofollow noreferrer">enterprise integration patterns</A> – like splitter, router, gather, join in the Iflow design.</LI><LI>Integration advisor’s crowdsourced ML based mapping recommendation, supports conversion of canonical data model to standard EDI formats like ANSI X12, EDIFACT and vice-versa.</LI></UL><H4 id="toc-hId-1566986845">2) Platform choices:</H4><UL><LI>Choice of hyperscaler platforms – Azure, AWS, etc. allowed to be exercised by the customer. This makes SAP an ERP Software selling company.</LI><LI>Runtime environments such as Cloud Foundry & Kyma are open-source. (<A href="https://community.sap.com/t5/technology-blogs-by-sap/farewell-neo-sap-btp-multi-cloud-environment-the-deployment-environment-of/ba-p/13560080" target="_blank">Further reading</A>)</LI></UL><H4 id="toc-hId-1370473340">3) Application Development:</H4><UL><LI>Support for Java, JavaScript (node js), in addition to ABAP as tech stacks. This is a big step in utilizing coding skills available in the market.</LI><LI>BAS and Build Code being Git friendly.</LI></UL><H4 id="toc-hId-1173959835">4) Broader BTP services:</H4><UL><LI>Application logging service in BTP uses Kibana (an open-source project)</LI><LI>KServe, an open-source Model Inference Platform on Kubernetes, being used behind the scenes by AI Core.</LI><LI>Redis & Postgres hyperscaler offering in addition to the proprietary HANA DB.</LI><LI>Evolution of UX/UI from proprietary SAP GUI to Fiori / UI5 based front-end. OpenUI5 is a JavaScript UI Framework released by SAP under the Apache 2.0 license.</LI></UL><H4 id="toc-hId-977446330">Conclusion</H4><P>SAP’s growing adoption of open-source technologies and industry standards doesn’t just seem to be accidental, but based on a conscious vision, as reflected in the <A href="https://www.sap.com/documents/2024/05/ec7cc67d-bf7e-0010-bca6-c68f7e60039b.html" target="_blank" rel="noopener noreferrer">SAP Open-source Manifesto</A>. This shift benefits both customers and developers by fostering interoperability, flexibility, and innovation in the SAP ecosystem.</P><P><EM>Disclaimer: My observations are based on my exposure to SAP BTP & ERP only and this trend might not apply or apply differently across SAP’s other product lines.</EM></P>2025-02-04T18:08:09.112000+01:00https://community.sap.com/t5/technology-blogs-by-sap/sap-job-scheduling-service-retry-a-job-execution-using-ans/ba-p/14012327SAP Job Scheduling Service: Retry a Job Execution Using ANS2025-02-10T10:14:24.731000+01:00DenisDuevhttps://community.sap.com/t5/user/viewprofilepage/user-id/180332<P>Does the<SPAN> </SPAN><A title="https://discovery-center.cloud.sap/index.html#/serviceCatalog/job-scheduling-service?region=all" href="https://discovery-center.cloud.sap/index.html#/serviceCatalog/job-scheduling-service?region=all" target="_blank" rel="nofollow noopener noreferrer">Job Scheduling service</A><SPAN> </SPAN>have a retry mechanism of job executions? No<SPAN> </SPAN><span class="lia-unicode-emoji" title=":frowning_face:">☹️</span>.</P><P>But you can combine it with the <STRONG>power of ANS</STRONG> (<A title="https://discovery-center.cloud.sap/index.html#/serviceCatalog/sap-alert-notification-service?region=all" href="https://discovery-center.cloud.sap/index.html#/serviceCatalog/sap-alert-notification-service?region=all" target="_blank" rel="nofollow noopener noreferrer">Alert Notification service</A>) and set up a retry behavior that satisfies your needs. <span class="lia-unicode-emoji" title=":rocket:">🚀</span></P><P><EM>But how does it work?</EM></P><OL><LI>Job Scheduling service calls your application REST endpoint. <span class="lia-unicode-emoji" title=":globe_with_meridians:">🌐</span></LI><LI>Your application's endpoint fails for some reason. <span class="lia-unicode-emoji" title=":cross_mark:">❌</span></LI><LI>You have configured your job to trigger alert notifications on error, and Job Scheduling service sends an event to ANS. <span class="lia-unicode-emoji" title=":satellite_antenna:">📡</span></LI><LI>In ANS, the exact<SPAN> </SPAN>event<SPAN> </SPAN>and<SPAN> </SPAN>scheduleId<SPAN> </SPAN>is matched, and ANS sends a webhook to create a new one-time schedule (for the same job). <span class="lia-unicode-emoji" title=":direct_hit:">🎯</span></LI><LI>Job Scheduling service executes again (retries) the application REST endpoint (triggered by the new schedule). <span class="lia-unicode-emoji" title=":counterclockwise_arrows_button:">🔄</span></LI><LI>The application endpoint now returns HTTP 200 Success. <span class="lia-unicode-emoji" title=":white_heavy_check_mark:">✅</span></LI></OL><P>As you can see, this approach is quite flexible as it allows you to create custom conditions and actions. This can allow you to even trigger different jobs and chain them if needed.</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Diagram showing the communication between Job Scheduling service, cloud app and Alert Notification service" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/224120i4DF2CE322C6B88F5/image-size/large?v=v2&px=999" role="button" title="BlogPosts-retryANS.png" alt="Diagram showing the communication between Job Scheduling service, cloud app and Alert Notification service" /><span class="lia-inline-image-caption" onclick="event.preventDefault();">Diagram showing the communication between Job Scheduling service, cloud app and Alert Notification service</span></span></P><P> </P><P><EM>Let's do it in practice to see how it works!</EM></P><P>Prerequisites:</P><UL><LI><A title="https://help.sap.com/docs/job-scheduling/sap-job-scheduling-service/initial-setup" href="https://help.sap.com/docs/job-scheduling/sap-job-scheduling-service/initial-setup" target="_blank" rel="noopener noreferrer">Job Scheduling service instance</A> bound to a cloud application (we will retry its endpoint).</LI><LI><A title="https://help.sap.com/docs/alert-notification/sap-alert-notification-for-sap-btp/initial-setup?locale=en-US" href="https://help.sap.com/docs/alert-notification/sap-alert-notification-for-sap-btp/initial-setup?locale=en-US" target="_blank" rel="noopener noreferrer">Instance of the Alert Notification Service</A> (to receive the event).</LI></UL><H2 id="toc-hId-1702712202">Step 1</H2><P>First, we create a job with ANS enabled and schedule it to call our REST endpoint.</P><P>In our case, the endpoint will always return an error message that prompts us to trigger a retry.<SPAN> </SPAN><span class="lia-unicode-emoji" title=":warning:">⚠️</span></P><DIV class=""> </DIV><P> </P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="ans-create-schedule.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/224112i96C1E5F48835F74B/image-size/large?v=v2&px=999" role="button" title="ans-create-schedule.png" alt="ans-create-schedule.png" /></span><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="ans-create-job.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/224111iFD032E94C73E577B/image-size/large?v=v2&px=999" role="button" title="ans-create-job.png" alt="ans-create-job.png" /></span></P><P>Let's get JobId and ScheduleId - we will need them later. We can extract them from the URL of the browser<SPAN> </SPAN>#/jobs/1950702/schedules/5e704368-e0bc-4d30-beae-742e1c05a65f/overview. In our case, jobId:<SPAN> </SPAN>1950702<SPAN> </SPAN>and scheduleId:<SPAN> </SPAN>5e704368-e0bc-4d30-beae-742e1c05a65f</P><H2 id="toc-hId-1506198697">Step 2</H2><P>Our app will fail immediately, but we haven't configured a retry. Let's prepare for that.</P><H2 id="toc-hId-1309685192">Step 3</H2><P>This will be done in the ANS dashboard. We can provide the configurations as JSON (with import), but let's do it in the UI and we can later export it.</P><P>So from the list of instances, let's<SPAN> </SPAN><STRONG>open</STRONG><SPAN> </SPAN>the Alert Notification service instance.</P><H3 id="toc-hId-1242254406">Create Conditions</H3><OL><LI>For<SPAN> </SPAN>eventType<SPAN> </SPAN>EQUALS<SPAN> </SPAN>JobSchedulerJobExecution. See more info in <A title="https://help.sap.com/docs/alert-notification/sap-alert-notification-for-sap-btp/jobscheduler-events" href="https://help.sap.com/docs/alert-notification/sap-alert-notification-for-sap-btp/jobscheduler-events" target="_blank" rel="noopener noreferrer">Help Portal - SAP Job Scheduling service events</A>.</LI></OL><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="ans-condition-job-exectution.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/224107iB8885A533617850C/image-size/large?v=v2&px=999" role="button" title="ans-condition-job-exectution.png" alt="ans-condition-job-exectution.png" /></span></P><OL><LI>For<SPAN> </SPAN>severity<SPAN> </SPAN>EQUALS<SPAN> </SPAN>ERROR<SPAN> </SPAN>- so that only errors are matched. See <A title="https://help.sap.com/docs/alert-notification/sap-alert-notification-for-sap-btp/managing-conditions?locale=en-US#creating-conditions" href="https://help.sap.com/docs/alert-notification/sap-alert-notification-for-sap-btp/managing-conditions?locale=en-US#creating-conditions" target="_blank" rel="noopener noreferrer">more info on conditions on the Help Portal</A>.</LI></OL><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="ans-condition-severity.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/224108i8EB83EDD8FDA6D43/image-size/large?v=v2&px=999" role="button" title="ans-condition-severity.png" alt="ans-condition-severity.png" /></span></P><OL><LI>For<SPAN> </SPAN>resource.tags.scheduleId<SPAN> </SPAN>EQUALS<SPAN> </SPAN>5e704368-e0bc-4d30-beae-742e1c05a65f<SPAN> </SPAN>- so that only this specific schedule is retriggered. If we have not specified this, we can create a loop of constant retries. For more info on what the resource contains <A title="https://help.sap.com/docs/alert-notification/sap-alert-notification-for-sap-btp/jobscheduler-job-execution?locale=en-US#technical-details" href="https://help.sap.com/docs/alert-notification/sap-alert-notification-for-sap-btp/jobscheduler-job-execution?locale=en-US#technical-details" target="_blank" rel="noopener noreferrer">check the Help Portal</A>.</LI></OL><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="ans-condition-scheduleId.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/224109iB8837FA2CAD56519/image-size/large?v=v2&px=999" role="button" title="ans-condition-scheduleId.png" alt="ans-condition-scheduleId.png" /></span></P><H3 id="toc-hId-1045740901">Create Action</H3><P>This is the interesting part. Here will need to call the Job Scheduling service API. To do that, we will use<A title="https://help.sap.com/docs/alert-notification/sap-alert-notification-for-sap-btp/webhook-action-types" href="https://help.sap.com/docs/alert-notification/sap-alert-notification-for-sap-btp/webhook-action-types" target="_blank" rel="noopener noreferrer"> WEB HOOK OAUTH</A>, which means that we will need credentials to call the API. We can get them from the application or by creating a service key. <span class="lia-unicode-emoji" title=":key:">🔑</span></P><P>Let's use a service key. We can create it from the <STRONG>Instances</STRONG> page in the SAP BTP cockpit. Choose you Job Scheduler instance and in the section <STRONG>Service Keys</STRONG>, choose <STRONG>Create</STRONG>. Check <A title="https://help.sap.com/docs/btp/sap-business-technology-platform/creating-service-keys" href="https://help.sap.com/docs/btp/sap-business-technology-platform/creating-service-keys" target="_blank" rel="noopener noreferrer">more info on how to create service keys</A>.</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="ans-service-key-for-js.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/224117i7F2A97C7C1A933E8/image-size/large?v=v2&px=999" role="button" title="ans-service-key-for-js.png" alt="ans-service-key-for-js.png" /></span></P><P>Then we will need some values, we can select the<SPAN> </SPAN>my-key<SPAN> </SPAN>and choose <STRONG>Form</STRONG>. Then we need:</P><UL><LI>url<SPAN> </SPAN>- this is the Job Scheduler service API endpoint</LI><LI>uaa<SPAN> </SPAN>- this is the section for oAuth authentication<UL><LI>clientid</LI><LI>clientsecret</LI><LI>url<SPAN> </SPAN>- authentication url</LI></UL></LI></UL><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="ans-service-key-values.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/224118i3A3A411BBD135484/image-size/large?v=v2&px=999" role="button" title="ans-service-key-values.png" alt="ans-service-key-values.png" /></span></P><P>Now back to ANS dashboard to create the action.</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="ans-action.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/224110i3A1B4211CBE75196/image-size/large?v=v2&px=999" role="button" title="ans-action.png" alt="ans-action.png" /></span></P><H3 id="toc-hId-849227396">Create Subscription</H3><P>It will combine our 3 conditions to do our action - the webhook.</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="ans-subscription.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/224119i7FF8FAB1AB440040/image-size/large?v=v2&px=999" role="button" title="ans-subscription.png" alt="ans-subscription.png" /></span></P><P>And that's it, we are ready! Now we only need to wait for the next failed execution (or trigger it ourselves by deactivating -> activating the schedule). <span class="lia-unicode-emoji" title=":hourglass_not_done:">⏳</span></P><H2 id="toc-hId-523631172">Step 4 and 5</H2><P>In these two steps we don't need to do anything, we only need to check the result. But what to check?</P><P>First, let's see the failed execution: <span class="lia-unicode-emoji" title=":magnifying_glass_tilted_left:">🔍</span></P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="ans-failed-normal-execution.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/224113i78E4D221AD5F17E8/image-size/large?v=v2&px=999" role="button" title="ans-failed-normal-execution.png" alt="ans-failed-normal-execution.png" /></span></P><P>It has id<SPAN> </SPAN>98e95540-2024-48f7-9a28-33e3b4e3aebe. We can follow this and see the new schedule that retried this execution.</P><P>And when we check the list of schedules, we see the new one-time schedule that was executed. <span class="lia-unicode-emoji" title=":white_heavy_check_mark:">✅</span></P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="ans-list-of-schedules.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/224114iDE269F2BFB23C13F/image-size/large?v=v2&px=999" role="button" title="ans-list-of-schedules.png" alt="ans-list-of-schedules.png" /></span></P><P>We can also check the <STRONG>Events</STRONG> for the job and see that the new schedule was created by the technical integration (your clientid).</P><DIV class=""> </DIV><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="ans-retry-events.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/224116i364FF4E4EEFC6E50/image-size/large?v=v2&px=999" role="button" title="ans-retry-events.png" alt="ans-retry-events.png" /></span></P><P>And that's it! <span class="lia-unicode-emoji" title=":rocket:">🚀</span> You have created a mechanism to retry job executions. You can now unleash your imagination for more integration scenarios between Job Scheduling service and the Alert Notification service (ANS).</P><H2 id="toc-hId-327117667">Troubleshooting <span class="lia-unicode-emoji" title=":hammer_and_wrench:">🛠</span>️</H2><P>If you have problems with the ANS - for example, the events are not delivered, you can call the ANS REST API and get information about what is going wrong. See <A title="https://help.sap.com/docs/alert-notification/sap-alert-notification-for-sap-btp/integrating-with-custom-application#consumer-api" href="https://help.sap.com/docs/alert-notification/sap-alert-notification-for-sap-btp/integrating-with-custom-application#consumer-api" target="_blank" rel="noopener noreferrer">undelivered events</A>.</P><H2 id="toc-hId-130604162">Appendix</H2><P>Here is how the exported configuration from ANS looks like. You can adjust the values in the JSON below, upload it into your ANS instance and get the integration working even faster.</P><PRE>{
<SPAN class="">"actions"</SPAN>: [
{
<SPAN class="">"type"</SPAN>: <SPAN class=""><SPAN class="">"</SPAN>WEB_HOOK_OAUTH<SPAN class="">"</SPAN></SPAN>,
<SPAN class="">"name"</SPAN>: <SPAN class=""><SPAN class="">"</SPAN>webhook-to-job-scheduling-service<SPAN class="">"</SPAN></SPAN>,
<SPAN class="">"state"</SPAN>: <SPAN class=""><SPAN class="">"</SPAN>ENABLED<SPAN class="">"</SPAN></SPAN>,
<SPAN class="">"description"</SPAN>: <SPAN class=""><SPAN class="">"</SPAN>This will use the OAuth credential flow - call the OAuth service with clientid and secretid and fetch a token to call the Job Scheduling service<SPAN class="">"</SPAN></SPAN>,
<SPAN class="">"properties"</SPAN>: {
<SPAN class="">"password"</SPAN>: <SPAN class="">null</SPAN>,
<SPAN class="">"tokenUrl"</SPAN>: <SPAN class=""><SPAN class="">"</SPAN>https://job-scheduling-testing.authentication.eu12.hana.ondemand.com/oauth/token?grant_type=client_credentials<SPAN class="">"</SPAN></SPAN>,
<SPAN class="">"sslTrustAll"</SPAN>: <SPAN class=""><SPAN class="">"</SPAN>false<SPAN class="">"</SPAN></SPAN>,
<SPAN class="">"destination"</SPAN>: <SPAN class=""><SPAN class="">"</SPAN>https://jobscheduler-rest.cfapps.eu12.hana.ondemand.com/scheduler/jobs/1950702/schedules<SPAN class="">"</SPAN></SPAN>,
<SPAN class="">"payloadTemplate"</SPAN>: <SPAN class=""><SPAN class="">"</SPAN>{<SPAN class="">\n\"</SPAN>active<SPAN class="">\"</SPAN>: true,<SPAN class="">\n</SPAN> <SPAN class="">\"</SPAN>description<SPAN class="">\"</SPAN>: <SPAN class="">\"</SPAN>Retry runLog {resource.tags.runLogId}<SPAN class="">\"</SPAN>,<SPAN class="">\n</SPAN> <SPAN class="">\"</SPAN>time<SPAN class="">\"</SPAN>: <SPAN class="">\"</SPAN>now<SPAN class="">\"\n</SPAN>}<SPAN class="">"</SPAN></SPAN>,
<SPAN class="">"username"</SPAN>: <SPAN class=""><SPAN class="">"</SPAN><redacted><SPAN class="">"</SPAN></SPAN>
}
}
],
<SPAN class="">"conditions"</SPAN>: [
{
<SPAN class="">"name"</SPAN>: <SPAN class=""><SPAN class="">"</SPAN>JobSchedulerJobExecution<SPAN class="">"</SPAN></SPAN>,
<SPAN class="">"mandatory"</SPAN>: <SPAN class="">true</SPAN>,
<SPAN class="">"propertyKey"</SPAN>: <SPAN class=""><SPAN class="">"</SPAN>eventType<SPAN class="">"</SPAN></SPAN>,
<SPAN class="">"predicate"</SPAN>: <SPAN class=""><SPAN class="">"</SPAN>EQUALS<SPAN class="">"</SPAN></SPAN>,
<SPAN class="">"propertyValue"</SPAN>: <SPAN class=""><SPAN class="">"</SPAN>JobSchedulerJobExecution<SPAN class="">"</SPAN></SPAN>,
<SPAN class="">"labels"</SPAN>: [],
<SPAN class="">"description"</SPAN>: <SPAN class=""><SPAN class="">"</SPAN>Will match events for job execution. If this is a task, you will need to match a different event.<SPAN class="">"</SPAN></SPAN>
},
{
<SPAN class="">"name"</SPAN>: <SPAN class=""><SPAN class="">"</SPAN>scheduleId-5e704368-e0bc-4d30-beae-742e1c05a65f<SPAN class="">"</SPAN></SPAN>,
<SPAN class="">"mandatory"</SPAN>: <SPAN class="">true</SPAN>,
<SPAN class="">"propertyKey"</SPAN>: <SPAN class=""><SPAN class="">"</SPAN>resource.tags.scheduleId<SPAN class="">"</SPAN></SPAN>,
<SPAN class="">"predicate"</SPAN>: <SPAN class=""><SPAN class="">"</SPAN>EQUALS<SPAN class="">"</SPAN></SPAN>,
<SPAN class="">"propertyValue"</SPAN>: <SPAN class=""><SPAN class="">"</SPAN>5e704368-e0bc-4d30-beae-742e1c05a65f<SPAN class="">"</SPAN></SPAN>,
<SPAN class="">"labels"</SPAN>: [],
<SPAN class="">"description"</SPAN>: <SPAN class=""><SPAN class="">"</SPAN>So that only this specific schedule is re-triggered. If we did not specify this, we can create a loop of constant retries.<SPAN class="">"</SPAN></SPAN>
},
{
<SPAN class="">"name"</SPAN>: <SPAN class=""><SPAN class="">"</SPAN>SeverityError<SPAN class="">"</SPAN></SPAN>,
<SPAN class="">"mandatory"</SPAN>: <SPAN class="">true</SPAN>,
<SPAN class="">"propertyKey"</SPAN>: <SPAN class=""><SPAN class="">"</SPAN>severity<SPAN class="">"</SPAN></SPAN>,
<SPAN class="">"predicate"</SPAN>: <SPAN class=""><SPAN class="">"</SPAN>EQUALS<SPAN class="">"</SPAN></SPAN>,
<SPAN class="">"propertyValue"</SPAN>: <SPAN class=""><SPAN class="">"</SPAN>ERROR<SPAN class="">"</SPAN></SPAN>,
<SPAN class="">"labels"</SPAN>: [],
<SPAN class="">"description"</SPAN>: <SPAN class=""><SPAN class="">"</SPAN>So that only errors are matched, we can of course do action on SUCCESS or WARNING<SPAN class="">"</SPAN></SPAN>
}
],
<SPAN class="">"subscriptions"</SPAN>: [
{
<SPAN class="">"name"</SPAN>: <SPAN class=""><SPAN class="">"</SPAN>RetryFailingJob<SPAN class="">"</SPAN></SPAN>,
<SPAN class="">"conditions"</SPAN>: [
<SPAN class=""><SPAN class="">"</SPAN>JobSchedulerJobExecution<SPAN class="">"</SPAN></SPAN>,
<SPAN class=""><SPAN class="">"</SPAN>SeverityError<SPAN class="">"</SPAN></SPAN>,
<SPAN class=""><SPAN class="">"</SPAN>scheduleId-5e704368-e0bc-4d30-beae-742e1c05a65f<SPAN class="">"</SPAN></SPAN>
],
<SPAN class="">"actions"</SPAN>: [
<SPAN class=""><SPAN class="">"</SPAN>webhook-to-job-scheduling-service<SPAN class="">"</SPAN></SPAN>
],
<SPAN class="">"state"</SPAN>: <SPAN class=""><SPAN class="">"</SPAN>ENABLED<SPAN class="">"</SPAN></SPAN>
}
]
}</PRE><P> </P>2025-02-10T10:14:24.731000+01:00https://community.sap.com/t5/technology-blogs-by-sap/changes-introduced-in-apirule-v2alpha1-and-v2/ba-p/14029529Changes Introduced in APIRule v2alpha1 and v22025-02-27T14:48:32.576000+01:00nataliasitkohttps://community.sap.com/t5/user/viewprofilepage/user-id/844120<P class="">APIRule <SPAN>custom resource (CR)</SPAN> in version <FONT face="courier new,courier">v1beta1</FONT> has been deprecated and will be removed on May 12, 2025. Version <FONT face="courier new,courier">v2alpha1</FONT>, introduced for testing purposes, will become deprecated on March 31, 2025, and removed on June 16, 2025. The stable APIRule <FONT face="courier new,courier">v2</FONT> is planned to be introduced in the regular channel on March 31, 2025. For more information on the timelines, see <A href="https://community.sap.com/t5/technology-blogs-by-sap/sap-btp-kyma-runtime-apirule-migration-timelines/ba-p/13995712" target="_blank"><SPAN class="">APIRule migration - timelines</SPAN></A>.</P><P class="">To migrate your APIRule CRs to version <FONT face="courier new,courier">v2</FONT>, follow the procedure described in the blog posts <A href="https://community.sap.com/t5/technology-blogs-by-sap/sap-btp-kyma-runtime-apirule-migration-noauth-and-jwt-handlers/ba-p/13882833" target="_blank"><SPAN class="">APIRule migration - noAuth and jwt handlers</SPAN></A> and <A href="https://community.sap.com/t5/technology-blogs-by-sap/sap-btp-kyma-runtime-apirule-migration-ory-oathkeeper-based-oauth2-handlers/ba-p/13896184" target="_blank"><SPAN class="">APIRule migration - Ory Oathkeeper based OAuth2 handlers</SPAN></A>. Since the APIRule CRD <FONT face="courier new,courier">v2alpha1</FONT> is identical to <FONT face="courier new,courier">v2</FONT>, the migration procedure for both versions is the same.</P><P><SPAN>This blog post presents all the significant changes introduced in APIRule <FONT face="courier new,courier">v2alpha1</FONT> and <FONT face="courier new,courier">v2. </FONT>Since version <FONT face="courier new,courier">v2alpha1</FONT> is identical to the stable version <FONT face="courier new,courier">v2</FONT>, you must consider these changes when migrating either to version <FONT face="courier new,courier">v2</FONT> or <FONT face="courier new,courier">v2alpha1</FONT>.</SPAN></P><H2 id="toc-hId-1703846184">A Workload Must Be in the Istio Service Mesh</H2><P>To use APIRules in versions<SPAN> </SPAN><FONT face="courier new,courier">v2</FONT><SPAN> </SPAN>or<SPAN> </SPAN><FONT face="courier new,courier">v2alpha1</FONT>, the workload that an APIRule exposes must be in the Istio service mesh. If the workload is not inside the Istio service mesh, the APIRule does not work as expected.</P><P><STRONG>Required action</STRONG>: To add a workload to the Istio service mesh,<SPAN> </SPAN><A href="https://help.sap.com/docs/btp/sap-business-technology-platform/enabling-istio-sidecar-proxy-injection?locale=en-US&version=Cloud" target="_blank" rel="noopener noreferrer">enable Istio sidecar proxy injection</A>.</P><H2 id="toc-hId-1507332679">Internal Traffic to Workloads Blocked by Default</H2><P>By default, the access to the workload from internal traffic is blocked. This approach aligns with Kyma’s “secure by default” principle. In one of the future releases of the API Gateway module, the APIRule CR will contain a new field<SPAN> </SPAN><STRONG>internalTraffic</STRONG><SPAN> </SPAN>set to<SPAN> </SPAN>Deny<SPAN> </SPAN>by default. This field will allow you to permit traffic from the CR. For more information on this topic, see issue<SPAN> </SPAN><A href="https://github.com/kyma-project/api-gateway/issues/1632" target="_blank" rel="noopener nofollow noreferrer">#1632</A>.</P><H2 id="toc-hId-1310819174">CORS Policy Is Not Applied by Default</H2><P>Version<SPAN> </SPAN>v1beta1<SPAN> </SPAN>applied the following CORS configuration by default:</P><PRE>Access-Control-Allow-Origins: "*"
Access-Control-Allow-Methods: "GET,POST,PUT,DELETE,PATCH"
Access-Control-Allow-Headers: "Authorization,Content-Type,*"Copy to clipboardErrorCopied</PRE><P>Versions<SPAN> </SPAN><FONT face="courier new,courier">v2</FONT><SPAN> </SPAN>and<SPAN> </SPAN><FONT face="courier new,courier">v2alpha1</FONT><SPAN> </SPAN>do not apply these default values. If the<SPAN> </SPAN><STRONG><FONT face="courier new,courier">corsPolicy</FONT> </STRONG>field is empty, the CORS configuration is not applied. For more information, see<SPAN> </SPAN><A href="https://github.com/kyma-project/api-gateway/issues/752" target="_blank" rel="noopener nofollow noreferrer">architecture decision record #752</A>.</P><P><STRONG>Required action</STRONG>: To use default CORS values defined in the APIRule<SPAN> </SPAN><FONT face="courier new,courier">v1beta1</FONT>, you must explicitly define them in the<SPAN> </SPAN><STRONG><FONT face="courier new,courier">corsPolicy</FONT> </STRONG>field.</P><H2 id="toc-hId-1114305669">Path Specification Must Not Contain Regexp</H2><P>APIRule in versions<SPAN> </SPAN><FONT face="courier new,courier">v2</FONT><SPAN> </SPAN>and<SPAN> </SPAN><FONT face="courier new,courier">v2alpha1</FONT><SPAN> </SPAN>does not support regexp in the<SPAN> </SPAN><STRONG><FONT face="courier new,courier">spec.rules.path</FONT></STRONG><SPAN> </SPAN>field of APIRule CR. Instead, it supports the use of the<SPAN> </SPAN><FONT face="courier new,courier">{*}</FONT><SPAN> </SPAN>and<SPAN> </SPAN><FONT face="courier new,courier">{**}</FONT><SPAN> </SPAN>operators. See the supported configurations:</P><UL><LI>Use the exact path (for example,<SPAN> </SPAN><FONT face="courier new,courier">/abc</FONT>). It matches the specified path exactly.</LI><LI>Use the<FONT face="courier new,courier"><SPAN> </SPAN>{*}</FONT><SPAN> </SPAN>operator (for example,<SPAN> </SPAN><FONT face="courier new,courier">/foo/{*}</FONT><SPAN> </SPAN>or<FONT face="courier new,courier"><SPAN> </SPAN>/foo/{*}/bar</FONT>). This operator represents any request that matches the given pattern, with exactly one path segment replacing the operator.</LI><LI>Use the<SPAN> </SPAN><FONT face="courier new,courier">{**}</FONT><SPAN> </SPAN>operator (for example,<FONT face="courier new,courier"><SPAN> </SPAN>/foo/{**}</FONT><SPAN> </SPAN>or<SPAN> </SPAN><FONT face="courier new,courier">/foo/{**}/bar</FONT>). This operator represents any request that matches the pattern with zero or more path segments in the operator’s place. It must be the last operator in the path.</LI><LI>Use the wildcard path<SPAN> </SPAN><FONT face="courier new,courier">/*,</FONT> which matches all paths. It’s equivalent to the<SPAN> </SPAN><FONT face="courier new,courier">/{**}</FONT><SPAN> </SPAN>path. If your configuration in APIRule<SPAN> </SPAN><FONT face="courier new,courier">v1beta1</FONT><SPAN> </SPAN>used such a path as<SPAN> </SPAN><FONT face="courier new,courier">/foo(.*)</FONT>, when migrating to the new versions, you must define configurations for two separate paths:<SPAN> </SPAN><FONT face="courier new,courier">/foo</FONT><SPAN> </SPAN>and<SPAN> </SPAN><FONT face="courier new,courier">/foo/{**}</FONT>.</LI></UL><P>For more information on the APIRule specification, see<SPAN> </SPAN><A href="https://kyma-project.io/#/api-gateway/user/custom-resources/apirule/v2alpha1/04-10-apirule-custom-resource" target="_blank" rel="noopener nofollow noreferrer">APIRule v2alpha1 Custom Resource</A>.</P><P><STRONG>Required action</STRONG>: Replace regexp expressions in the<SPAN> </SPAN><STRONG><FONT face="courier new,courier">spec.rules.path</FONT></STRONG><SPAN> </SPAN>field of your APIRule CRs with the<SPAN> </SPAN><FONT face="courier new,courier">{*}</FONT><SPAN> </SPAN>and<SPAN> </SPAN><FONT face="courier new,courier">{**}</FONT><SPAN> </SPAN>operators.</P><H2 id="toc-hId-917792164">JWT Configuration Requires Explicit Issuer URL</H2><P>Versions<SPAN> </SPAN><FONT face="courier new,courier">v2</FONT><SPAN> </SPAN>and<SPAN> </SPAN><FONT face="courier new,courier">v2alpha1</FONT><SPAN> </SPAN>of APIRule introduce an additional mandatory configuration filed for JWT-based authorization -<SPAN> </SPAN><STRONG><FONT face="courier new,courier">issuer</FONT></STRONG>. You must provide an explicit issuer URL in the APIRule CR. See an example configuration:</P><PRE>rules:
- jwt:
authentications:
- issuer: {YOUR_ISSUER_URL}
jwksUri: {YOUR_JWKS_URI}</PRE><P>If you use Cloud Identity Services, you can find the issuer URL in the OIDC well-known configuration at<SPAN> </SPAN><FONT face="courier new,courier">https://{YOUR_TENANT}.accounts.ondemand.com/.well-known/openid-configuration</FONT>.</P><P><STRONG>Required action</STRONG>: Add the<SPAN> </SPAN><STRONG><FONT face="courier new,courier">issuer</FONT></STRONG><SPAN> </SPAN>field to your APIRule specification when migrating to the new version. For more information on migration procedure for the<SPAN> </SPAN><STRONG><FONT face="courier new,courier">jwt</FONT></STRONG><SPAN> </SPAN>handler, see<SPAN> </SPAN><A href="https://community.sap.com/t5/technology-blogs-by-sap/sap-btp-kyma-runtime-apirule-migration-noauth-and-jwt-handlers/ba-p/13882833" target="_blank">SAP BTP, Kyma runtime: APIRule migration - noAuth and jwt handlers</A>.</P><H2 id="toc-hId-721278659">Removed Support for Oathkeeper</H2><P><SPAN>In one of the releases after 3.1.0, Oathkeeper will be moved to its own namespace. Support for Oathkeeper will be removed later. Once the support is removed, Oathkeeper will be installed in the clusters, but the API Gateway module will neither use it nor manage it.</SPAN></P><H3 id="toc-hId-653847873"><SPAN>Removed Support for Oauthkeeper OAuth2 Handlers</SPAN></H3><P>The APIRule CR in versions<SPAN> </SPAN><FONT face="courier new,courier">v2</FONT><SPAN> </SPAN>and<SPAN> </SPAN><FONT face="courier new,courier">v2alpha1</FONT><SPAN> </SPAN>does not support Oathkeeper OAuth2 handlers. Instead, it introduces the<SPAN> </SPAN><STRONG><FONT face="courier new,courier">extAuth</FONT></STRONG><SPAN> </SPAN>field, which you can use to configure an external authorizer.</P><P><STRONG>Required action</STRONG>: Migrate your Oathkeeper-based OAuth2 handlers to use an external authorizer. To learn how to do this, see<SPAN> </SPAN><A href="https://community.sap.com/t5/technology-blogs-by-sap/sap-btp-kyma-runtime-apirule-migration-ory-oathkeeper-based-oauth2-handlers/ba-p/13896184" target="_blank">SAP BTP, Kyma runtime: APIRule migration - Ory Oathkeeper-based OAuth2 handlers</A><SPAN> </SPAN>and<SPAN> </SPAN><A href="https://kyma-project.io/#/api-gateway/user/custom-resources/apirule/v2alpha1/04-15-api-rule-access-strategies" target="_blank" rel="noopener nofollow noreferrer">Configuration of the extAuth Access Strategy</A>.</P><H3 id="toc-hId-457334368">Removed Support for Oauthkeeper Mutators</H3><P>The APIRule CR in versions<SPAN> </SPAN><FONT face="courier new,courier">v2</FONT><SPAN> </SPAN>and<SPAN> </SPAN><FONT face="courier new,courier">v2alpha1</FONT><SPAN> </SPAN>does not support Oathkeeper mutators. Request mutators are replaced with request modifiers defined in the<FONT face="courier new,courier"> <STRONG>spec.rule.request</STRONG></FONT><SPAN> </SPAN>section of the APIRule CR. This section contains the request modification rules applied before the request is forwarded to the target workload. Token mutators are not supported in APIRules<SPAN> </SPAN><FONT face="courier new,courier">v2</FONT><SPAN> </SPAN>and<SPAN> </SPAN><FONT face="courier new,courier">v2alpha1</FONT>. For that, you must define your own<SPAN> </SPAN><STRONG><FONT face="courier new,courier">extAuth</FONT></STRONG><SPAN> </SPAN>configuration.</P><P><STRONG>Required action</STRONG>: Migrate your rules that rely on Oathkeeper mutators to use request modifiers or an external authorizer. For more information, see<SPAN> </SPAN><A href="https://kyma-project.io/#/api-gateway/user/custom-resources/apirule/v2alpha1/04-15-api-rule-access-strategies" target="_blank" rel="noopener nofollow noreferrer">Configuration of the extAuth Access Strategy</A><SPAN> </SPAN>and<SPAN> </SPAN><A href="https://kyma-project.io/#/api-gateway/user/custom-resources/apirule/v2alpha1/04-10-apirule-custom-resource" target="_blank" rel="noopener nofollow noreferrer">APIRule v2alpha1 Custom Resource</A>.</P><H2 id="toc-hId-131738144">Removed Support for Opaque Tokens</H2><P>The APIRule CR in versions<SPAN> </SPAN><FONT face="courier new,courier">v2</FONT><SPAN> </SPAN>and<SPAN> </SPAN><FONT face="courier new,courier">v2alpha1</FONT><SPAN> </SPAN>does not support the usage of Opaque tokens. Instead, it introduces the<SPAN> </SPAN><STRONG><FONT face="courier new,courier">extAuth</FONT></STRONG><SPAN> </SPAN>field, which you can use to configure an external authorizer.</P><P><STRONG>Required action</STRONG>: Migrate your rules that use Opaque tokens to use an external authorizer. For more information, see<SPAN> </SPAN><A href="https://kyma-project.io/#/api-gateway/user/custom-resources/apirule/v2alpha1/04-15-api-rule-access-strategies" target="_blank" rel="noopener nofollow noreferrer">Configuration of the extAuth Access Strategy</A>.</P><P><SPAN> </SPAN></P>2025-02-27T14:48:32.576000+01:00https://community.sap.com/t5/technology-blogs-by-sap/sap-user-experience-q1-2025-update-part-6-sap-analytics-cloud-amp-sap/ba-p/14029182SAP User Experience Q1/2025 Update – Part 6: SAP Analytics Cloud & SAP Business Technology Platform2025-02-28T06:00:00.017000+01:00ThomasReisshttps://community.sap.com/t5/user/viewprofilepage/user-id/149639<P><STRONG>This sixth post in my series gives an overview of latest user experience (UX) innovations in SAP Analytics Cloud and SAP Business Technology Platform (BTP). The highlights for SAP Analytics Cloud are the support for the SAP Fiori visual theme Horizon, giving users an experience consistent with other products; the Compass for business users to easily do Monte-Carlo simulations; Video Data Stories, and enhancements to the just ask natural language query capability. For SAP BTP, have a look at the new UX for the SAP Integration Suite, SAP BTP Kyma runtime, and SAP Build Apps.</STRONG></P><P> </P><H1 id="toc-hId-1574759800">SAP Analytics Cloud</H1><P>In addition to full support for the SAP Fiori visual theme Horizon, the Q1/2025 release of SAP Analytics Cloud released on February 26th brings some great new experiences for users. I’ll focus here on these three:</P><UL><LI>The new Compass for easy Monte Carlo simulations by business users.</LI><LI>Video Data Stories, enabling business users to easily create videos to present their stories.</LI><LI>Just Ask enhancements.</LI></UL><P><A title="https://www.sap.com/cmp/nl/data-and-analytics-news/index.html" href="https://www.sap.com/cmp/nl/data-and-analytics-news/index.html" target="_blank" rel="noopener noreferrer">Subscribe</A> to the SAP D&A Quarterly Newsletter to get the latest news, customer stories, events, and innovations delivered directly to your inbox.</P><H2 id="toc-hId-1507329014">Support for SAP Fiori visual theme Horizon</H2><P>SAP Analytics Cloud now also supports the SAP Fiori visual theme Horizon – not only for embedded uses cases as before, but now stand-alone too. As a result, users of our cloud applications can have a consistent experience when switching to SAP Analytics Cloud. Figure 1 shows an example.</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Figure 1: SAP Analytics Cloud with the SAP Fiori visual theme Horizon. ALT Text: An example screenshot showing what chart, table, input control and widgets look like with the Horizon visual theme." style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/231072iCA04646CD6288CDC/image-size/large?v=v2&px=999" role="button" title="01 SAC with Horizon.jpg" alt="Figure 1: SAP Analytics Cloud with the SAP Fiori visual theme Horizon. ALT Text: An example screenshot showing what chart, table, input control and widgets look like with the Horizon visual theme." /><span class="lia-inline-image-caption" onclick="event.preventDefault();">Figure 1: SAP Analytics Cloud with the SAP Fiori visual theme Horizon. ALT Text: An example screenshot showing what chart, table, input control and widgets look like with the Horizon visual theme.</span></span></P><P>Find out more in this blog post:</P><UL><LI><A class="" href="https://community.sap.com/t5/technology-blogs-by-sap/horizon-theme-and-templates-for-stories-in-sap-analytics-cloud/ba-p/13657027" target="_blank">Horizon Theme and Templates for Stories in SAP Analytics Cloud</A>.</LI></UL><H2 id="toc-hId-1310815509">SAP Analytics Cloud Compass for Monte Carlo Simulation</H2><P>Non-technical users can now easily perform real-time multivariant analysis without prior IT setup or advanced statistic skills. You can trigger a new compass simulation via the toolbar or directly from a dashboard. If things are not going as planned, for example the gross revenue in the current quarter, you can trigger a simulation which will automatically detect the drivers and display probability distributions for gross revenue.</P><P>You can choose between low, medium or high precision, which uses 1,000, 10,000 or 100,000 iterations respectively. As you can see in Figure 2, this is visualized interactively, showing the probability for the current value. This is visualized by showing how likely the operating income will be exceeded (23% in the example) and how likely it will not be achieved (77%). At the bottom, you can see ranges for the pessimistic, realistic and optimistic cases (lower 5%, middle 90% and upper 5%). Since it is interactive, you can change the planned value and directly see how likely you are to exceed or not achieve it – as you can see in Figure 2.</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Figure 2: SAP Analytics Cloud Compass for Monte Carlo Simulation by business users. ALT Text: This short embedded GIF video shows a screen with a header “Target: Operating Income / Amount GC – Million USD”. Below that, a chart showing a probability distribution for Operating Income, looking similar to a normal distribution. It has a vertical line at 87.51, indicating that the probability of less income is 5% (labelled “Pessimistic Case”, and a vertical line at 175.20, indicating the probability of more income is 5% (labelled “Optimistic Case”). The 90% band in between is labelled “Realistic Case”, with a slider at 151.67 (shown in a box above the slider), with 77% shown on the left and 23% on the right (the probability of income being lower or higher). The user moves the slider to the left with the mouse to the value 106.10, and the two values to the left and right change to 16% and 84%. Then the user types in a value of 100, resulting in 12% and 88%." style="width: 939px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/231076iCD979F5C56671F96/image-size/large?v=v2&px=999" role="button" title="02 SAC Monte Carlo simulations (5fps).gif" alt="Figure 2: SAP Analytics Cloud Compass for Monte Carlo Simulation by business users. ALT Text: This short embedded GIF video shows a screen with a header “Target: Operating Income / Amount GC – Million USD”. Below that, a chart showing a probability distribution for Operating Income, looking similar to a normal distribution. It has a vertical line at 87.51, indicating that the probability of less income is 5% (labelled “Pessimistic Case”, and a vertical line at 175.20, indicating the probability of more income is 5% (labelled “Optimistic Case”). The 90% band in between is labelled “Realistic Case”, with a slider at 151.67 (shown in a box above the slider), with 77% shown on the left and 23% on the right (the probability of income being lower or higher). The user moves the slider to the left with the mouse to the value 106.10, and the two values to the left and right change to 16% and 84%. Then the user types in a value of 100, resulting in 12% and 88%." /><span class="lia-inline-image-caption" onclick="event.preventDefault();">Figure 2: SAP Analytics Cloud Compass for Monte Carlo Simulation by business users. ALT Text: This short embedded GIF video shows a screen with a header “Target: Operating Income / Amount GC – Million USD”. Below that, a chart showing a probability distribution for Operating Income, looking similar to a normal distribution. It has a vertical line at 87.51, indicating that the probability of less income is 5% (labelled “Pessimistic Case”, and a vertical line at 175.20, indicating the probability of more income is 5% (labelled “Optimistic Case”). The 90% band in between is labelled “Realistic Case”, with a slider at 151.67 (shown in a box above the slider), with 77% shown on the left and 23% on the right (the probability of income being lower or higher). The user moves the slider to the left with the mouse to the value 106.10, and the two values to the left and right change to 16% and 84%. Then the user types in a value of 100, resulting in 12% and 88%.</span></span></P><P>Find out more about this, and watch it in action in this video:</P><UL><LI>Video: <A href="https://www.youtube.com/watch?v=Z8T0GQKiNsg&t=145s" target="_blank" rel="noopener nofollow noreferrer">SAP Analytics Cloud: Top 5 New Features in Q1 2025 (Section 2 on Compass)</A> (2:35 min.)</LI></UL><H2 id="toc-hId-1114302004">Video Data Stories</H2><P>Another great user experience innovation with the latest release is the ability for business users to directly create short videos to present their data stories out of SAP Analytics Cloud – Figure 3 shows an example.</P><P><span class="lia-inline-image-display-wrapper lia-image-align-left" image-alt="Figure 3: Part of a Video Data Story created from SAP Analytics Cloud. ALT Text: A short video with animated text and charts in a mobile phone vertical format. It starts with the title “Sep 2024, results”, followed by “Gross Margin”. Then the text “$8.66 million” glides in, followed by “delta 2024 Aug +37.45%”. Next, these disappear and “Gross Margin per Location” appears, above a horizontal bar chart with three bars for California ($6.78 M), Nevada ($0,52 M) and Oregon ($1.36 M). This chart then morphs into a new horizontal bar chart with five bars for Los Angeles ($2.45 M), Oakland ($1.22 M), San Diego ($1.62 M), San Francisco ($0.29 M), and San Jose ($1.21 M)." style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/231086i5ABAB185408F404B/image-size/medium?v=v2&px=400" role="button" title="03 SAC Video Data Story (5fps - 35pc).gif" alt="Figure 3: Part of a Video Data Story created from SAP Analytics Cloud. ALT Text: A short video with animated text and charts in a mobile phone vertical format. It starts with the title “Sep 2024, results”, followed by “Gross Margin”. Then the text “$8.66 million” glides in, followed by “delta 2024 Aug +37.45%”. Next, these disappear and “Gross Margin per Location” appears, above a horizontal bar chart with three bars for California ($6.78 M), Nevada ($0,52 M) and Oregon ($1.36 M). This chart then morphs into a new horizontal bar chart with five bars for Los Angeles ($2.45 M), Oakland ($1.22 M), San Diego ($1.62 M), San Francisco ($0.29 M), and San Jose ($1.21 M)." /><span class="lia-inline-image-caption" onclick="event.preventDefault();">Figure 3: Part of a Video Data Story created from SAP Analytics Cloud. ALT Text: A short video with animated text and charts in a mobile phone vertical format. It starts with the title “Sep 2024, results”, followed by “Gross Margin”. Then the text “$8.66 million” glides in, followed by “delta 2024 Aug +37.45%”. Next, these disappear and “Gross Margin per Location” appears, above a horizontal bar chart with three bars for California ($6.78 M), Nevada ($0,52 M) and Oregon ($1.36 M). This chart then morphs into a new horizontal bar chart with five bars for Los Angeles ($2.45 M), Oakland ($1.22 M), San Diego ($1.62 M), San Francisco ($0.29 M), and San Jose ($1.21 M).</span></span></P><P><SPAN>It is really easy to create video data stories: you can select which data you want to show, how you want to display it (Figure 4), and select a background image and background music. We provide a selection of images and music out of the box for you to choose from.</SPAN></P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Figure 4: Creating Video Data Stories in SAP Analytics Cloud. ALT Text: The image shows part of a screenshot showing an SAP Analytics Cloud page with bar charts and a pie chart, partly covered by a section below which shows five views of the video data story, containing (from the left) the title, a horizontal bar chart with three bars, a pie chart, a line chart, and a KPI as a number." style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/231088i5A7D25B44E2A7D84/image-size/large?v=v2&px=999" role="button" title="04 SAC Video Data Story creation (cropped).jpg" alt="Figure 4: Creating Video Data Stories in SAP Analytics Cloud. ALT Text: The image shows part of a screenshot showing an SAP Analytics Cloud page with bar charts and a pie chart, partly covered by a section below which shows five views of the video data story, containing (from the left) the title, a horizontal bar chart with three bars, a pie chart, a line chart, and a KPI as a number." /><span class="lia-inline-image-caption" onclick="event.preventDefault();">Figure 4: Creating Video Data Stories in SAP Analytics Cloud. ALT Text: The image shows part of a screenshot showing an SAP Analytics Cloud page with bar charts and a pie chart, partly covered by a section below which shows five views of the video data story, containing (from the left) the title, a horizontal bar chart with three bars, a pie chart, a line chart, and a KPI as a number.</span></span></P><P>Find out more in this blog post, these videos and the documentation:</P><UL><LI><A href="https://community.sap.com/t5/technology-blogs-by-sap/video-data-story-a-brand-new-way-of-story-telling-in-sap-analytics-cloud/ba-p/13978470" target="_blank">Video Data Story, a brand-new way of story telling in SAP Analytics Cloud</A>.</LI><LI>Video: <A href="https://sapvideo.cfapps.eu10-004.hana.ondemand.com/?entry_id=1_bu06re47" target="_blank" rel="noopener nofollow noreferrer">Video Data Story – Sample Analysis Report</A> (33 seconds).</LI><LI>Video: <A href="https://www.youtube.com/watch?v=Z8T0GQKiNsg&t=300s" target="_blank" rel="noopener nofollow noreferrer">SAP Analytics Cloud: Top 5 New Features in Q1 2025 (Section 3 on Video Data Stories)</A> (1:30 min.)</LI><LI><A href="https://help.sap.com/whats-new/42e4f84a0e5e458792b1047eaf81c31a?locale=en-US" target="_blank" rel="noopener noreferrer">What’s New Viewer – SAP Analytics Cloud</A>.</LI></UL><H2 id="toc-hId-917788499">Just Ask Enhancements</H2><P>The popular just ask feature enables you to use natural language to query SAP Analytics Cloud. It was introduced with this blog post:</P><UL><LI><A href="https://community.sap.com/t5/technology-blogs-by-sap/initial-release-of-sap-analytics-cloud-just-ask/ba-p/13583721" target="_blank">Initial Release of SAP Analytics Cloud Just Ask</A>.</LI></UL><P>With the Q1/2025 release, we improve just ask by supporting currency conversion in acquired data models. We also allow users to limit the number of data points in bar charts, as well as leveraging SAP HANA Cloud vector engine.</P><P>Currency conversion means that, if you have data with multiple currencies, you can change the currency used to summarize all the values using natural language. Also, you can choose to show all the results in the respective local currency, so that for example the mouse-over shows the details and the currency for that country, as shown in Figure 5, where the user has asked “sales in local currency actual compared to forecast”.</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Figure 5: SAP Analytics Cloud just ask now supports currency conversion – here you see a visualization in local currency per country. ALT Text: The image shows a screenshot with Just Ask at the top left, with a text entry field containing “sales in local currency actual compared to forecast”. Below that, a horizontal bar chart showing “Top 10 Sales in Local Currency per Country”, with countries Denmark, Belgium, Italy, Sweden, France etc. Wherever the actual is higher than forecast the difference is marked with a green bar, where it is lower with a red bar. The user has placed the mouse over the green bar for Sweden, showing a popover containing the text “Sales in Local Currency, SEK909.2 k, Country Sweden, in green: Actual – Forecast SEK168.7K”." style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/231089i25BC9C42C9978832/image-size/large?v=v2&px=999" role="button" title="05 SAC just ask local currency.jpg" alt="Figure 5: SAP Analytics Cloud just ask now supports currency conversion – here you see a visualization in local currency per country. ALT Text: The image shows a screenshot with Just Ask at the top left, with a text entry field containing “sales in local currency actual compared to forecast”. Below that, a horizontal bar chart showing “Top 10 Sales in Local Currency per Country”, with countries Denmark, Belgium, Italy, Sweden, France etc. Wherever the actual is higher than forecast the difference is marked with a green bar, where it is lower with a red bar. The user has placed the mouse over the green bar for Sweden, showing a popover containing the text “Sales in Local Currency, SEK909.2 k, Country Sweden, in green: Actual – Forecast SEK168.7K”." /><span class="lia-inline-image-caption" onclick="event.preventDefault();">Figure 5: SAP Analytics Cloud just ask now supports currency conversion – here you see a visualization in local currency per country. ALT Text: The image shows a screenshot with Just Ask at the top left, with a text entry field containing “sales in local currency actual compared to forecast”. Below that, a horizontal bar chart showing “Top 10 Sales in Local Currency per Country”, with countries Denmark, Belgium, Italy, Sweden, France etc. Wherever the actual is higher than forecast the difference is marked with a green bar, where it is lower with a red bar. The user has placed the mouse over the green bar for Sweden, showing a popover containing the text “Sales in Local Currency, SEK909.2 k, Country Sweden, in green: Actual – Forecast SEK168.7K”.</span></span></P><P>Watch it in action here:</P><UL><LI>Video: <A href="https://www.youtube.com/watch?v=Z8T0GQKiNsg&t=390s" target="_blank" rel="noopener nofollow noreferrer">SAP Analytics Cloud: Top 5 New Features in Q1 2025 (Section 4 on just ask)</A> (1:34 min.)</LI></UL><H2 id="toc-hId-721274994">Further Innovations and Outlook on Joule Analytical Pattern</H2><P>You can see the above three innovations, plus “Seamless Planning” and “Job Monitor – Multi-Action support” in this video:</P><UL><LI><A href="https://www.youtube.com/watch?v=Z8T0GQKiNsg" target="_blank" rel="noopener nofollow noreferrer">SAP Analytics Cloud: Top 5 New Features in Q1 2025</A>.</LI></UL><P>As I mentioned in <A href="https://community.sap.com/t5/technology-blogs-by-sap/sap-user-experience-q1-2025-update-part-1-many-new-innovations-available-ai/ba-p/14012822" target="_blank">Part 1</A> of this series, we plan to make the new analytical pattern for Joule available in Q2/2025, which will be powered by this latest release of SAP Analytics Cloud (as usual for forward-looking statements, our plans are subject to change). This means users of products that support Joule, such as SAP S/4HANA Cloud or SAP SuccessFactors, will be able to use Joule to query SAP Analytics Cloud and get analytical insights directly within Joule (the Joule Analytical Pattern). It will be powered by SAP Analytics Cloud, with data from models that are indexed by the <A href="https://community.sap.com/t5/technology-blogs-by-sap/initial-release-of-sap-analytics-cloud-just-ask/ba-p/13583721" target="_blank">Just Ask feature of SAP Analytics Cloud</A>.</P><P> </P><H1 id="toc-hId-395678770">SAP Business Technology Platform</H1><H2 id="toc-hId-328247984">SAP Integration Suite</H2><P>The SAP Integration Suite now also supports the SAP Fiori visual theme Horizon, as you can see below in Figure 6.</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Figure 6: SAP Integration Suite with the SAP Fiori visual theme Horizon. ALT Text: The image shows three overlapping screenshots: at the left, back, “Employee Service” with buttons for triggering GET, POST, GET, PATCH URLs. Next, in the middle, the Capabilities page showing three rows of four columns of cards such as “Build Integration Scenarios”, “Manage APIs”, “Manage Business Events”, each with two to three lines description. On the right a page showing details of “SAP S/4HANA Cloud Integration with Workday”. The “Artifacts” tab has been selected, showing a list of artifacts with columns Name, Type, Version and Actions. The first entry has a name “Integrate Workday employee information”, the second one “Replicate Cost Centers from SAP S/4HANA Cloud to Workday”." style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/231155iF0B3D49463CAB51E/image-size/large?v=v2&px=999" role="button" title="06 BTP with Horizon in Integration Suite.jpg" alt="Figure 6: SAP Integration Suite with the SAP Fiori visual theme Horizon. ALT Text: The image shows three overlapping screenshots: at the left, back, “Employee Service” with buttons for triggering GET, POST, GET, PATCH URLs. Next, in the middle, the Capabilities page showing three rows of four columns of cards such as “Build Integration Scenarios”, “Manage APIs”, “Manage Business Events”, each with two to three lines description. On the right a page showing details of “SAP S/4HANA Cloud Integration with Workday”. The “Artifacts” tab has been selected, showing a list of artifacts with columns Name, Type, Version and Actions. The first entry has a name “Integrate Workday employee information”, the second one “Replicate Cost Centers from SAP S/4HANA Cloud to Workday”." /><span class="lia-inline-image-caption" onclick="event.preventDefault();">Figure 6: SAP Integration Suite with the SAP Fiori visual theme Horizon. ALT Text: The image shows three overlapping screenshots: at the left, back, “Employee Service” with buttons for triggering GET, POST, GET, PATCH URLs. Next, in the middle, the Capabilities page showing three rows of four columns of cards such as “Build Integration Scenarios”, “Manage APIs”, “Manage Business Events”, each with two to three lines description. On the right a page showing details of “SAP S/4HANA Cloud Integration with Workday”. The “Artifacts” tab has been selected, showing a list of artifacts with columns Name, Type, Version and Actions. The first entry has a name “Integrate Workday employee information”, the second one “Replicate Cost Centers from SAP S/4HANA Cloud to Workday”.</span></span></P><H2 id="toc-hId-131734479">SAP BTP Cockpit</H2><P>Customers can now get an easy to understand overview of their costs and usage of SAP Business Technology Platform with the new costs and usage application (Figure 7).</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Figure 7: SAP BTP Cockpit – Costs and Usage. ALT Text: The image shows an example screenshot. The header reads “Global Account: Automotive Rentals, Inc. – Costs and Usage”, below that a small card “Global Account Info” with Account ID, Account Type “Customer”, Contract Currency “USD” and a wide card “Cloud Platform Enterprise Agreement” with a chart showing Cloud Credit Usage, a KPI value for the Monthly Cloud Credit Usage and a vertical bar chart for Monthly Cloud Credit Usage Trend. Below that the majority of the screen shows the Billing tab, with the text “This view displays the monthly billable service charges for your global account”. Below that a flexible column layout with a list of Service Plans on the left, with “Business Application Studio – standard-edition” selected, and on the right a hierarchical table showing Directories and Subaccounts. At the bottom a filled line chart showing the cumulative list prices per month over the last 12 months." style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/231157i58E8D6C871005039/image-size/large?v=v2&px=999" role="button" title="07 BTP Cockpit Cost & Usage.png" alt="Figure 7: SAP BTP Cockpit – Costs and Usage. ALT Text: The image shows an example screenshot. The header reads “Global Account: Automotive Rentals, Inc. – Costs and Usage”, below that a small card “Global Account Info” with Account ID, Account Type “Customer”, Contract Currency “USD” and a wide card “Cloud Platform Enterprise Agreement” with a chart showing Cloud Credit Usage, a KPI value for the Monthly Cloud Credit Usage and a vertical bar chart for Monthly Cloud Credit Usage Trend. Below that the majority of the screen shows the Billing tab, with the text “This view displays the monthly billable service charges for your global account”. Below that a flexible column layout with a list of Service Plans on the left, with “Business Application Studio – standard-edition” selected, and on the right a hierarchical table showing Directories and Subaccounts. At the bottom a filled line chart showing the cumulative list prices per month over the last 12 months." /><span class="lia-inline-image-caption" onclick="event.preventDefault();">Figure 7: SAP BTP Cockpit – Costs and Usage. ALT Text: The image shows an example screenshot. The header reads “Global Account: Automotive Rentals, Inc. – Costs and Usage”, below that a small card “Global Account Info” with Account ID, Account Type “Customer”, Contract Currency “USD” and a wide card “Cloud Platform Enterprise Agreement” with a chart showing Cloud Credit Usage, a KPI value for the Monthly Cloud Credit Usage and a vertical bar chart for Monthly Cloud Credit Usage Trend. Below that the majority of the screen shows the Billing tab, with the text “This view displays the monthly billable service charges for your global account”. Below that a flexible column layout with a list of Service Plans on the left, with “Business Application Studio – standard-edition” selected, and on the right a hierarchical table showing Directories and Subaccounts. At the bottom a filled line chart showing the cumulative list prices per month over the last 12 months.</span></span></P><H2 id="toc-hId--64779026">SAP BTP, Kyma Runtime</H2><P>Kyma now supports modules, for adding functionalities to your cluster. To manage these, the Kyma dashboard has been redesigned, with the SAP Fiori visual theme Horizon, as you can see in Figure 8.</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Figure 8: Kyma dashboard with the SAP Fiori visual theme Horizon, now supporting modules. ALT Text: The image shows a screenshot with the “Cluster Overview” selected in the left side navigation bar. The screen has a large header card “Introducing Modules” with buttons for “Add Modules” and “Learn More”. Below that a section “Resource Details” containing one card, followed by a section “Monitoring and Health” containing further cards (“Memory Usage”, “CPU Usage”). A further smaller screenshot covers the bottom right of the other one, showing a Modules column in the middle, and a wider “Add Modules” panel on the right, containing four cards “SAP BTP Operator”, “Keda”, “Serverless”, “Telemetry”." style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/231159iE010341A34E3D210/image-size/large?v=v2&px=999" role="button" title="08 Kyma.png" alt="Figure 8: Kyma dashboard with the SAP Fiori visual theme Horizon, now supporting modules. ALT Text: The image shows a screenshot with the “Cluster Overview” selected in the left side navigation bar. The screen has a large header card “Introducing Modules” with buttons for “Add Modules” and “Learn More”. Below that a section “Resource Details” containing one card, followed by a section “Monitoring and Health” containing further cards (“Memory Usage”, “CPU Usage”). A further smaller screenshot covers the bottom right of the other one, showing a Modules column in the middle, and a wider “Add Modules” panel on the right, containing four cards “SAP BTP Operator”, “Keda”, “Serverless”, “Telemetry”." /><span class="lia-inline-image-caption" onclick="event.preventDefault();">Figure 8: Kyma dashboard with the SAP Fiori visual theme Horizon, now supporting modules. ALT Text: The image shows a screenshot with the “Cluster Overview” selected in the left side navigation bar. The screen has a large header card “Introducing Modules” with buttons for “Add Modules” and “Learn More”. Below that a section “Resource Details” containing one card, followed by a section “Monitoring and Health” containing further cards (“Memory Usage”, “CPU Usage”). A further smaller screenshot covers the bottom right of the other one, showing a Modules column in the middle, and a wider “Add Modules” panel on the right, containing four cards “SAP BTP Operator”, “Keda”, “Serverless”, “Telemetry”.</span></span></P><H2 id="toc-hId-85961826">SAP Build Apps</H2><P>SAP Build Apps enable business users to define their own simple applications without having to go to their IT teams to find developers. For these users, an intuitive user experience is paramount, and hence we continuously look to see where we can make it even better. One aspect of intuitiveness is providing a consistent experience across various products – hence SAP Build Apps also runs with the SAP Fiori visual theme Horizon.</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Figure 9: SAP Build Apps with the SAP Fiori visual theme Horizon. ALT Text: The image shows a screenshot with a heading “Choose Configuration to Build” above six square cards “Android (AAB)”, “Android (APK)”, “iOS (Ad hoc)”, “Web (MTAR)”, “Web (ZIP)”, “workzone build”. Below that a table “Build History” showing two lines for “iOS (Ad hoc)”." style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/231161iEB83C3F5827938FD/image-size/large?v=v2&px=999" role="button" title="09 Design Innov. - Build Apps.jpg" alt="Figure 9: SAP Build Apps with the SAP Fiori visual theme Horizon. ALT Text: The image shows a screenshot with a heading “Choose Configuration to Build” above six square cards “Android (AAB)”, “Android (APK)”, “iOS (Ad hoc)”, “Web (MTAR)”, “Web (ZIP)”, “workzone build”. Below that a table “Build History” showing two lines for “iOS (Ad hoc)”." /><span class="lia-inline-image-caption" onclick="event.preventDefault();">Figure 9: SAP Build Apps with the SAP Fiori visual theme Horizon. ALT Text: The image shows a screenshot with a heading “Choose Configuration to Build” above six square cards “Android (AAB)”, “Android (APK)”, “iOS (Ad hoc)”, “Web (MTAR)”, “Web (ZIP)”, “workzone build”. Below that a table “Build History” showing two lines for “iOS (Ad hoc)”.</span></span></P><P>Here are some of the recent improvements:</P><UL><LI>You can <STRONG>create a project version directly now by releasing the project</STRONG></LI><LI><STRONG>Discover, integrate, and use any preconfigured action that is published in the SAP Build Library</STRONG>: you can now easily discover published Actions in SAP Build Apps via the SAP Build Library and install them into your Build Apps project, consume and trigger them as part of your application’s business logic via the Trigger Action flow function.</LI><LI>In the History tab, you can now <STRONG>see all previously saved states of the app</STRONG>. Using the Restore button, you can restore the application to the respective saved state.</LI><LI>You can <STRONG>duplicate pages</STRONG> in the page preview header.</LI><LI>You can use the updated Build service, which comes with a better look and feel, and an improved user experience:<UL><LI><A href="https://help.sap.com/docs/build-apps/service-guide/build-and-deploy-web-applications" target="_blank" rel="noopener noreferrer">Build and Deploy Web Applications</A>.</LI></UL></LI></UL><UL><LI>The details matter with UX! To improve the user experience, we have updated the navigation menu in the global toolbar (Figure 10). App developers now have access to the <EM>Variables</EM> directly from the menu. The previous <EM>UI Canvas</EM> and <EM>Data</EM> tabs are now renamed respectively to <EM>User Interface</EM> and <EM>Integrations</EM>. To save space, the less frequently used <EM>Theme</EM>, <EM>Navigation</EM>, <EM>Authentication</EM> and <EM>Help</EM> options are now grouped under the <EM>App Settings</EM> drop-down menu. In the upper right corner, you can access the <EM>Preview</EM> button. Next to it is the <EM>Publish</EM> button, which enables you either to <EM>Create a Release Version</EM> or to <EM>Build</EM> <EM>and Deploy</EM><STRONG>.</STRONG></LI></UL><P><EM><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Figure 10: The new navigation menu in the SAP Build Apps global toolbar. ALT Text: A screenshot showing the header of SAP Build Apps, which contains tabs “User Interface”, “Variables”, “Integrations”, and “App Settings” with a drop-down menu with entries “Navigation”, “Authentication”, “Theme”, and “Help”." style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/231163i4099F027BEE1CB9D/image-size/large?v=v2&px=999" role="button" title="10 SAP Build Apps - UX improvements.png" alt="Figure 10: The new navigation menu in the SAP Build Apps global toolbar. ALT Text: A screenshot showing the header of SAP Build Apps, which contains tabs “User Interface”, “Variables”, “Integrations”, and “App Settings” with a drop-down menu with entries “Navigation”, “Authentication”, “Theme”, and “Help”." /><span class="lia-inline-image-caption" onclick="event.preventDefault();">Figure 10: The new navigation menu in the SAP Build Apps global toolbar. ALT Text: A screenshot showing the header of SAP Build Apps, which contains tabs “User Interface”, “Variables”, “Integrations”, and “App Settings” with a drop-down menu with entries “Navigation”, “Authentication”, “Theme”, and “Help”.</span></span></EM></P><H1 id="toc-hId-182851328">Continue Reading</H1><P>I hope you enjoyed this sixth part, covering SAP Analytics Cloud and SAP Business Technology Platform.</P><P>The final part seven is available now, covering latest innovations for UI developers, for both web and mobile:</P><UL><LI><A class="" href="https://community.sap.com/t5/technology-blogs-by-sap/sap-user-experience-q1-2025-update-part-7-ui-design-and-technology-for-web/ba-p/14034290" target="_blank">SAP User Experience Q1/2025 Update – Part 7: UI Design and Technology for Web and Mobile</A>.</LI></UL><P>Part 1 of the series lists all the parts, and links to those parts that have already been published:</P><UL><LI><A href="https://community.sap.com/t5/technology-blogs-by-sap/sap-user-experience-q1-2025-update-part-1-many-new-innovations-available-ai/ba-p/14012822" target="_blank">SAP User Experience Q1/2025 Update – Part 1: Many New Innovations Available (AI, Joule and More)</A>.</LI></UL><P>Do keep posting your experiences and recommendations yourself in the SAP Community, with the SAP Fiori and/or the User Experience tag! In case you are wondering how to get a list of the most recent blog posts on SAP Fiori and User Experience in our new SAP Community, use these links:</P><UL><LI><A href="https://community.sap.com/t5/c-khhcw49343/SAP+Fiori/pd-p/73554900100700000977" target="_blank">Latest blog posts on SAP Fiori in the SAP Community</A>.</LI><LI><A href="https://community.sap.com/t5/c-khhcw49343/User+Experience/pd-p/4616d815-f39e-45c8-b13b-5a2d6679778f" target="_blank">Latest blog posts on User Experience in the SAP Community</A>.</LI></UL><P>For general information on design at SAP and SAP Fiori, check out:</P><UL><LI><A href="http://www.sap.com/design" target="_blank" rel="noopener noreferrer">www.sap.com/design</A>.</LI><LI><A href="http://www.sap.com/fiori" target="_blank" rel="noopener noreferrer">www.sap.com/fiori</A> </LI><LI><A href="https://pages.community.sap.com/topics/fiori" target="_blank" rel="noopener noreferrer">SAP Community: SAP Fiori topic page</A><SPAN>.</SPAN></LI></UL>2025-02-28T06:00:00.017000+01:00https://community.sap.com/t5/technology-blogs-by-members/sap-btp-cloud-application-programming-model/ba-p/14032929SAP BTP: Cloud Application Programming Model2025-03-04T07:09:41.141000+01:00SekhuteTKhttps://community.sap.com/t5/user/viewprofilepage/user-id/15314<P>SAP Cloud Application Programming (CAP) Model exposes the ability to extend standard Cloud, on-premises and hybrid application functionality with flexible custom business logic scripted using the developer’s choice of programing language (SQL, SQL Script, Python, Node.js and JavaScript) and exposing the functionality to various user interfaces (UIs) e.g. Microsoft Power Bi, SAP Fiori, Dataiku and Google Big Query using various integration frameworks e.g. OData v4,JDBC/ODBC depending on the case study.</P><P>The developer takes pride in delivering a scalable extended functionality, embedding robust real-time monitoring capabilities to ensure a health life cycle and protecting the functionality with secure authentication protocols e.g. OAuth 2.0, JWT Bearer, SAML version 2.0 and RFC Specification.</P><P>Furthermore, the developer ensures a reliable and robust solutions by implementing continuous integration and continuous delivery CI/CD pipelines that automates testing, building and deployment of code changes this strategy ensures a speedy development and delivery cycle.</P><P>Traditionally developers extended business logic directly on-premises on the ABAP application server. With the ever-changing world of technology, digital transformation has become essential for organization to say afloat of competitors and therefore the programming model paradigms and capabilities of extending SAP solutions have evolved drastically and provides a seamless experience into the cloud.</P><P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="Programming model.png" style="width: 626px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/232631i560CE0B01EB4E6CB/image-size/large?v=v2&px=999" role="button" title="Programming model.png" alt="Programming model.png" /></span></P><P class="lia-align-center" style="text-align: center;"><EM>Figure 1: </EM></P><P class="lia-align-center" style="text-align: center;"><EM>Architectural Paradigm Shift from Classic ABAP App server to CAP App server</EM></P><P class="lia-align-center" style="text-align: center;"><EM>Source: Thomas Jung, <A href="https://community.sap.com/t5/technology-blogs-by-sap/sap-hana-extended-application-services/ba-p/12963426" target="_blank"><STRONG>SAP HANA Extended Application Services</STRONG></A> blog, URL: <A href="https://community.sap.com/t5/technology-blogs-by-sap/sap-hana-extended-application-services/ba-p/12963426/page/4" target="_blank">https://community.sap.com/t5/technology-blogs-by-sap/sap-hana-extended-application-services/ba-p/12963426/page/4</A></EM></P><P data-unlink="true">The SAP Cloud Application model comes with a rich set of languages, libraries, and tools for building enterprise-grade services and applications. It guides developers along a 'golden path' of proven best practices and a great wealth of out-of-the-box solutions to recurring tasks:</P><P data-unlink="true"><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="cap.png" style="width: 626px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/232633i1EC9379A4BB0DAA1/image-size/large?v=v2&px=999" role="button" title="cap.png" alt="cap.png" /></span></P><P class="lia-align-center" style="text-align: center;"><EM>Figure 2: </EM></P><P class="lia-align-center" style="text-align: center;"><EM>SAP Cloud Application Model Architecture</EM></P><P class="lia-align-center" style="text-align: center;"><EM>Source <A href="HTTPS://Cap.cloud.sap" target="_blank" rel="nofollow noopener noreferrer">HTTPS://Cap.cloud.sap</A> , U</EM><EM>RL:</EM> <EM><A href="https://cap.cloud.sap/docs/about/" target="_blank" rel="nofollow noopener noreferrer">https://cap.cloud.sap/docs/about/</A></EM></P><P>The below diagram categories the skill set of SAP Cloud Developer based on the scope of the development either being ABAP or Non-ABAP. Each with its unique set of tools and methodologies:</P><P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="ABAP VS NON.png" style="width: 626px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/232635i61C63058B7D72485/image-size/large?v=v2&px=999" role="button" title="ABAP VS NON.png" alt="ABAP VS NON.png" /></span></P><P class="lia-align-center" style="text-align: center;"><EM>Figure 3:</EM></P><P class="lia-align-center" style="text-align: center;"><EM> SAP Cloud Developer skill set</EM></P><P class="lia-align-center" style="text-align: center;"><EM>Source: Building side-by-side extensions on SAP BTP, URL: <A href="https://learning.sap.com/learning-journeys/build-side-by-side-extensions-on-sap-btp/identifying-the-need-for-side-by-side-extensibility_f1e838f0-f02a-43b4-8896-cedc25a7d5d0" target="_blank" rel="noopener noreferrer">https://learning.sap.com/learning-journeys/build-side-by-side-extensions-on-sap-btp/identifying-the-need-for-side-by-side-extensibility_f1e838f0-f02a-43b4-8896-cedc25a7d5d0</A></EM></P><P>The Cloud Application Programming model enables a collaboration of agile cross functional teams inclusive of but not limited, depending on the scope of the development: citizen developers (low-code/no-code), Professional developers (Scripting, OOP), business analysts, data engineers and application specialists to model robust data models:</P><P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="Cross functional.png" style="width: 626px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/232636i237D8D5BBD7CB069/image-size/large?v=v2&px=999" role="button" title="Cross functional.png" alt="Cross functional.png" /></span></P><P class="lia-align-center" style="text-align: center;"><EM>Figure 4:</EM></P><P class="lia-align-center" style="text-align: center;"><EM>Agile cross functional team</EM></P><P class="lia-align-center" style="text-align: center;"><EM>Source: <STRONG>Investigating the Impact of Cross-Functional Teams on Business Success</STRONG></EM></P><P class="lia-align-center" style="text-align: center;"><EM>URL:</EM> <EM><A href="https://www.iienstitu.com/en/blog/cross-functional-teams" target="_blank" rel="nofollow noopener noreferrer">https://www.iienstitu.com/en/blog/cross-functional-teams</A></EM></P><P>SAP Cloud Application Programming (CAP) Model enables a culture where people regardless of their title or background, work together to imagine, develop, deploy, and operate a solution. This strengthens the trust between employees and authentic healthy work relationships.</P><P>Thank you all for taking a glimpse into the above Content. Please don’t for get to like, comment and share.</P><P><STRONG>Abbreviations:</STRONG></P><P><STRONG>APP: </STRONG>Application</P><P><STRONG>CAP: </STRONG>Cloud Application Programing</P><P><STRONG>CDS</STRONG>: Core Data Services</P><P><STRONG>CI/CD:</STRONG> Continuous Integration and Continuous Delivery</P><P><STRONG>JWT</STRONG>: JSON Web token</P><P><STRONG>OData: </STRONG>Open Data Protocol</P><P><STRONG>RFC</STRONG>: Remote Function Call</P><P><STRONG>SAML</STRONG>: Security Assertion Markup Language</P><P><STRONG>SQL:</STRONG> Structured Query Language</P><P><STRONG>UIs:</STRONG> User Interfaces</P>2025-03-04T07:09:41.141000+01:00https://community.sap.com/t5/technology-blogs-by-members/beyond-sap-cloud-episode-9-btp-runtime-strategy/ba-p/14045183Beyond SAP Cloud - Episode 9: BTP Runtime Strategy2025-03-17T06:22:06.849000+01:00WouterLemairehttps://community.sap.com/t5/user/viewprofilepage/user-id/9863<P><SPAN>This episode explores BTP runtime strategy, discussing the different types of runtimes available: Kyma, Cloud Foundry and ABAP. Kyma, based on Kubernetes, runs on-demand, offering flexibility and cost-effectiveness for use cases that don't require to be up and running 24/7. Cloud Foundry is ideal for always-on applications, while ABAP may be more suitable for large-scale, enterprise applications. The choice of runtime depends on factors like developer skills, company policies and the scale of applications to be built. Companies must evaluate their needs to determine the best runtime for their BTP strategy.</SPAN></P><P><SPAN> <div class="video-embed-center video-embed"><iframe class="embedly-embed" src="https://cdn.embedly.com/widgets/media.html?src=https%3A%2F%2Fwww.youtube.com%2Fembed%2Fg65pOe8cjdA%3Ffeature%3Doembed&display_name=YouTube&url=https%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3Dg65pOe8cjdA&image=https%3A%2F%2Fi.ytimg.com%2Fvi%2Fg65pOe8cjdA%2Fhqdefault.jpg&type=text%2Fhtml&schema=youtube" width="200" height="112" scrolling="no" title="Episode 9: BTP Runtime Strategy" frameborder="0" allow="autoplay; fullscreen; encrypted-media; picture-in-picture;" allowfullscreen="true"></iframe></div></SPAN></P><P><SPAN> <STRONG>Takeaways</STRONG></SPAN></P><UL><LI><SPAN>BTP (Business Technology Platform) has multiple runtime options: <STRONG>Kyma, Cloud Foundry and ABAP</STRONG>.</SPAN></LI><LI><SPAN>Kyma is <STRONG>based on Kubernetes and operates on-demand</STRONG>, starting and stopping when required.</SPAN></LI><LI><STRONG><SPAN>Business Application Studio is a good example for a Kyma case</SPAN></STRONG><SPAN>. It is maybe not running on Kyma but uses the same concept under the hood, Kubernetes pods. With this, BAS doesn’t need to run all the time and only requires resource when it is started. That’s also the reason you need to start it every morning.</SPAN></LI><LI><STRONG><SPAN>Kyma</SPAN></STRONG><SPAN>'s pay-per-use model might be a <STRONG>cost-effective option</STRONG> if your use case requires <STRONG>non-24/7 operations</STRONG>.</SPAN></LI><LI><STRONG><SPAN>Cloud Foundry</SPAN></STRONG><SPAN> is more suitable for applications that need to be <STRONG>operational 24/7</STRONG>, like Fiori applications.</SPAN></LI><LI><STRONG><SPAN>Cloud Foundry</SPAN></STRONG><SPAN> is generally a <STRONG>more affordable</STRONG> option for <STRONG>always-on applications</STRONG>, offering greater accessibility.</SPAN></LI><LI><STRONG><SPAN> Cloud Foundry</SPAN></STRONG><SPAN> supports building applications using <STRONG>various development languages</STRONG> and/or frameworks, such as Java, NodeJS, GO and Python.</SPAN></LI><LI><SPAN>Companies can choose <STRONG>to activate multiple runtimes</STRONG> or select one based on their specific needs.</SPAN></LI><LI><STRONG><SPAN>ABAP</SPAN></STRONG><SPAN> could be <STRONG>more expensive for single applications</STRONG>, but it might <STRONG>become cost-effective for large-scale application development.</STRONG></SPAN></LI><LI><SPAN> Each company should <STRONG>assess its developer skill set and the number of applications</STRONG> to be built when deciding on the <STRONG>best runtime strategy for BTP</STRONG>.</SPAN></LI></UL>2025-03-17T06:22:06.849000+01:00https://community.sap.com/t5/technology-blogs-by-members/explaining-sap-joule-for-hr-business-users-amp-functional-consultants/ba-p/14053853Explaining SAP Joule for HR Business Users & Functional Consultants.2025-03-23T10:47:21.753000+01:00santanuray_saphttps://community.sap.com/t5/user/viewprofilepage/user-id/684064<P>SAP Business Technology Platform (BTP)</P><P>SAP Business Technology Platform (SAP BTP) is the unified, business-centric, open data and development platform for the entire SAP ecosystem. This statement means a lot so let me explain it in a simple term</P><UL><LI>Development friendly- The platform provides ease of development for developers makes it an efficient place for developers and helps them in increasing efficiency as well as gives them a charm. </LI><LI>Seamless Integration- It can talk with any other technology using its strong integration capability.</LI><LI>The most important Value for Data- Nothing can be more important for a Business than data. It will provide a next-gen experience with data using its analytics, data lake, in memory powerful calculations.</LI></UL><P class="lia-align-center" style="text-align: center;"><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="santanuray_sap_0-1742721126129.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/241482iBD18924A2BE92EA8/image-size/medium?v=v2&px=400" role="button" title="santanuray_sap_0-1742721126129.png" alt="santanuray_sap_0-1742721126129.png" /></span></P><P>High-Level BTP Basics and Set Up </P><P>BTP first carves out a private IP CIDR range from the network space. The BTP operation team deploys a set of virtual machines certified to HANA in that range.</P><P>The first layer is Platform Core, which uses Gardener. Gardener is SAP’s Kubernetes management tool and the main fundamental for BTP workload</P><P>Some other runtimes are also deployed in the platform core. One of them is Cloud Foundry (which is now used instead of Neo), others are Kyma, ABAP, etc.</P><P>BTP also has other sets of Kernel Services that are required for building SAP’s Intelligent Enterprise version. This concept is the same as the Linux kernel. Just for the sake of high-level understanding, Kernel is the main layer between OS and hardware. It helps in the management of memory, space, identity, audit log, etc.</P><P> </P><P class="lia-align-center" style="text-align: center;"><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="santanuray_sap_1-1742721205280.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/241483i430761F71BEFD1D5/image-size/medium?v=v2&px=400" role="button" title="santanuray_sap_1-1742721205280.png" alt="santanuray_sap_1-1742721205280.png" /></span></P><P class="lia-align-left" style="text-align : left;">Once the platform core is set up different technology units deploy their services that use one or more of these runtimes and kernel services. The whole portfolio of BTP includes Analytics, DBMS, Integration, and Extension suite.</P><P class="lia-align-left" style="text-align : left;"> </P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="santanuray_sap_2-1742721306807.png" style="width: 701px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/241484iB0200217CE780500/image-dimensions/701x377?v=v2" width="701" height="377" role="button" title="santanuray_sap_2-1742721306807.png" alt="santanuray_sap_2-1742721306807.png" /></span></P><P>BTP- Accounts and Directory</P><P>Global Accounts - It’s the realization of the contract of customers made with SAP used to mange the entitlements, quotas, members, subaccounts and directories.</P><P>Directories - allows the customer to organize and manage their subaccounts according to their technical and business needs.</P><P>Subaccounts - enable the customers to structure a global account according to their organization's and project's requirements concerning members, authorizations, and entitlements.</P><P>Entitlements are the right of customers to provision and consume the resources, as per their plan which for example can be PAYG or Fixed Contracts etc.</P><P>Directories can contain directories and subaccount. Subaccounts of one or more can be created directly under a global account. As we can understand this is more from the angle of security & authorizations.</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="santanuray_sap_3-1742721593698.png" style="width: 687px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/241485i7310A3CCD961E688/image-dimensions/687x376?v=v2" width="687" height="376" role="button" title="santanuray_sap_3-1742721593698.png" alt="santanuray_sap_3-1742721593698.png" /></span></P><P>BTP- Authorization</P><P>Global Account Administrator – A user is created at the global account successful contract establishment. The user (Global Account Administrator) from the customer side is given the required authorizations by SAP to manage entitlement and create directories and subaccounts.</P><P>The administrator can also create more than one administrator to share the rights and privileges at the Global Account Level. The administrator creates a subaccount administrator.</P><P>The subaccount administrator can create both business users/developers and assign required roles and authorization at the subaccount level</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="santanuray_sap_4-1742721659506.png" style="width: 630px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/241486i94BF389024A420AF/image-dimensions/630x337?v=v2" width="630" height="337" role="button" title="santanuray_sap_4-1742721659506.png" alt="santanuray_sap_4-1742721659506.png" /></span></P><P>SAP Joule- Basics and Architecture</P><P>Before we start with Joule let’s start with the basics and foundation behind it.</P><P>Machine Learning :Machine learning (ML) is a field of study in artificial intelligence concerned with the development and study of statistical algorithms that can learn from data and generalize to unseen data, and thus perform tasks without explicit instructions</P><P>Example: A human baby is trained to learn and understand different relations in the family. Similarly, iPhone facial recognition is made to understand to it which one is the face of that particular iPhone owner.</P><P>LLMS: A large language model (LLM) is a type of machine learning model designed for natural language processing tasks such as language generation. LLMs are language models with many parameters and are trained with self-supervised learning on a vast amount of text.</P><P>Example: When we type to search for anything in Google it recommends some text in prediction.</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="santanuray_sap_5-1742721709903.png" style="width: 745px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/241487iA35A0152F9518FDD/image-dimensions/745x162?v=v2" width="745" height="162" role="button" title="santanuray_sap_5-1742721709903.png" alt="santanuray_sap_5-1742721709903.png" /></span></P><P><STRONG>Document Grounding</STRONG>: "Grounding" is a process that combines generative Large Language Models (LLMs) with advanced information retrieval to improve the quality and accuracy of responses, without the time, complexity, and expense of training or fine-tuning an LLM with company-specific data. Grounding uses a customer’s knowledge sources (e.g. travel policy, enablement content, service manuals, FAQs, etc.) to supplement an LLM's internal representation of information, which can help models be more accurate and reliable. </P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="santanuray_sap_6-1742721753729.png" style="width: 667px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/241488iB93C03485C2470AE/image-dimensions/667x336?v=v2" width="667" height="336" role="button" title="santanuray_sap_6-1742721753729.png" alt="santanuray_sap_6-1742721753729.png" /></span></P><P>LLMs & Joule </P><P>By Integrating the power of LLMs and SAP-rich business context, SAP has launched JOULE. Joule helps users to easily navigate SAP systems, execute transactions, find information, and get analytical insights, making employees 80% more efficient.</P><UL><LI>Relevant content for our users → ensuring Joule understands a user's context. This includes roles and permissions. But also, which SAP products the user is using.</LI><LI>Reliable results → using LLMs means that responses are grounded on SAP knowledge and the business reality of the respective customer and end user.</LI><LI>Joule is responsible → strict prohibition that any of our customer’s data is not used for training purposes or any other usage for any 3rd part</LI></UL><P>SAP Joule currently has the following interaction pattern.</P><UL><LI>Transactional Interaction: Example who is my manager?</LI><LI>Informational Interaction: What is my Leave policy in the organization?</LI><LI>Analytical Interactions: How many associates have completed their goal setting?</LI><LI>Navigational Interaction: Please take me to my address page</LI></UL><P>Joule Integration with SuccessFactors</P><P>When we log in to SuccessFactors (SF) we can see the SAP Joule icon on the SF screen ( basically a plug-in in SF). We launch Joule from SF interface. Joule ( Chatbot) will launch from the SF. The Joule instance sits in SAP BTP. It is hosted in BTP subaccount.</P><P>SAP Build Work Zone is also created. This is very important as we do a user synchronization from SAP success factors to Build Work Zone using the Identity Provisioning service.</P><P>Cloud identity services are used for authentication. So that when we launch Jould it is authenticated using IAS tenant.</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="santanuray_sap_7-1742721920880.png" style="width: 697px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/241489i4FA39355E9F847FF/image-dimensions/697x366?v=v2" width="697" height="366" role="button" title="santanuray_sap_7-1742721920880.png" alt="santanuray_sap_7-1742721920880.png" /></span></P><P>The following are pre-requisite for establishing the connection between</P><P>SAP SF and Joule</P><P>1.SAP BTP Global Account.</P><P>2.Right Entitlement for Joule</P><P>3.Cloud Identity Service Admin</P><P>4.SuccessFactors Admin</P><P>5.All these user personas needs to be available</P><P>For Technical SMEs or Architects, I am sure they have this link to SAP. However, sharing it one for a ready reckoner in one place</P><P><A title="Activate Joule for SAP SuccessFactors" href="https://discovery-center.cloud.sap/protected/index.html#/missiondetail/4451/?tab=projectboard" target="_blank" rel="noopener nofollow noreferrer">https://discovery-center.cloud.sap/protected/index.html#/missiondetail/4451/?tab=projectboard</A> </P><P>Run Joule</P><P>If the installation goes all good with all user personas and correct authorization then the Joule icon will be visible in the SAP SF Screen. Please note the Joule permission must be added to the SF profile of the user. This is taken care of when we run the Booster on BTP side, it creates the joule permission in SAP SF. </P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="santanuray_sap_8-1742722162978.png" style="width: 775px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/241491i26F269B1700F2995/image-dimensions/775x155?v=v2" width="775" height="155" role="button" title="santanuray_sap_8-1742722162978.png" alt="santanuray_sap_8-1742722162978.png" /></span></P><P> </P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="santanuray_sap_9-1742722204414.png" style="width: 718px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/241492i9605F485D107E19F/image-dimensions/718x359?v=v2" width="718" height="359" role="button" title="santanuray_sap_9-1742722204414.png" alt="santanuray_sap_9-1742722204414.png" /></span></P><P> </P><P> </P><P> </P><P> </P><P> </P>2025-03-23T10:47:21.753000+01:00https://community.sap.com/t5/technology-blogs-by-sap/big-upgrade-new-and-improved-sap-btp-account-model-recommendations-are-here/ba-p/14064273Big Upgrade! New and Improved SAP BTP Account Model Recommendations Are Here2025-04-02T18:13:32.838000+02:00NHingerlhttps://community.sap.com/t5/user/viewprofilepage/user-id/131218<P><SPAN>We're thrilled to announce the release of the fully reworked and expanded <A href="https://help.sap.com/docs/BTP/df50977d8bfa4c9a8a063ddb37113c43/2db81f42f5194454beecde6cd4994dda.html?locale=en-US" target="_blank" rel="noopener noreferrer">Setting Up Your Account Model</A> chapter in the <A href="https://help.sap.com/docs/BTP/df50977d8bfa4c9a8a063ddb37113c43/9f2bb927464e4d1ba3d13b2d79ca9bd1.html?locale=en-US" target="_blank" rel="noopener noreferrer">SAP BTP Administrator's Guide</A>. Whether you’re an experienced SAP BTP administrator or new to the platform, this updated content is designed to equip you with the knowledge to tailor your account model to your organization's specific needs.</SPAN></P><P><SPAN><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="Blog AccountModelSetup.jpg" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/245854iFC072D28F208806A/image-size/large?v=v2&px=999" role="button" title="Blog AccountModelSetup.jpg" alt="Blog AccountModelSetup.jpg" /></span></SPAN></P><H2 id="toc-hId-1707388579"><SPAN>What's New?</SPAN></H2><P><SPAN>Explore these key topics, designed to help you refine your account setup:</SPAN></P><P><SPAN><A href="https://help.sap.com/docs/BTP/df50977d8bfa4c9a8a063ddb37113c43/2db81f42f5194454beecde6cd4994dda.html?locale=en-US" target="_blank" rel="noopener noreferrer">Setting Up Your Account Model</A> <SPAN class=""> – Learn how to set up your global accounts, directories, subaccounts, spaces and namespaces in a in a structure that aligns with your business and development requirements.</SPAN></SPAN></P><P><SPAN><A href="https://help.sap.com/docs/BTP/df50977d8bfa4c9a8a063ddb37113c43/ec8a269c4312416dbb83deb9e5b6bc5b.html?locale=en-US" target="_blank" rel="noopener noreferrer">Cloud Foundry, Kyma, or Both?</A> <SPAN class=""> – Understand the nuances of setting up account models for Cloud Foundry or Kyma, including how to combine them for maximum flexibility in both greenfield and brownfield scenarios.</SPAN></SPAN></P><P><SPAN><A href="https://help.sap.com/docs/BTP/df50977d8bfa4c9a8a063ddb37113c43/4cb5276d832847aa8e5c82e73ef9ff10.html?locale=en-US" target="_blank" rel="noopener noreferrer">Subaccounts or Spaces/Namespaces?</A><SPAN class=""> – Explore the differences between subaccounts and spaces/namespaces and know when to use each for optimal isolation and organization.</SPAN></SPAN></P><P><SPAN><A href="https://help.sap.com/docs/BTP/df50977d8bfa4c9a8a063ddb37113c43/7f1c318292934e088e5cd119271f0b1e.html?locale=en-US" target="_blank" rel="noopener noreferrer">Checklist: Drafting Your Account Model</A><SPAN class=""> – Follow an interactive checklist, complete with step-by-step instructions to research and draft an account model that meets your company's specific business and technical needs.</SPAN></SPAN></P><P><SPAN><A href="https://help.sap.com/docs/BTP/df50977d8bfa4c9a8a063ddb37113c43/9fe7e160bf58488aa42e726ebe3c7111.html?locale=en-US" target="_blank" rel="noopener noreferrer">Sharing SAP BTP Services</A><SPAN class=""> – Explore options for sharing SAP BTP services across subaccounts for cost-efficiency and centralized governance.</SPAN></SPAN></P><P><SPAN><A href="https://help.sap.com/docs/BTP/df50977d8bfa4c9a8a063ddb37113c43/6bdb3a7170b84254bfaf0df52a112980.html?locale=en-US" target="_self" rel="noopener noreferrer">Tools for Account Administration</A><SPAN class=""> – Compare the key account administration tools - SAP BTP cockpit, btp CLI, APIs, Terraform, and SAP Automation Pilot. Understand their strengths and recommended usage scenarios.</SPAN></SPAN></P><P> </P><H2 id="toc-hId-1510875074">Why This Matters </H2><P><SPAN>A well-structured account model is crucial for efficient management and scalability of your SAP BTP landscape. This updated chapter provides the insights and tools you need to create a robust setup that supports your organization's growth and innovation.</SPAN></P><P> </P><H2 id="toc-hId-1314361569"><SPAN>Get Started Today</SPAN></H2><P><SPAN>Explore the new content and start refining your account model. Whether you’re looking to simplify your current setup or expand into new areas, this guide offers best practices and recommendations to support you.</SPAN></P><P> </P><H2 id="toc-hId-1117848064"><SPAN>Your Feedback Matters</SPAN></H2><P><SPAN>We’re always looking to improve. If you have questions or suggestions, give us feedback – your input is crucial as we continue to update the <A href="https://help.sap.com/docs/BTP/df50977d8bfa4c9a8a063ddb37113c43/9f2bb927464e4d1ba3d13b2d79ca9bd1.html?locale=en-US" target="_blank" rel="noopener noreferrer">SAP BTP Administrator's Guide.</A></SPAN></P>2025-04-02T18:13:32.838000+02:00