cancel
Showing results for 
Search instead for 
Did you mean: 

SAP MDK - Entities, Navigations and Fields

vhsbc92
Explorer
0 Kudos
359

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
vhsbc92
Explorer
0 Kudos

@bill_froelich 

I’m speechless... incredible! Here's what I did to solve the issue:

I went to downloadOffline.action and InitializeOffline.action and added the expand I needed. After doing that, the previously blank fields were populated with the expected data.

image.png

Now I can see the data in the Object Header.

Thanks a lot! I'm learning a lot with you and all community's posts and members.

bill_froelich
Product and Topic Expert
Product and Topic Expert
Depending on the use case and data you can also included that entity set referred to by the navigation property rather than including it via the $expand. This will make all the data in that entity set available not just the expanded entries from the nav link.
vhsbc92
Explorer
0 Kudos
I got your point, but I'm not sure how and where I can do it. Would you mind to send a screenshot/file, please?
bill_froelich
Product and Topic Expert
Product and Topic Expert
0 Kudos
Add another Defining Request to the list that is the EntitySet that the cust_Inst1Nav points to and remove the $expand from the cust_Turmas query
vhsbc92
Explorer
0 Kudos
Got it, thanks!!