cancel
Showing results for 
Search instead for 
Did you mean: 

SAP MDK - Entities, Navigations and Fields

vhsbc92
Explorer
0 Kudos
310

Hello community,

I would like to share an issue I encountered with entities and their navigation fields.

I have two entities:

  • cust_Turmas: Retrieves data from a class.
  • cust_Instrutores: Retrieves data from instructors.

There is also a navigation from cust_Turmas to cust_Instrutores, which is called cust_Inst1Nav.

Here is the filter used to retrieve the data using OData:

$select:externalCode,externalName,cust_Inst1Nav/cust_fname,cust_Inst1Nav/cust_lname
$expand:cust_Inst1Nav
$filter:externalCode eq 235

The URL parameter is:

<BASE_URL>/?$select=externalCode,externalName,cust_Inst1Nav/cust_fname,cust_Inst1Nav/cust_lname&$expand=cust_Inst1Nav&$filter=externalCode eq 235

The data retrieved by the query is:

{
  "@odata.context": "$metadata#cust_Turmas",
  "value": [
    {
      "externalCode": "235",
      "externalName": "Course name",
      "cust_Inst1Nav": {
        "externalCode": "123",
        "cust_fname": "Victor",
        "cust_lname": "Cardoso"
      }
    }
  ]
}

I thought I could simply call the navigation fields as I do with the main entity. For example:

  • {externalCode} = Retrieves 235
  • {cust_Inst1Nav/cust_fname} = should retrieve Victor, but instead, it either returns blank or doesn’t exist.

However, the navigation fields are not being retrieved.

Is there something I'm missing?

This is my page:

page with header to show only one recordpage with header to show only one record

 

Here is my Target object configuration detailed.

my Target configurationsmy Target configurations

 I can see the fields inside entity "cust_Turmas" its navigation "cust_Inst1Nav" when I want to set a field value in my objects.

image.png

 I've created a rule to get me some clues and put in a field:

export default function checkEmpty(context) {
    let binding = context.binding;

    if (binding.cust_Inst1Nav) {
        if (binding.cust_Inst1Nav.cust_lname) {
            return binding.cust_Inst1Nav.cust_lname;
        } else {
            return 'No Last Name Available';
        }
    } else {
        return 'cust_Inst1Nav not available';
    }
}

The result is: cust_Inst1Nav not available 

I appreciate any comments/suggestions.

View Entire Topic
bill_froelich
Product and Topic Expert
Product and Topic Expert

Your binding syntax is correct.  You can reference expanded fields using the navigation property slash property name references. Based on your data retrieved by the query it should work. 

If you haven't already, I would suggest turning on odata tracing and debug odata provider to confirm the query sent and data retrieved matches your expectations.  If you are using a branded client you can turn it on in the BrandedSettings.json or if using an app generated from a template under the user menu at runtime.