<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>topic Re: Task 7 - Using CQL in an unbound function implementation (July Developer Challenge - &amp;quot;Rever in Application Development and Automation Discussions</title>
    <link>https://community.sap.com/t5/application-development-and-automation-discussions/task-7-using-cql-in-an-unbound-function-implementation-july-developer/m-p/13770883#M2029330</link>
    <description>&lt;P&gt;Hello&amp;nbsp;&lt;a href="https://community.sap.com/t5/user/viewprofilepage/user-id/53"&gt;@qmacro&lt;/a&gt;&amp;nbsp;,&lt;/P&gt;&lt;P&gt;My submission for task 7 :&lt;/P&gt;&lt;P&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="YogSSohanee_0-1721851632273.png" style="width: 686px;"&gt;&lt;img src="https://community.sap.com/t5/image/serverpage/image-id/141229i9608A99B0A2EFC1E/image-dimensions/686x348?v=v2" width="686" height="348" role="button" title="YogSSohanee_0-1721851632273.png" alt="YogSSohanee_0-1721851632273.png" /&gt;&lt;/span&gt;&lt;/P&gt;&lt;P&gt;Odata Call:&lt;/P&gt;&lt;P&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="YogSSohanee_1-1721851783416.png" style="width: 720px;"&gt;&lt;img src="https://community.sap.com/t5/image/serverpage/image-id/141230iC03A96F33A9380A6/image-dimensions/720x202?v=v2" width="720" height="202" role="button" title="YogSSohanee_1-1721851783416.png" alt="YogSSohanee_1-1721851783416.png" /&gt;&lt;/span&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;CDS REPL was a great help to understand the querying with different options. Also your blog&amp;nbsp;&lt;A href="https://qmacro.org/blog/posts/2024/07/12/turning-an-odata-expand-into-a-cds.ql-cql-query-with-a-projection-function-in-cap/" target="_blank" rel="nofollow noopener noreferrer"&gt;Turning an OData expand into a cds.ql CQL query with a projection function in CAP&lt;/A&gt;&lt;SPAN&gt;&amp;nbsp;was a great help too to clear the concepts. Thanks a ton!&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
    <pubDate>Wed, 24 Jul 2024 20:12:34 GMT</pubDate>
    <dc:creator>YogSSohanee</dc:creator>
    <dc:date>2024-07-24T20:12:34Z</dc:date>
    <item>
      <title>Task 7 - Using CQL in an unbound function implementation (July Developer Challenge - "Reverse APIs")</title>
      <link>https://community.sap.com/t5/application-development-and-automation-discussions/task-7-using-cql-in-an-unbound-function-implementation-july-developer/m-p/13767476#M2029253</link>
      <description>&lt;P&gt;This is a task in the&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;A href="https://community.sap.com/t5/application-development-blog-posts/2024-07-quot-reverse-apis-quot-sap-developer-challenge/ba-p/13749653" target="_blank" rel="nofollow noopener"&gt;July Developer Challenge - "Reverse APIs"&lt;/A&gt;.&lt;/P&gt;&lt;P&gt;This task sees you creating a third service, and a first API endpoint within that service. Unlike the previous two services this service will be a more fully formed OData service complete with some sample data. Ready?&lt;/P&gt;&lt;H2&gt;Background&lt;/H2&gt;&lt;P&gt;The previous two services in this month's Developer Challenge,&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;basic&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;and&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;plain, were fairly simple and only contained API endpoints that were based on simple functions and an action. There were no entities defined in the CDS model, no data, and no implicit, out-of-the-box CRUD+Q OData operations involved. Today's task is where that changes.&lt;/P&gt;&lt;H3&gt;Northwind and Northbreeze&lt;/H3&gt;&lt;P&gt;For this task and the rest of the tasks this month (there are 4 more after this one), you'll make available API endpoints that all revolve around a simple data model based off the famous Northwind service, various versions of which are running at&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;A href="https://services.odata.org/" target="_blank" rel="nofollow noopener"&gt;https://services.odata.org&lt;/A&gt;. As you can see from the&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;A href="https://services.odata.org/V4/Northwind/Northwind.svc/" target="_blank" rel="nofollow noopener"&gt;OData V4 Northwind service's service document&lt;/A&gt;&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;there are quite a few "collections", otherwise known by the OData term "entity sets", including:&lt;/P&gt;&lt;UL&gt;&lt;LI&gt;Categories&lt;/LI&gt;&lt;LI&gt;CustomerDemographics&lt;/LI&gt;&lt;LI&gt;Customers&lt;/LI&gt;&lt;LI&gt;Employees&lt;/LI&gt;&lt;LI&gt;Orders&lt;/LI&gt;&lt;LI&gt;Categories&lt;/LI&gt;&lt;LI&gt;Products&lt;/LI&gt;&lt;LI&gt;Regions&lt;/LI&gt;&lt;LI&gt;Shippers&lt;/LI&gt;&lt;LI&gt;Suppliers&lt;/LI&gt;&lt;LI&gt;...&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;I like to keep things simple, and often turn to a simplified version that I like to call "Northbreeze" (&lt;A href="https://www.google.com/search?q=geddit" target="_blank" rel="nofollow noopener"&gt;geddit?&lt;/A&gt;), where I just have three entity types, with relations between them:&lt;/P&gt;&lt;UL&gt;&lt;LI&gt;Categories&lt;/LI&gt;&lt;LI&gt;Products&lt;/LI&gt;&lt;LI&gt;Suppliers&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;I have a live Northbreeze service running at&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;A href="https://qmacro.cfapps.eu10.hana.ondemand.com/northbreeze" target="_blank" rel="nofollow noopener"&gt;https://qmacro.cfapps.eu10.hana.ondemand.com/northbreeze&lt;/A&gt;&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;and this is based on a simple CAP service that I've defined and made available in a GitHub repo at&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;A href="https://github.com/qmacro/northbreeze" target="_blank" rel="nofollow noopener"&gt;qmacro/northbreeze&lt;/A&gt;. As you can see, there's no actual code, there's just:&lt;/P&gt;&lt;UL&gt;&lt;LI&gt;the&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;A href="https://github.com/qmacro/northbreeze/blob/main/db/schema.cds" target="_blank" rel="nofollow noopener"&gt;schema-level definition of Categories, Products and Suppliers&lt;/A&gt;&lt;/LI&gt;&lt;LI&gt;&lt;A href="https://github.com/qmacro/northbreeze/tree/main/db/data" target="_blank" rel="nofollow noopener"&gt;CSV based data&lt;/A&gt;&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;to seed the three entity sets that correspond to those entity types&lt;/LI&gt;&lt;LI&gt;an extremely simple&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;A href="https://github.com/qmacro/northbreeze/blob/main/srv/main.cds" target="_blank" rel="nofollow noopener"&gt;service&lt;/A&gt;&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;exposing those three entity types via direct projections&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;And that's pretty much it. Note that the&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;A href="https://github.com/qmacro/northbreeze/tree/main/db/data" target="_blank" rel="nofollow noopener"&gt;data&lt;/A&gt;&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;reflects as accurately as possible the data in the original Northwind service, i.e. there are&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;A href="https://github.com/qmacro/northbreeze/blob/main/db/data/northwind-Products.csv" target="_blank" rel="nofollow noopener"&gt;77 products&lt;/A&gt;&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;ranging from&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;A href="https://qmacro.cfapps.eu10.hana.ondemand.com/northbreeze/Products/1?$expand=Supplier,Category" target="_blank" rel="nofollow noopener"&gt;Chai, in the Beverages category, from the supplier Exotic Liquids&lt;/A&gt;&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;to&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;A href="https://qmacro.cfapps.eu10.hana.ondemand.com/northbreeze/Products/77?$expand=Supplier,Category" target="_blank" rel="nofollow noopener"&gt;Original Frankfurter grüne Soße, in the Condiments category, from the supplier Plutzer Lebensmittelgroßmärkte AG&lt;/A&gt;.&lt;/P&gt;&lt;P&gt;You can (and I recommend that you do) clone the repo and use that as a starting point for the service for this and the subsequent tasks in this challenge.&lt;/P&gt;&lt;H2&gt;The requirements&lt;/H2&gt;&lt;P&gt;Here are the specific requirements for this task.&lt;/P&gt;&lt;P&gt;The service must be served using the OData V4 protocol, with the (default) path prefix&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;/odata/v4&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;plus the service name&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;northbreeze, i.e.:&lt;/P&gt;&lt;DIV class=""&gt;&lt;PRE&gt;/odata/v4/northbreeze&lt;/PRE&gt;&lt;DIV class=""&gt;&lt;SPAN&gt;You must make an API endpoint available that returns a sort of "product information" string. The endpoint has a single integer parameter&lt;/SPAN&gt;&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN&gt;id&lt;/SPAN&gt;&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN&gt;and the TESTER will make a call to the endpoint with the value of a product ID (it will be&lt;/SPAN&gt;&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;A href="https://qmacro.cfapps.eu10.hana.ondemand.com/northbreeze/Products?$select=ProductID" target="_blank" rel="nofollow noopener"&gt;between 1 and 77&lt;/A&gt;&lt;SPAN&gt;).&lt;/SPAN&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;P&gt;It should return a string, formed thus:&lt;/P&gt;&lt;P&gt;&amp;lt;name of the product&amp;gt; by &amp;lt;name of the supplier&amp;gt;&lt;/P&gt;&lt;P&gt;For example, let's take the&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;A href="https://qmacro.cfapps.eu10.hana.ondemand.com/northbreeze/Products(11)" target="_blank" rel="nofollow noopener"&gt;Northbreeze product with the ID 11&lt;/A&gt;:&lt;/P&gt;&lt;UL&gt;&lt;LI&gt;the product name is&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;A href="https://qmacro.cfapps.eu10.hana.ondemand.com/northbreeze/Products(11)/ProductName" target="_blank" rel="nofollow noopener"&gt;Queso Cabrales&lt;/A&gt;&lt;/LI&gt;&lt;LI&gt;the name of the product's supplier is&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;A href="https://qmacro.cfapps.eu10.hana.ondemand.com/northbreeze/Products(11)/Supplier/CompanyName" target="_blank" rel="nofollow noopener"&gt;Cooperativa de Quesos 'Las Cabras'&lt;/A&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;So the call would be made to:&lt;/P&gt;&lt;DIV class=""&gt;&lt;PRE&gt;/odata/v4/northbreeze/productInfo(&lt;SPAN class=""&gt;id&lt;/SPAN&gt;=11)&lt;/PRE&gt;&lt;DIV class=""&gt;&lt;SPAN&gt;and the expected response should be:&lt;/SPAN&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;DIV class=""&gt;&lt;PRE&gt;{
  &lt;SPAN class=""&gt;"@odata.context"&lt;/SPAN&gt;: &lt;SPAN class=""&gt;&lt;SPAN class=""&gt;"&lt;/SPAN&gt;$metadata#Edm.String&lt;SPAN class=""&gt;"&lt;/SPAN&gt;&lt;/SPAN&gt;,
  &lt;SPAN class=""&gt;"value"&lt;/SPAN&gt;: &lt;SPAN class=""&gt;&lt;SPAN class=""&gt;"&lt;/SPAN&gt;Queso Cabrales by Cooperativa de Quesos 'Las Cabras'&lt;SPAN class=""&gt;"&lt;/SPAN&gt;&lt;/SPAN&gt;
}&lt;/PRE&gt;&lt;DIV class=""&gt;&lt;SPAN&gt;By the way, looking back at the OData query operation URLs for the supplier of&lt;/SPAN&gt;&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN&gt;Queso Cabrales&lt;/SPAN&gt;&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN&gt;just now, did you know that for such scalar properties returned&lt;/SPAN&gt;&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;EM&gt;for OData query or read operations&lt;/EM&gt;&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN&gt;(CompanyName&lt;/SPAN&gt;&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN&gt;in this example) you can get the literal value on its own? Just append&lt;/SPAN&gt;&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN&gt;/$value&lt;/SPAN&gt;&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN&gt;to the URL, so that&lt;/SPAN&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;P&gt;&lt;A href="https://qmacro.cfapps.eu10.hana.ondemand.com/northbreeze/Products(11)/Supplier/CompanyName" target="_blank" rel="nofollow noopener"&gt;https://qmacro.cfapps.eu10.hana.ondemand.com/northbreeze/Products(11)/Supplier/CompanyName&lt;/A&gt;&lt;/P&gt;&lt;P&gt;becomes&lt;/P&gt;&lt;P&gt;&lt;A href="https://qmacro.cfapps.eu10.hana.ondemand.com/northbreeze/Products(11)/Supplier/CompanyName/$value" target="_blank" rel="nofollow noopener"&gt;https://qmacro.cfapps.eu10.hana.ondemand.com/northbreeze/Products(11)/Supplier/CompanyName/$value&lt;/A&gt;&lt;/P&gt;&lt;P&gt;and you get&lt;/P&gt;&lt;DIV class=""&gt;&lt;PRE&gt;Cooperativa de Quesos 'Las Cabras'&lt;/PRE&gt;&lt;DIV class=""&gt;&lt;SPAN&gt;instead of&lt;/SPAN&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;DIV class=""&gt;&lt;PRE&gt;{
  &lt;SPAN class=""&gt;"@odata.context"&lt;/SPAN&gt;: &lt;SPAN class=""&gt;&lt;SPAN class=""&gt;"&lt;/SPAN&gt;../../$metadata#Suppliers(5)/CompanyName&lt;SPAN class=""&gt;"&lt;/SPAN&gt;&lt;/SPAN&gt;,
  &lt;SPAN class=""&gt;"value"&lt;/SPAN&gt;: &lt;SPAN class=""&gt;&lt;SPAN class=""&gt;"&lt;/SPAN&gt;Cooperativa de Quesos 'Las Cabras'&lt;SPAN class=""&gt;"&lt;/SPAN&gt;&lt;/SPAN&gt;
}&lt;/PRE&gt;&lt;/DIV&gt;&lt;H3&gt;The endpoint definition&lt;/H3&gt;&lt;P&gt;As you may have worked out by now, this API endpoint needs to be defined as an unbound function (yes, it could be implemented as a function bound to a particular product but we'll be doing that sort of thing in a later task).&lt;/P&gt;&lt;P&gt;When you have defined the endpoint, you should see evidence of it (productInfo) in the OData metadata, which should look like this (vastly reduced for brevity):&lt;/P&gt;&lt;DIV class=""&gt;&lt;PRE&gt;&amp;lt;?&lt;SPAN class=""&gt;xml&lt;/SPAN&gt;&lt;SPAN class=""&gt; version&lt;/SPAN&gt;=&lt;SPAN class=""&gt;&lt;SPAN class=""&gt;"&lt;/SPAN&gt;1.0&lt;SPAN class=""&gt;"&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN class=""&gt; encoding&lt;/SPAN&gt;=&lt;SPAN class=""&gt;&lt;SPAN class=""&gt;"&lt;/SPAN&gt;utf-8&lt;SPAN class=""&gt;"&lt;/SPAN&gt;&lt;/SPAN&gt;?&amp;gt;
&amp;lt;&lt;SPAN class=""&gt;edmx&lt;/SPAN&gt;&lt;SPAN class=""&gt;:&lt;/SPAN&gt;&lt;SPAN class=""&gt;Edmx&lt;/SPAN&gt; &lt;SPAN class=""&gt;Version&lt;/SPAN&gt;=&lt;SPAN class=""&gt;&lt;SPAN class=""&gt;"&lt;/SPAN&gt;4.0&lt;SPAN class=""&gt;"&lt;/SPAN&gt;&lt;/SPAN&gt; &lt;SPAN class=""&gt;xmlns&lt;/SPAN&gt;&lt;SPAN class=""&gt;:&lt;/SPAN&gt;&lt;SPAN class=""&gt;edmx&lt;/SPAN&gt;=&lt;SPAN class=""&gt;&lt;SPAN class=""&gt;"&lt;/SPAN&gt;http://docs.oasis-open.org/odata/ns/edmx&lt;SPAN class=""&gt;"&lt;/SPAN&gt;&lt;/SPAN&gt;&amp;gt;
  &amp;lt;&lt;SPAN class=""&gt;edmx&lt;/SPAN&gt;&lt;SPAN class=""&gt;:&lt;/SPAN&gt;&lt;SPAN class=""&gt;DataServices&lt;/SPAN&gt;&amp;gt;
    &amp;lt;&lt;SPAN class=""&gt;Schema&lt;/SPAN&gt; &lt;SPAN class=""&gt;Namespace&lt;/SPAN&gt;=&lt;SPAN class=""&gt;&lt;SPAN class=""&gt;"&lt;/SPAN&gt;northbreeze&lt;SPAN class=""&gt;"&lt;/SPAN&gt;&lt;/SPAN&gt; &lt;SPAN class=""&gt;xmlns&lt;/SPAN&gt;=&lt;SPAN class=""&gt;&lt;SPAN class=""&gt;"&lt;/SPAN&gt;http://docs.oasis-open.org/odata/ns/edm&lt;SPAN class=""&gt;"&lt;/SPAN&gt;&lt;/SPAN&gt;&amp;gt;
      &amp;lt;&lt;SPAN class=""&gt;EntityContainer&lt;/SPAN&gt; &lt;SPAN class=""&gt;Name&lt;/SPAN&gt;=&lt;SPAN class=""&gt;&lt;SPAN class=""&gt;"&lt;/SPAN&gt;EntityContainer&lt;SPAN class=""&gt;"&lt;/SPAN&gt;&lt;/SPAN&gt;&amp;gt;
        &amp;lt;&lt;SPAN class=""&gt;EntitySet&lt;/SPAN&gt; &lt;SPAN class=""&gt;Name&lt;/SPAN&gt;=&lt;SPAN class=""&gt;&lt;SPAN class=""&gt;"&lt;/SPAN&gt;Products&lt;SPAN class=""&gt;"&lt;/SPAN&gt;&lt;/SPAN&gt; &lt;SPAN class=""&gt;EntityType&lt;/SPAN&gt;=&lt;SPAN class=""&gt;&lt;SPAN class=""&gt;"&lt;/SPAN&gt;northbreeze.Products&lt;SPAN class=""&gt;"&lt;/SPAN&gt;&lt;/SPAN&gt;&amp;gt;
          &amp;lt;&lt;SPAN class=""&gt;NavigationPropertyBinding&lt;/SPAN&gt; &lt;SPAN class=""&gt;Path&lt;/SPAN&gt;=&lt;SPAN class=""&gt;&lt;SPAN class=""&gt;"&lt;/SPAN&gt;Category&lt;SPAN class=""&gt;"&lt;/SPAN&gt;&lt;/SPAN&gt; &lt;SPAN class=""&gt;Target&lt;/SPAN&gt;=&lt;SPAN class=""&gt;&lt;SPAN class=""&gt;"&lt;/SPAN&gt;Categories&lt;SPAN class=""&gt;"&lt;/SPAN&gt;&lt;/SPAN&gt;/&amp;gt;
          &amp;lt;&lt;SPAN class=""&gt;NavigationPropertyBinding&lt;/SPAN&gt; &lt;SPAN class=""&gt;Path&lt;/SPAN&gt;=&lt;SPAN class=""&gt;&lt;SPAN class=""&gt;"&lt;/SPAN&gt;Supplier&lt;SPAN class=""&gt;"&lt;/SPAN&gt;&lt;/SPAN&gt; &lt;SPAN class=""&gt;Target&lt;/SPAN&gt;=&lt;SPAN class=""&gt;&lt;SPAN class=""&gt;"&lt;/SPAN&gt;Suppliers&lt;SPAN class=""&gt;"&lt;/SPAN&gt;&lt;/SPAN&gt;/&amp;gt;
        &amp;lt;/&lt;SPAN class=""&gt;EntitySet&lt;/SPAN&gt;&amp;gt;
        &amp;lt;&lt;SPAN class=""&gt;EntitySet&lt;/SPAN&gt; &lt;SPAN class=""&gt;Name&lt;/SPAN&gt;=&lt;SPAN class=""&gt;&lt;SPAN class=""&gt;"&lt;/SPAN&gt;Suppliers&lt;SPAN class=""&gt;"&lt;/SPAN&gt;&lt;/SPAN&gt; &lt;SPAN class=""&gt;EntityType&lt;/SPAN&gt;=&lt;SPAN class=""&gt;&lt;SPAN class=""&gt;"&lt;/SPAN&gt;northbreeze.Suppliers&lt;SPAN class=""&gt;"&lt;/SPAN&gt;&lt;/SPAN&gt;&amp;gt;
          &amp;lt;&lt;SPAN class=""&gt;NavigationPropertyBinding&lt;/SPAN&gt; &lt;SPAN class=""&gt;Path&lt;/SPAN&gt;=&lt;SPAN class=""&gt;&lt;SPAN class=""&gt;"&lt;/SPAN&gt;Products&lt;SPAN class=""&gt;"&lt;/SPAN&gt;&lt;/SPAN&gt; &lt;SPAN class=""&gt;Target&lt;/SPAN&gt;=&lt;SPAN class=""&gt;&lt;SPAN class=""&gt;"&lt;/SPAN&gt;Products&lt;SPAN class=""&gt;"&lt;/SPAN&gt;&lt;/SPAN&gt;/&amp;gt;
        &amp;lt;/&lt;SPAN class=""&gt;EntitySet&lt;/SPAN&gt;&amp;gt;
        &amp;lt;&lt;SPAN class=""&gt;FunctionImport&lt;/SPAN&gt; &lt;SPAN class=""&gt;Name&lt;/SPAN&gt;=&lt;SPAN class=""&gt;&lt;SPAN class=""&gt;"&lt;/SPAN&gt;productInfo&lt;SPAN class=""&gt;"&lt;/SPAN&gt;&lt;/SPAN&gt; &lt;SPAN class=""&gt;Function&lt;/SPAN&gt;=&lt;SPAN class=""&gt;&lt;SPAN class=""&gt;"&lt;/SPAN&gt;northbreeze.productInfo&lt;SPAN class=""&gt;"&lt;/SPAN&gt;&lt;/SPAN&gt;/&amp;gt;
      &amp;lt;/&lt;SPAN class=""&gt;EntityContainer&lt;/SPAN&gt;&amp;gt;
      &amp;lt;&lt;SPAN class=""&gt;Function&lt;/SPAN&gt; &lt;SPAN class=""&gt;Name&lt;/SPAN&gt;=&lt;SPAN class=""&gt;&lt;SPAN class=""&gt;"&lt;/SPAN&gt;productInfo&lt;SPAN class=""&gt;"&lt;/SPAN&gt;&lt;/SPAN&gt; &lt;SPAN class=""&gt;IsBound&lt;/SPAN&gt;=&lt;SPAN class=""&gt;&lt;SPAN class=""&gt;"&lt;/SPAN&gt;false&lt;SPAN class=""&gt;"&lt;/SPAN&gt;&lt;/SPAN&gt; &lt;SPAN class=""&gt;IsComposable&lt;/SPAN&gt;=&lt;SPAN class=""&gt;&lt;SPAN class=""&gt;"&lt;/SPAN&gt;false&lt;SPAN class=""&gt;"&lt;/SPAN&gt;&lt;/SPAN&gt;&amp;gt;
        &amp;lt;&lt;SPAN class=""&gt;Parameter&lt;/SPAN&gt; &lt;SPAN class=""&gt;Name&lt;/SPAN&gt;=&lt;SPAN class=""&gt;&lt;SPAN class=""&gt;"&lt;/SPAN&gt;id&lt;SPAN class=""&gt;"&lt;/SPAN&gt;&lt;/SPAN&gt; &lt;SPAN class=""&gt;Type&lt;/SPAN&gt;=&lt;SPAN class=""&gt;&lt;SPAN class=""&gt;"&lt;/SPAN&gt;Edm.Int32&lt;SPAN class=""&gt;"&lt;/SPAN&gt;&lt;/SPAN&gt;/&amp;gt;
        &amp;lt;&lt;SPAN class=""&gt;ReturnType&lt;/SPAN&gt; &lt;SPAN class=""&gt;Type&lt;/SPAN&gt;=&lt;SPAN class=""&gt;&lt;SPAN class=""&gt;"&lt;/SPAN&gt;Edm.String&lt;SPAN class=""&gt;"&lt;/SPAN&gt;&lt;/SPAN&gt;/&amp;gt;
      &amp;lt;/&lt;SPAN class=""&gt;Function&lt;/SPAN&gt;&amp;gt;
    &amp;lt;/&lt;SPAN class=""&gt;Schema&lt;/SPAN&gt;&amp;gt;
  &amp;lt;/&lt;SPAN class=""&gt;edmx&lt;/SPAN&gt;&lt;SPAN class=""&gt;:&lt;/SPAN&gt;&lt;SPAN class=""&gt;DataServices&lt;/SPAN&gt;&amp;gt;
&amp;lt;/&lt;SPAN class=""&gt;edmx&lt;/SPAN&gt;&lt;SPAN class=""&gt;:&lt;/SPAN&gt;&lt;SPAN class=""&gt;Edmx&lt;/SPAN&gt;&amp;gt;&lt;/PRE&gt;&lt;/DIV&gt;&lt;H3&gt;The endpoint implementation&lt;/H3&gt;&lt;P&gt;The idea of this task is to get you using some&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;A href="https://cap.cloud.sap/docs/cds/cql" target="_blank" rel="nofollow noopener"&gt;CQL&lt;/A&gt;. In other words, you'll have to write a simple implementation for this unbound function, writing a handler for the&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;A href="https://cap.cloud.sap/docs/guides/providing-services#hooks-on-before-after" target="_blank" rel="nofollow noopener"&gt;on hook&lt;/A&gt;&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;as usual, for the&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;productInfo&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;event.&lt;/P&gt;&lt;H4&gt;CQL&lt;/H4&gt;&lt;P&gt;If you're not sure where to start, I'd recommend the&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;A href="https://cap.cloud.sap/docs/node.js/cds-ql" target="_blank" rel="nofollow noopener"&gt;Querying in JavaScript&lt;/A&gt;&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;section of Capire, in particular the&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;A href="https://cap.cloud.sap/docs/node.js/cds-ql#select" target="_blank" rel="nofollow noopener"&gt;SELECT class&lt;/A&gt;. Within that&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;SELECT&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;section, you may want to pay particular attention to the following properties:&lt;/P&gt;&lt;UL&gt;&lt;LI&gt;&lt;A href="https://cap.cloud.sap/docs/node.js/cds-ql#one" target="_blank" rel="nofollow noopener"&gt;one&lt;/A&gt;&lt;/LI&gt;&lt;LI&gt;&lt;A href="https://cap.cloud.sap/docs/node.js/cds-ql#select-from" target="_blank" rel="nofollow noopener"&gt;from&lt;/A&gt;&lt;/LI&gt;&lt;LI&gt;&lt;A href="https://cap.cloud.sap/docs/node.js/cds-ql#columns" target="_blank" rel="nofollow noopener"&gt;columns&lt;/A&gt;&lt;/LI&gt;&lt;LI&gt;&lt;A href="https://cap.cloud.sap/docs/node.js/cds-ql#where" target="_blank" rel="nofollow noopener"&gt;where&lt;/A&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;In particular, you'll have to work out how to get a property of a related entity. In other words, how do you express what you want, using the facilities such as path expressions or projection functions described in the&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;A href="https://cap.cloud.sap/docs/node.js/cds-ql#columns" target="_blank" rel="nofollow noopener"&gt;columns&lt;/A&gt;&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;section. On this topic, you may find this blog post helpful:&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;A href="https://qmacro.org/blog/posts/2024/07/12/turning-an-odata-expand-into-a-cds.ql-cql-query-with-a-projection-function-in-cap/" target="_blank" rel="nofollow noopener"&gt;Turning an OData expand into a cds.ql CQL query with a projection function in CAP&lt;/A&gt;.&lt;/P&gt;&lt;H4&gt;Using async/await&lt;/H4&gt;&lt;P&gt;One more tip: Up until now, you've defined your JavaScript function based handlers for functions and actions in quite a straightforward way. But now you're about to use the&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;A href="https://cap.cloud.sap/docs/node.js/cds-ql#select" target="_blank" rel="nofollow noopener"&gt;SELECT&lt;/A&gt;&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;class, which by itself&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;EM&gt;defines&lt;/EM&gt;&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;a query. It doesn't run it directly. If you read the&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;A href="https://cap.cloud.sap/docs/node.js/cds-ql#executing-queries" target="_blank" rel="nofollow noopener"&gt;Executing Queries&lt;/A&gt;&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;section of Capire you'll see that "&lt;EM&gt;you can just await a constructed query, which by default passes the query to cds.db.run()&lt;/EM&gt;". That means you can use&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;await&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;in front of your&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;SELECT&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;expression.&lt;/P&gt;&lt;P&gt;But that in turn means that your handler function needs to be defined as an asynchronous one, with&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;async. If you're looking for some examples or inspiration, remember that there are some great CAP samples in the&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;A href="https://github.com/SAP-samples" target="_blank" rel="nofollow noopener"&gt;sap-samples&lt;/A&gt;&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;org on GitHub. And remember also that GitHub has an excellent search mechanism, where you can express detailed contextual searches, like this one:&lt;/P&gt;&lt;P&gt;&lt;A href="https://github.com/search?q=org%3Asap-samples+language%3Ajs+%22await+SELECT%22+AND+%28path%3A%2Fsrv%2F%29&amp;amp;type=code" target="_blank" rel="nofollow noopener"&gt;org:sap-samples language:js "await SELECT" AND (path:/srv/)&lt;/A&gt;&lt;/P&gt;&lt;P&gt;Don't you just love it when you come across a well thought out URL scheme for this sort of search facility? Beautiful.&lt;/P&gt;&lt;H4&gt;Setting up for CQL&lt;/H4&gt;&lt;P&gt;Note that also, for this handler function and some of the subsequent ones in this service, you'll need a connection to the database layer, and a 'handle' on the&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;Products&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;entity definition (to use in your&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;SELECT&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;expressions, specifically with the&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;.from()&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;method). You can just use this classic pair of constant definitions, before you start to define your&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;on&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;handler:&lt;/P&gt;&lt;DIV class=""&gt;&lt;PRE&gt;&lt;SPAN class=""&gt;const&lt;/SPAN&gt; &lt;SPAN class=""&gt;db&lt;/SPAN&gt; &lt;SPAN class=""&gt;=&lt;/SPAN&gt; &lt;SPAN class=""&gt;await&lt;/SPAN&gt; &lt;SPAN class=""&gt;cds&lt;/SPAN&gt;&lt;SPAN class=""&gt;.&lt;/SPAN&gt;&lt;SPAN class=""&gt;connect&lt;/SPAN&gt;&lt;SPAN class=""&gt;.&lt;/SPAN&gt;&lt;SPAN class=""&gt;to&lt;/SPAN&gt;&lt;SPAN class=""&gt;(&lt;/SPAN&gt;&lt;SPAN class=""&gt;'db'&lt;/SPAN&gt;&lt;SPAN class=""&gt;)&lt;/SPAN&gt;
&lt;SPAN class=""&gt;const&lt;/SPAN&gt; &lt;SPAN class=""&gt;{&lt;/SPAN&gt; Products &lt;SPAN class=""&gt;}&lt;/SPAN&gt; &lt;SPAN class=""&gt;=&lt;/SPAN&gt; &lt;SPAN class=""&gt;db&lt;/SPAN&gt;&lt;SPAN class=""&gt;.&lt;/SPAN&gt;&lt;SPAN class=""&gt;entities&lt;/SPAN&gt;&lt;/PRE&gt;&lt;/DIV&gt;&lt;H2&gt;Submitting to the TESTER&lt;/H2&gt;&lt;P&gt;Now you're ready to submit your CANDIDATE service, with this new API endpoint, to the TESTER!&lt;/P&gt;&lt;H3&gt;The payload&lt;/H3&gt;&lt;P&gt;The task identifier you need to supply in the payload of your submission is:&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;STRONG&gt;northbreeze-productInfo&lt;/STRONG&gt;.&lt;/P&gt;&lt;P&gt;You'll have already done this sort of thing&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;A href="https://community.sap.com/t5/application-development-discussions/july-developer-challenge-quot-reverse-apis-quot-task-1-your-first-service/m-p/13752205" target="_blank" rel="nofollow noopener"&gt;previously&lt;/A&gt;&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;so just head back there for the more detailed instructions if you need them, or to the the section titled "&lt;A href="https://community.sap.com/t5/application-development-blog-posts/2024-07-quot-reverse-apis-quot-sap-developer-challenge/ba-p/13749653#toc-hId--553513390" target="_blank" rel="nofollow noopener"&gt;The Tester service, and making a test request&lt;/A&gt;" in the&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;A href="https://community.sap.com/t5/application-development-blog-posts/2024-07-quot-reverse-apis-quot-sap-developer-challenge/ba-p/13749653" target="_blank" rel="nofollow noopener"&gt;main challenge blog post&lt;/A&gt;.&lt;/P&gt;&lt;P&gt;You'll need to submit a JSON payload like this:&lt;/P&gt;&lt;DIV class=""&gt;&lt;PRE&gt;{
  &lt;SPAN class=""&gt;"communityid"&lt;/SPAN&gt;: &lt;SPAN class=""&gt;&lt;SPAN class=""&gt;"&lt;/SPAN&gt;&amp;lt;your-community-id&amp;gt;&lt;SPAN class=""&gt;"&lt;/SPAN&gt;&lt;/SPAN&gt;,
  &lt;SPAN class=""&gt;"serviceurl"&lt;/SPAN&gt;: &lt;SPAN class=""&gt;&lt;SPAN class=""&gt;"&lt;/SPAN&gt;&amp;lt;the-URL-of-your-service&amp;gt;&lt;SPAN class=""&gt;"&lt;/SPAN&gt;&lt;/SPAN&gt;,
  &lt;SPAN class=""&gt;"task"&lt;/SPAN&gt;: &lt;SPAN class=""&gt;&lt;SPAN class=""&gt;"&lt;/SPAN&gt;northbreeze-productInfo&lt;SPAN class=""&gt;"&lt;/SPAN&gt;&lt;/SPAN&gt;
}&lt;/PRE&gt;&lt;DIV class=""&gt;&lt;SPAN&gt;And, just as with the previous (and all further tasks):&lt;/SPAN&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;UL&gt;&lt;LI&gt;&lt;P&gt;the value for the&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;communityid&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;property should be your ID on this SAP Community platform (e.g. mine is "qmacro")&lt;/P&gt;&lt;/LI&gt;&lt;LI&gt;&lt;P&gt;the value for the&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;serviceurl&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;property should be the absolute URL (i.e. including the scheme), of your CANDIDATE&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;STRONG&gt;service&lt;/STRONG&gt;&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;which&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;EM&gt;contains&lt;/EM&gt;&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;the API endpoint (see&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;A href="https://community.sap.com/t5/application-development-blog-posts/2024-07-quot-reverse-apis-quot-sap-developer-challenge/ba-p/13749653#toc-hId--356999885" target="_blank" rel="nofollow noopener"&gt;&lt;span class="lia-unicode-emoji" title=":information:"&gt;ℹ️&lt;/span&gt;&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;A note on URLs and services&lt;/A&gt;).&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;That's it!&lt;/P&gt;&lt;H2&gt;Logging of test results&lt;/H2&gt;&lt;P&gt;Remember that you can check on your progress, and the progress of your fellow participants - all requests are logged and are available in an entity set served by the TESTER service. The entity set URL is&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;A href="https://developer-challenge-2024-07.cfapps.eu10.hana.ondemand.com/tester/Testlog" target="_blank" rel="nofollow noopener"&gt;https://developer-challenge-2024-07.cfapps.eu10.hana.ondemand.com/tester/Testlog&lt;/A&gt;&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;and being an OData V4 entity set, all the normal OData system query options are available to you for digging into that information.&lt;/P&gt;&lt;P&gt;Until the next task, have fun, and if you have any questions or comments, leave them below!&lt;/P&gt;</description>
      <pubDate>Mon, 22 Jul 2024 10:21:46 GMT</pubDate>
      <guid>https://community.sap.com/t5/application-development-and-automation-discussions/task-7-using-cql-in-an-unbound-function-implementation-july-developer/m-p/13767476#M2029253</guid>
      <dc:creator>qmacro</dc:creator>
      <dc:date>2024-07-22T10:21:46Z</dc:date>
    </item>
    <item>
      <title>Re: Task 7 - Using CQL in an unbound function implementation (July Developer Challenge - "Rever</title>
      <link>https://community.sap.com/t5/application-development-and-automation-discussions/task-7-using-cql-in-an-unbound-function-implementation-july-developer/m-p/13768044#M2029262</link>
      <description>&lt;P&gt;I'm trying to follow the examples, but keep getting&lt;/P&gt;&lt;P&gt;&lt;SPAN&gt;Expected argument 'target' to be an entity path string, a CSN definition, a {ref}, a {SELECT}, or a {SET}&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN&gt;from my&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;&lt;LI-CODE lang="bash"&gt;let result = await SELECT ...&lt;/LI-CODE&gt;&lt;P&gt;I also got stuck for a while before I found that the word select is case sensitive !&lt;/P&gt;</description>
      <pubDate>Mon, 22 Jul 2024 14:45:41 GMT</pubDate>
      <guid>https://community.sap.com/t5/application-development-and-automation-discussions/task-7-using-cql-in-an-unbound-function-implementation-july-developer/m-p/13768044#M2029262</guid>
      <dc:creator>mwn</dc:creator>
      <dc:date>2024-07-22T14:45:41Z</dc:date>
    </item>
    <item>
      <title>Re: Task 7 - Using CQL in an unbound function implementation (July Developer Challenge - "Rever</title>
      <link>https://community.sap.com/t5/application-development-and-automation-discussions/task-7-using-cql-in-an-unbound-function-implementation-july-developer/m-p/13768053#M2029264</link>
      <description>&lt;P&gt;Thanks for digging in! Yes, SELECT is, well, upper case. Working thru this stuff helps cement those small but important details for us &lt;span class="lia-unicode-emoji" title=":thumbs_up:"&gt;👍&lt;/span&gt;&lt;/P&gt;</description>
      <pubDate>Mon, 22 Jul 2024 14:53:54 GMT</pubDate>
      <guid>https://community.sap.com/t5/application-development-and-automation-discussions/task-7-using-cql-in-an-unbound-function-implementation-july-developer/m-p/13768053#M2029264</guid>
      <dc:creator>qmacro</dc:creator>
      <dc:date>2024-07-22T14:53:54Z</dc:date>
    </item>
    <item>
      <title>Re: Task 7 - Using CQL in an unbound function implementation (July Developer Challenge - "Rever</title>
      <link>https://community.sap.com/t5/application-development-and-automation-discussions/task-7-using-cql-in-an-unbound-function-implementation-july-developer/m-p/13768088#M2029265</link>
      <description>&lt;P&gt;My Submission for task 7.&lt;/P&gt;&lt;P&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Alpesa1990_0-1721663849206.png" style="width: 400px;"&gt;&lt;img src="https://community.sap.com/t5/image/serverpage/image-id/140068i0B5DFE2C6A3FD042/image-size/medium?v=v2&amp;amp;px=400" role="button" title="Alpesa1990_0-1721663849206.png" alt="Alpesa1990_0-1721663849206.png" /&gt;&lt;/span&gt;&lt;/P&gt;&lt;P&gt;Another funny task!&lt;/P&gt;</description>
      <pubDate>Mon, 22 Jul 2024 15:58:09 GMT</pubDate>
      <guid>https://community.sap.com/t5/application-development-and-automation-discussions/task-7-using-cql-in-an-unbound-function-implementation-july-developer/m-p/13768088#M2029265</guid>
      <dc:creator>Alpesa1990</dc:creator>
      <dc:date>2024-07-22T15:58:09Z</dc:date>
    </item>
    <item>
      <title>Re: Task 7 - Using CQL in an unbound function implementation (July Developer Challenge - "Rever</title>
      <link>https://community.sap.com/t5/application-development-and-automation-discussions/task-7-using-cql-in-an-unbound-function-implementation-july-developer/m-p/13768119#M2029266</link>
      <description>&lt;P&gt;&lt;span class="lia-unicode-emoji" title=":party_popper:"&gt;🎉&lt;/span&gt;&lt;/P&gt;</description>
      <pubDate>Mon, 22 Jul 2024 16:29:20 GMT</pubDate>
      <guid>https://community.sap.com/t5/application-development-and-automation-discussions/task-7-using-cql-in-an-unbound-function-implementation-july-developer/m-p/13768119#M2029266</guid>
      <dc:creator>qmacro</dc:creator>
      <dc:date>2024-07-22T16:29:20Z</dc:date>
    </item>
    <item>
      <title>Re: Task 7 - Using CQL in an unbound function implementation (July Developer Challenge - "Rever</title>
      <link>https://community.sap.com/t5/application-development-and-automation-discussions/task-7-using-cql-in-an-unbound-function-implementation-july-developer/m-p/13768250#M2029269</link>
      <description>&lt;P&gt;Here's my submission. That was a great learning experience.&lt;/P&gt;&lt;P&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="MK_0-1721679616406.png" style="width: 400px;"&gt;&lt;img src="https://community.sap.com/t5/image/serverpage/image-id/140135i0974E8A07BF5C9EE/image-size/medium?v=v2&amp;amp;px=400" role="button" title="MK_0-1721679616406.png" alt="MK_0-1721679616406.png" /&gt;&lt;/span&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Mon, 22 Jul 2024 20:26:27 GMT</pubDate>
      <guid>https://community.sap.com/t5/application-development-and-automation-discussions/task-7-using-cql-in-an-unbound-function-implementation-july-developer/m-p/13768250#M2029269</guid>
      <dc:creator>M-K</dc:creator>
      <dc:date>2024-07-22T20:26:27Z</dc:date>
    </item>
    <item>
      <title>Re: Task 7 - Using CQL in an unbound function implementation (July Developer Challenge - "Rever</title>
      <link>https://community.sap.com/t5/application-development-and-automation-discussions/task-7-using-cql-in-an-unbound-function-implementation-july-developer/m-p/13768555#M2029277</link>
      <description>&lt;P&gt;That's great to hear, thanks!&lt;/P&gt;</description>
      <pubDate>Tue, 23 Jul 2024 05:20:52 GMT</pubDate>
      <guid>https://community.sap.com/t5/application-development-and-automation-discussions/task-7-using-cql-in-an-unbound-function-implementation-july-developer/m-p/13768555#M2029277</guid>
      <dc:creator>qmacro</dc:creator>
      <dc:date>2024-07-23T05:20:52Z</dc:date>
    </item>
    <item>
      <title>Re: Task 7 - Using CQL in an unbound function implementation (July Developer Challenge - "Rever</title>
      <link>https://community.sap.com/t5/application-development-and-automation-discussions/task-7-using-cql-in-an-unbound-function-implementation-july-developer/m-p/13768569#M2029280</link>
      <description>&lt;P&gt;Phew, finally caught up!&lt;/P&gt;&lt;P&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Liyon_SV_0-1721709516507.png" style="width: 400px;"&gt;&lt;img src="https://community.sap.com/t5/image/serverpage/image-id/140289iAE694F9D6A5B1952/image-size/medium?v=v2&amp;amp;px=400" role="button" title="Liyon_SV_0-1721709516507.png" alt="Liyon_SV_0-1721709516507.png" /&gt;&lt;/span&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Tue, 23 Jul 2024 05:42:00 GMT</pubDate>
      <guid>https://community.sap.com/t5/application-development-and-automation-discussions/task-7-using-cql-in-an-unbound-function-implementation-july-developer/m-p/13768569#M2029280</guid>
      <dc:creator>Liyon_SV</dc:creator>
      <dc:date>2024-07-23T05:42:00Z</dc:date>
    </item>
    <item>
      <title>Re: Task 7 - Using CQL in an unbound function implementation (July Developer Challenge - "Rever</title>
      <link>https://community.sap.com/t5/application-development-and-automation-discussions/task-7-using-cql-in-an-unbound-function-implementation-july-developer/m-p/13769165#M2029285</link>
      <description>&lt;P&gt;Im running into an issue and getting a little stuck. Do you have any tips?&lt;/P&gt;&lt;P&gt;If I test the developed services with cds watch 'local' in BAS then I get a succesfull answer.&lt;/P&gt;&lt;P&gt;When I deploy to cloud foundry I get an sqlite error that the CompanyName column of Suppliers is not present.&lt;/P&gt;&lt;P&gt;If I expand the standard Products odata to CompanyName then it does work...&lt;/P&gt;&lt;P&gt;So it seems that sqlite is not putting up with my SELECT statement in my function.&lt;/P&gt;&lt;P&gt;Any idea?&lt;/P&gt;</description>
      <pubDate>Tue, 23 Jul 2024 11:35:28 GMT</pubDate>
      <guid>https://community.sap.com/t5/application-development-and-automation-discussions/task-7-using-cql-in-an-unbound-function-implementation-july-developer/m-p/13769165#M2029285</guid>
      <dc:creator>mxmw</dc:creator>
      <dc:date>2024-07-23T11:35:28Z</dc:date>
    </item>
    <item>
      <title>Re: Task 7 - Using CQL in an unbound function implementation (July Developer Challenge - "Rever</title>
      <link>https://community.sap.com/t5/application-development-and-automation-discussions/task-7-using-cql-in-an-unbound-function-implementation-july-developer/m-p/13769179#M2029286</link>
      <description>&lt;P&gt;Another exciting task filled with lots of learning. This time CDS REPL was my buddy, such an awesome tool it is.&lt;/P&gt;&lt;P&gt;Here's my submission for the task -&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="sudarshan_b_0-1721735824623.png" style="width: 400px;"&gt;&lt;img src="https://community.sap.com/t5/image/serverpage/image-id/140609i4583C511B5F286FB/image-size/medium?v=v2&amp;amp;px=400" role="button" title="sudarshan_b_0-1721735824623.png" alt="sudarshan_b_0-1721735824623.png" /&gt;&lt;/span&gt;&lt;/P&gt;&lt;P&gt;Thank you.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Tue, 23 Jul 2024 11:58:00 GMT</pubDate>
      <guid>https://community.sap.com/t5/application-development-and-automation-discussions/task-7-using-cql-in-an-unbound-function-implementation-july-developer/m-p/13769179#M2029286</guid>
      <dc:creator>sudarshan_b</dc:creator>
      <dc:date>2024-07-23T11:58:00Z</dc:date>
    </item>
    <item>
      <title>Re: Task 7 - Using CQL in an unbound function implementation (July Developer Challenge - "Rever</title>
      <link>https://community.sap.com/t5/application-development-and-automation-discussions/task-7-using-cql-in-an-unbound-function-implementation-july-developer/m-p/13769605#M2029293</link>
      <description>&lt;P&gt;My submission for task 7.&lt;/P&gt;&lt;P&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="MioYasutake_0-1721768233541.png" style="width: 999px;"&gt;&lt;img src="https://community.sap.com/t5/image/serverpage/image-id/140761i2F56CB1336FFBC6A/image-size/large?v=v2&amp;amp;px=999" role="button" title="MioYasutake_0-1721768233541.png" alt="MioYasutake_0-1721768233541.png" /&gt;&lt;/span&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Tue, 23 Jul 2024 20:57:20 GMT</pubDate>
      <guid>https://community.sap.com/t5/application-development-and-automation-discussions/task-7-using-cql-in-an-unbound-function-implementation-july-developer/m-p/13769605#M2029293</guid>
      <dc:creator>MioYasutake</dc:creator>
      <dc:date>2024-07-23T20:57:20Z</dc:date>
    </item>
    <item>
      <title>Re: Task 7 - Using CQL in an unbound function implementation (July Developer Challenge - "Rever</title>
      <link>https://community.sap.com/t5/application-development-and-automation-discussions/task-7-using-cql-in-an-unbound-function-implementation-july-developer/m-p/13769614#M2029296</link>
      <description>&lt;P&gt;&lt;SPAN&gt;While implementing an event handler, I noticed that requests to existing entities such as Products and Suppliers, stopped working with a message&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN&gt;"Service "northbreeze" has no handler for "READ northbreeze.Products"."&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN&gt;This occurs as soon as I add the srv/main.js file.&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="MioYasutake_2-1721769439263.png" style="width: 999px;"&gt;&lt;img src="https://community.sap.com/t5/image/serverpage/image-id/140765i82FB96EC86A15E74/image-size/large?v=v2&amp;amp;px=999" role="button" title="MioYasutake_2-1721769439263.png" alt="MioYasutake_2-1721769439263.png" /&gt;&lt;/span&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Tue, 23 Jul 2024 21:17:27 GMT</pubDate>
      <guid>https://community.sap.com/t5/application-development-and-automation-discussions/task-7-using-cql-in-an-unbound-function-implementation-july-developer/m-p/13769614#M2029296</guid>
      <dc:creator>MioYasutake</dc:creator>
      <dc:date>2024-07-23T21:17:27Z</dc:date>
    </item>
    <item>
      <title>Re: Task 7 - Using CQL in an unbound function implementation (July Developer Challenge - "Rever</title>
      <link>https://community.sap.com/t5/application-development-and-automation-discussions/task-7-using-cql-in-an-unbound-function-implementation-july-developer/m-p/13769763#M2029298</link>
      <description>&lt;P&gt;Hello DJ&amp;nbsp;&lt;a href="https://community.sap.com/t5/user/viewprofilepage/user-id/53"&gt;@qmacro&lt;/a&gt;,&lt;/P&gt;&lt;P&gt;Tried the repl to build the query and it was fun. Never had to set the debugger to dig into any error.&lt;/P&gt;&lt;P&gt;REPL is a great find.&lt;/P&gt;&lt;LI-CODE lang="json"&gt;{
ID: "f40ee4c1-8b95-4591-a0cc-4590cebb96ec",
task: "northbreeze-productinfo",
result: "PASS",
createdAt: "2024-07-23T09:49:27.657Z",
createdBy: "anonymous",
modifiedAt: "2024-07-23T09:49:27.657Z",
modifiedBy: "anonymous",
serviceurl: "https://northbreeze-main.cfapps.us10-001.hana.ondemand.com/odata/v4/northbreeze",
communityid: "cguttikonda24"
}
]&lt;/LI-CODE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Wed, 24 Jul 2024 04:16:14 GMT</pubDate>
      <guid>https://community.sap.com/t5/application-development-and-automation-discussions/task-7-using-cql-in-an-unbound-function-implementation-july-developer/m-p/13769763#M2029298</guid>
      <dc:creator>cguttikonda24</dc:creator>
      <dc:date>2024-07-24T04:16:14Z</dc:date>
    </item>
    <item>
      <title>Re: Task 7 - Using CQL in an unbound function implementation (July Developer Challenge - "Rever</title>
      <link>https://community.sap.com/t5/application-development-and-automation-discussions/task-7-using-cql-in-an-unbound-function-implementation-july-developer/m-p/13769885#M2029299</link>
      <description>&lt;P&gt;Excellent!&lt;/P&gt;</description>
      <pubDate>Wed, 24 Jul 2024 06:41:18 GMT</pubDate>
      <guid>https://community.sap.com/t5/application-development-and-automation-discussions/task-7-using-cql-in-an-unbound-function-implementation-july-developer/m-p/13769885#M2029299</guid>
      <dc:creator>qmacro</dc:creator>
      <dc:date>2024-07-24T06:41:18Z</dc:date>
    </item>
    <item>
      <title>Re: Task 7 - Using CQL in an unbound function implementation (July Developer Challenge - "Rever</title>
      <link>https://community.sap.com/t5/application-development-and-automation-discussions/task-7-using-cql-in-an-unbound-function-implementation-july-developer/m-p/13769887#M2029300</link>
      <description>&lt;P&gt;Super, that's great to hear!&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Wed, 24 Jul 2024 06:41:54 GMT</pubDate>
      <guid>https://community.sap.com/t5/application-development-and-automation-discussions/task-7-using-cql-in-an-unbound-function-implementation-july-developer/m-p/13769887#M2029300</guid>
      <dc:creator>qmacro</dc:creator>
      <dc:date>2024-07-24T06:41:54Z</dc:date>
    </item>
    <item>
      <title>Re: Task 7 - Using CQL in an unbound function implementation (July Developer Challenge - "Rever</title>
      <link>https://community.sap.com/t5/application-development-and-automation-discussions/task-7-using-cql-in-an-unbound-function-implementation-july-developer/m-p/13769891#M2029301</link>
      <description>&lt;P&gt;Good work!&lt;/P&gt;</description>
      <pubDate>Wed, 24 Jul 2024 06:42:18 GMT</pubDate>
      <guid>https://community.sap.com/t5/application-development-and-automation-discussions/task-7-using-cql-in-an-unbound-function-implementation-july-developer/m-p/13769891#M2029301</guid>
      <dc:creator>qmacro</dc:creator>
      <dc:date>2024-07-24T06:42:18Z</dc:date>
    </item>
    <item>
      <title>Re: Task 7 - Using CQL in an unbound function implementation (July Developer Challenge - "Rever</title>
      <link>https://community.sap.com/t5/application-development-and-automation-discussions/task-7-using-cql-in-an-unbound-function-implementation-july-developer/m-p/13770075#M2029305</link>
      <description>&lt;P&gt;BTW are you still stuck? Let us know, and if so, also provide a bit more info on what you were doing when you got the "Expected ..." error. Good luck!&lt;/P&gt;</description>
      <pubDate>Wed, 24 Jul 2024 08:42:20 GMT</pubDate>
      <guid>https://community.sap.com/t5/application-development-and-automation-discussions/task-7-using-cql-in-an-unbound-function-implementation-july-developer/m-p/13770075#M2029305</guid>
      <dc:creator>qmacro</dc:creator>
      <dc:date>2024-07-24T08:42:20Z</dc:date>
    </item>
    <item>
      <title>Re: Task 7 - Using CQL in an unbound function implementation (July Developer Challenge - "Rever</title>
      <link>https://community.sap.com/t5/application-development-and-automation-discussions/task-7-using-cql-in-an-unbound-function-implementation-july-developer/m-p/13770083#M2029307</link>
      <description>&lt;P&gt;I cleaned my code and I changed my setup for CQL and it started working&amp;nbsp;&lt;span class="lia-unicode-emoji" title=":party_popper:"&gt;🎉&lt;/span&gt;&lt;/P&gt;&lt;P&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="mxmw_0-1721810697531.png" style="width: 400px;"&gt;&lt;img src="https://community.sap.com/t5/image/serverpage/image-id/140926iD4A002A27FC60F6B/image-size/medium?v=v2&amp;amp;px=400" role="button" title="mxmw_0-1721810697531.png" alt="mxmw_0-1721810697531.png" /&gt;&lt;/span&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Wed, 24 Jul 2024 08:45:07 GMT</pubDate>
      <guid>https://community.sap.com/t5/application-development-and-automation-discussions/task-7-using-cql-in-an-unbound-function-implementation-july-developer/m-p/13770083#M2029307</guid>
      <dc:creator>mxmw</dc:creator>
      <dc:date>2024-07-24T08:45:07Z</dc:date>
    </item>
    <item>
      <title>Re: Task 7 - Using CQL in an unbound function implementation (July Developer Challenge - "Rever</title>
      <link>https://community.sap.com/t5/application-development-and-automation-discussions/task-7-using-cql-in-an-unbound-function-implementation-july-developer/m-p/13770093#M2029308</link>
      <description>&lt;P&gt;Hi there - can you supply more info. When does the sqlite error occur, what are you requesting? It's hard to guess what the problem might be without this sort of info. Is the service (in CF) available publicly, and if so, what is the URL (so we can check)? Cheers!&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Wed, 24 Jul 2024 08:52:35 GMT</pubDate>
      <guid>https://community.sap.com/t5/application-development-and-automation-discussions/task-7-using-cql-in-an-unbound-function-implementation-july-developer/m-p/13770093#M2029308</guid>
      <dc:creator>qmacro</dc:creator>
      <dc:date>2024-07-24T08:52:35Z</dc:date>
    </item>
    <item>
      <title>Re: Task 7 - Using CQL in an unbound function implementation (July Developer Challenge - "Rever</title>
      <link>https://community.sap.com/t5/application-development-and-automation-discussions/task-7-using-cql-in-an-unbound-function-implementation-july-developer/m-p/13770109#M2029310</link>
      <description>&lt;P&gt;Excellent, well done!&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Wed, 24 Jul 2024 09:05:28 GMT</pubDate>
      <guid>https://community.sap.com/t5/application-development-and-automation-discussions/task-7-using-cql-in-an-unbound-function-implementation-july-developer/m-p/13770109#M2029310</guid>
      <dc:creator>qmacro</dc:creator>
      <dc:date>2024-07-24T09:05:28Z</dc:date>
    </item>
  </channel>
</rss>

