cancel
Showing results for 
Search instead for 
Did you mean: 

SAP MDK - Entities, Navigations and Fields

vhsbc92
Explorer
0 Kudos
364

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

Are you using Offline OData?

If you are using offline the other thing to verify is that the $expand entity set is included in the defining requests in your Initialize action.  When I was running a test I didn't have my $expand entity set defined so naturally got no data back for the expand.

You can set your "SecureDatabaseEncryptionKey": false in your BrandedSettings.json and then pull the offline db files from your simulator/emulator and open in ilodata directly to confirm what data in in the offline store.

vhsbc92
Explorer
0 Kudos
Hi Bill, I'm using offline odata and it's not branded. I'm also checking everything you said and doing some analysis, I'll return asap.