https://raw.githubusercontent.com/ajmaradiaga/feeds/main/scmt/topics/SAP-Cloud-Applications-Studio-blog-posts.xmlSAP Community - SAP Cloud Applications Studio2026-02-25T00:12:16.219411+00:00python-feedgenSAP Cloud Applications Studio blog posts in SAP Communityhttps://community.sap.com/t5/enterprise-resource-planning-blog-posts-by-members/set-filter-to-read-only/ba-p/13552180Set filter to read-only2023-05-16T15:44:05+02:00Markus_Massfeldhttps://community.sap.com/t5/user/viewprofilepage/user-id/134782I came across an issue when customizing the filter options for an OWL and I want to share my findings with you.<BR />
<BR />
I added an input field and set the property to "readOnly = true". So the input field was greyed out, but I could still press the filter button and adjust the filter options.<BR />
<P style="overflow: hidden;margin-bottom: 0px"><STRONG><IMG class="migrated-image" src="https://community.sap.com/legacyfs/online/storage/blog_attachments/2023/05/sap_blog_filter.png" /></STRONG></P><BR />
<P class="image_caption" style="text-align: center;font-style: italic">Filter text greyed out</P><BR />
<P style="overflow: hidden;margin-bottom: 0px"><IMG class="migrated-image" src="https://community.sap.com/legacyfs/online/storage/blog_attachments/2023/05/sap_blog_filter_2.png" /></P><BR />
<P class="image_caption" style="text-align: center;font-style: italic">Filter option still available</P><BR />
In my opinion this behaviour doesn't make any sense, as I don't need filter options for a read-only input field. So I was looking for a possibility to set the filter button to read-only as well and I found a property to show or hide the filter button.<BR />
<P style="overflow: hidden;margin-bottom: 0px"><IMG class="migrated-image" src="https://community.sap.com/legacyfs/online/storage/blog_attachments/2023/05/sap_blog_filter_3.png" /></P><BR />
<P class="image_caption" style="text-align: center;font-style: italic">Adjust property ShowSelectOption</P><BR />
By default the property ShowSelectOption is set to <STRONG>true</STRONG>. After setting the property to <STRONG>false</STRONG> the filter button is hidden.<BR />
<P style="overflow: hidden;margin-bottom: 0px"><IMG class="migrated-image" src="https://community.sap.com/legacyfs/online/storage/blog_attachments/2023/05/sap_blog_filter_4.png" /></P><BR />
<P class="image_caption" style="text-align: center;font-style: italic">Filter button hidden</P><BR />
I know this is a very rare use case but I hope this article can help someone with the same issue.<BR />
<BR />
Please feel free to leave some feedback.2023-05-16T15:44:05+02:00https://community.sap.com/t5/enterprise-resource-planning-blog-posts-by-members/custom-outbound-bank-file-format-in-sap-bydesign/ba-p/13556175Custom Outbound Bank File Format In SAP ByDesign2023-06-28T15:03:50+02:00archana2507https://community.sap.com/t5/user/viewprofilepage/user-id/140530<H2 id="toc-hId-962165755"><STRONG><U>Introduction/ About the Product</U></STRONG></H2><BR />
Delivered by ERP Logic, The objective of this customization is the implementation of a custom Outbound Bank file format in SAP Business ByD.<BR />
<H2 id="toc-hId-765652250"><STRONG><U>Business Case/ Requirement</U></STRONG></H2><BR />
<UL><BR />
<LI>The requirement is to create a custom-defined payment file structure for a Bank for both Domestic and Foreign payments as per the sample format provided by Bank.</LI><BR />
<LI>The payment file structure remains the same for both the Domestic and Foreign Payment.</LI><BR />
<LI>The generation of the output file is to be in .xml format.</LI><BR />
</UL><BR />
<H2 id="toc-hId-569138745"><STRONG><U>Solution overview</U></STRONG></H2><BR />
As there is no option available to add or modify the fields in the SAP ByD standard payment file structure, ERPL will create a custom-defined payment file structure in Bydesign as per the sample file format provided by the Bank.<BR />
<BR />
<BR />
<H2 id="toc-hId-372625240"><STRONG><U>High-level Architecture Design</U></STRONG></H2><BR />
<P style="overflow: hidden;margin-bottom: 0px"><IMG class="migrated-image" src="https://community.sap.com/legacyfs/online/storage/blog_attachments/2023/06/MicrosoftTeams-image-43.png" /></P><BR />
<P class="image_caption" style="text-align: center;font-style: italic">Outbound Bank File Format In SAP ByDesign</P><BR />
<BR />
<H2 id="toc-hId-176111735"><STRONG><U>Benefits</U></STRONG></H2><BR />
<UL><BR />
<LI>Secure – Data transmission Integration relies on secure handling of data between systems.</LI><BR />
<LI><SPAN class="ui-provider gl b c d e f g h i j k l m n o p q r s t u v w x y z ab ac ae af ag ah ai aj ak" dir="ltr">It is reliable in renaming or relabelling fields in the generated bank file to match specific bank requirements, ensuring smooth electronic payment processing.</SPAN></LI><BR />
<LI>Custom Payment File format in SAP By Design.</LI><BR />
</UL><BR />
<H2 id="toc-hId--20401770"><STRONG><U>Conclusion</U></STRONG></H2><BR />
The Solution which automates the fields in the SAP ByD standard payment file structure for Outgoing Bank Transfer in SAP Business Bydesign.<BR />
<BR />
Kindly post your questions in ask a question section and feedback in the below comments section.2023-06-28T15:03:50+02:00https://community.sap.com/t5/enterprise-resource-planning-blog-posts-by-members/integration-of-sap-business-bydesign-with-acumatica-a-third-party-erp/ba-p/13559458INTEGRATION OF SAP BUSINESS BYDESIGN WITH ACUMATICA A THIRD-PARTY ERP SYSTEM2023-07-21T21:20:24+02:00archana2507https://community.sap.com/t5/user/viewprofilepage/user-id/140530<STRONG>Introduction:</STRONG><BR />
<BR />
In today's fast-paced and competitive business landscape, having efficient and streamlined operations is crucial for success. By leveraging the power of technology and integrating different software solutions, businesses can optimize their processes and achieve greater productivity. One such integration that offers immense benefits is the integration of Business ByDesign and Acumatica. In this blog post, we will explore the advantages of integrating these two powerful platforms and how it can help businesses achieve operational excellence.<BR />
<BR />
<STRONG>Understanding Business ByDesign and Acumatica:</STRONG><BR />
<BR />
Before delving into the benefits of integration, let's briefly understand what Business ByDesign and Acumatica are and how they contribute to business management.<BR />
<UL><BR />
<LI>Business ByDesign is an all-in-one cloud-based business management software offered by SAP. It provides comprehensive solutions for various functions, including finance, sales, procurement, project management, and more. Business ByDesign offers scalability and flexibility, making it suitable for both small and mid-sized businesses.</LI><BR />
<LI>Acumatica is a leading cloud-based enterprise resource planning (ERP) system. It offers robust functionality across various areas, including financial management, customer relationship management (CRM), distribution, manufacturing, and more. Acumatica is highly customizable and can adapt to the unique needs of businesses across different industries.</LI><BR />
</UL><BR />
<STRONG>High-Level Architecture:</STRONG><BR />
<P style="overflow: hidden;margin-bottom: 0px"><IMG class="migrated-image" src="https://community.sap.com/legacyfs/online/storage/blog_attachments/2023/07/Acumatica-Blog.png" /></P><BR />
<P class="image_caption" style="text-align: center;font-style: italic">Acumatica and Business ByDesign Integration Process</P><BR />
<STRONG>The Benefits of Integration:</STRONG><BR />
<BR />
Integrating Business ByDesign and Acumatica brings several advantages that enhance overall business efficiency and effectiveness.<BR />
<UL><BR />
<LI>Real-time Data Synchronization: Integrating Business ByDesign and Acumatica allows for seamless data exchange between the two systems. This enables real-time synchronization of crucial business data, such as sales orders, inventory levels, customer information, and financial data. With accurate and up-to-date information available across systems, decision-making becomes faster and more informed.</LI><BR />
</UL><BR />
<STRONG>Conclusion:</STRONG><BR />
<BR />
<SPAN class="ui-provider ga b c d e f g h i j k l m n o p q r s t u v w x y z ab ac ae af ag ah ai aj ak" dir="ltr">Business ByDesign and Acumatica integration is a streamlined process for Master Data and Financial Transmission between two systems</SPAN><BR />
<BR />
Kindly post your questions in ask a question section and feedback in the below comments section.2023-07-21T21:20:24+02:00https://community.sap.com/t5/technology-blog-posts-by-members/how-to-control-visibility-of-any-tab-field-using-ruby-script-in-sdk-ui/ba-p/13578518How to control visibility of any tab/field using ruby script in SDK UI designer2023-09-14T01:18:18+02:00tkbisoyi9118https://community.sap.com/t5/user/viewprofilepage/user-id/162380As the UI rules in C4C is not applicable for SDK custom fields and tabs. We cannot control over the behaviors of custom fields or tabs from C4C UI. But we can control the behaviors like “Enabled”, “Mandatory”, “Visible” & “Read Only” using ruby script in SDK UI designer.<BR />
<BR />
In this blog, I will demonstrate how can we control any custom tab or field’s visibility on the basis of another field’s dropdown value using ruby script in the UI designer of SDK.<BR />
<BR />
Let's consider one example: There is one custom BO called “PM” (Plant maintenance) which is having a dropdown field as “Maintenance Type” with the values as 01- General, 02 – Preventive & 03- Break Down. Two custom tabs are created as “General & Break Down” and “Preventive”. Both the tabs consist of different information corresponding to their maintenance type where “General & Break Down” tab has same type of information and “Preventive” tab has some more information than as “General & Break Down”.<BR />
<BR />
So, when one user will select a particular maintenance type in Maintenance Type field, corresponding to that field value, the respective tab will be visible and other tab will be hidden.<BR />
<BR />
<STRONG>Case1 – Control tab visibility using ruby script.</STRONG><BR />
<BR />
As you can see in the TI screen of PM BO, 2 tabs are created and maintained as “General & Breakdown” & “Preventive”.<BR />
<P style="overflow: hidden;margin-bottom: 0px"><IMG class="migrated-image" src="https://community.sap.com/legacyfs/online/storage/blog_attachments/2023/09/1-44.png" /></P><BR />
To hide the Preventive tab for general and breakdown type of maintenance, we must follow the below steps:<BR />
<OL><BR />
<LI>Open the TI screen in UI designer. Select the tab (General & Breakdown) for which you want to control the visibility via ruby script.</LI><BR />
<LI>Then go to Properties and select “Visible” under “Behavior” section. Select as Advanced and choose “Calculation Rule”.</LI><BR />
<LI>Inside the body of “Calculation Rule” write the ruby script code as below.</LI><BR />
</OL><BR />
The code says: If the maintenance type (M_Type) is General (01) or Breakdown (03) then the “General & Break Down” tab should be visible and the “Preventive” tab should not be visible.<BR />
<OL start="4"><BR />
<LI>From the Invalidation trigger window select the data field on which the condition is applied and click on “->”.</LI><BR />
</OL><BR />
<P style="overflow: hidden;margin-bottom: 0px"><IMG class="migrated-image" src="https://community.sap.com/legacyfs/online/storage/blog_attachments/2023/09/2-7.jpg" /></P><BR />
Same steps need to be followed for “Preventive” tab. Like Select the tab, select “Visible” under “Behavior” section, and choose advanced with calculation rule. Then write the logic: - if maintenance type is “Preventive” (02) then visibility should be true else false for other type of maintenance.<BR />
<P style="overflow: hidden;margin-bottom: 0px"><IMG class="migrated-image" src="https://community.sap.com/legacyfs/online/storage/blog_attachments/2023/09/3-22.png" /></P><BR />
<STRONG>The Result: </STRONG><BR />
<BR />
There are three types of maintenance.<BR />
<P style="overflow: hidden;margin-bottom: 0px"><IMG class="migrated-image" src="https://community.sap.com/legacyfs/online/storage/blog_attachments/2023/09/4-25.png" /></P><BR />
If I select Breakdown maintenance, then “General & Breakdown” tab is visible and the “Preventive” tab is hidden.<BR />
<P style="overflow: hidden;margin-bottom: 0px"><IMG class="migrated-image" src="https://community.sap.com/legacyfs/online/storage/blog_attachments/2023/09/5-19.png" /></P><BR />
If I select General maintenance, then “General & Breakdown” tab is visible and the “Preventive” tab is hidden.<BR />
<P style="overflow: hidden;margin-bottom: 0px"><IMG class="migrated-image" src="https://community.sap.com/legacyfs/online/storage/blog_attachments/2023/09/6-18.png" /></P><BR />
But when I have selected Preventive maintenance the “General & Breakdown” tab is hidden, and “Preventive” tab is visible.<BR />
<P style="overflow: hidden;margin-bottom: 0px"><IMG class="migrated-image" src="https://community.sap.com/legacyfs/online/storage/blog_attachments/2023/09/7-15.png" /></P><BR />
<STRONG> </STRONG><BR />
<BR />
<STRONG>Case 2: Control field visibility using Ruby script.</STRONG><BR />
<BR />
We can perform this logic to hide/unhide any field as per list value of “Maintenance Type” in UI designer of SDK.<BR />
<BR />
Let’s consider, “Cycle pending” & “Frequency Applied” fields are related to Preventive type of maintenance. So, the requirement is when we are not selecting Preventive type of maintenance these 2 fields should be hidden.<BR />
<OL><BR />
<LI>On the TI screen in UI designer select the field you want to hide/unhide. Then under Behavior select “visible” and choose “Advanced” for Calculation Rule.</LI><BR />
<LI>In the body write the logic as below to satisfy above condition.</LI><BR />
<LI>From the Invalidation trigger select the field which is maintained in the condition and move to right box. Then Save and activate the UI.</LI><BR />
</OL><BR />
<P style="overflow: hidden;margin-bottom: 0px"><IMG class="migrated-image" src="https://community.sap.com/legacyfs/online/storage/blog_attachments/2023/09/8-12.png" /></P><BR />
<P style="overflow: hidden;margin-bottom: 0px"><IMG class="migrated-image" src="https://community.sap.com/legacyfs/online/storage/blog_attachments/2023/09/9-12.png" /></P><BR />
<BR />
<BR />
<STRONG>The Result: </STRONG><BR />
<BR />
When I have selected maintenance type as “Preventive” the corresponding fields can be seen in the overview tab.<BR />
<P style="overflow: hidden;margin-bottom: 0px"><IMG class="migrated-image" src="https://community.sap.com/legacyfs/online/storage/blog_attachments/2023/09/10-15.png" /></P><BR />
But when I have selected either “General” or “Breakdown” in maintenance type then those fields are hidden.<BR />
<P style="overflow: hidden;margin-bottom: 0px"><IMG class="migrated-image" src="https://community.sap.com/legacyfs/online/storage/blog_attachments/2023/09/11-22.png" /></P><BR />
<STRONG>Conclusion: -</STRONG><BR />
<BR />
This solution is very straight and simple. This can be very useful in most of the projects of C4C for such type of requirements. We can use the Calculation rules and ruby scripts for various conditions and different requirements.2023-09-14T01:18:18+02:00https://community.sap.com/t5/technology-blog-posts-by-members/how-to-integrate-sdk-extension-fields-into-web-services/ba-p/13578931How To Integrate SDK Extension Fields into Web Services2023-09-14T23:47:13+02:00Sunil5https://community.sap.com/t5/user/viewprofilepage/user-id/162675It’s a common business requirement to replicate the data for extension fields to different systems. In this blog, I will demonstrate how to add SDK extension field to a standard web service which can then be used by other applications.<BR />
<BR />
Here We have added some extension fields in Customer Extension BO which are needed to be available in customer web service (ManageCustomerIn).<BR />
<BR />
To add extension field to Extension BO we need to follow below steps:<BR />
<BR />
<BR />
<UL><BR />
<LI>Open your solution and click on Add New Item and select the “Extension” and from the list select “Business Object Extension”.</LI><BR />
<LI>Add extension fields in “Business Object Extension” as shown below.</LI><BR />
</UL><BR />
<P style="overflow: hidden;margin-bottom: 0px"><IMG class="migrated-image" src="https://community.sap.com/legacyfs/online/storage/blog_attachments/2023/09/Picture1-31.png" /></P><BR />
<BR />
<BR />
We now have few extension fields created in Extension BO in Cloud Application Studio. If those extension fields are required to be available in standard web service, we need to create “<STRONG>Process Extension Scenario</STRONG>”. Here you need to follow the below steps:<BR />
<BR />
<BR />
<UL><BR />
<LI>Right click on your solution and click on Add New Item and select the “Extension” and from the list select “<STRONG>Process Extension Scenario</STRONG>” as shown below.</LI><BR />
</UL><BR />
<P style="overflow: hidden;margin-bottom: 0px"><IMG class="migrated-image" src="https://community.sap.com/legacyfs/online/storage/blog_attachments/2023/09/Picture2-20.png" /></P><BR />
<BR />
<UL><BR />
<LI>Click on Add and new pop-up comes up with the details like select “Namespace, Business Object, Node” as shown below.</LI><BR />
</UL><BR />
<P style="overflow: hidden;margin-bottom: 0px"><IMG class="migrated-image" src="https://community.sap.com/legacyfs/online/storage/blog_attachments/2023/09/Picture3-19.png" /></P><BR />
<BR />
<UL><BR />
<LI>We need to select the checkbox of any service scenario view. After that the extension fields will be available for the webservices. Then click on Ok button to finish this setup.</LI><BR />
<LI>After completing all the above processes. Add the Process Extension Scenario name in “Scenario” annotation before the element name of extension fields as shown below.</LI><BR />
</UL><BR />
<BR />
<BR />
<IMG class="migrated-image" src="https://community.sap.com/legacyfs/online/storage/blog_attachments/2023/09/Picture7-13.png" /><BR />
<BR />
<BR />
<UL><BR />
<LI>After that Save and Activate the Extension BO.</LI><BR />
</UL><BR />
<BR />
<BR />
Now we can be able to use the updated WSDL file of Customer Extension BO in web service integration. For which we have follow the below steps.<BR />
<BR />
Then go to the Business User work center and download the WSDL file for which you have added the extension fields. Then you need to follow the below steps:<BR />
<UL><BR />
<LI>Login to C4C using Business user credentials. Navigate as Administrator --> Service Explorer.</LI><BR />
<LI>Select the web service where you have extended the extension fields and download the WSDL file as shown below.</LI><BR />
</UL><BR />
<P style="overflow: hidden;margin-bottom: 0px"><IMG class="migrated-image" src="https://community.sap.com/legacyfs/online/storage/blog_attachments/2023/09/Picture5-11.png" /></P><BR />
<STRONG>Result Preview:- </STRONG><BR />
<BR />
After downloaded the WSDL file save it into your system. Then drag and drop the WSDL file to the browser where you can find newly added extension fields.<BR />
<BR />
You can also open the WSDL file through Notepad++ and search for the fields.<BR />
<P style="overflow: hidden;margin-bottom: 0px"><IMG class="migrated-image" src="https://community.sap.com/legacyfs/online/storage/blog_attachments/2023/09/Picture6-14.png" /></P><BR />
<BR />
<BR />
<STRONG>Conclusion:- </STRONG><BR />
<BR />
After extending the extension fields to the web service you can use those SDK fields in any integration.<BR />
<BR />
2023-09-14T23:47:13+02:00https://community.sap.com/t5/crm-and-cx-blog-posts-by-members/developing-a-new-custom-data-source-in-sap-c4c-using-sap-cloud-application/ba-p/13562592Developing a New Custom Data Source in SAP C4C Using SAP Cloud Application Studio (SDK)2023-09-26T15:23:36+02:00msalmanihttps://community.sap.com/t5/user/viewprofilepage/user-id/43930<H1 id="toc-hId-833891296">1. Introduction</H1><BR />
We already explained in this blog <A href="https://blogs.sap.com/2023/01/18/developing-a-new-custom-data-source-in-sap-c4c/" target="_blank" rel="noopener noreferrer">Developing a New Custom Data Source in SAP C4C</A>, how to develop a new data source of types joined or combined directly within SAP C4C. Now, in this blog, we will learn how to develop a new custom data source (and not a joined or combined one) for a custom/standard business object in SAP C4C using SAP SDK. This data source can be used further for developing a new report, key figure or a new custom KPI. It means, developing a data source gives us more flexibility to develop more helpful analytical dashboards and reports.<BR />
<H1 id="toc-hId-637377791">2. Developing a New Custom Data Source</H1><BR />
As starting point, we should open the desired solution in SAP SDK and then right click on the desired folder and select "Add - New Item ...".<BR />
<P style="overflow: hidden;margin-bottom: 0px"><IMG class="migrated-image" src="https://community.sap.com/legacyfs/online/storage/blog_attachments/2023/09/SDK-Add-Item.jpg" /></P><BR />
<P class="image_caption" style="text-align: center;font-style: italic">Image 01: Add a New Item in SAP SDK</P><BR />
Then, we will see following popup in which we need to select "Analytics - Data Source" and the put a name for it:<BR />
<P style="overflow: hidden;margin-bottom: 0px"><IMG class="migrated-image" src="https://community.sap.com/legacyfs/online/storage/blog_attachments/2023/09/SDK-DS-Type.jpg" /></P><BR />
<P class="image_caption" style="text-align: center;font-style: italic">Image 02: Add New Data Source in SAP SDK</P><BR />
If we select "Joined Data Source" or "Combined Data Source" in the above screenshot, then we will be redirected to SAP C4C for creating a new data source which is already explained in <A href="https://blogs.sap.com/2023/01/18/developing-a-new-custom-data-source-in-sap-c4c/" target="_blank" rel="noopener noreferrer">Developing a New Custom Data Source in SAP C4C</A>.<BR />
<BR />
Then we see next popup in which we should provide more details. Some of these details are clear, but here is more details SAP provided for last three fields:<BR />
<UL><BR />
<LI><STRONG>Enable Access Control</STRONG>: Select this checkbox to allow restrictions for data from this data source. This data that users can access is defined in the work center view to which a report is assigned. To enable access control, your business object must contain an association that is marked as relevant for access control.</LI><BR />
<LI><STRONG>Allow Referencing</STRONG>: Select to allow referencing by another data source and allow the fields of your data source name to be used in reports based on the referencing data source.</LI><BR />
<LI><STRONG>Log Sensitive Personal Data</STRONG>: Select the checkbox to enable read access logging for sensitive personal data.</LI><BR />
</UL><BR />
<P style="overflow: hidden;margin-bottom: 0px"><IMG class="migrated-image" src="https://community.sap.com/legacyfs/online/storage/blog_attachments/2023/09/SDK-Create-a-DS-01-1.jpg" /></P><BR />
<P class="image_caption" style="text-align: center;font-style: italic">Image 03: Add Details of New Data Source in SAP SDK</P><BR />
In the next step, we select desired fields, nodes and associations which we want to add to data source in and output.<BR />
<P style="overflow: hidden;margin-bottom: 0px"><IMG class="migrated-image" src="https://community.sap.com/legacyfs/online/storage/blog_attachments/2023/09/SDK-Create-a-DS-02-1.jpg" /></P><BR />
<P class="image_caption" style="text-align: center;font-style: italic">Image 04: Selecting Desired Fields, Nodes, and Associations</P><BR />
Now, it is time to define transformation rules for business object elements. Here, we have this option to rename field names, as we see below. In some cases, we can select a second parameter within the transformation rule. For more information about possible transformation rules, we can refer to <A href="https://help.sap.com/doc/saphelpiis_studio_1805/2018.05/en-US/KTP/Products/bf889ebdf45d4dd19d4a0e0bd39a07fb/DeveloperDesktop/Analytics/ESS_CON_TransformationRules.html" target="_blank" rel="noopener noreferrer">Transformation Rule</A>.<BR />
<P style="overflow: hidden;margin-bottom: 0px"><IMG class="migrated-image" src="https://community.sap.com/legacyfs/online/storage/blog_attachments/2023/09/SDK-Create-a-DS-03-1.jpg" /></P><BR />
<P class="image_caption" style="text-align: center;font-style: italic">Image 05: Define Transformation Rules for Business Object Elements</P><BR />
In the next step, we can define aggregations which allows us further to calculate new key figures. In our example, we defined three aggregations on the field quantity as maximum, minimum, and summation. However, based on field type, we may have different possible aggregations in C4C.<BR />
<P style="overflow: hidden;margin-bottom: 0px"><IMG class="migrated-image" src="https://community.sap.com/legacyfs/online/storage/blog_attachments/2023/09/SDK-Create-a-DS-04-1.jpg" /></P><BR />
<P class="image_caption" style="text-align: center;font-style: italic">Image 06: Define Aggregation Behaviour for Business Object Elements</P><BR />
Finally, we can review everything and confirm it.<BR />
<P style="overflow: hidden;margin-bottom: 0px"><IMG class="migrated-image" src="https://community.sap.com/legacyfs/online/storage/blog_attachments/2023/09/SDK-Create-a-DS-06-1.jpg" /></P><BR />
<P class="image_caption" style="text-align: center;font-style: italic">Image 07: Review and Confirm the New Custom Data Source</P><BR />
We can also access to the created item any time int the solution and update it, if required.<BR />
<P style="overflow: hidden;margin-bottom: 0px"><IMG class="migrated-image" src="https://community.sap.com/legacyfs/online/storage/blog_attachments/2023/09/SDK-Create-a-DS-07-1.jpg" /></P><BR />
<P class="image_caption" style="text-align: center;font-style: italic">Image 08: Review and Update an Already Created Custom Data Source</P><BR />
<BR />
<H1 id="toc-hId-440864286">3. Conclusion</H1><BR />
As a conclusion, we are now able to develop a new custom data source for a standard or custom business object. This can be later used in C4C to develop new joined/combined custom data sources.<BR />
<H1 id="toc-hId-244350781">4. Call for Action</H1><BR />
I would like to request you to share feedback or thoughts in a comment and follow my profile (<SPAN class="mention-scrubbed">mhsalmani</SPAN>) for future posts.<BR />
<BR />
If you have any question regarding SAP Cloud Applications Studio you can ask it <A href="https://answers.sap.com/tags/67837800100800006741" target="_blank" rel="noopener noreferrer">here</A> or even read other blogs through this <A href="https://blogs.sap.com/tags/67837800100800006741/" target="_blank" rel="noopener noreferrer">link</A>.<BR />
<BR />
Moreover, there are some other related blogs which I published as following:<BR />
<UL><BR />
<LI><A href="https://blogs.sap.com/2023/01/18/developing-a-new-custom-data-source-in-sap-c4c/" target="_blank" rel="noopener noreferrer">Developing a New Custom Data Source in SAP C4C</A></LI><BR />
</UL>2023-09-26T15:23:36+02:00https://community.sap.com/t5/technology-blog-posts-by-members/how-to-create-custom-ui-screens-for-mobile-application-in-business-bydesign/ba-p/13574291How to create custom UI screens for Mobile Application in Business ByDesign2023-10-03T22:08:55+02:00ArunKumar14https://community.sap.com/t5/user/viewprofilepage/user-id/165801<H2 id="toc-hId-963954234"><STRONG>Steps to create the custom UI enablement in SAP Business ByDesign</STRONG></H2><BR />
<P style="text-align: left"> With the SAP Business ByDesign Mobile App, you can access many of the main functions of the system that have been tailored to business on-the-run.</P><BR />
<P style="text-align: left"> Changes made on your mobile device are automatically updated in the system, over the Internet, online and in real time.</P><BR />
<P style="text-align: left"> As in the desktop applications, you can use the ByDesign extensibility and flexibility features to extend the standard contents of the mobile app, as well as the content developed by partners and customers. In addition, you can use the SAP Cloud Applications Studio to extend many mobile functions.</P><BR />
<P style="text-align: left"><STRONG>SUPPORTED PLATFORMS</STRONG></P><BR />
<P style="text-align: left">The mobile application is currently available for the following smartphones,<BR />
i.) Android Phones.<BR />
ii.) Apple iPhone.</P><BR />
<P style="text-align: left"><STRONG>SCENARIO:</STRONG> Implementing the mobile application as same as a desktop application of SAP Business ByDesign.</P><BR />
<P style="text-align: left"><STRONG>WORKFLOW:</STRONG></P><BR />
<P style="text-align: left">I. Create a custom business object.<BR />
II. Generating screen for desktop application (As usual Procedure).<BR />
III. Generating screen for mobile application (Change the screen name).<BR />
IV. Design the screen for mobile application.<BR />
V. Testing.</P><BR />
<P style="text-align: left"><STRONG>I. CREATE A CUSTOM BUSINESS OBJECT</STRONG></P><BR />
<BR />
<UL><BR />
<LI>Create a custom business object.</LI><BR />
<LI>Define elements in root and item level as shown in the below screenshot.</LI><BR />
<LI>Save and activate.</LI><BR />
</UL><BR />
<P style="overflow: hidden;margin-bottom: 0px"><IMG class="migrated-image" src="https://community.sap.com/legacyfs/online/storage/blog_attachments/2023/09/Image-42.png" /></P><BR />
<BR />
<BR />
<STRONG>II. GENERATING SCREEN FOR DESKTOP APPLICATION:</STRONG><BR />
<UL><BR />
<LI>This is the mandatory step for designing the desktop application.</LI><BR />
<LI>For the desktop screens follow the as-usual procedure to design the screens. Note the Short ID while generating the screens.</LI><BR />
</UL><BR />
<P style="overflow: hidden;margin-bottom: 0px"><IMG class="migrated-image" src="https://community.sap.com/legacyfs/online/storage/blog_attachments/2023/09/Image1-1.png" /></P><BR />
<BR />
<BR />
<STRONG>III. GENERATING SCREEN FOR MOBILE APPLICATION (CHANGE THE SCREEN NAME) </STRONG><BR />
<BR />
For the same Custom Business Object, generate one more set of screens by changing the Screen Name and give the short ID.<BR />
<P style="overflow: hidden;margin-bottom: 0px"><IMG class="migrated-image" src="https://community.sap.com/legacyfs/online/storage/blog_attachments/2023/09/Image2-1.png" /></P><BR />
<BR />
<BR />
<STRONG>IV. DESIGN THE SCREEN FOR MOBILE APPLICATION</STRONG><BR />
<BR />
Now open the Work center View of the mobile app screen, change the properties as highlighted below,<BR />
<UL><BR />
<LI>In properties under configuration there will be a tags, open the tags choose the attribute as "<STRONG>Device</STRONG>" and the value as Mobile HTML.</LI><BR />
<LI>Also add one more operation choose the attribute as "<STRONG>Device Cluster</STRONG>" and the value as SHORT ID which you have given while generating the screens for the desktop and click on Ok.</LI><BR />
</UL><BR />
<P style="overflow: hidden;margin-bottom: 0px"><IMG class="migrated-image" src="https://community.sap.com/legacyfs/online/storage/blog_attachments/2023/09/Image3-1.png" /></P><BR />
<BR />
<UL><BR />
<LI><SPAN style="font-size: 1rem">Save and activate the work center view.</SPAN></LI><BR />
<LI>Open the work center of the mobile app screen, save and activate it.</LI><BR />
<LI>Open the OWL, QA and OIF of the mobile app screen , Design it (as done in the desktop screens / as-usual procedure to design it) and Change the properties as highlighted below,</LI><BR />
</UL><BR />
<OL><BR />
<LI>Add a operation and choose the attribute as device and the value as "<STRONG>Mobile HTML</STRONG>", click on Ok.</LI><BR />
<LI>Save and activate it, screens will not be activated, error will be occurs.</LI><BR />
<LI>Once the properties are changed from OWL, QA, and OIF screens.</LI><BR />
<LI>Save and activate the mobile app screens starting from WC View, OWL, QA, and OIF screens.</LI><BR />
</OL><BR />
<P style="overflow: hidden;margin-bottom: 0px"><IMG class="migrated-image" src="https://community.sap.com/legacyfs/online/storage/blog_attachments/2023/09/Image4-1.png" /></P><BR />
5. Assign the work center of the mobile screen to the front end on your desktop and the screens will be displayed in your mobile app.<BR />
<BR />
<BR />
<BR />
<STRONG>V. TESTING:</STRONG><BR />
<UL><BR />
<LI>Download the <STRONG>SAP Business ByDesign Mobile</STRONG> app from the play store/App Store in your mobile.</LI><BR />
<LI>Login into SAP Business ByDesign Mobile application.</LI><BR />
<LI>Open the Mobile – Work center of your custom object.</LI><BR />
<LI>Test the scenario by create the record and save it.</LI><BR />
</UL><BR />
<STRONG>NOTE: I</STRONG><SPAN style="font-size: 1rem">n the mobile screen, the standard object value selector (OVS) will not be accepted since that is designed for the Desktop. So as a result we need to create a custom OVS and assign it to the appropriate field. </SPAN>Also, change the properties of the custom OVS by adding one attribute under tag and assign it to the "<STRONG>Mobile HTML"</STRONG>.<BR />
<BR />
2023-10-03T22:08:55+02:00https://community.sap.com/t5/sap-learning-blog-posts/where-can-i-learn-development-process-and-techniques-for-extending-the-sap/ba-p/294401Where can I learn development process and techniques for extending the SAP Sales Cloud2023-10-11T12:37:12.547000+02:00Margit_Wagnerhttps://community.sap.com/t5/user/viewprofilepage/user-id/491<DIV class=""><DIV class=""><DIV class=""><P>You can build the skills you need, for free and at your own pace with our Digital Learning Journey. <BR />on our <A title="SAP Learning Site " href="https://learning.sap.com/learning-journey" target="_blank" rel="noopener noreferrer">SAP Learning Site</A></P><DIV><P>I recommend to access our <SPAN><A title="Extending SAP Sales and Service Cloud with SAP Cloud Applications Studio learning journey" href="https://learning.sap.com/learning-journey/extending-sap-sales-and-service-cloud-with-sap-cloud-applications-studio" target="_blank" rel="noopener noreferrer">Extending SAP Sales and Service Cloud with SAP Cloud Applications Studio learning journey</A> </SPAN><BR /><BR /></P><DIV><STRONG>Overview<BR /></STRONG><SPAN>This learning journey will guide you through the development process and techniques for extending the SAP Sales Cloud and SAP Service Cloud using SAP Cloud Applications Studio.</SPAN><BR /><DIV><P><STRONG>Learning objectives<BR /></STRONG>After completing this learning journey, <STRONG>consultants</STRONG> and <STRONG>developers</STRONG> will understand how to develop their own solutions for SAP Sales and Service Cloud using new custom business objects, screens and/or extending the standard content repository using SAP Cloud Applications Studio.</P><P><STRONG>Prerequisites</STRONG></P><UL><LI><SPAN>Basic knowledge of SAP Sales Cloud and/or SAP Service Cloud</SPAN></LI><LI>Ability to navigate through the user interface of these systems</LI><LI>Previous Developer Experience</LI></UL><DIV> </DIV><H3 id="toc-hId-1456502343">Pass all the quizzes and receive a digital badge</H3></DIV></DIV><DIV><P class=""><SPAN>Hope this is helpful.</SPAN></P><P class=""><STRONG>Please ask a question related to the digital learning journey in the <A title="Q&A area" href="https://groups.community.sap.com/t5/sap-learning/gh-p/learning" target="_blank" rel="noopener noreferrer">Q&A area</A></STRONG></P><P class=""><SPAN>Our SAP Learning Experts will get back to you as soon as possible! We are here to support you.</SPAN></P></DIV><DIV><DIV><DIV><P><SPAN>We appreciate your feedback and we will make sure to continue sharing interesting topics.</SPAN></P><P><SPAN>Kind regards<BR />Margit</SPAN></P></DIV></DIV></DIV></DIV></DIV></DIV></DIV>2023-10-11T12:37:12.547000+02:00https://community.sap.com/t5/crm-and-cx-blog-posts-by-sap/new-learning-journey-extending-sap-sales-and-service-cloud-with-sap-cloud/ba-p/13579721New learning Journey– Extending SAP Sales and Service Cloud with SAP Cloud Applications Studio2023-10-16T11:11:51+02:00FernandoRedondohttps://community.sap.com/t5/user/viewprofilepage/user-id/7571Hello everybody again! This is Fernando speaking!<BR />
<BR />
During last 10 years we’ve been updating and improving the content for this course: <A href="https://training.sap.com/course/c4h460-sap-cloud-applications-studio-previously-known-as-c4c30-classroom-024-g-en/" target="_blank" rel="noopener noreferrer">SAP Cloud Applications Studio</A> (nowadays named C4H460 but formerly known as C4C30). This course is excellent for a 4-day class delivered by an instructor (I've delivered it many times), but it wasn’t designed as an eLearning targeting students who are pacing themselves. By the end of last year, we decided to create from scratch a new digital first learning journey project. We've analyzed the objectives for a beginner learner to take advantage of the major topics from the very first minutes of studying, we’ve created and developed complete brand-new materials for the all units and all lessons using new texts, graphics, interactions, simulations and videos bearing in mind all those years of classroom teaching experience but also getting first-hand feedback from real live project developer consultants.<BR />
<BR />
<STRONG style="font-size: 1rem"><SPAN class="TextRun MacChromeBold SCXW235998497 BCX0" lang="EN-US" lang="EN-US" data-contrast="auto"><STRONG><SPAN class="NormalTextRun SCXW235998497 BCX0"><IMG class="migrated-image" src="https://community.sap.com/legacyfs/online/storage/blog_attachments/2022/05/281495_SpiralboundNotebook_R_blue.png" height="86" width="86" /></SPAN></STRONG></SPAN> </STRONG><BR />
<BR />
<BR />
<P style="overflow: hidden;margin-bottom: 0px"><SPAN class="TextRun MacChromeBold SCXW235998497 BCX0" lang="EN-US" lang="EN-US" data-contrast="auto"><STRONG><SPAN class="NormalTextRun SCXW235998497 BCX0">New Learning Journey</SPAN></STRONG></SPAN></P><BR />
<STRONG><A href="https://learning.sap.com/learning-journey/extending-sap-sales-and-service-cloud-with-sap-cloud-applications-studio?url_id=text-blogs-LSCPLCoE-SSC-Studio" target="_blank" rel="noopener noreferrer">C4H46B - Extending SAP Sales and Service Cloud with SAP Cloud Applications Studio</A></STRONG><BR />
<BR />
<BR />
<BR />
<SPAN class="TextRun SCXW44743972 BCX0" lang="EN-US" lang="EN-US" data-contrast="auto"><SPAN class="NormalTextRun SCXW44743972 BCX0">This learning journey is available completely free on SAP's new educational platform <STRONG>learning.sap.com</STRONG></SPAN><SPAN class="NormalTextRun SCXW44743972 BCX0">. Following the learning journey you will notice that now, most of the content is multimedia, so that you can learning easily a wide set of topics with simulations, animations, hot maps, and</SPAN><SPAN class="NormalTextRun SCXW44743972 BCX0"> even with videos recordings from the real developer tasks and activities on the cloud system and also using the IDE (<EM>Integrated Development Environment</EM>) .</SPAN></SPAN><BR />
<BR />
Our goal with this learning journey is to enable developers and consultants to gain the knowledge on how to develop their own solutions for SAP Sales and Service Cloud using new custom business objects, screens and/or extending the standard content repository using SAP Cloud Applications Studio.I <SPAN class="EOP SCXW8580650 BCX0" data-ccp-props="{"134233117":true,"134233118":true,"201341983":0,"335559739":160,"335559740":240}">know that sounds like a big goal, but we are covering all the major development steps during this eLearning with high level of detail.</SPAN><BR />
<IMG class="migrated-image" src="https://community.sap.com/legacyfs/online/storage/blog_attachments/2020/04/Course.png" height="98" width="98" /><STRONG style="font-size: 1rem"> </STRONG><BR />
<BR />
<STRONG><SPAN class="TextRun MacChromeBold SCXW118631084 BCX0" lang="EN-US" lang="EN-US" data-contrast="auto"><SPAN class="NormalTextRun SCXW118631084 BCX0">Audience</SPAN></SPAN></STRONG><BR />
<UL><BR />
<LI style="list-style-type: none"><BR />
<UL><BR />
<LI style="list-style-type: none"><BR />
<UL><BR />
<LI><SPAN data-contrast="auto">Technical Consultants</SPAN></LI><BR />
<LI><SPAN data-contrast="auto">Developers</SPAN><SPAN data-ccp-props="{"134233117":true,"134233118":true,"201341983":0,"335559739":160,"335559740":240}"> </SPAN></LI><BR />
</UL><BR />
</LI><BR />
</UL><BR />
</LI><BR />
</UL><BR />
<BR />
<BR />
<IMG class="migrated-image" src="https://community.sap.com/legacyfs/online/storage/blog_attachments/2023/10/Picture1-31.png" height="98" width="98" /><STRONG style="font-size: 1rem"> </STRONG><STRONG><SPAN class="TextRun MacChromeBold SCXW118631084 BCX0" lang="EN-US" lang="EN-US" data-contrast="auto"><SPAN class="NormalTextRun SCXW118631084 BCX0">Featured topics</SPAN></SPAN></STRONG><BR />
<UL><BR />
<LI style="list-style-type: none"><BR />
<UL><BR />
<LI style="list-style-type: none"><BR />
<UL><BR />
<LI>Introductory discussion about all SAP Sales and Service Cloud Extensibility Options.</LI><BR />
<LI>A comprehensive primer development lifecycle and to the Studio setup and UI.</LI><BR />
<LI>How to use the scripting language to define business objects and implement business logic.</LI><BR />
<LI>Developing Custom Business Objects and Extending Standard Business Objects.</LI><BR />
<LI>Explanation about Business Configuration concept.</LI><BR />
<LI>Considerations on Assembling and downloading the solution on the development tenant to move it to another tenant.</LI><BR />
<LI>Deploying the solution on another tenant to test it or use it productively.</LI><BR />
</UL><BR />
</LI><BR />
</UL><BR />
</LI><BR />
</UL><BR />
<SPAN class="EOP SCXW8580650 BCX0" data-ccp-props="{"134233117":true,"134233118":true,"201341983":0,"335559739":160,"335559740":240}">Here you have a glimpse of the look and feel:</SPAN><BR />
<P style="overflow: hidden;margin-bottom: 0px"><IMG class="migrated-image" src="https://community.sap.com/legacyfs/online/storage/blog_attachments/2023/10/Screenshot-2023-10-16-at-10.57.19.png" /></P><BR />
<BR />
<BR />
If you are thinking about extending your SAP Sales Cloud or your SAP Service Cloud solution with your own business logic this is the right initial course for you! Go and learn all the foundations about the development process. After that, you can still decide to participate in the <A href="https://training.sap.com/course/c4h460-sap-cloud-applications-studio-previously-known-as-c4c30-classroom-024-g-en/" target="_blank" rel="noopener noreferrer">4 day Instructor Led Training</A> which will give you the opportunity to have deeper tech discussions with other students and the instructor and also to carry out a whole collection of exercises that will cover the end to end process for the solution creation.<BR />
<BR />
<IMG class="migrated-image" src="https://community.sap.com/legacyfs/online/storage/blog_attachments/2022/05/282030_PlayButton2_R_blue-2.png" height="98" width="98" /><STRONG style="font-size: 1rem"> </STRONG><BR />
<P style="overflow: hidden;margin-bottom: 0px"><SPAN class="TextRun MacChromeBold SCXW142835170 BCX0" lang="EN-US" lang="EN-US" data-contrast="auto"><SPAN class="NormalTextRun SCXW142835170 BCX0"><STRONG>Additional Updates</STRONG></SPAN></SPAN></P><BR />
<SPAN data-contrast="auto">Check out our SAP Learning Journeys and much more free learning content at </SPAN><A href="https://learning.sap.com/?url_id=text-signaviocommunity-may22" target="_blank" rel="noopener noreferrer"><SPAN data-contrast="none">SAP Learning site</SPAN></A><SPAN data-contrast="auto">, where you can build in-demand SAP skills for free on a </SPAN><A href="https://learning.sap.com/products/customer-experience" target="_blank" rel="noopener noreferrer"><SPAN data-contrast="none">variety of topics in SAP Customer Experience</SPAN></A><SPAN data-contrast="auto">.</SPAN> <SPAN data-contrast="auto">For quick video learning, check out the </SPAN><A href="https://microlearning.opensap.com/channel/Expert%2BSAP%2BExtension%2BSuite%2Bfor%2BCustomer%2BExperience/173269601" target="_blank" rel="noopener noreferrer"><SPAN data-contrast="none">openSAP Microlearning for CX extensibility topics</SPAN></A><SPAN data-contrast="auto"> </SPAN><SPAN data-ccp-props="{"134233117":true,"134233118":true,"201341983":0,"335559739":160,"335559740":240}"> </SPAN><BR />
<BR />
<BR />
<BR />
I’ll be back very soon to present you more new learning resources, talks, sessions and anything which could be of interest for you related to SAP Customer Experience Integration and Extensibility area!<BR />
<BR />
<SPAN data-contrast="auto">Please, let me know about your feedback and questions below via comments!</SPAN><BR />
<BR />
2023-10-16T11:11:51+02:00https://community.sap.com/t5/technology-blog-posts-by-sap/archiving-optimize-with-pdi/ba-p/13576821Archiving - Optimize with PDI2023-11-02T09:39:04+01:00HorstSchaudehttps://community.sap.com/t5/user/viewprofilepage/user-id/6371When Business Objects are deleted by Archiving their persistency is simply relocated from the systems database to an external storage and they are no longer part of any business chain.<BR />
<BR />
This means that during this deletion no other objects should be created or updated. No integration calls shall take place, except the information that this instance has been archived.<BR />
<BR />
This is done for the most of the SAP frameworks centrally, but what about the enhancements via the Partner Development Infrastructure (PDI)?<BR />
<BR />
As referred in <A href="https://blogs.sap.com/2020/12/03/archiving-how-it-is-designed-how-does-it-work/" target="_blank" rel="noopener noreferrer">this blog</A> one can check against the element “<EM>ArchivingStatusCode</EM>” but with <SPAN style="font-size: 1rem">the current release it is much easier:</SPAN><BR />
<UL><BR />
<LI><SPAN style="font-size: 1rem">Use the PDI Reuse Library </SPAN><STRONG style="font-size: 1rem">Archiving</STRONG><SPAN style="font-size: 1rem"> with the function </SPAN><EM style="font-size: 1rem">IsArchivingInProgress</EM><SPAN style="font-size: 1rem">.</SPAN></LI><BR />
</UL><BR />
We propose to make use of this function in the <EM>Root</EM> implementations of all <A href="https://blogs.sap.com/2020/12/18/archiving-what-objects-what-are-the-criteria/" target="_blank" rel="noopener noreferrer">Business Objects supporting Archiving</A> in one of the following ways:<BR />
<UL><BR />
<LI>Skip your implementation in the <EM>AfterModify</EM> and <EM>BeforeSave</EM> scripts<BR />
<IMG class="migrated-image" src="https://community.sap.com/legacyfs/online/storage/blog_attachments/2023/11/BeforeSave.png" /></LI><BR />
<LI>Delete the Custom Business Objects instances which are shadowing the SAP Business Objects in the <EM>OnDelete</EM> script<BR />
<IMG class="migrated-image" src="https://community.sap.com/legacyfs/online/storage/blog_attachments/2023/11/OnDelete.png" /></LI><BR />
</UL><BR />
By this one can optimize the performance of this Archiving phase which we noticed takes the most time of the complete Archiving process.<BR />
<BR />
Thanks to <SPAN class="mention-scrubbed">stefan.kiefer</SPAN> for providing the examples.2023-11-02T09:39:04+01:00https://community.sap.com/t5/technology-blog-posts-by-members/sap-sales-cloud-control-tool-for-selective-code-enablement/ba-p/13577160SAP Sales Cloud - Control Tool for Selective Code Enablement2023-12-11T10:59:46+01:00Gaurihttps://community.sap.com/t5/user/viewprofilepage/user-id/180388<SPAN style="font-weight: 400">Hello Everyone,</SPAN><BR />
<BR />
<SPAN style="font-weight: 400">As we are aware, Cloud application studio is being used to make technical development in C4C and Selective movement of code from dev tenant to other tenants is not feasible due to current cloud studio framework constraints i.e. entire solution has to be moved together.</SPAN><BR />
<BR />
<SPAN style="font-weight: 400">However in the real world, we always come up with challenges where the Development team is working on different build items together with different prioritization, Multiple Releases build going together with different go live timelines, Support team working on an incident code fix and get a different P1 code fix which requires immediate resolution. In such situation we currently don’t have a solution available to transport selectively a part of the code to next tenants from the development without impacting the ongoing parallel developments. In General we follow a classical Manual approach to comment on all the ongoing code, move our priority change and then uncomment the code to continue the work. Which has its own limitations.</SPAN><BR />
<UL><BR />
<LI style="font-weight: 400"><SPAN style="font-weight: 400">Manual version check makes the version management complex</SPAN></LI><BR />
<LI style="font-weight: 400"><SPAN style="font-weight: 400">Multiple test iterations involved</SPAN></LI><BR />
<LI style="font-weight: 400"><SPAN style="font-weight: 400">Alignment between multiple stakeholders (Architects, Support teams, Project teams, Regression teams) consumes lot of time</SPAN></LI><BR />
<LI style="font-weight: 400"><SPAN style="font-weight: 400">Tedious and cumbersome process </SPAN></LI><BR />
<LI style="font-weight: 400"><SPAN style="font-weight: 400">Risk of human error may result into application issues</SPAN></LI><BR />
<LI style="font-weight: 400"><SPAN style="font-weight: 400">Parallel developments of different objects are not possible</SPAN></LI><BR />
</UL><BR />
<SPAN style="font-weight: 400">Trust now we are clear of the scenario that we want to achieve<STRONG> selective movement of the code without impacting the parallel developments.</STRONG> In the Below solution we will see how you can move the entire solution to the next tenant but then <STRONG>enable/disable selective code in test/production tenants</STRONG> based on your requirements</SPAN><BR />
<BR />
<STRONG>Prerequisite :</STRONG>- SAP Sales Cloud Technical Consultants and possess sound knowledge of Cloud Application Studio developments.<BR />
<BR />
<B>Solution Approach: Custom tool for controlling selective movements.</B><BR />
<UL><BR />
<LI style="font-weight: 400"><SPAN style="font-weight: 400">Complete solution will be moved as per standard SAP strategy however We will create a tool to control the selective execution of code in test/Production tenants.</SPAN></LI><BR />
<LI style="font-weight: 400"><SPAN style="font-weight: 400">The tool provides flexibility to enable and disable specific features as per business needs.</SPAN></LI><BR />
</UL><BR />
<B>Steps to follow</B><BR />
<BR />
<SPAN style="font-weight: 400">Step 1: Build a Custom Business Object as shown below..</SPAN><BR />
<P style="overflow: hidden;margin-bottom: 0px"><IMG class="migrated-image" src="https://community.sap.com/legacyfs/online/storage/blog_attachments/2023/12/BO_Screenshot.jpg" /></P><BR />
<P class="image_caption" style="text-align: center;font-style: italic">BO Screen Shot</P><BR />
<P class="image_caption" style="text-align: center;font-style: italic">BO Definition</P><BR />
<BR />
<PRE class="language-javascript"><CODE>// BO Definition in Code<BR />
<BR />
import AP.Common.GDT as apCommonGDT;<BR />
<BR />
businessobject Configure {<BR />
<BR />
// Root node must not be specified, it is created implicitly<BR />
<BR />
//<BR />
<BR />
// Add elements here. <BR />
<BR />
// <BR />
<BR />
// To declare an element as alternative key, use the [AlternativeKey] annotation.<BR />
<BR />
// Please note:<BR />
<BR />
// - An alternative key of type UUID exists implicitly for each node, enabling the node<BR />
<BR />
// to be used as an association target.<BR />
<BR />
// - The QueryByElements query is created automatically for each node.<BR />
<BR />
// - Code completion is available with CTRL + SPACE.<BR />
<BR />
[Label("SolutionNumber")] [AlternativeKey] element SolutionNumber : ID ;<BR />
<BR />
[Label("Release")] [AlternativeKey] element Release : IntegerValue ;<BR />
<BR />
[Label("Solution Description")]element SolutionDes : LANGUAGEINDEPENDENT_EXTENDED_Text;<BR />
<BR />
[Label("Activate")] element Activate:Indicator;<BR />
<BR />
[DependentObject(TextCollection)] node TextCollection;<BR />
<BR />
}</CODE></PRE><BR />
<UL><BR />
<LI style="font-weight: 400"><SPAN style="font-weight: 400">Generate screens for both desktop and mobile using the thing inspector technique. Build screens for Quick Create and also add delete feature in OWL screen to delete the entry. Delete action is added to delete an entry using event handler using BO operation and row deletion.</SPAN></LI><BR />
<LI style="font-weight: 400"><SPAN style="font-weight: 400">Create a </SPAN><B>Reuse library </B><SPAN style="font-weight: 400">like Feature and define a function named GetFeature.absl</SPAN></LI><BR />
<LI style="font-weight: 400"><SPAN style="font-weight: 400">In this we will check if a particular development is to be enabled or disabled using the activate field in the configure BO. The reuse library which will have one function. This function will check the activate flag for a given feature and return true value if the feature is activated, else false if the feature is not activated.</SPAN></LI><BR />
</UL><BR />
<PRE class="language-javascript"><CODE><BR />
import ABSL;<BR />
import AP.Common.GDT;<BR />
<BR />
var result : collectionof DataType::LANGUAGEINDEPENDENT_EXTENDED_Text;<BR />
<BR />
<BR />
var query = Configure.QueryByElements;<BR />
var resultData = query.ExecuteDataOnly();<BR />
// 2. Selection<BR />
var selectionParams = query.CreateSelectionParams();<BR />
// Result<BR />
resultData = query.ExecuteDataOnly(selectionParams);<BR />
<BR />
foreach( var elemConfig in resultData)<BR />
{ <BR />
<BR />
var SolutionNumber = elemConfig.SolutionNumber;<BR />
var SolutionDes = elemConfig.SolutionDes;<BR />
var rel = elemConfig.Release;<BR />
var sactive = elemConfig.Activate;<BR />
if ( SolutionNumber == IV_release)<BR />
{<BR />
if (sactive.ToString() == "X")<BR />
{<BR />
<BR />
result = SolutionNumber;<BR />
}<BR />
}<BR />
}<BR />
<BR />
return result;<BR />
</CODE></PRE><BR />
<BR />
<UL><BR />
<LI style="font-weight: 400"><SPAN style="font-weight: 400">When any feature is build using ABSL code then the first check has to be implemented where the entry in the feature control custom business object will be checked. If the feature is activated then the code will be executed else it will not be executed.</SPAN></LI><BR />
<LI>Let's see how to utilize the about <STRONG>Configure.BO</STRONG> to enable or disable the execution of the code and fix our support issues and also help other teams to continue with their developments.</LI><BR />
</UL><BR />
<PRE class="language-javascript"><CODE>/*<BR />
Add your SAP Business ByDesign scripting language implementation for:<BR />
Business Object: LeadCreation<BR />
Node: Root<BR />
Event: BeforeSave <BR />
<BR />
Note: <BR />
- To access the elements of the business object node, <BR />
use path expressions, for example, this.<element name>. <BR />
- To use code completion, press CTRL+J. <BR />
- This script file is mass-enabled, i.e. the keyword "this" <BR />
refers to a collection of node instances.<BR />
- The solution uses this script when:<BR />
- the instance of the business object is being saved.<BR />
- the instance of the business object is created from other sources like web services, preview screen, and so on.<BR />
*/<BR />
<BR />
<BR />
import ABSL;<BR />
import AP.Common.GDT as gdt;<BR />
import AP.PDI.bo as pdi;<BR />
<BR />
<BR />
var relstring;<BR />
<BR />
<BR />
//var rel4 : DataType::pdi:ID;<BR />
//var rel5 = 2;<BR />
var checkentry;<BR />
var devkey = "Feature6";<BR />
checkentry = Feature.GetFeature(devkey);<BR />
var check;<BR />
check = checkentry;<BR />
if (check == devkey) <BR />
{<BR />
//Proceed with the logic which is relevant for support issue to be fixed<BR />
}<BR />
</CODE></PRE><BR />
<BR />
<UL><BR />
<LI>The above code will first check if entry is present in Configure.BO and is active or not.</LI><BR />
<LI>If active then code will be executed else it won't execute.</LI><BR />
<LI><SPAN style="font-weight: 400">Reuse library is built and kept handy. This will be referred once this development will be used in actual and called in the respective code as and when required. Reuse Library will be used in the logic building where enabling and disabling of code is needed.</SPAN></LI><BR />
</UL><BR />
<STRONG>Advantages and benefits</STRONG><BR />
<UL><BR />
<LI style="font-weight: 400"><SPAN style="font-weight: 400">Custom Business Object is developed in SAP C4C which will be used to enable or disable the feature in each test or production tenant.</SPAN></LI><BR />
<LI style="font-weight: 400"><SPAN style="font-weight: 400">Enabling and disabling the solution based on business needs can be done.</SPAN></LI><BR />
<LI style="font-weight: 400"><SPAN style="font-weight: 400">Access to this custom BO will be controlled i.e. the access will be restricted to certain team members only.</SPAN></LI><BR />
<LI style="font-weight: 400"><SPAN style="font-weight: 400">Every code development / feature / requirement will be tagged with a unique feature item in the custom BO.</SPAN></LI><BR />
<LI style="font-weight: 400"><SPAN style="font-weight: 400">The new solution will be moved as an SDK solution to different tenants for the first time. Once the solution is activated in the target tenant then the solution control BO will be manually updated/maintained by designated team members.</SPAN></LI><BR />
<LI style="font-weight: 400"><SPAN style="font-weight: 400">No Manual involvement to comment and uncomment the code</SPAN></LI><BR />
<LI style="font-weight: 400"><SPAN style="font-weight: 400">Multiple objects can be developed in parallel</SPAN></LI><BR />
<LI style="font-weight: 400"><SPAN style="font-weight: 400">Feature wise selective movement is enabled</SPAN></LI><BR />
<LI style="font-weight: 400"><SPAN style="font-weight: 400">Less human error</SPAN></LI><BR />
<LI style="font-weight: 400"><SPAN style="font-weight: 400">Alignment with various stakeholders is decreased.</SPAN></LI><BR />
<LI style="font-weight: 400"><SPAN style="font-weight: 400">Less testing efforts </SPAN></LI><BR />
</UL><BR />
<STRONG>Other Thoughts</STRONG><BR />
<UL><BR />
<LI style="font-weight: 400"><SPAN style="font-weight: 400">We can use a business configuration object but I prefer a custom BO to build this tool. </SPAN></LI><BR />
<LI style="font-weight: 400"><SPAN style="font-weight: 400">The BO structure and fields can vary based on the business requirements.</SPAN></LI><BR />
</UL><BR />
<BR />
<BR />
Best Regards,<BR />
<BR />
Gauri Nargunde2023-12-11T10:59:46+01:00https://community.sap.com/t5/technology-blog-posts-by-sap/harnessing-multi-model-capabilities-with-spotify-processing-semi-structured/ba-p/13572494Harnessing Multi-Model Capabilities with Spotify – Processing Semi-Structured Data with SAP HANA Cloud/SAP Datasphere – Part 62023-12-29T00:53:49+01:00Vivek-RRhttps://community.sap.com/t5/user/viewprofilepage/user-id/143545In blog 6 of our Spotify series, we shift our focus to visualization, explicitly pertaining to Playlist and Audio features API, as discussed in this series's <A href="https://blogs.sap.com/2023/02/27/harnessing-multi-model-capabilities-with-spotify-processing-semi-structured-data-with-sap-hana-cloud-sap-data-warehouse-cloud-part-2/" target="_blank" rel="noopener noreferrer">second</A> and <A href="https://blogs.sap.com/2023/03/31/harnessing-multi-model-capabilities-with-spotify-processing-semi-structured-data-with-sap-hana-cloud-sap-datasphere-part-3/?" target="_blank" rel="noopener noreferrer">third</A> blogs. We will delve into the detailed consumption of Calculation views from SAP HANA Cloud, utilizing tools such as SAP Analytics Cloud and Microsoft Power BI. For SAP Datasphere models, based on the third blog, the consumption process is quite similar, and we will highlight the differences where they exist.<BR />
<BR />
In this blog, we will cover the following topics in detail:<BR />
<OL><BR />
<LI>Consuming Calculation Views built using the Business Application Studio in SAP Analytics Cloud.</LI><BR />
<LI>Utilizing R script to construct an interactive density plot to comprehend the Danceability metrics across all playlists.</LI><BR />
<LI>Utilizing R script to create an interactive visualization of the Speechiness metric and compare it across all Playlists.</LI><BR />
<LI>Leveraging a robust data visualization package in R, known as "Grammar of Graphics Plot" (GGPLOT), to visualize the Speechiness and Danceability metrics.</LI><BR />
<LI>Consuming the same Calculation views in Microsoft Power BI.</LI><BR />
</OL><BR />
This blog post is part of a comprehensive series. If you're interested in exploring more, feel free to visit the other blogs in this series:<BR />
<OL><BR />
<LI> <A href="https://blogs.sap.com/2023/02/27/harnessing-multi-model-capabilities-with-spotify-processing-semi-structured-data-with-sap-hana-cloud-sap-data-warehouse-cloud-part-1/" target="_blank" rel="noopener noreferrer">Architecture</A></LI><BR />
<LI><A href="https://blogs.sap.com/2023/02/27/harnessing-multi-model-capabilities-with-spotify-processing-semi-structured-data-with-sap-hana-cloud-sap-data-warehouse-cloud-part-2/" target="_blank" rel="noopener noreferrer">Processing Semi-Structured data in SAP HANA Cloud </A></LI><BR />
<LI><A href="https://blogs.sap.com/2023/03/31/harnessing-multi-model-capabilities-with-spotify-processing-semi-structured-data-with-sap-hana-cloud-sap-datasphere-part-3/?" target="_blank" rel="noopener noreferrer">Processing Semi-structured data in SAP Datasphere </A></LI><BR />
<LI><A href="https://blogs.sap.com/2023/03/31/harnessing-multi-model-capabilities-with-spotify-processing-semi-structured-data-with-sap-hana-cloud-sap-datasphere-part-3/?" target="_blank" rel="noopener noreferrer"> </A><A href="https://blogs.sap.com/2023/05/15/harnessing-multi-model-capabilities-with-spotify-processing-semi-structured-data-with-sap-hana-cloud-sap-datasphere-part-4/" target="_blank" rel="noopener noreferrer">Processing Semi-Structured data in SAP HANA Cloud & creating graph networks</A></LI><BR />
<LI><A href="https://blogs.sap.com/2023/07/13/harnessing-multi-model-capabilities-with-spotify-processing-semi-structured-data-with-sap-hana-cloud-sap-datasphere-part%E2%80%AF5/" target="_blank" rel="noopener noreferrer">Building Intelligent Data Apps based on Spotify Datasets</A></LI><BR />
</OL><BR />
<BR />
<H2 id="toc-hId-963896577">The Visualization</H2><BR />
<P style="overflow: hidden;margin-bottom: 0px"><IMG class="migrated-image" src="https://community.sap.com/legacyfs/online/storage/blog_attachments/2023/12/b1.jpg" /></P><BR />
<BR />
<H2 id="toc-hId-767383072">Consuming Calculation Views built using the Business Application Studio in SAP Analytics Cloud</H2><BR />
This section will concentrate on accessing the deployed calculation view in SAP Analytics Cloud (SAC). Suppose you have followed along with <A href="https://blogs.sap.com/2023/02/27/harnessing-multi-model-capabilities-with-spotify-processing-semi-structured-data-with-sap-hana-cloud-sap-data-warehouse-cloud-part-2/" target="_blank" rel="noopener noreferrer">blog 2</A> and cloned and deployed the associated <A href="https://github.com/coolvivz/spcheck" target="_blank" rel="nofollow noopener noreferrer">Git repository</A>, which now includes content for both reporting and building Graph networks. In that case, you should have access to the calculation view, CV_TOP_ALL[1].<BR />
<BR />
To access the Calculation view from either SAC or Microsoft PowerBI, it's crucial to ensure that the hdbrole[2] is assigned to the database user created for frontend consumption. This step is vital for enabling the necessary permissions and access rights for the user to interact with the data through these platforms.<BR />
<BR />
Remember, the correct assignment of roles and permissions is a crucial step in maintaining the security and integrity of your data while still allowing for flexible and robust data analysis capabilities.<BR />
<P style="overflow: hidden;margin-bottom: 0px"><IMG class="migrated-image" src="https://community.sap.com/legacyfs/online/storage/blog_attachments/2023/12/b2.jpg" /></P><BR />
This calculation view is based on the SQL view TOPALL1 discussed in <A href="https://blogs.sap.com/2023/02/27/harnessing-multi-model-capabilities-with-spotify-processing-semi-structured-data-with-sap-hana-cloud-sap-data-warehouse-cloud-part-2/" target="_blank" rel="noopener noreferrer">blog2</A>.<BR />
<P style="overflow: hidden;margin-bottom: 0px"><IMG class="migrated-image" src="https://community.sap.com/legacyfs/online/storage/blog_attachments/2023/12/b3.png" /></P><BR />
The semantics details for the calculation view, CV_TOP_ALL[1], include a calculated column named "Speechiness1".<BR />
<P style="overflow: hidden;margin-bottom: 0px"><IMG class="migrated-image" src="https://community.sap.com/legacyfs/online/storage/blog_attachments/2023/12/b4.png" /></P><BR />
<BR />
<P class="whitespace-pre-wrap">As highlighted previously, the audio features from the Spotify API include a "speechiness" attribute. Speechiness measures the presence of spoken words in a track. Songs with exclusively instrumental music and no vocals have low speechiness, while rap songs and podcasts with continuous speaking have higher scores.</P><BR />
<P class="whitespace-pre-wrap">This metric helps compare speech patterns across playlists and geo-markets. Analyzing speechiness allows identifying playlists that contain:</P><BR />
<BR />
<UL class="list-disc pl-8 space-y-2"><BR />
<LI class="whitespace-normal">Mostly music-centric tracks</LI><BR />
<LI class="whitespace-normal">Increased spoken vocal content</LI><BR />
<LI class="whitespace-normal">Distinct formats like rap, hip hop, podcasts</LI><BR />
</UL><BR />
<P class="whitespace-pre-wrap">In summary, the speechiness measure detects tracks with more spoken emphasis over instrumentation. We can leverage this to spot regional playlist preferences for words vs music.</P><BR />
<P style="overflow: hidden;margin-bottom: 0px"><IMG class="migrated-image" src="https://community.sap.com/legacyfs/online/storage/blog_attachments/2023/12/b5.png" /></P><BR />
<P class="image_caption" style="text-align: center;font-style: italic">Source: Spotify API Documentation</P><BR />
<P class="whitespace-pre-wrap">I establish a threshold to differentiate speech-centric playlists by subtracting 0.33 from the Spotify speechiness score. Playlists with tracks containing predominantly spoken words (e.g., rap, hip hop, podcasts) typically have higher speechiness exceeding this threshold.</P><BR />
<P class="whitespace-pre-wrap">The interactive visualizations in SAP Analytics Cloud will spotlight playlists based on this speechiness threshold:</P><BR />
<BR />
<UL class="list-disc pl-8 space-y-2"><BR />
<LI class="whitespace-normal">Playlists above the threshold contain more vocal-heavy tracks</LI><BR />
<LI class="whitespace-normal">Playlists below the mark have mostly musical instrumentation</LI><BR />
</UL><BR />
<P style="overflow: hidden;margin-bottom: 0px"><IMG class="migrated-image" src="https://community.sap.com/legacyfs/online/storage/blog_attachments/2023/12/b6.png" /></P><BR />
<BR />
<P class="whitespace-pre-wrap">With the calculation view deployed, the next step is allowing consumption by assigning database permissions.</P><BR />
<P class="whitespace-pre-wrap">Specifically:</P><BR />
<BR />
<UL class="list-disc pl-8 space-y-2"><BR />
<LI class="whitespace-normal">Use the SAP HANA Cloud Database Explorer to connect to the HDI container holding the deployed view. This verifies successful deployment.</LI><BR />
<LI class="whitespace-normal">Then in SAP HANA Cloud Cockpit, locate the "json::TRACKSALL" hdbrole that got created.</LI><BR />
<LI class="whitespace-normal">Assign this hdbrole to the database user needing access to the view.</LI><BR />
</UL><BR />
<P class="whitespace-pre-wrap">Enabling this role assignment via Cockpit is a prerequisite before the calculation view can be leveraged for reporting and analytics. The Explorer allows consumption confirmation post assignment.</P><BR />
<BR />
<P style="overflow: hidden;margin-bottom: 0px"><IMG class="migrated-image" src="https://community.sap.com/legacyfs/online/storage/blog_attachments/2023/12/b7.png" height="252" width="284" /></P><BR />
On successfully creating a new database user, provisioning the roles, and connecting to the HDI container, you can effectively generate a scatter plot[4] based on the calculation view, CV_TOP_ALL[1].<BR />
<BR />
The scatter plot is a powerful visualization tool that allows you to see the relationship between two variables. In this case, we have chosen to visualize the correlation between the metrics 'Danceability' and 'Popularity'[3] across tracks of playlists from four different countries. This is achieved by setting a filter[2] on 'Tracklistname'.<BR />
<BR />
To interpret the scatter plot, each point on the plot represents a track. The position of a point on the horizontal axis indicates its 'Danceability' score, and its position on the vertical axis indicates its 'Popularity' score. If there is a pattern in the points, such as a line or curve, this suggests a correlation between 'Danceability' and 'Popularity'.<BR />
<BR />
Remember, correlation does not imply causation. While the scatter plot may show a relationship between 'Danceability' and 'Popularity', it does not prove that increasing 'Danceability' will increase 'Popularity'. Other factors may be influencing both variables.<BR />
<P style="overflow: hidden;margin-bottom: 0px"><IMG class="migrated-image" src="https://community.sap.com/legacyfs/online/storage/blog_attachments/2023/12/b8.png" /></P><BR />
<BR />
<H2 id="toc-hId-570869567"><STRONG>Consuming Calculation Views built using Business Application Studio in SAP Analytics Cloud[SAC]</STRONG></H2><BR />
If you already have access to the SAP Analytics Cloud (SAC) tenant, you can proceed with the next steps. However, if you don't, you have the option to register for a SAC trial, which lasts up to 60 days. This trial period allows you to explore and familiarize yourself with the functionalities of SAC.<BR />
<BR />
For further information about the SAC trial, including registration process, available features, and any limitations, please refer to the provided<A href="https://www.sap.com/products/technology-platform/cloud-analytics/trial.html" target="_blank" rel="noopener noreferrer"> link</A>. This link should direct you to a FAQ page and additional details about the SAC trial.<BR />
<H3 id="toc-hId-503438781"><STRONG>Setting up connections to SAP HANA Cloud</STRONG></H3><BR />
<H5 id="toc-hId-565090714">Assumptions:</H5><BR />
You already have access to the SAC tenant.<BR />
<BR />
To create a connection to SAP HANA Cloud from your active SAC tenant, follow these steps:<BR />
<OL><BR />
<LI>From the main menu, select 'Connection'. This will take you to the page where you can manage all your connections.</LI><BR />
<LI>Click on the '+ Add' button to start creating a new connection.</LI><BR />
<LI>From the list of available connection types, select 'SAP HANA Cloud'.</LI><BR />
<LI>Enter Connection Details: In the form that appears, you'll need to provide the necessary details such as host, port, and logon credentials. Click OK</LI><BR />
</OL><BR />
Now, your SAC tenant is connected to your SAP HANA Cloud instance, and you can start creating models and stories using your SAP HANA Cloud data.<BR />
<P style="overflow: hidden;margin-bottom: 0px"><IMG class="migrated-image" src="https://community.sap.com/legacyfs/online/storage/blog_attachments/2023/12/b9.png" /></P><BR />
<BR />
<H2 id="toc-hId--18670948">Let’s build live Data Models</H2><BR />
Select the Modeler from the drop-down and build a Live data connection. Use the connection that was created in the previous step and select the calculation view CV_TOP_ALL.<BR />
<P style="overflow: hidden;margin-bottom: 0px"><IMG class="migrated-image" src="https://community.sap.com/legacyfs/online/storage/blog_attachments/2023/12/b10.png" /></P><BR />
Save the model once you validate all the measures and Dimensions. In my case, the analytical model is “Tracksall”<BR />
<P style="overflow: hidden;margin-bottom: 0px"><IMG class="migrated-image" src="https://community.sap.com/legacyfs/online/storage/blog_attachments/2023/12/b11.png" /></P><BR />
<BR />
<H2 id="toc-hId--215184453"><STRONG>Let’s create a Story</STRONG></H2><BR />
Now that we have built an analytical model, we can leverage it to gain insights into playlists and songs by visualizing key metrics. Specifically, we will create data stories using ggplot to examine three aspects:<BR />
<OL><BR />
<LI><STRONG>Danceability, Speechiness, and Energy Across a Playlist:</STRONG> We will visualize the danceability, speechiness, and energy scores for each song in a chosen playlist by plotting the metrics with a trending chart. This allows the assessment of metric distributions within that playlist.</LI><BR />
<LI><STRONG>Top Playlists for Danceability:</STRONG> Using <STRONG>R scripts</STRONG> and ggplot, we can analyze danceability scores across all playlists for a given week. By plotting a sorted chart showing the playlist with the highest average danceability at the top, we can readily identify which playlist contains the most danceable tracks.</LI><BR />
<LI><STRONG>Comparing Speechiness Thresholds Across Playlists:</STRONG> We set a speechiness threshold based on song composition to categorize tracks as having either high or low importance on words versus music. Then with <STRONG>R</STRONG>, we plot high and low speechiness scores for each playlist using ggplot. This enables easy comparison of which playlists favor tracks with more spoken words.</LI><BR />
</OL><BR />
<H3 id="toc-hId--282615239"><STRONG>Danceability, Speechiness, and Energy Across a Playlist</STRONG></H3><BR />
This is a standard trending chart[1] based on the SAC Analytic model TRACKSALL, and basically compares the 3 metrics across the playlist TOPUSA[2]. TRACKLISTNAME groups all 50 tracks from the USA and I have used the filter[2] for the same.<BR />
<P style="overflow: hidden;margin-bottom: 0px"><IMG class="migrated-image" src="https://community.sap.com/legacyfs/online/storage/blog_attachments/2023/12/b12.png" /></P><BR />
When you analyze the top 50 songs from the USA tracks, you will notice the songs with high energy or danceability will have less "speechiness".<BR />
<P style="overflow: hidden;margin-bottom: 0px"><IMG class="migrated-image" src="https://community.sap.com/legacyfs/online/storage/blog_attachments/2023/12/b13.png" /></P><BR />
<BR />
<BR />
And songs like Rich Flex by Drake has higher "speechiness" value because of all the rapping yo! <span class="lia-unicode-emoji" title=":smiling_face_with_smiling_eyes:">😊</span> It’s a mix of R&B and RAP and you notice the high Speechiness factor.<BR />
<P style="overflow: hidden;margin-bottom: 0px"><IMG class="migrated-image" src="https://community.sap.com/legacyfs/online/storage/blog_attachments/2023/12/b14.png" /></P><BR />
<BR />
<H3 id="toc-hId--479128744"><STRONG>Top Playlists for Danceability[Using R]</STRONG></H3><BR />
Prerequisites:<BR />
<BR />
1. To utilize R-scripts, connect to either a remote R environment (BYOR) or an R environment provided by SAP in various data centers. Refer to this <A href="https://help.sap.com/docs/SAP_ANALYTICS_CLOUD/00f68c2e08b941f081002fd3691d86a7/8d589100aea341a58a5c0916bbef022b.html" target="_blank" rel="noopener noreferrer">link</A> for availability details. Follow these <A href="https://help.sap.com/doc/ba23463df44849efbfcb862169069d63/release/en-US/BOC-R-integration_g.pdf" target="_blank" rel="noopener noreferrer">steps</A> to set up a remote R server, similar to integrating R with SAP HANA.<BR />
<BR />
2. For production use cases, verify required R packages. If packages needed for your use case are <A href="https://blogs.sap.com/2020/03/18/r-packages-for-sap-analytics-cloud/" target="_blank" rel="noopener noreferrer">unsupported</A> by SAP, set up an R environment with those packages accordingly.<BR />
<BR />
3. Review the basics of <A href="https://ggplot2.tidyverse.org/" target="_blank" rel="nofollow noopener noreferrer">ggplot2</A>, an R library providing flexible, tidy, optimized data visualization. It enables integrated data exploration and analysis. Refer to the ggplot2 documentation.<BR />
<BR />
For this Spotify example, I leveraged an SAP-provided R environment in the EU10 data center. First I will share the visualization, followed by the script, explanation, and SAC steps. This output utilizes interactive data visualization to compare "danceability" metrics across music playlists.<BR />
<P style="overflow: hidden;margin-bottom: 0px"><IMG class="migrated-image" src="https://community.sap.com/legacyfs/online/storage/blog_attachments/2023/12/b15.png" /></P><BR />
And here is the script for the R visualization.<BR />
<PRE class="language-python"><CODE>library(plotly)<BR />
library(ggplot2)<BR />
salmon <- "#F8766D"<BR />
teal <- "#00BFC4"<BR />
orange <- "#D95E0E"<BR />
limegreen <- "#7CAE00"<BR />
tangerine <- "#FF9E13"<BR />
skyblue <- "#56B4E9"<BR />
junglegreen <- "#009E73"<BR />
mustard <- "#F0E442"<BR />
sapphire<- "#0072B2"<BR />
goldenrod <- "#E69F00"<BR />
viz4 <- ggplot(Tracksall, aes(x=Tracksall$DANCEABILITY, fill=Tracksall$TRACKLISTNAME,<BR />
text = paste(Tracksall$TRACKLISTNAME)))+<BR />
geom_density(alpha=0.7, color=NA)+<BR />
scale_fill_manual(values=c(salmon, teal, orange, limegreen, tangerine,skyblue,junglegreen, mustard,sapphire,goldenrod))+<BR />
labs(x="Danceability", y="Density") +<BR />
guides(fill=guide_legend(title="Playlist"))+<BR />
theme_minimal()+<BR />
ggtitle("Distribution of Danceability Data")<BR />
<BR />
ggplotly(viz4, tooltip=c("text"))</CODE></PRE><BR />
<H3 id="toc-hId--675642249"><STRONG>How would I explain this to a Business User?</STRONG></H3><BR />
What this graph specifically shows is the danceability distribution across various playlists based on the dataset TRACKSALL. Using density plots, we can visualize how concentrated certain playlists are in high or low danceability scores. For example, some playlists have most of their tracks clustered on the higher end of danceability, meaning the songs tend to be quite danceable(e.g. Chile Playlist). Other playlists have a wider spread across the axis. Just by glancing at the colors and density shapes, we can get a sense of the variation in dance "suitability" across these playlists.<BR />
<H3 id="toc-hId--947387123"><STRONG>How can I understand the script from a technical perspective?</STRONG></H3><BR />
Sure, let's break down the script.<BR />
<P style="overflow: hidden;margin-bottom: 0px"><IMG class="migrated-image" src="https://community.sap.com/legacyfs/online/storage/blog_attachments/2023/12/b16.png" /></P><BR />
<BR />
<OL><BR />
<LI>Lines 1-2: These lines load the plotly and ggplot2 packages. plotly is used for creating interactive plots, and ggplot2 is a plotting system for R.</LI><BR />
<LI>Lines 3-12: Define a series of colors using their hexadecimal codes. These colors will be used in the plot.</LI><BR />
<LI>Line 13-14: This line starts the creation of a ggplot object. Tracksall is your data frame, DANCEABILITY is the variable for the x-axis, and TRACKLISTNAME is the variable used to fill the density plot. The text aesthetic is used to specify the text that will be displayed when you hover over the plot in the final interactive plot.</LI><BR />
<LI>Line 15: This adds a density plot to the ggplot object. The alpha parameter controls the transparency of the plot (1 is opaque and 0 is transparent). color=NA means that the outline color of the density plot is set to be transparent.</LI><BR />
<LI>Line 16: This line sets the fill color of the density plot based on the TRACKLISTNAME variable. The colors are manually specified using the color variables defined earlier.</LI><BR />
<LI>Line 17: This line sets the labels for the x and y axes.</LI><BR />
<LI>Line 18: This line adds a legend for the fill colors with the title "Playlist".</LI><BR />
<LI>Line 19: This sets the theme of the plot to be minimal, which is a theme with a clean and minimal aesthetic.</LI><BR />
<LI>Line 20: This line sets the title of the plot.</LI><BR />
<LI>Line 22: This line converts the ggplot object to a plotly object, which makes the plot interactive. The tooltip parameter specifies that the text specified in the text aesthetic should be displayed when you hover over the plot.</LI><BR />
</OL><BR />
<H3 id="toc-hId--1143900628"><STRONG>How do I implement this in SAC?</STRONG></H3><BR />
Please make sure R server is enabled on your SAC tenant or your remote R connection is established.<BR />
<P style="overflow: hidden;margin-bottom: 0px"><IMG class="migrated-image" src="https://community.sap.com/legacyfs/online/storage/blog_attachments/2023/12/b17.png" /></P><BR />
As part of your story, add R visualization as shown below:<BR />
<P style="overflow: hidden;margin-bottom: 0px"><IMG class="migrated-image" src="https://community.sap.com/legacyfs/online/storage/blog_attachments/2023/12/b18.png" /></P><BR />
Once you add the R visualization, provide the input data source[1] as your Analytics model “Tracksall”. Select the “Edit script”[2] option and copy the script that I shared. If your Analytics model name is different, please make sure you replace it in the script on line 13.<BR />
<P style="overflow: hidden;margin-bottom: 0px"><IMG class="migrated-image" src="https://community.sap.com/legacyfs/online/storage/blog_attachments/2023/12/b19.png" /></P><BR />
With just a few lines of code, the flexibility and ease of ggplot2 allows us to quickly visualize the data into an insightful plot, demonstrating the power of this graphics package.<BR />
<H3 id="toc-hId--1340414133"><STRONG>Comparing Speechiness Thresholds Across Playlists - Using R</STRONG></H3><BR />
I will share the visualization, R script, and an explanation of the script. However, you can follow the same implementation steps in SAC as we previously discussed for the "Distribution of Danceability Data" example. Let's start with the visualization first: This script creates an interactive bar chart that visually represents the "Speechiness" of different tracks across various playlists. Speechiness measures the presence of spoken words in a track - the higher the value, the more words in the track. Each bar represents a track, with the bar height indicating the speechiness. The bars are color-coded by playlist, enabling easy distinction between playlists. Some tracks in different playlists have Speechiness > 0, potentially indicating rap songs, podcasts, or audiobooks.<BR />
<P style="overflow: hidden;margin-bottom: 0px"><IMG class="migrated-image" src="https://community.sap.com/legacyfs/online/storage/blog_attachments/2023/12/b20.png" /></P><BR />
And here is the script for the R visualization.<BR />
<PRE class="language-python"><CODE>library(plotly)<BR />
library(dplyr)<BR />
library(ggplot2)<BR />
salmon <- "#F8766D"<BR />
teal <- "#00BFC4"<BR />
orange <- "#D95E0E"<BR />
limegreen <- "#7CAE00"<BR />
tangerine <- "#FF9E13"<BR />
skyblue <- "#56B4E9"<BR />
junglegreen <- "#009E73"<BR />
mustard <- "#F0E442"<BR />
sapphire<- "#0072B2"<BR />
goldenrod <- "#E69F00"<BR />
viz1 <- ggplot(Tracksall, aes(x=reorder(Tracksall$TRACK_NAME, -Tracksall$SPEECHINESS), y=Tracksall$SPEECHINESS, fill=Tracksall$TRACKLISTNAME, text=(paste("Track:", Tracksall$TRACK_NAME, "<br>",<BR />
"Artist:", Tracksall$Artist_NAME, "<br>",<BR />
"Speechiness:", Tracksall$SPEECHINESS))))+<BR />
geom_col()+<BR />
scale_fill_manual(values=c(salmon, teal, orange, limegreen, tangerine,skyblue,junglegreen, mustard,sapphire,goldenrod))+<BR />
theme_minimal()+<BR />
theme(axis.title.x=element_blank(),<BR />
axis.text.x=element_blank(),<BR />
axis.ticks.x=element_blank(),<BR />
axis.ticks.y=element_blank(),<BR />
panel.grid.major = element_blank(),<BR />
legend.position="none")+<BR />
ylab("Speechiness Difference")+<BR />
facet_wrap(~ Tracksall$TRACKLISTNAME)+<BR />
ggtitle("Speechiness Difference")<BR />
ggplotly(viz1, tooltip=c("text"))</CODE></PRE><BR />
<H3 id="toc-hId--1536927638"><STRONG>How would I explain this to a Business User?</STRONG></H3><BR />
This interactive chart allows us to compare the "speechiness" of tracks across different playlists. Speechiness measures the presence of spoken words in a song. Songs with exclusive music and no words have low speechiness. Podcast and audiobook tracks would be highly speechy. The height of the bars represents the speechiness value - higher bars mean more spoken content. The color shading groups tracks by the playlist they belong to.<BR />
<H3 id="toc-hId--1733441143"><STRONG>How can I understand the script from a technical perspective?</STRONG></H3><BR />
<P style="overflow: hidden;margin-bottom: 0px"><IMG class="migrated-image" src="https://community.sap.com/legacyfs/online/storage/blog_attachments/2023/12/b21.png" /></P><BR />
<BR />
<OL><BR />
<LI>Lines 1 -3: Load the necessary libraries-plotly for creating interactive plots, dplyr for data manipulation, and ggplot2 for creating static plots.</LI><BR />
<LI>Lines 4-13: Defines the series of colors using their hexadecimal codes. These colors will be used in the plot.</LI><BR />
<LI>Line 14-17: Creates a ggplot object viz1 with the following features: The aes function is used to map the reordered 'Track Name' to the x-axis, 'Speechiness' to the y-axis, 'Playlist' to the fill aesthetic of the plot, and a combination of 'Track', 'Artist', and 'Speechiness' to the hover text.</LI><BR />
<LI>Line 18: geom_col used to create a bar plot</LI><BR />
<LI>Line 19: scale_fill_manual is used to manually assign the predefined colors to the different 'Playlist' categories.</LI><BR />
<LI>Line 20: theme_minimal is used to apply a minimalistic theme to the plot.</LI><BR />
<LI>Line 21-26: theme is used to remove the x-axis title, x-axis text, x and y-axis ticks, major grid lines, and the legend.</LI><BR />
<LI>Line 27: ylab is used to label the y-axis as 'Speechiness Difference'.</LI><BR />
<LI>Line 28: facet_wrap is used to create a separate plot for each 'Playlist'.</LI><BR />
<LI>Line 29: ggtitle is used to set the title of the plot as 'Speechiness Difference'.</LI><BR />
<LI>Line 30: Finally, ggplotly is used to convert the ggplot object into a plotly object, making the plot interactive. The tooltip argument is set to 'text', which means that the hover text will display the 'Track', 'Artist', and 'Speechiness'.</LI><BR />
</OL><BR />
<STRONG>And the SAC Implementation?</STRONG><BR />
<BR />
Follow the same steps for SAC implementation as before, and you should be able to view both the SAC visualizations based on R-script.<BR />
<P style="overflow: hidden;margin-bottom: 0px"><IMG class="migrated-image" src="https://community.sap.com/legacyfs/online/storage/blog_attachments/2023/12/b22.png" /></P><BR />
<BR />
<H2 id="toc-hId--1636551641">How does this work with SAP Datasphere?</H2><BR />
In <A href="https://blogs.sap.com/2023/03/31/harnessing-multi-model-capabilities-with-spotify-processing-semi-structured-data-with-sap-hana-cloud-sap-datasphere-part-3/?" target="_blank" rel="noopener noreferrer">Blog 3</A> of the Spotify Series, we detailed how to construct analytical models akin to those in SAP HANA Cloud.<BR />
<P style="overflow: hidden;margin-bottom: 0px"><IMG class="migrated-image" src="https://community.sap.com/legacyfs/online/storage/blog_attachments/2023/12/b23.png" /></P><BR />
When using SAP HANA Cloud, we connected directly to the database with a user who had access to the deployed containers. However, with SAP Datasphere, analytic models built within a space can be directly exposed when constructing trend charts in SAC. There is no need to separately establish a database connection. Instead, the data models are available for visualization as soon as they are deployed to the space. This enables simpler and faster data access when leveraging SAP Datasphere as the backend data source within SAC. The tight integration facilitates the rapid connection of visualizations to data models that have been developed and exposed through spaces.<BR />
<P style="overflow: hidden;margin-bottom: 0px"><IMG class="migrated-image" src="https://community.sap.com/legacyfs/online/storage/blog_attachments/2023/12/b24.png" /></P><BR />
You can build stories in SAC connected to SAP Datasphere in the same way as described in previous examples linking to SAP HANA Cloud. The process of building visualizations, filters, stories, and explanatory text follows the same methodology whether your data models reside in HANA Cloud or Datasphere.<BR />
<P style="overflow: hidden;margin-bottom: 0px"><IMG class="migrated-image" src="https://community.sap.com/legacyfs/online/storage/blog_attachments/2023/12/b25.jpg" /></P><BR />
<BR />
<H2 id="toc-hId--1833065146"><STRONG>OK, how to expose the models to Microsoft PowerBI?</STRONG></H2><BR />
<H3 id="toc-hId-1971985638">Prerequisites:</H3><BR />
<OL><BR />
<LI>You have access to the Microsoft Power BI Desktop App.</LI><BR />
<LI>You have two options for connecting to data for visualization: HDI containers from SAP HANA Cloud or analytic models created in SAP Datasphere using open SQL schema access. If planning to connect from SAP Datasphere, refer to the "Database User Creation [Open SQL Schema]" section from the <A href="https://blogs.sap.com/2023/03/31/harnessing-multi-model-capabilities-with-spotify-processing-semi-structured-data-with-sap-hana-cloud-sap-datasphere-part-3/?" target="_blank" rel="noopener noreferrer">third blog post</A>.</LI><BR />
</OL><BR />
For this example, I will connect SAP HANA Cloud to Power BI. Once you are in the Power BI Desktop App, click on the "Home" tab in the ribbon, then click on "Get Data".<BR />
<P style="overflow: hidden;margin-bottom: 0px"><IMG class="migrated-image" src="https://community.sap.com/legacyfs/online/storage/blog_attachments/2023/12/Picture26-3.png" /></P><BR />
You can choose either "Import" or "DirectQuery" to connect to SAP HANA Cloud. Import means you'll be pulling the data into Power BI, while DirectQuery means you'll be working directly with the data on the server.<BR />
<P style="overflow: hidden;margin-bottom: 0px"><IMG class="migrated-image" src="https://community.sap.com/legacyfs/online/storage/blog_attachments/2023/12/Picture27-3.png" /></P><BR />
Enter your SAP HANA Cloud credentials when prompted in the Power BI connection window. After a successful connection, the Power BI Navigator will appear allowing you to select the specific tables, views, or calculation views to load. For this analysis, we will be working with the CV_TOP_ALL calculation view that was previously created in SAP Business Application Studio.<BR />
<P style="overflow: hidden;margin-bottom: 0px"><IMG class="migrated-image" src="https://community.sap.com/legacyfs/online/storage/blog_attachments/2023/12/Picture28-6.png" /></P><BR />
It may take a few seconds for the CV_TOP_ALL calculation view to load in Power BI. Once loaded, you will see CV_TOP_ALL listed on the right side of the screen along with options to build visualizations. To demonstrate some useful features in Power BI, I will create a simple table visualization[2] based on the data from CV_TOP_ALL.<BR />
<P style="overflow: hidden;margin-bottom: 0px"><IMG class="migrated-image" src="https://community.sap.com/legacyfs/online/storage/blog_attachments/2023/12/Picture29-4.png" height="502" width="417" /></P><BR />
Once you select the table option, a blank table visualization will load. You can then select the specific columns from the CV_TOP_ALL calculation view that you want to display in the table. For this example, I chose to include the Album name, Track name, and Image columns. The Image column contains public URLs pointing to album artwork associated with each track.<BR />
<P style="overflow: hidden;margin-bottom: 0px"><IMG class="migrated-image" src="https://community.sap.com/legacyfs/online/storage/blog_attachments/2023/12/Picture30-4.png" /></P><BR />
Select the Image column[1] from CV_TOP_ALL, and change the data category[2] to "Image URL".<BR />
<P style="overflow: hidden;margin-bottom: 0px"><IMG class="migrated-image" src="https://community.sap.com/legacyfs/online/storage/blog_attachments/2023/12/Picture31-5.png" /></P><BR />
Once you add those columns to the table, Power BI works its magic to transform the image URLs into actual album cover art on the fly. How awesome is that! With its slick auto-image rendering wizardry, Power BI saves us muggles from having to manually extract and embed images in visualizations. We just provide the URLs, and presto - album covers appear in the table as if by divination! <span class="lia-unicode-emoji" title=":slightly_smiling_face:">🙂</span><BR />
<P style="overflow: hidden;margin-bottom: 0px"><IMG class="migrated-image" src="https://community.sap.com/legacyfs/online/storage/blog_attachments/2023/12/Picture32-4.png" /></P><BR />
If you have been following this <A href="https://blogs.sap.com/2023/02/27/harnessing-multi-model-capabilities-with-spotify-processing-semi-structured-data-with-sap-hana-cloud-sap-data-warehouse-cloud-part-1/" target="_blank" rel="noopener noreferrer">Spotify blog series,</A> you may recall that we used the HANA_ML library to extract image URLs from Spotify and ingest them to SAP HANA Cloud. We loaded the JSON metadata containing these image links into the SAP HANA Cloud Document Store. SQL views were then created to select the image URLs from the JSON artifacts stored in the document store. These SQL views were incorporated into the CV_TOP_ALL calculation view, which combines datasets from various sources. This calculation view is later accessed in both SAP Analytics Cloud for visualization and Power BI to demonstrate auto-image rendering as we have explored.<BR />
<BR />
In this Power BI report, I utilized the same CV_TOP_ALL calculation view that was created in SAP Analytics Cloud and generated two visualizations:<BR />
<OL><BR />
<LI>A table showing Album name, Track name, and Image columns. This allows viewing album art images automatically rendered from the image URL data in CV_TOP_ALL.</LI><BR />
<LI>A ribbon chart comparing the Danceability, Energy, and Liveness metrics for each track. This is similar to the analysis done in SAP Analytics Cloud. In this case, the Track name is the lone attribute being compared across those three metrics in the ribbon chart.</LI><BR />
</OL><BR />
<P style="overflow: hidden;margin-bottom: 0px"><IMG class="migrated-image" src="https://community.sap.com/legacyfs/online/storage/blog_attachments/2023/12/Picture33-4.png" /></P><BR />
Power BI's integration with custom visual apps allows for a more flexible analysis of the CV_TOP_ALL calculation view, including visualizing based on images. You can access these additional visualizations in Power BI by selecting "Get more visuals" from the Visualizations pane.<BR />
<P style="overflow: hidden;margin-bottom: 0px"><IMG class="migrated-image" src="https://community.sap.com/legacyfs/online/storage/blog_attachments/2023/12/Picture34-3.png" height="458" width="363" /></P><BR />
Selecting "Get more visuals" will open the Power BI visuals gallery. In the gallery, search for the "image grid" custom visual. When you find the image grid visual, add it to your report by clicking the "Add" button.<BR />
<P style="overflow: hidden;margin-bottom: 0px"><IMG class="migrated-image" src="https://community.sap.com/legacyfs/online/storage/blog_attachments/2023/12/Picture35-3.png" height="224" width="459" /></P><BR />
Once added, you will see the app as part of your Power BI desktop.<BR />
<P style="overflow: hidden;margin-bottom: 0px"><IMG class="migrated-image" src="https://community.sap.com/legacyfs/online/storage/blog_attachments/2023/12/Picture36-3.png" height="430" width="490" /></P><BR />
When you select the image grid visual and choose the Image column from the CV_TOP_ALL calculation view, Power BI will automatically populate an image grid displaying all 500 album cover images that were extracted from the Spotify data. By default, the images are rendered in the grid sorted by the predefined order in the view. A key capability offered by the image grid is the ability to visualize a collection of images and rapidly sort them by different attributes to spot visual patterns or trends. For example, with a few clicks, you can rearrange the grid sorted alphabetically by artist, genre, release date, etc. Looking at the images sorted in different ways allows you to analyze the data in new visual perspectives that may yield additional insights. Pretty cool, eh?<BR />
<P style="overflow: hidden;margin-bottom: 0px"><IMG class="migrated-image" src="https://community.sap.com/legacyfs/online/storage/blog_attachments/2023/12/Picture37-scaled.jpg" /></P><BR />
Additional filters can be applied to the image grid visual to narrow down the list of tracks being analyzed. For example, the grid can be filtered to only show images from the "Top Indian tracks" playlist that was ingested from Spotify. Furthermore, the Speechiness audio feature metric can be added as a filtering criteria to only display tracks above or below a certain speechiness threshold. Applying these types of filters allows slicing the 500-track image grid down to a subset of images matching the given criteria. This enables more focused visual analysis. For instance, in this case, filtering to Indian tracks with high speechiness shows the actual album images associated with that segmented list of verbal tracks.<BR />
<P style="overflow: hidden;margin-bottom: 0px"><IMG class="migrated-image" src="https://community.sap.com/legacyfs/online/storage/blog_attachments/2023/12/Picture38-scaled.jpg" /></P><BR />
<BR />
<BR />
I hope this Spotify series has sparked interest and ideas for adopting SAP HANA Cloud and integrating it into your own analytics use cases. My sincere thanks to the colleagues and community members who reached out to share the visualization blog—your feedback motivated me to complete it before the end of the year <span class="lia-unicode-emoji" title=":slightly_smiling_face:">🙂</span><BR />
<BR />
Looking ahead to 2024, we plan to continue creating enablement blogs focusing on SAP HANA Cloud- either expanding on this Spotify series or developing a new one focusing on both multi-model analysis extending it to the new SAP HANA Cloud Vector Engine as well as the SAP's Generative AI Hub platform. There are so many emerging capabilities to explore!<BR />
<BR />
Please stay tuned for more to come, and happy learning on your own data analytics discovery journeys in the New Year! Please feel free to reach out with any additional questions or feedback on the topics covered in this Spotify series. Looking forward to hearing from you! Happy Learning!!<BR />
<BR />
<BR />
<H3 id="toc-hId-1775472133">References</H3><BR />
<OL><BR />
<LI><A href="https://developer.spotify.com/documentation/web-api/libraries/" target="_blank" rel="noopener nofollow noreferrer">Spotify Libraries & Documents</A></LI><BR />
<LI><A href="https://github.com/spotipy-dev/spotipy/tree/master/examples" target="_blank" rel="noopener nofollow noreferrer">Spoti<STRONG>py </STRONG>Public Git Repositories</A></LI><BR />
<LI><A href="https://github.com/JMPerez/spotify-web-api-js" target="_blank" rel="noopener nofollow noreferrer">Spotipy JS Wrapper built by JM Perez</A></LI><BR />
<LI><A href="https://msmith7161.github.io/what-is-speechiness/" target="_blank" rel="noopener nofollow noreferrer">Spotipy R package contributions by Mia</A></LI><BR />
<LI><A href="https://bindichen.medium.com/exploding-a-list-like-column-with-pandas-explode-method-3ffd41f9f7e2" target="_blank" rel="noopener nofollow noreferrer">Pandas Explode Function</A></LI><BR />
<LI><A href="https://soulsinporto.medium.com/using-the-spotify-api-for-data-driven-analysis-of-my-playlists-part-1-2-a4598ca7b96d" target="_blank" rel="noopener nofollow noreferrer">Pandas Data-Driven Analysis</A></LI><BR />
<LI>Tons of Medium blogs</LI><BR />
</OL>2023-12-29T00:53:49+01:00https://community.sap.com/t5/technology-blog-posts-by-members/consuming-capm-application-s-odata-service-into-sap-fiori-application-in/ba-p/13667392Consuming CAPM Application's OData service into SAP Fiori Application in Business Application Studio2024-04-16T12:50:31.978000+02:00Chetan_Bhatthttps://community.sap.com/t5/user/viewprofilepage/user-id/1429690<P class="lia-align-justify" style="text-align : justify;"><STRONG>OBJECTIVE-:</STRONG></P><P class="lia-align-justify" style="text-align : justify;">Consuming OData Service of CAPM Application into SAP Fiori Application in Business Application Studio.</P><P class="lia-align-justify" style="text-align : justify;"><STRONG>CAPM (Cloud Application Programming Model)-:</STRONG></P><P class="lia-align-justify" style="text-align : justify;">It is an open-source framework that uses tools, libraries, and languages to create applications that can be used across multiple SAP products. CAPM is a multi-target application that runs at different times, with the persistence layer running in the HANA DB run time, the server layer running in the Node.js run time, and the UI/UX layer running in the browser run time.</P><P class="lia-align-justify" style="text-align : justify;">CAPM is one of the approaches to developing cloud applications using the BTP platform. CAPM offers a more structured and seamless framework for data modelling and enhancing integration with services.</P><P class="lia-align-justify" style="text-align : justify;"><STRONG>Advantage of CAPM over other approaches-:</STRONG></P><UL class="lia-align-justify" style="text-align : justify;"><LI>It enables full-stack development in the same environment. (BAS), eliminating the need to switch between different environments for the backend and frontend development.</LI><LI>It offers flexibility in language selection, allowing developers to work with multiple languages according to their needs. BAS provides easy connectivity to required extensions for this purpose.</LI><LI>Seamless integration with git and other applications via APIs facilitating extension or development of the application.</LI><LI>Automatically handling dependencies to a certain extent, reducing frustration, and improving development speed. For example, handling the OData after exposing all entities and making it easier to consume in the UI.</LI></UL><P class="lia-align-justify" style="text-align : justify;"><STRONG>Prerequisites-:</STRONG></P><UL class="lia-align-justify" style="text-align : justify;"><LI>Create a CAPM project.</LI><LI>Log in to Cloud Foundry Credentials.</LI><LI>Ensure the HANA Database is created and running (I Used it for storage and data creation).</LI></UL><P class="lia-align-justify" style="text-align : justify;"><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Chetan_Bhatt_0-1712859475702.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/95284iF96BE8EFB182149E/image-size/medium?v=v2&px=400" role="button" title="Chetan_Bhatt_0-1712859475702.png" alt="Chetan_Bhatt_0-1712859475702.png" /></span></P><P class="lia-align-justify" style="text-align : justify;"> </P><P class="lia-align-justify" style="text-align : justify;"><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Chetan_Bhatt_1-1712859475728.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/95285iC96312CDDC8F56E6/image-size/medium?v=v2&px=400" role="button" title="Chetan_Bhatt_1-1712859475728.png" alt="Chetan_Bhatt_1-1712859475728.png" /></span></P><P class="lia-align-justify" style="text-align : justify;"> </P><UL class="lia-align-justify" style="text-align : justify;"><LI>Set up a Dev Space.</LI><LI>Create a SAP Build Work Zone instance to act as a Fiori Launchpad for the CAPM Application</LI></UL><P class="lia-align-justify" style="text-align : justify;"> </P><P class="lia-align-justify" style="text-align : justify;"><STRONG>You Have to create a new Destination in BTP (Connectivity -> Destination)-:</STRONG></P><P class="lia-align-justify" style="text-align : justify;"> </P><P class="lia-align-justify" style="text-align : justify;"><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Chetan_Bhatt_2-1712859475732.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/95283i2F37A3A4212C375A/image-size/medium?v=v2&px=400" role="button" title="Chetan_Bhatt_2-1712859475732.png" alt="Chetan_Bhatt_2-1712859475732.png" /></span></P><P class="lia-align-justify" style="text-align : justify;"> </P><P class="lia-align-justify" style="text-align : justify;">This destination will be used for passing system information when creating a Fiori Application.</P><P class="lia-align-justify" style="text-align : justify;">For the URL, DEPLOY YOUR APPLICATION IN CLOUD FOUNDRY (Cloud Foundry ->Spaces ->Dev (Space Name)->Your Service (here it is CAPMChetan-srv) and copy Application Routes).</P><P class="lia-align-justify" style="text-align : justify;">This URL will be shown only when you deploy your CAPM Application in Cloud Foundry-> A new blog will be there to deploy the CAPM Application.</P><P class="lia-align-justify" style="text-align : justify;"><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Chetan_Bhatt_3-1712859475740.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/95288i831E1DE5FA2B9750/image-size/medium?v=v2&px=400" role="button" title="Chetan_Bhatt_3-1712859475740.png" alt="Chetan_Bhatt_3-1712859475740.png" /></span></P><P class="lia-align-justify" style="text-align : justify;"> </P><P class="lia-align-justify" style="text-align : justify;">For Authorization, use the same authorization as created in the package.json -> a new blog will create a security configuration.</P><P class="lia-align-justify" style="text-align : justify;"> </P><P class="lia-align-justify" style="text-align : justify;">Now that the destination for the service is configured, proceed to create a FIORI APP: -</P><UL class="lia-align-justify" style="text-align : justify;"><LI>Open SAP BAS (Business Application Studio).</LI><LI>Open DEV Space where you want to create a Fiori Application.</LI><LI>Go to File -> New Project From template.</LI><LI>Choose a project from the Template (SAP Fiori Application).</LI></UL><P class="lia-align-justify" style="text-align : justify;"><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Chetan_Bhatt_4-1712859475749.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/95287i3F3554B2250D61A3/image-size/medium?v=v2&px=400" role="button" title="Chetan_Bhatt_4-1712859475749.png" alt="Chetan_Bhatt_4-1712859475749.png" /></span></P><P class="lia-align-justify" style="text-align : justify;"> </P><UL class="lia-align-justify" style="text-align : justify;"><LI>Choose any Template of your choice.</LI></UL><P class="lia-align-justify" style="text-align : justify;"><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Chetan_Bhatt_5-1712859475756.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/95286iD67EBDD9E6AB118C/image-size/medium?v=v2&px=400" role="button" title="Chetan_Bhatt_5-1712859475756.png" alt="Chetan_Bhatt_5-1712859475756.png" /></span></P><P class="lia-align-justify" style="text-align : justify;"> </P><UL class="lia-align-justify" style="text-align : justify;"><LI>In Data Source choose to connect to a system.</LI></UL><P class="lia-align-justify" style="text-align : justify;"><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Chetan_Bhatt_6-1712859475760.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/95290iDCCA5D3A65D7000B/image-size/medium?v=v2&px=400" role="button" title="Chetan_Bhatt_6-1712859475760.png" alt="Chetan_Bhatt_6-1712859475760.png" /></span></P><P class="lia-align-justify" style="text-align : justify;"> </P><P class="lia-align-justify" style="text-align : justify;"><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Chetan_Bhatt_7-1712859475765.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/95289i29335856F2EFABAA/image-size/medium?v=v2&px=400" role="button" title="Chetan_Bhatt_7-1712859475765.png" alt="Chetan_Bhatt_7-1712859475765.png" /></span></P><P class="lia-align-justify" style="text-align : justify;"> </P><P class="lia-align-justify" style="text-align : justify;"> </P><UL class="lia-align-justify" style="text-align : justify;"><LI>Specify the Destination created earlier.</LI></UL><P class="lia-align-justify" style="text-align : justify;"><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Chetan_Bhatt_8-1712859475769.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/95291i0B4CF5E35759FC40/image-size/medium?v=v2&px=400" role="button" title="Chetan_Bhatt_8-1712859475769.png" alt="Chetan_Bhatt_8-1712859475769.png" /></span></P><P class="lia-align-justify" style="text-align : justify;"> </P><P class="lia-align-justify" style="text-align : justify;"> </P><UL class="lia-align-justify" style="text-align : justify;"><LI>In the service path, specify the service path of the OData service that can be obtained by running the command “cds watch –profile hybrid” in your CAPM Project.</LI></UL><P class="lia-align-justify" style="text-align : justify;"><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Chetan_Bhatt_9-1712859475773.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/95292i7F0BC76D1160938D/image-size/medium?v=v2&px=400" role="button" title="Chetan_Bhatt_9-1712859475773.png" alt="Chetan_Bhatt_9-1712859475773.png" /></span></P><P class="lia-align-justify" style="text-align : justify;"> </P><UL class="lia-align-justify" style="text-align : justify;"><LI>Click on next.</LI></UL><P class="lia-align-justify" style="text-align : justify;"><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Chetan_Bhatt_10-1712859475781.jpeg" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/95293i7930C75401EC6C12/image-size/medium?v=v2&px=400" role="button" title="Chetan_Bhatt_10-1712859475781.jpeg" alt="Chetan_Bhatt_10-1712859475781.jpeg" /></span></P><P class="lia-align-justify" style="text-align : justify;"> </P><P class="lia-align-justify" style="text-align : justify;"> </P><UL class="lia-align-justify" style="text-align : justify;"><LI>Select any entity from the given list of entities you created in your project.</LI></UL><P class="lia-align-justify" style="text-align : justify;"><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Chetan_Bhatt_11-1712859475788.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/95294i28FD073ED8BABEB0/image-size/medium?v=v2&px=400" role="button" title="Chetan_Bhatt_11-1712859475788.png" alt="Chetan_Bhatt_11-1712859475788.png" /></span></P><P class="lia-align-justify" style="text-align : justify;"> </P><UL class="lia-align-justify" style="text-align : justify;"><LI>Customize the project attributes.</LI></UL><P class="lia-align-justify" style="text-align : justify;"><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Chetan_Bhatt_12-1712859475796.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/95295i56DC0BF8208D9582/image-size/medium?v=v2&px=400" role="button" title="Chetan_Bhatt_12-1712859475796.png" alt="Chetan_Bhatt_12-1712859475796.png" /></span></P><P class="lia-align-justify" style="text-align : justify;"> </P><UL class="lia-align-justify" style="text-align : justify;"><LI>Choose the target as Cloud Foundry and select the Destination name among the list of destination names (You can go with either Local CAPM Project API and the name of your destination too).</LI></UL><P class="lia-align-justify" style="text-align : justify;"> </P><P class="lia-align-justify" style="text-align : justify;"><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Chetan_Bhatt_13-1712859475804.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/95297i448D5B4C126A031A/image-size/medium?v=v2&px=400" role="button" title="Chetan_Bhatt_13-1712859475804.png" alt="Chetan_Bhatt_13-1712859475804.png" /></span></P><P class="lia-align-justify" style="text-align : justify;"> </P><UL class="lia-align-justify" style="text-align : justify;"><LI>Now, your FIORI project is created and is ready to use.</LI></UL><P class="lia-align-justify" style="text-align : justify;"><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Chetan_Bhatt_14-1712859475814.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/95296i4C2BAADDC20B1DDD/image-size/medium?v=v2&px=400" role="button" title="Chetan_Bhatt_14-1712859475814.png" alt="Chetan_Bhatt_14-1712859475814.png" /></span></P><P class="lia-align-justify" style="text-align : justify;"> </P><UL class="lia-align-justify" style="text-align : justify;"><LI>Go to run configuration and start the project as usual.</LI></UL><P class="lia-align-justify" style="text-align : justify;"><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Chetan_Bhatt_15-1712859475821.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/95298i8507FAEBE3A69EB2/image-size/medium?v=v2&px=400" role="button" title="Chetan_Bhatt_15-1712859475821.png" alt="Chetan_Bhatt_15-1712859475821.png" /></span></P><P class="lia-align-justify" style="text-align : justify;"> </P><UL class="lia-align-justify" style="text-align : justify;"><LI>You can now run this Fiori Application which is the result of an Application created from CAPM.</LI></UL><P class="lia-align-justify" style="text-align : justify;"><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Chetan_Bhatt_16-1712859475830.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/95299iEBFF2F273E03EB7A/image-size/medium?v=v2&px=400" role="button" title="Chetan_Bhatt_16-1712859475830.png" alt="Chetan_Bhatt_16-1712859475830.png" /></span></P><P class="lia-align-justify" style="text-align : justify;"> </P><P class="lia-align-justify" style="text-align : justify;"> </P>2024-04-16T12:50:31.978000+02:00https://community.sap.com/t5/technology-blog-posts-by-members/validation-for-different-identity-cards-via-absl-code-in-sap-c4c/ba-p/13674119Validation for different Identity Cards via ABSL code in SAP C4C2024-04-18T08:27:04.382000+02:00tkbisoyi9118https://community.sap.com/t5/user/viewprofilepage/user-id/162380<P><STRONG>Validation for different Identity Cards via ABSL code in SAP C4C</STRONG></P><P>In day–to-day life, the need of unique identification cards are common. So verfifications on identity cards in different sectors are also a basic requirement. Suppose we are working for a client from India and the project is about Sales cloud. In this case, the client wants to maintain every customer’s data like Name, Contact, Address, PAN number, Adhaar number, Passport details etc. Out of those fields PAN number, Adhaar number & Passport number are unique IDs provided to each person in India. So we need to put some validations against them, so that wrong values should not be stored.</P><P>We have an option to put the validations on these Identity card numbers is via ABSL validation logic through cloud application studio. Here the steps mentioned below to validate different identity cards.</P><P>Identity cards mostly required in customer/Employee work centers. So, we can add the below logics in Event- Validation on Save and Event – After Modify of Customer/Employee BO in SDK.</P><P><STRONG>Case1 – PAN Card number should be alphanumeric and should maintain exact pattern. Also PAN card number should have only 10 characters length.</STRONG></P><P>To validate the length of any field we have the method “.length()”Which we can use for this requirement.</P><P>For PAN Card number the format in India as</P><OL><LI>The PAN Card number should be only 10 characters long.</LI><LI>First five characters should be alphabeting ranges from [A-Z]</LI><LI>From 6th to 9th places should be numeric values ranges from [0-9]</LI><LI>Last digit should be alphabetic values within [A-Z]</LI></OL><P>Using ABSL we have some logic using substring to implement the validation for any mismatch of the above-mentioned format. Added the code snippet for your reference.</P><P>Here we will use FindRegex() : This function <SPAN>Searches from left to right and returns the position of a regular expression pattern in a string. If it doesn’t find same pattern then it </SPAN>returns the value “-1” and raises a message as we define.</P><OL><LI>First five characters should be alphabeting ranges from [A-Z].</LI></OL><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="tkbisoyi9118_0-1713528643323.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/98781i2BC49C5D7E096630/image-size/medium?v=v2&px=400" role="button" title="tkbisoyi9118_0-1713528643323.png" alt="tkbisoyi9118_0-1713528643323.png" /></span></P><P> </P><OL><LI>From 6th to 9th places should be numeric values ranges from [0-9]</LI></OL><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="tkbisoyi9118_1-1713528643329.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/98780i5A0B7FBFB58CD180/image-size/medium?v=v2&px=400" role="button" title="tkbisoyi9118_1-1713528643329.png" alt="tkbisoyi9118_1-1713528643329.png" /></span></P><P> </P><OL><LI>Last digit should be alphabetic values within [A-Z]</LI></OL><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="tkbisoyi9118_2-1713528643334.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/98782iEBDF5C23F15258F5/image-size/medium?v=v2&px=400" role="button" title="tkbisoyi9118_2-1713528643334.png" alt="tkbisoyi9118_2-1713528643334.png" /></span></P><P> </P><OL><LI>The PAN Card number should be only 10 characters long.</LI></OL><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="tkbisoyi9118_3-1713528643336.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/98783iC3F9D53112B88171/image-size/medium?v=v2&px=400" role="button" title="tkbisoyi9118_3-1713528643336.png" alt="tkbisoyi9118_3-1713528643336.png" /></span></P><P> </P><P>Result: - After implementing the above ABSL code, when user tried to add wrong values of PAN Card or incorrect length, the error displayed and not allowed to SAVE the data.</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="tkbisoyi9118_4-1713528643339.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/98784i18CE92864638DD6C/image-size/medium?v=v2&px=400" role="button" title="tkbisoyi9118_4-1713528643339.png" alt="tkbisoyi9118_4-1713528643339.png" /></span></P><P> </P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="tkbisoyi9118_5-1713528643344.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/98785i875F96029DCB663C/image-size/medium?v=v2&px=400" role="button" title="tkbisoyi9118_5-1713528643344.png" alt="tkbisoyi9118_5-1713528643344.png" /></span></P><P> </P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="tkbisoyi9118_6-1713528643349.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/98788i721E1DA3B2D2CA0B/image-size/medium?v=v2&px=400" role="button" title="tkbisoyi9118_6-1713528643349.png" alt="tkbisoyi9118_6-1713528643349.png" /></span></P><P> </P><P> </P><P><STRONG>Case 2 – Adhaar Card number should be 12 characters length & all digits should be numeric values. </STRONG></P><P>To validate the length of any field we have the method “.length()”Which we can use as of the requirement.</P><P>For Adhaar card all the digits should be numeric and length should be 12 characters only. The below ABSL code can restrict any mismatch to the Adhaar card format.</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="tkbisoyi9118_7-1713528643351.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/98786iDB8A4BF4EB381ADB/image-size/medium?v=v2&px=400" role="button" title="tkbisoyi9118_7-1713528643351.png" alt="tkbisoyi9118_7-1713528643351.png" /></span></P><P> </P><P>Result: - After implementing the above ABSL code, when user tried to add wrong values of Adhaar Card or incorrect length, the error displayed and not allowed to SAVE the data.</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="tkbisoyi9118_8-1713528643357.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/98787iA667C465BEC3B62F/image-size/medium?v=v2&px=400" role="button" title="tkbisoyi9118_8-1713528643357.png" alt="tkbisoyi9118_8-1713528643357.png" /></span></P><P> </P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="tkbisoyi9118_9-1713528643362.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/98789i852777571AB81B2E/image-size/medium?v=v2&px=400" role="button" title="tkbisoyi9118_9-1713528643362.png" alt="tkbisoyi9118_9-1713528643362.png" /></span></P><P> </P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="tkbisoyi9118_10-1713528643366.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/98790iD8C707077F307965/image-size/medium?v=v2&px=400" role="button" title="tkbisoyi9118_10-1713528643366.png" alt="tkbisoyi9118_10-1713528643366.png" /></span></P><P> </P><P><STRONG>Case3 – Indian Passport number should be alphanumeric and should maintain exact pattern. Also Passport card number should have only 8 characters length.</STRONG></P><P>To validate the length of any field we have the method “.length()”Which we can use as of the requirement.</P><P>For Passport number the format in India as</P><OL><LI>The Passport number should be only 8 characters long.</LI><LI>First one character should be alphabeting ranges from [A-Z].</LI><LI>For 2nd position, it should be numeric value within range 1 to 9.</LI><LI>For 3rd position, it should be numeric value within range 0 to 9.</LI><LI>From position 4th to 7th position, digits should be numeric value within range 0 to 9.</LI><LI>For the last one digit, it should be numeric value within range 1-9.</LI></OL><P>Using ABSL we have some logic using substring to implement the validation for any mismatch of the above-mentioned format. Added the code snippet for your reference.</P><P>Here we will use FindRegex() : This function <SPAN>Searches from left to right and returns the position of a regular expression pattern in a string. If it doesn’t find same pattern then it </SPAN>returns the value “-1” and raises a message as we define.</P><OL><LI>First one character should be alphabeting ranges from [A-Z].</LI></OL><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="tkbisoyi9118_11-1713528643372.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/98791i1F8F4A87DFD9790E/image-size/medium?v=v2&px=400" role="button" title="tkbisoyi9118_11-1713528643372.png" alt="tkbisoyi9118_11-1713528643372.png" /></span></P><P> </P><OL><LI>For 2nd position, it should be numeric value within range 1 to 9.</LI></OL><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="tkbisoyi9118_12-1713528643376.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/98794i7FD15A846EC18C3C/image-size/medium?v=v2&px=400" role="button" title="tkbisoyi9118_12-1713528643376.png" alt="tkbisoyi9118_12-1713528643376.png" /></span></P><P> </P><OL><LI>For3rd position, it should be numeric value within range 0 to 9.</LI></OL><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="tkbisoyi9118_13-1713528643380.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/98792iC1D70C1171FED582/image-size/medium?v=v2&px=400" role="button" title="tkbisoyi9118_13-1713528643380.png" alt="tkbisoyi9118_13-1713528643380.png" /></span></P><P> </P><P> </P><OL><LI>From position 4th to 7th position, digits should be numeric value within range 0 to 9.</LI></OL><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="tkbisoyi9118_14-1713528643384.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/98793i2903687EE940A4BD/image-size/medium?v=v2&px=400" role="button" title="tkbisoyi9118_14-1713528643384.png" alt="tkbisoyi9118_14-1713528643384.png" /></span></P><P> </P><OL><LI>For the last one digit, it should be numeric value within range 1-9.</LI></OL><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="tkbisoyi9118_15-1713528643388.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/98795iD5A1320DB7FBCFA6/image-size/medium?v=v2&px=400" role="button" title="tkbisoyi9118_15-1713528643388.png" alt="tkbisoyi9118_15-1713528643388.png" /></span></P><P> </P><OL><LI>The Passport number should be only 8 characters long.</LI></OL><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="tkbisoyi9118_16-1713528643392.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/98797i76763F678260AA8F/image-size/medium?v=v2&px=400" role="button" title="tkbisoyi9118_16-1713528643392.png" alt="tkbisoyi9118_16-1713528643392.png" /></span></P><P> </P><P> </P><P>Result: - After implementing the above ABSL code, when user tried to add wrong values of Adhaar Card or incorrect length, the error displayed and not allowed to SAVE the data.</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="tkbisoyi9118_17-1713528643397.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/98796i3FD77F6543724906/image-size/medium?v=v2&px=400" role="button" title="tkbisoyi9118_17-1713528643397.png" alt="tkbisoyi9118_17-1713528643397.png" /></span></P><P> </P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="tkbisoyi9118_18-1713528643402.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/98798iCAC3EFB2B95EF0C5/image-size/medium?v=v2&px=400" role="button" title="tkbisoyi9118_18-1713528643402.png" alt="tkbisoyi9118_18-1713528643402.png" /></span></P><P> </P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="tkbisoyi9118_19-1713528643406.png" style="width: 400px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/98799i9D8CAD495D1ADE11/image-size/medium?v=v2&px=400" role="button" title="tkbisoyi9118_19-1713528643406.png" alt="tkbisoyi9118_19-1713528643406.png" /></span></P><P> </P><P><STRONG>Conclusion: -</STRONG></P><P>This solution can help customers to restrict unauthorized entry of identity card numbers.</P>2024-04-18T08:27:04.382000+02:00https://community.sap.com/t5/crm-and-cx-blog-posts-by-members/enabling-sdk-fields-in-search-queries-on-owl-screen-in-c4c/ba-p/13709442Enabling SDK fields in Search Queries on OWL screen in C4C2024-05-23T08:49:37.166000+02:00Swapna_Kushanahttps://community.sap.com/t5/user/viewprofilepage/user-id/169267<P>Hi,</P><P>Many a times we come across a scenario where customer asks to filter out the data based on certain fields which are configured as Extension fields (SDK fields) with preconfigured queries on OWL screen. This blog will demonstrate how we can achieve this.</P><P>There can be 2 such scenarios:</P><OL><LI>Enabling a Custom Field in Advanced Search of Standard OWL screen</LI><LI>Enabling a Custom Field in Advanced Search of Custom BO’s OWL screen.</LI></OL><P>Let’s deep down into the process below:</P><P><STRONG>Case -1: Enabling a Custom Field in Advanced Search of Standard OWL screen.</STRONG></P><P>Let’s say we have a custom field - “Type” which indicates whether the ticket is B2B or B2C and now we have to add it in advanced Filter of Service Request’s OWL screen and save the Search Query so that the User will be able to filter out only B2B tickets or B2C tickets based on the requirement.</P><P>Follow the below steps to achieve the same.</P><P>Step 1: As Service Request is a standard BO, Create an Extension BO of it in SDK and Add your extension field ZCOD_Type (Type) in the Ticket.xbo as shown below.</P><P>TypeCode is the data type which is a codelist having 2 values – B2B and B2C based on which we are going to query the Ticket.</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Picture1.png" style="width: 936px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/114092i8D12A27736B79F2F/image-size/large?v=v2&px=999" role="button" title="Picture1.png" alt="Picture1.png" /></span></P><P>Step 2: Enhance the Screen of your Extension BO to add our field- “Type” on TI screen. You will be able to see the field added on UI.</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Picture_edit2.png" style="width: 936px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/115392iC504D4C27053840B/image-size/large?v=v2&px=999" role="button" title="Picture_edit2.png" alt="Picture_edit2.png" /></span></P><P>Step 3: Now, you need to Add your Field to Advanced Search in Tickets OWL Screen.</P><P>To do that, follow the below steps.</P><P>i. Right click on Ticket.xbo you have created, and Select Enhance Enterprise Search as shown below.</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Picture3.png" style="width: 802px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/114094i730F034DEF99F30F/image-size/large?v=v2&px=999" role="button" title="Picture3.png" alt="Picture3.png" /></span></P><P>ii. A dialog box will be displayed as below. Select the field that you want to add in advanced search and click OK.</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Picture4.png" style="width: 637px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/114095iFF40EB27333267F7/image-size/large?v=v2&px=999" role="button" title="Picture4.png" alt="Picture4.png" /></span></P><P>iii. On Click of OK, you will be directed to the UI Screen but as a pre-requisite please make sure you login into UI System with the same SDK credentials that you used to login to SDK.</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Picture5.png" style="width: 936px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/114096iED5EA3A34840BA31/image-size/large?v=v2&px=999" role="button" title="Picture5.png" alt="Picture5.png" /></span></P><P>iv. Select the Row and click on Add Field. Check box - “Field available” will be Automatically set to true on click of Add Field.</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Picture_edit3.png" style="width: 936px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/115393i7542592C0BF5E5D8/image-size/large?v=v2&px=999" role="button" title="Picture_edit3.png" alt="Picture_edit3.png" /></span></P><P>v. Go to SDK, Select the Ticket.xbo and enhance Screen as shown below.</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Picture7.png" style="width: 824px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/114098iA1933AAFABB71EBF/image-size/large?v=v2&px=999" role="button" title="Picture7.png" alt="Picture7.png" /></span></P><P>vi. Select the screen in which you want to add the field on UI.</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Picture8.png" style="width: 628px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/114100i5CF8EE785AAC5D83/image-size/large?v=v2&px=999" role="button" title="Picture8.png" alt="Picture8.png" /></span></P><P>You can see Screen got added in the project.</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Picture9.png" style="width: 453px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/114099i17A76B7026943A46/image-size/large?v=v2&px=999" role="button" title="Picture9.png" alt="Picture9.png" /></span></P><P> </P><P>vii. Open it and select “Advanced filter” inside Extensibility Explorer and select “Add Extension field to section group” as shown below.</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Picture10.png" style="width: 936px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/114102iF24296BB656DB4E5/image-size/large?v=v2&px=999" role="button" title="Picture10.png" alt="Picture10.png" /></span></P><P>viii. Select the field and click “Apply”.</P><P> </P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Picture11.png" style="width: 936px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/114101iF0BA3D79FA958D8D/image-size/large?v=v2&px=999" role="button" title="Picture11.png" alt="Picture11.png" /></span></P><P> </P><P>ix. Save and activate the screen.</P><P>Now, Refresh the Front-end UI, you will be able to see the field added in Advanced Filter.</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Picture12.png" style="width: 936px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/114103i9CE1CED1D0CD4AFD/image-size/large?v=v2&px=999" role="button" title="Picture12.png" alt="Picture12.png" /></span></P><P>Step 4: Select the value and click on Save as Query.</P><P>Note: You can do it in Adaptation mode to reflect the Change in Everyone’s system.</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Picture13.png" style="width: 936px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/114104iB2F21210C8F925D0/image-size/large?v=v2&px=999" role="button" title="Picture13.png" alt="Picture13.png" /></span></P><P>Dialog will be displayed, give the name for the query, and save.</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Picture14.png" style="width: 936px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/114105iC183A030B455E2C7/image-size/large?v=v2&px=999" role="button" title="Picture14.png" alt="Picture14.png" /></span></P><P>You will be able to see it in the Queries.</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Picture15.png" style="width: 936px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/114106iBAA4E3F6AFF9327B/image-size/large?v=v2&px=999" role="button" title="Picture15.png" alt="Picture15.png" /></span></P><P>You can Repeat Step 4 to save as many Queries as you need for all the required values.</P><P> </P><P><STRONG>Case 2: Enabling a Custom Field in Advanced Search in Custom OWL screen.</STRONG></P><P>If you want to achieve the similar functionality as above where you want to enable any custom field in the custom BO in advanced filter of OWL screen, below is the Process.</P><P>Create a Custom BO and create the required field, create screens for your custom BO and enable the field in advanced search of OWL.</P><P>Let us now see the steps in detail achieve the requirement.</P><P>Let’s say, we have a custom BO named as Vehicles.bo in which you want to filter out vehicles based on 2 wheelers or 4 wheelers.</P><P>Step1: Advanced filter needs to be added on our custom OWL Screen. To do this, In SDK, go to “Designer” and click on “Advanced” option at top right corner as shown below.</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Picture16.png" style="width: 936px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/114108i46439AC6602304D7/image-size/large?v=v2&px=999" role="button" title="Picture16.png" alt="Picture16.png" /></span></P><P>A pop-up below will be shown, click on Yes.</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Picture17.png" style="width: 936px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/114109iC7D9DF288E11B66E/image-size/large?v=v2&px=999" role="button" title="Picture17.png" alt="Picture17.png" /></span></P><P>Step2: Now go to “Controller” -> Queries.</P><P>Open Query ->Query by Elements, select the fields and move them to the Selected Query Parameters section as shown below.</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Picture18.png" style="width: 936px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/114110iB0826287097F9995/image-size/large?v=v2&px=999" role="button" title="Picture18.png" alt="Picture18.png" /></span></P><P>Step3: Now go to “Data model” and add data fields inside SearchParameter1 as required. <span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Picture19.png" style="width: 936px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/114111i00F144B2F1B4F528/image-size/large?v=v2&px=999" role="button" title="Picture19.png" alt="Picture19.png" /></span></P><P>Step 4: Go to “Controller” again and bind the elements in Selected Query Parameter section with the elements in Data Model by selecting the fields. Please refer below screenshot for the same.</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Picture20.png" style="width: 936px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/114112i7BE1618B2FBB6EA9/image-size/large?v=v2&px=999" role="button" title="Picture20.png" alt="Picture20.png" /></span></P><P>Step 5: Go to Designer, Drag and Drop the required fields from Data model into the designer as below.</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Picture21.png" style="width: 936px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/114113iFFA9B788E8978CA4/image-size/large?v=v2&px=999" role="button" title="Picture21.png" alt="Picture21.png" /></span></P><P>Step 6: Save and Activate the Screen.</P><P>Refresh the Front-end UI and you can see advanced filter button added on the screen.</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Picture22.png" style="width: 936px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/114114iA75C5E2187B26C11/image-size/large?v=v2&px=999" role="button" title="Picture22.png" alt="Picture22.png" /></span></P><P>Step7: Click on Advanced Filter Option and give the Vehicle type selection and click on “Go”. You will be able to see filtered entries only.</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Picture23.png" style="width: 936px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/114116i7668CEF4189E996E/image-size/large?v=v2&px=999" role="button" title="Picture23.png" alt="Picture23.png" /></span></P><P>Thank You for visiting this, Blog.</P><P>Hope it helps you understand how to add your custom fields in the Advanced Filter on UI.</P><P> </P><P> </P><P> </P>2024-05-23T08:49:37.166000+02:00https://community.sap.com/t5/crm-and-cx-blog-posts-by-members/consumption-of-custom-forms-in-external-systems-from-sap-sales-cloud/ba-p/13742999Consumption of custom forms in external systems from SAP Sales Cloud2024-06-29T18:28:55.701000+02:00GopalakrishnanShttps://community.sap.com/t5/user/viewprofilepage/user-id/42518<P>Have tried exposing your custom output forms created in SAP C4C Cloud application studio to the external systems. We all used the Standard Sales Quote output forms which can be exposed to the other systems easily via the ODATA APIs of SAP Cloud for Customer. The response for those API calls would be binary data (Base 64 encoded) and can be converted to readable format.</P><P>Let’s see how this custom output form had been created in the solution. The custom output form is created against the custom BO which had been associated with the Customer Quote Business object.</P><P>We followed the usual routine to create the custom forms as mentioned in many of the SAP SCN forums and custom action ABSL files to generate the values for the output form.</P><P>We have a requirement to expose the custom output form created in the solution to the external system. <SPAN>The custom forms are generated anytime by clicking on the custom button embedded into the standard attachment tab.</SPAN></P><P>High level steps to complete this requirement.</P><OL><LI>Custom BO with required elements and association</LI><LI>Delete all the existing instances and generate the new PDF binary.</LI><LI>The new generation of PDF binary can be achieved via the POST method which return the binary pdf data directly in the response.</LI><LI>Retrieve the OutputRequestFormTemplateCode dynamically based on the solution prefix.</LI><LI>Invoke the GetPDF(BusinessObjectNode, FormTemplateCode, FormTemplateLanguageCode) method of OutputManagementUtilities and assign to the instance pdfBinary.</LI><LI>Create custom ODATA for the custom BO generated in step 1.</LI><LI>Exposing the API URL of the custom ODATA to the external system with the technical user id we can generate the POST method successfully.</LI></OL><P>PFB the code snippet.</P><P> </P><pre class="lia-code-sample language-csharp"><code>Custom BO: ZFormOutput //BODL defintion
element quoteID: BusinessTransactionDocumentID
element pdfBinary: BinaryObject
association toSlsQuote: CustomerQuote</code></pre><P> </P><P><STRONG>Actual Logic</STRONG></P><P>In After-Modify event we will delete all the existing output instance as per the quote ID. Then we will create the new PDF binary instance by calling custom action ABSL which is used to generate the output form.</P><P> </P><pre class="lia-code-sample language-csharp"><code>foreach (var instance in this)
{
//Delete existing instance(s) for quote id
var query = ZFormOutput.QueryByElements;
var selPara = query.CreateSelectionParams();
selPara.Add(query.quoteId.content, "I", "EQ", instance.quoteId.content);
var oldInstanceList = query.ExecuteFromDB(selPara);
foreach (var oldInstance in oldInstanceList)
{
oldInstance.Delete();
}
//Create PDF binary for new instance
var quoteInfo =<CustomBusinessObject>.Retrieve(instance.quoteId);
quoteInfo.<customActionABSL>(); Used to generate the custom output form
var ftCode : OutputRequestFormTemplateCode;
var sn_type = quoteInfo.GetObjectNodeReference().ObjectTypeCode.content.Substring(1,8);
ftCode.content = sn_type + "_XXXX1";
instance.pdfBinary = OutputManagementUtilities.GetPDF(quoteInfo, ftCode, "E");
}</code></pre><P> </P><P>ODATA reference and testing in postman tool.</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="CustomODATA.jpg" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/128838i225F46AAE98147CA/image-size/large?v=v2&px=999" role="button" title="CustomODATA.jpg" alt="CustomODATA.jpg" /></span></P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="CustomODATA_POSTMAN.jpg" style="width: 917px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/128839iECF64098675E12C4/image-size/large?v=v2&px=999" role="button" title="CustomODATA_POSTMAN.jpg" alt="CustomODATA_POSTMAN.jpg" /></span></P><P> </P><P>I hope this article will helps you to expose the custom forms from SAP Sales Cloud to external system.<BR />Thanks,</P><P>GKS.</P>2024-06-29T18:28:55.701000+02:00https://community.sap.com/t5/technology-blog-posts-by-sap/archiving-optimize-for-pdi-part-2/ba-p/13759482Archiving - Optimize for PDI, Part 22024-08-17T09:00:00.044000+02:00HorstSchaudehttps://community.sap.com/t5/user/viewprofilepage/user-id/6371<P>The Archiving process needs to retrieve all data, including PDI and Extension Fields, before sending them to the archive.<BR />Therefore all PDI scripts are performed during this retrieve operation.</P><P>But when the archiving starts, i.e. the <EM>ArchivingStatusCode</EM> is set to <EM>InProgress</EM> and later to <EM>Archived</EM>, the update shall only on this code value. This is done so any process agent which is listen to this, can start.</P><P>With the current release 2408 we suppress the execution of any PDI script during this status update.<BR />This mechanism is the same as already applied on suppressing the execution of validations, both SAP and PDI.<BR />According to our knowledge (and your complaints <span class="lia-unicode-emoji" title=":winking_face:">😉</span> ) this will speed up the process enormously.</P><P>Of course the <EM>OnDelete</EM> script will always be executed when the instance is deleted, so you can react and cleanup any shadowing Custom Business Objects or data sources or ...</P><P> </P>2024-08-17T09:00:00.044000+02:00https://community.sap.com/t5/crm-and-cx-blog-posts-by-members/extracting-data-from-csv-files-in-sap-cloud-application-studio/ba-p/13938525Extracting Data from CSV Files in SAP Cloud Application Studio2024-11-15T04:32:00.035000+01:00abimanyu_ghttps://community.sap.com/t5/user/viewprofilepage/user-id/13517<P>Hello everyone!</P><P>This blog post will explain how to read/extract a value from a CSV file and upload it into a business object.</P><H2 id="toc-hId-1074898588"><STRONG>Design:</STRONG></H2><P>In this example, I have used the custom business object (standard business object will also work) with a node named <STRONG>Item</STRONG> and Attachment Folder<STRONG> </STRONG>dependent object<STRONG>.</STRONG></P><P> </P><pre class="lia-code-sample language-vbnet"><code>node Items [0, n]
{
[AlternativeKey] [Label("Item ID")] element ItemID : ID;
[Label("Product ID")] element ProductID : ProductInternalID;
[Label("Quantity")] element Quantity : Quantity;
[Label("Price")] element Price : Amount;
association ToProduct to material;
}
[DependentObject(AttachmentFolder)] node Attachment;</code></pre><P> </P><P>Screenshot of the CSV file prepared for my upload testing.</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="abimanyu_g_0-1731603699094.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/191052i101DE6E9D4D26087/image-size/large?v=v2&px=999" role="button" title="abimanyu_g_0-1731603699094.png" alt="abimanyu_g_0-1731603699094.png" /></span></P><P>I want to perform a data extraction from CSV when an attachment is uploaded and when the user clicks an upload button (custom button). So, a custom action was created with the below logic and bound to the upload button in the UI designer.</P><P> </P><pre class="lia-code-sample language-javascript"><code>import ABSL;
import AP.PlatinumEngineering;
if (this.Attachment.IsSet())
{
if (this.Attachment.Document.Count() != 0)
{
var get_first = this.Attachment.Document.GetFirst();
if (get_first.IsSet())
{
var binary = get_first.FileContent.BinaryObject.content; //to get the binary content of csv file
var to_str = binary.ToString(); //convert the binary content to String
var xpes_tab: XPEStringTab;
var all_rows = CSV.Parse(to_str, ",", xpes_tab); //use CSV reuse library to parse each row values from the String
foreach(var row in all_rows.CSVStringTab)
{
var item = this.Items.Create(); //you can also perform CreateMass()
item.ItemID = row.XPEString.GetByIndex(1); //index will start from 1
item.ProductID = row.XPEString.GetByIndex(2);
item.Price.content = row.XPEString.GetByIndex(3);
item.Price.currencyCode = row.XPEString.GetByIndex(4);
item.Quantity.content = row.XPEString.GetByIndex(5);
item.Quantity.unitCode = row.XPEString.GetByIndex(6);
}
}
}
}</code></pre><P> </P><P>In the script, I have used the data type <STRONG>XPEStringTab </STRONG>and the <STRONG>CSV </STRONG>library with the <STRONG>Parse</STRONG> function. You can access this data type and library only if you import the <STRONG>PlatinumEngineering</STRONG> namespace.</P><P><STRONG>Important:</STRONG> If we raise any case to SAP support saying the library from <STRONG>PlatinumEngineering </STRONG>is not working, they will not support. Because it is not released for general use like other reuse libraries (Binary, Context, Date, DateTime, Duration, String, etc.).</P><P><STRONG>KBA:</STRONG> <A href="https://me.sap.com/notes/0002698916" target="_blank" rel="noopener noreferrer">2698916 - Facing Issues while Using SAP Platinum Engineering Libraries - SAP for Me</A></P><P><SPAN><STRONG>Blogs:</STRONG> <A href="https://community.sap.com/t5/technology-blogs-by-members/sap-platinum-engineering-libraries/ba-p/13314830" target="_blank">SAP Platinum Engineering Libraries - SAP Community</A></SPAN></P><P>Let's get back to our design: We have a BO and action script ready already. Bind the action to a button in UI designer. Below is a screenshot for reference.</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="abimanyu_g_1-1731606217211.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/191080i57DC413A587577D2/image-size/large?v=v2&px=999" role="button" title="abimanyu_g_1-1731606217211.png" alt="abimanyu_g_1-1731606217211.png" /></span></P><H2 id="toc-hId-878385083"><STRONG>Testing:</STRONG></H2><P>Once all the above steps are completed, upload the CSV to the attachment folder and click on the custom action button. It will parse the csv data and add the values into the item node.</P><H4 id="toc-hId-940037016"><STRONG>Attachment Folder:</STRONG></H4><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="abimanyu_g_4-1731606518209.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/191085iF99564B1CB23FD0A/image-size/large?v=v2&px=999" role="button" title="abimanyu_g_4-1731606518209.png" alt="abimanyu_g_4-1731606518209.png" /></span></P><H4 id="toc-hId-743523511"><STRONG>Item Node: </STRONG></H4><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="abimanyu_g_5-1731606670337.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/191086i797EC4BFF83E3275/image-size/large?v=v2&px=999" role="button" title="abimanyu_g_5-1731606670337.png" alt="abimanyu_g_5-1731606670337.png" /></span></P><P><STRONG>Upload</STRONG> button in the Item node advance list pane will call the custom action which will parse the data.</P><H2 id="toc-hId-288844568">Notes:</H2><OL><LI>You can read only the binary value of a CSV file and convert it into a string. Not Excel or other format files.</LI><LI>Without using the Platinum Engineering Library also, you can achieve this extract. But then building that parsing logic will be very hard and not understandable easily.</LI></OL><H2 id="toc-hId-92331063">Conclusion:</H2><P>In my experience, I have never faced any issues with some of the Platinum Engineering libraries like <STRONG>Mail, UserUtils, CurrencyConversion, </STRONG>and <STRONG>TextAnalysis</STRONG>.</P><P>It will be very helpful if SAP releases this CSV parsing library official like we have for JSON parsing.</P><H2 id="toc-hId--104182442">My Other Blogs:</H2><UL><UL><LI><A href="https://blogs.sap.com/2022/04/27/enhancing-form-of-standard-business-objects/" target="_blank" rel="noopener noreferrer">Enhancing Form of Standard Business Objects</A></LI><LI><A href="https://blogs.sap.com/2022/08/16/intelligent-sales-execution-in-sap-cloud-for-customer/" target="_blank" rel="noopener noreferrer">Intelligent Sales Execution in SAP Cloud for Customer</A></LI><LI><A href="https://blogs.sap.com/2023/07/11/adding-local-image-to-workflow-e-mail-template/" target="_blank" rel="noopener noreferrer">Adding Local Image to C4C Workflow E-mail Template</A></LI><LI><A href="https://community.sap.com/t5/crm-and-cx-blogs-by-members/rules-and-validations-in-sap-c4c/ba-p/13522311" target="_blank">Rules and Validations in SAP C4C - SAP Community</A></LI></UL></UL><P>Regards,</P><P>Abimanyu G</P>2024-11-15T04:32:00.035000+01:00https://community.sap.com/t5/technology-blog-posts-by-members/get-familiar-with-your-first-capm-project-using-cds-graphic-modeler/ba-p/14144965Get familiar with your first CAPM project using CDS graphic modeler2025-07-05T06:17:39.274000+02:00Jyoti_ranjanhttps://community.sap.com/t5/user/viewprofilepage/user-id/2113957<H2 id="toc-hId-1734177386"><STRONG>Getting Started with with your first CAMP project with CDS Graphical Modeler in SAP Business Application Studio.</STRONG></H2><P><SPAN>As SAP developers, we frequently navigate the complexities of code, annotations, and metadata while constructing data models with Core Data Services (CDS). Although the capabilities of CDS are remarkable, handling intricate data models solely through code can be quite daunting particularly in extensive enterprise applications. This is where the CDS Graphical Modeler proves invaluable a revolutionary tool within SAP Business Application Studio (BAS) that enhances visual clarity and efficiency in CDS development.</SPAN></P><H3 id="toc-hId-1666746600">What is CDS Graphical Modeler?</H3><P>Instead of writing<SPAN> .cds </SPAN><SPAN> </SPAN>files manually, we can now model our entities, relationships, and services visually, making it easier to understand and communicate your data architecture.</P><P><STRONG>Lets create a dev space and then dive into the CAPM with cds.</STRONG></P><P><STRONG>Go to <A title="BTP COCKPIT Login" href="https://account.us1.hana.ondemand.com/#/home/welcome" target="_blank" rel="noopener nofollow noreferrer">BTP COCKPIT Login</A> </STRONG></P><P><SPAN>First we need to logon to SAP Business Application Studio, you will see a list of the existing dev spaces:</SPAN></P><P><SPAN>you can use the existing devspace if it is preconfigured else create a devsapce.</SPAN></P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Jyoti_ranjan_1-1749463155915.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/271647i567D16E8AEC5D556/image-size/large?v=v2&px=999" role="button" title="Jyoti_ranjan_1-1749463155915.png" alt="Jyoti_ranjan_1-1749463155915.png" /></span></P><P> </P><P> After you click on create devspace below screen will appear:</P><P> </P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Jyoti_ranjan_0-1749461813292.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/271641iF9AC34B00ABB56E2/image-size/large?v=v2&px=999" role="button" title="Jyoti_ranjan_0-1749461813292.png" alt="Jyoti_ranjan_0-1749461813292.png" /></span></P><P><SPAN>Enter a dev space name, and select "Full Stack Cloud Application" category, then click "Create Dev Space" button to create the dev space.</SPAN></P><P> </P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Jyoti_ranjan_2-1749463528012.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/271649i43A843DC6731152E/image-size/large?v=v2&px=999" role="button" title="Jyoti_ranjan_2-1749463528012.png" alt="Jyoti_ranjan_2-1749463528012.png" /></span></P><P><SPAN>Wait until the newly created dev space is in "RUNNING" status:</SPAN></P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Screenshot 2025-06-09 153555.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/271650i39D484EF11B6ED84/image-size/large?v=v2&px=999" role="button" title="Screenshot 2025-06-09 153555.png" alt="Screenshot 2025-06-09 153555.png" /></span></P><P> <SPAN>Now we can enter the dev space by clicking the dev space name:</SPAN></P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Jyoti_ranjan_3-1749463706203.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/271651i6A7AF4C8D1D27A9E/image-size/large?v=v2&px=999" role="button" title="Jyoti_ranjan_3-1749463706203.png" alt="Jyoti_ranjan_3-1749463706203.png" /></span></P><H1 id="toc-hId-435378620" id="toc-hId-1212067657">Create a CAP Project</H1><P><BR /><SPAN>Now let’s create a sample CAP project using the project wizard. Click “Start from template” from the welcome page and launch the project wizard.</SPAN><BR /><BR /></P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Jyoti_ranjan_0-1749464257619.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/271657i9961AE5EF738952A/image-size/large?v=v2&px=999" role="button" title="Jyoti_ranjan_0-1749464257619.png" alt="Jyoti_ranjan_0-1749464257619.png" /></span></P><P><SPAN>Please select “CAP Project” from the template in the project wizard:</SPAN></P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Jyoti_ranjan_1-1749464299166.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/271658iA74BB5C5DCFF117B/image-size/large?v=v2&px=999" role="button" title="Jyoti_ranjan_1-1749464299166.png" alt="Jyoti_ranjan_1-1749464299166.png" /></span></P><P><SPAN>Click “Start” button and enter the CAP project details in the next page of the project wizard. Please check “Basic Sample Files” and ensure the project wizard to generate sample CDS files for you.</SPAN></P><P> </P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Jyoti_ranjan_2-1749464366247.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/271659i2DA2B18BF4305AB5/image-size/large?v=v2&px=999" role="button" title="Jyoti_ranjan_2-1749464366247.png" alt="Jyoti_ranjan_2-1749464366247.png" /></span></P><P><SPAN>Click “Finish” button to close the wizard and the dev space will refresh again and this time the newly CAP project folder will be in the project tree:</SPAN></P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Jyoti_ranjan_3-1749464418579.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/271661i2608DBC2116F226A/image-size/large?v=v2&px=999" role="button" title="Jyoti_ranjan_3-1749464418579.png" alt="Jyoti_ranjan_3-1749464418579.png" /></span></P><P><SPAN>You can open db/data-model.cds in the project using the code editor:</SPAN></P><P> </P><P> </P>2025-07-05T06:17:39.274000+02:00https://community.sap.com/t5/crm-and-cx-blog-posts-by-members/integrate-github-copilot-with-sap-cloud-application-studio/ba-p/14269045Integrate GitHub Copilot with SAP Cloud Application Studio2025-11-17T08:21:16.388000+01:00Poovihttps://community.sap.com/t5/user/viewprofilepage/user-id/1761043<P><FONT color="#003366"><STRONG><U>Requirement:</U></STRONG><STRONG><U> <BR /></U></STRONG></FONT>To integrate GitHub Copilot with SAP Cloud Application Studio.</P><P><STRONG><U><FONT color="#003366">Introduction:</FONT><BR /></U></STRONG>GitHub Copilot integration in Visual Studio Code offers powerful AI assistance for SAP Cloud Application Studio developers working on SAP C4C. It helps transform natural language prompts into ABSL scripts, automates repetitive coding tasks, and enhances logic building with intelligent suggestions. By streamlining development and reducing manual effort, Copilot boosts productivity and supports faster delivery of high-quality solutions.</P><P><FONT color="#003366"><STRONG><U>Benefits of GitHub Copilot in Visual Studio/Cloud Application Studio</U></STRONG></FONT></P><UL><LI>Supports complex logic building by offering real-time suggestions for conditional flows, loops, and data manipulations in ABSL.</LI><LI>Boosts productivity by reducing time spent on boilerplate code, allowing developers to focus on business-specific requirements.</LI><LI>Improves accuracy by minimizing syntax errors and offering context-aware completions based on SAP C4C development patterns.</LI><LI>Encourages collaboration by making code easier to understand and maintain, especially for teams working across different modules or geographies.</LI></UL><P><FONT color="#003366"><STRONG><U>Sign In with GitHub Account:<BR /></U></STRONG></FONT><U>STEP 1:</U><BR />Click on GitHub Copilot -> Open Chat Window to Sign In</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Poovi_0-1763109633765.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/340472i43C317AD5422D055/image-size/large/is-moderation-mode/true?v=v2&px=999" role="button" title="Poovi_0-1763109633765.png" alt="Poovi_0-1763109633765.png" /></span><U>STEP 2:</U><BR />GitHub Copilot login page will be opened. Click on “Sign up for Copilot Free”</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Poovi_1-1763109633770.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/340473iD480D26840C85AA2/image-size/large/is-moderation-mode/true?v=v2&px=999" role="button" title="Poovi_1-1763109633770.png" alt="Poovi_1-1763109633770.png" /></span><U>STEP 3:</U><BR />Signup page will be opened. Click on “Create an account”.</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Poovi_2-1763109633774.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/340474iEF91FBC8A9AD0E2D/image-size/large/is-moderation-mode/true?v=v2&px=999" role="button" title="Poovi_2-1763109633774.png" alt="Poovi_2-1763109633774.png" /></span><U>STEP 4:</U><BR />Enter user details and create an account.</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Poovi_3-1763109633789.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/340476i20142C65813B54C3/image-size/large/is-moderation-mode/true?v=v2&px=999" role="button" title="Poovi_3-1763109633789.png" alt="Poovi_3-1763109633789.png" /></span><U>STEP 5:</U><BR />Open SDK and click on “Sign In”</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Poovi_4-1763109633799.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/340475iE5F23F0227203EC0/image-size/large/is-moderation-mode/true?v=v2&px=999" role="button" title="Poovi_4-1763109633799.png" alt="Poovi_4-1763109633799.png" /></span><U>STEP 6:</U><BR />Click on “Authorize github”</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Poovi_5-1763109633809.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/340477i913DCD8CB9B3E5DF/image-size/large/is-moderation-mode/true?v=v2&px=999" role="button" title="Poovi_5-1763109633809.png" alt="Poovi_5-1763109633809.png" /></span><U>STEP 7:</U><BR />User can access GitHub copilot now in SAP Cloud Application studio.</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Poovi_6-1763109633815.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/340478iB5CC52EC03AA366A/image-size/large/is-moderation-mode/true?v=v2&px=999" role="button" title="Poovi_6-1763109633815.png" alt="Poovi_6-1763109633815.png" /></span></P><P><FONT color="#003366"><STRONG><U>Open GitHub Chat:<BR /></U></STRONG></FONT>GitHub copilot can be opened in two ways,</P><UL><LI>Separate Chat window.</LI><LI>Copilot assistant in script file.</LI></UL><P><U>1)Separate chat window.<BR /></U>Click on GitHub Copilot -> Open Chat Window</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Poovi_7-1763109633824.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/340479i5B5E59316F2A5839/image-size/large/is-moderation-mode/true?v=v2&px=999" role="button" title="Poovi_7-1763109633824.png" alt="Poovi_7-1763109633824.png" /></span>A copilot chat window will be open separately as shown below.</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Poovi_8-1763109633838.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/340480i218B08E55A26AC9A/image-size/large/is-moderation-mode/true?v=v2&px=999" role="button" title="Poovi_8-1763109633838.png" alt="Poovi_8-1763109633838.png" /></span><U>2)Copilot assistant in script file.<BR /></U>Open script file and click on “Ask Copilot” from the menu option</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Poovi_9-1763109633872.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/340482iF49CFE62BFAC58EA/image-size/large/is-moderation-mode/true?v=v2&px=999" role="button" title="Poovi_9-1763109633872.png" alt="Poovi_9-1763109633872.png" /></span>Copilot chat option will be opened inside the script file.</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Poovi_10-1763109633884.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/340483i6E30A51F3FF3D0ED/image-size/large/is-moderation-mode/true?v=v2&px=999" role="button" title="Poovi_10-1763109633884.png" alt="Poovi_10-1763109633884.png" /></span></P><P><FONT color="#003366"><STRONG><U>Start Typing with Comments or Partial Code:<BR /></U></STRONG></FONT><STRONG>CASE 1: ABSL Scripting Assistance<BR /></STRONG>Copilot helps generate ABSL (Advanced Business Scripting Language) code by interpreting natural language prompts. Whether you're writing BeforeSave, AfterModify, or ValidationOnSave scripts, Copilot can suggest logic structures, syntax, and even error handling patterns, reducing development time and minimizing syntax errors.<BR /><U>Example:</U></P><UL><LI><STRONG>Prompt:</STRONG> “write code to raise an error message, if the email ID is <A href="mailto:testmail@gmail.com" target="_blank" rel="noopener nofollow noreferrer">testmail@gmail.com</A>”</LI></UL><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Poovi_11-1763109633893.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/340481i9A65E61B014B3973/image-size/large/is-moderation-mode/true?v=v2&px=999" role="button" title="Poovi_11-1763109633893.png" alt="Poovi_11-1763109633893.png" /></span>Prompt response:</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Poovi_12-1763109633901.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/340485iB386C910486DD1DD/image-size/large/is-moderation-mode/true?v=v2&px=999" role="button" title="Poovi_12-1763109633901.png" alt="Poovi_12-1763109633901.png" /></span></P><P><STRONG>CASE 2 : Review and refine code<BR /></STRONG>If you're working with legacy or repetitive code, Copilot can help refactor loops, simplify conditions, and remove redundancy. It acts like a virtual reviewer, offering cleaner alternatives and improving overall code quality.<BR />Example:</P><UL><LI><STRONG>Prompt:</STRONG>” Identify the lines of code which has dump issues and fix it.”<BR /><BR />In below screen shot Copilot Identified the inconsistent lines in red and provided fix/suggestions in green color.</LI></UL><P>Prompt response:</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Poovi_13-1763109633913.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/340484i5218B1D4A324C80A/image-size/large/is-moderation-mode/true?v=v2&px=999" role="button" title="Poovi_13-1763109633913.png" alt="Poovi_13-1763109633913.png" /></span></P><P><STRONG>CASE 3: To Explain the code<BR /></STRONG>GitHub Copilot uses AI to understand the context of your code and comments, offering real-time suggestions and explanations. It would help the developers in understanding the code quickly, there by saving the time and efforts for analysis.<BR /><U>Example:<BR /></U></P><UL><LI><STRONG>Prompt:</STRONG> Explain me the selected lines of code</LI></UL><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Poovi_14-1763109633925.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/340486i55A1B9601AADD8D6/image-size/large/is-moderation-mode/true?v=v2&px=999" role="button" title="Poovi_14-1763109633925.png" alt="Poovi_14-1763109633925.png" /></span>Prompt response:</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Poovi_15-1763109633937.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/340489iC107DB9B94AAF66D/image-size/large/is-moderation-mode/true?v=v2&px=999" role="button" title="Poovi_15-1763109633937.png" alt="Poovi_15-1763109633937.png" /></span></P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Poovi_16-1763109633949.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/340488i9933811209851EFF/image-size/large/is-moderation-mode/true?v=v2&px=999" role="button" title="Poovi_16-1763109633949.png" alt="Poovi_16-1763109633949.png" /></span></P><UL><LI><STRONG>Prompt:</STRONG> Explain me the code in the script file</LI></UL><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Poovi_17-1763109633961.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/340487i5C8D5D6A03283274/image-size/large/is-moderation-mode/true?v=v2&px=999" role="button" title="Poovi_17-1763109633961.png" alt="Poovi_17-1763109633961.png" /></span>Prompt response:</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Poovi_18-1763109633972.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/340492i55A4EFAEEA18B58D/image-size/large/is-moderation-mode/true?v=v2&px=999" role="button" title="Poovi_18-1763109633972.png" alt="Poovi_18-1763109633972.png" /></span></P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Poovi_19-1763109633976.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/340490i6851C588426E0CBD/image-size/large/is-moderation-mode/true?v=v2&px=999" role="button" title="Poovi_19-1763109633976.png" alt="Poovi_19-1763109633976.png" /></span></P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Poovi_20-1763109633979.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/340491iD24796AE9DA5D728/image-size/large/is-moderation-mode/true?v=v2&px=999" role="button" title="Poovi_20-1763109633979.png" alt="Poovi_20-1763109633979.png" /></span></P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Poovi_21-1763109633984.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/340493i165B929A7334CBC2/image-size/large/is-moderation-mode/true?v=v2&px=999" role="button" title="Poovi_21-1763109633984.png" alt="Poovi_21-1763109633984.png" /></span></P><P><STRONG>CASE 4: Basic syntax generation<BR /></STRONG>GitHub Copilot can help developers working in SAP Cloud Application Studio by generating basic ABSL (Advanced Business Scripting Language) syntax. It understands the context of business objects and actions, offering ready-to-use code snippets like variable declarations, loops, and conditional statements. This accelerates development and reduces errors, especially for those new to ABSL.</P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Poovi_22-1763109633990.png" style="width: 999px;"><img src="https://community.sap.com/t5/image/serverpage/image-id/340494iE036768DFACBCC47/image-size/large/is-moderation-mode/true?v=v2&px=999" role="button" title="Poovi_22-1763109633990.png" alt="Poovi_22-1763109633990.png" /></span></P><P><U><FONT color="#003366"><STRONG>Conclusion:<BR /></STRONG></FONT></U>Using GitHub Copilot in SAP C4C development streamlines coding by offering intelligent suggestions tailored to the platform’s scripting and extension needs. It boosts developer productivity by reducing repetitive tasks and helping maintain clean, consistent code. Copilot also serves as a valuable learning aid for those new to SAP C4C, guiding them through SDK usage and integration patterns.</P>2025-11-17T08:21:16.388000+01:00