cancel
Showing results for 
Search instead for 
Did you mean: 

Deep structured entity offline capability issue in SAP MDK application

Shankar_1999
Discoverer
0 Kudos
210

Hi Experts,

I'm developing a mobile app using SAP MDK for a client POC with offline-enabled functionality. I'm using SAP CAP as backend service. However, I am encountering the following errors when accessing deep structured entities for offline capabilities:

  • "Delta download for an Offline OData client failed. AdminService.Machines.Machines is not a media entity but is used in defining request {2} which requests stream data"
  • "Failed to initialize application data service - Error- [-10340] The download failed due to an error on the server: -857 (SERVER_SYNCHRONIZATION_ERROR) ([-10225] Message: User exception: [-100036] Failed to build the Offline OData client database.)"

I am not encountering any issues with entities that do not have a deep structure.

Entity Structure:

entity Plant {
  key ID      : UUID;
      plantID : String(10);
      machine : Composition of one Machines on machine.parent = $self;
}

entity Machines {
  key ID                 : UUID;
      makerInfo          : String(200);
  key parent             : Association to Plant;
      lastService        : Date;
      inspectionComments : String(1000);
}

Hi @Jitendra_Kansal , @bill_froelich can you suggest way to resolve this issue.

 

Thank you!

Regards,

Shankar 

Sandra_Rossi
Active Contributor
0 Kudos

Please don't post to Questions about SAP Websites (issue with community Website, etc.) if it's a question about SAP software. Instead, ask in Technology Q&A: https://community.sap.com/t5/technology-q-a/qa-p/technology-questions. Hopefully someone will fix it for you.

Sandra_Rossi_0-1725896371395.png

 

bill_froelich
Product and Topic Expert
Product and Topic Expert
0 Kudos
Can you share the resulting $metadata of the CAP service?

Accepted Solutions (0)

Answers (2)

Answers (2)

bill_froelich
Product and Topic Expert
Product and Topic Expert
0 Kudos

I suspect you want to use "Composition of many Machines" instead of one since I plant would typically have zero, one or more machines.  Using of one restricts there to only being one machine ever at the plant and use of one is discouraged per the compositions CDL doc.  Please verify your use case and update accordingly.

Shankar_1999
Discoverer
0 Kudos
Thank you, the issue has been resolved.
Shankar_1999
Discoverer
0 Kudos

Hi @bill_froelich ,

Please find the CAP service metadata below: 

<?xml version="1.0" encoding="utf-8"?>
<edmx:Edmx Version="4.0" xmlns:edmx="http://docs.oasis-open.org/odata/ns/edmx">
        <edmx:Include Alias="Common" Namespace="com.sap.vocabularies.Common.v1"/>
    </edmx:Reference>
        <edmx:Include Alias="Core" Namespace="Org.OData.Core.V1"/>
    </edmx:Reference>
        <edmx:Include Alias="UI" Namespace="com.sap.vocabularies.UI.v1"/>
    </edmx:Reference>
        <edmx:Include Alias="Validation" Namespace="Org.OData.Validation.V1"/>
    </edmx:Reference>
    <edmx:DataServices>
        <Schema Namespace="AdminService" xmlns="http://docs.oasis-open.org/odata/ns/edm">
            <Annotation Term="Core.Links">
                <Collection>
                    <Record>
                        <PropertyValue Property="rel" String="author"/>
                        <PropertyValue Property="href" String="https://cap.cloud.sap"/>
                    </Record>
                </Collection>
            </Annotation>
            <EntityContainer Name="EntityContainer">
                <EntitySet Name="Incidents" EntityType="AdminService.Incidents">
                    <NavigationPropertyBinding Path="urgency" Target="Urgency"/>
                    <NavigationPropertyBinding Path="status" Target="Status"/>
                </EntitySet>
                <EntitySet Name="Urgency" EntityType="AdminService.Urgency">
                    <NavigationPropertyBinding Path="texts" Target="Urgency_texts"/>
                    <NavigationPropertyBinding Path="localized" Target="Urgency_texts"/>
                </EntitySet>
                <EntitySet Name="Status" EntityType="AdminService.Status">
                    <NavigationPropertyBinding Path="texts" Target="Status_texts"/>
                    <NavigationPropertyBinding Path="localized" Target="Status_texts"/>
                </EntitySet>
                <EntitySet Name="Plant" EntityType="AdminService.Plant">
                    <NavigationPropertyBinding Path="machine" Target="Machines"/>
                </EntitySet>
                <EntitySet Name="Machines" EntityType="AdminService.Machines">
                    <NavigationPropertyBinding Path="parent" Target="Plant"/>
                </EntitySet>
                <EntitySet Name="Urgency_texts" EntityType="AdminService.Urgency_texts"/>
                <EntitySet Name="Status_texts" EntityType="AdminService.Status_texts"/>
            </EntityContainer>
            <EntityType Name="Incidents">
                <Key>
                    <PropertyRef Name="ID"/>
                </Key>
                <Property Name="ID" Type="Edm.Guid" Nullable="false"/>
                <Property Name="customer" Type="Edm.String" MaxLength="50"/>
                <Property Name="title" Type="Edm.String" MaxLength="200"/>
                <NavigationProperty Name="urgency" Type="AdminService.Urgency">
                    <ReferentialConstraint Property="urgency_code" ReferencedProperty="code"/>
                </NavigationProperty>
                <Property Name="urgency_code" Type="Edm.String" DefaultValue="M"/>
                <NavigationProperty Name="status" Type="AdminService.Status">
                    <ReferentialConstraint Property="status_code" ReferencedProperty="code"/>
                </NavigationProperty>
                <Property Name="status_code" Type="Edm.String" DefaultValue="N"/>
            </EntityType>
            <EntityType Name="Urgency">
                <Key>
                    <PropertyRef Name="code"/>
                </Key>
                <Property Name="name" Type="Edm.String" MaxLength="255"/>
                <Property Name="descr" Type="Edm.String" MaxLength="1000"/>
                <Property Name="code" Type="Edm.String" Nullable="false"/>
                <NavigationProperty Name="texts" Type="Collection(AdminService.Urgency_texts)">
                    <OnDelete Action="Cascade"/>
                </NavigationProperty>
                <NavigationProperty Name="localized" Type="AdminService.Urgency_texts">
                    <ReferentialConstraint Property="code" ReferencedProperty="code"/>
                </NavigationProperty>
            </EntityType>
            <EntityType Name="Status">
                <Key>
                    <PropertyRef Name="code"/>
                </Key>
                <Property Name="name" Type="Edm.String" MaxLength="255"/>
                <Property Name="descr" Type="Edm.String" MaxLength="1000"/>
                <Property Name="code" Type="Edm.String" Nullable="false"/>
                <Property Name="criticality" Type="Edm.Int32"/>
                <NavigationProperty Name="texts" Type="Collection(AdminService.Status_texts)">
                    <OnDelete Action="Cascade"/>
                </NavigationProperty>
                <NavigationProperty Name="localized" Type="AdminService.Status_texts">
                    <ReferentialConstraint Property="code" ReferencedProperty="code"/>
                </NavigationProperty>
            </EntityType>
            <EntityType Name="Plant">
                <Key>
                    <PropertyRef Name="ID"/>
                </Key>
                <Property Name="ID" Type="Edm.Guid" Nullable="false"/>
                <Property Name="plantID" Type="Edm.String" MaxLength="10"/>
                <NavigationProperty Name="machine" Type="AdminService.Machines" Partner="parent">
                    <OnDelete Action="Cascade"/>
                    <ReferentialConstraint Property="ID" ReferencedProperty="parent_ID"/>
                </NavigationProperty>
            </EntityType>
            <EntityType Name="Machines">
                <Key>
                    <PropertyRef Name="ID"/>
                    <PropertyRef Name="parent_ID"/>
                </Key>
                <Property Name="ID" Type="Edm.Guid" Nullable="false"/>
                <Property Name="makerInfo" Type="Edm.String" MaxLength="200"/>
                <NavigationProperty Name="parent" Type="AdminService.Plant" Partner="machine">
                    <ReferentialConstraint Property="parent_ID" ReferencedProperty="ID"/>
                </NavigationProperty>
                <Property Name="parent_ID" Type="Edm.Guid" Nullable="false"/>
                <Property Name="lastService" Type="Edm.Date"/>
                <Property Name="inspectionComments" Type="Edm.String" MaxLength="1000"/>
            </EntityType>
            <EntityType Name="Urgency_texts">
                <Key>
                    <PropertyRef Name="locale"/>
                    <PropertyRef Name="code"/>
                </Key>
                <Property Name="locale" Type="Edm.String" MaxLength="14" Nullable="false"/>
                <Property Name="name" Type="Edm.String" MaxLength="255"/>
                <Property Name="descr" Type="Edm.String" MaxLength="1000"/>
                <Property Name="code" Type="Edm.String" Nullable="false"/>
            </EntityType>
            <EntityType Name="Status_texts">
                <Key>
                    <PropertyRef Name="locale"/>
                    <PropertyRef Name="code"/>
                </Key>
                <Property Name="locale" Type="Edm.String" MaxLength="14" Nullable="false"/>
                <Property Name="name" Type="Edm.String" MaxLength="255"/>
                <Property Name="descr" Type="Edm.String" MaxLength="1000"/>
                <Property Name="code" Type="Edm.String" Nullable="false"/>
            </EntityType>
            <Annotations Target="AdminService.Incidents/ID">
                <Annotation Term="Core.ComputedDefaultValue" Bool="true"/>
            </Annotations>
            <Annotations Target="AdminService.Incidents/title">
                <Annotation Term="Common.Label" String="Title"/>
            </Annotations>
            <Annotations Target="AdminService.Incidents/urgency_code">
                <Annotation Term="Common.ValueList">
                    <Record Type="Common.ValueListType">
                        <PropertyValue Property="Label" String="Urgency"/>
                        <PropertyValue Property="CollectionPath" String="Urgency"/>
                        <PropertyValue Property="Parameters">
                            <Collection>
                                <Record Type="Common.ValueListParameterInOut">
                                    <PropertyValue Property="LocalDataProperty" PropertyPath="urgency_code"/>
                                    <PropertyValue Property="ValueListProperty" String="code"/>
                                </Record>
                                <Record Type="Common.ValueListParameterDisplayOnly">
                                    <PropertyValue Property="ValueListProperty" String="name"/>
                                </Record>
                            </Collection>
                        </PropertyValue>
                    </Record>
                </Annotation>
            </Annotations>
            <Annotations Target="AdminService.Incidents/status_code">
                <Annotation Term="Common.ValueList">
                    <Record Type="Common.ValueListType">
                        <PropertyValue Property="Label" String="Status"/>
                        <PropertyValue Property="CollectionPath" String="Status"/>
                        <PropertyValue Property="Parameters">
                            <Collection>
                                <Record Type="Common.ValueListParameterInOut">
                                    <PropertyValue Property="LocalDataProperty" PropertyPath="status_code"/>
                                    <PropertyValue Property="ValueListProperty" String="code"/>
                                </Record>
                                <Record Type="Common.ValueListParameterDisplayOnly">
                                    <PropertyValue Property="ValueListProperty" String="name"/>
                                </Record>
                            </Collection>
                        </PropertyValue>
                    </Record>
                </Annotation>
            </Annotations>
            <Annotations Target="AdminService.Urgency">
                <Annotation Term="UI.Identification">
                    <Collection>
                        <Record Type="UI.DataField">
                            <PropertyValue Property="Value" Path="name"/>
                        </Record>
                    </Collection>
                </Annotation>
            </Annotations>
            <Annotations Target="AdminService.Urgency/name">
                <Annotation Term="Common.Label" String="Name"/>
            </Annotations>
            <Annotations Target="AdminService.Urgency/descr">
                <Annotation Term="Common.Label" String="Description"/>
            </Annotations>
            <Annotations Target="AdminService.Urgency/code">
                <Annotation Term="Validation.AllowedValues">
                    <Collection>
                        <Record Type="Validation.AllowedValue">
                            <Annotation Term="Core.SymbolicName" String="high"/>
                            <PropertyValue Property="Value" String="H"/>
                        </Record>
                        <Record Type="Validation.AllowedValue">
                            <Annotation Term="Core.SymbolicName" String="medium"/>
                            <PropertyValue Property="Value" String="M"/>
                        </Record>
                        <Record Type="Validation.AllowedValue">
                            <Annotation Term="Core.SymbolicName" String="low"/>
                            <PropertyValue Property="Value" String="L"/>
                        </Record>
                    </Collection>
                </Annotation>
            </Annotations>
            <Annotations Target="AdminService.Status">
                <Annotation Term="UI.Identification">
                    <Collection>
                        <Record Type="UI.DataField">
                            <PropertyValue Property="Value" Path="name"/>
                        </Record>
                    </Collection>
                </Annotation>
            </Annotations>
            <Annotations Target="AdminService.Status/name">
                <Annotation Term="Common.Label" String="Name"/>
            </Annotations>
            <Annotations Target="AdminService.Status/descr">
                <Annotation Term="Common.Label" String="Description"/>
            </Annotations>
            <Annotations Target="AdminService.Status/code">
                <Annotation Term="Validation.AllowedValues">
                    <Collection>
                        <Record Type="Validation.AllowedValue">
                            <Annotation Term="Core.SymbolicName" String="new"/>
                            <PropertyValue Property="Value" String="N"/>
                        </Record>
                        <Record Type="Validation.AllowedValue">
                            <Annotation Term="Core.SymbolicName" String="assigned"/>
                            <PropertyValue Property="Value" String="A"/>
                        </Record>
                        <Record Type="Validation.AllowedValue">
                            <Annotation Term="Core.SymbolicName" String="in_process"/>
                            <PropertyValue Property="Value" String="I"/>
                        </Record>
                        <Record Type="Validation.AllowedValue">
                            <Annotation Term="Core.SymbolicName" String="on_hold"/>
                            <PropertyValue Property="Value" String="H"/>
                        </Record>
                        <Record Type="Validation.AllowedValue">
                            <Annotation Term="Core.SymbolicName" String="resolved"/>
                            <PropertyValue Property="Value" String="R"/>
                        </Record>
                        <Record Type="Validation.AllowedValue">
                            <Annotation Term="Core.SymbolicName" String="closed"/>
                            <PropertyValue Property="Value" String="C"/>
                        </Record>
                    </Collection>
                </Annotation>
            </Annotations>
            <Annotations Target="AdminService.Plant/ID">
                <Annotation Term="Core.ComputedDefaultValue" Bool="true"/>
            </Annotations>
            <Annotations Target="AdminService.Machines/ID">
                <Annotation Term="Core.ComputedDefaultValue" Bool="true"/>
            </Annotations>
            <Annotations Target="AdminService.Urgency_texts/locale">
                <Annotation Term="Common.Label" String="Language Code"/>
            </Annotations>
            <Annotations Target="AdminService.Urgency_texts/name">
                <Annotation Term="Common.Label" String="Name"/>
            </Annotations>
            <Annotations Target="AdminService.Urgency_texts/descr">
                <Annotation Term="Common.Label" String="Description"/>
            </Annotations>
            <Annotations Target="AdminService.Urgency_texts/code">
                <Annotation Term="Validation.AllowedValues">
                    <Collection>
                        <Record Type="Validation.AllowedValue">
                            <Annotation Term="Core.SymbolicName" String="high"/>
                            <PropertyValue Property="Value" String="H"/>
                        </Record>
                        <Record Type="Validation.AllowedValue">
                            <Annotation Term="Core.SymbolicName" String="medium"/>
                            <PropertyValue Property="Value" String="M"/>
                        </Record>
                        <Record Type="Validation.AllowedValue">
                            <Annotation Term="Core.SymbolicName" String="low"/>
                            <PropertyValue Property="Value" String="L"/>
                        </Record>
                    </Collection>
                </Annotation>
            </Annotations>
            <Annotations Target="AdminService.Status_texts/locale">
                <Annotation Term="Common.Label" String="Language Code"/>
            </Annotations>
            <Annotations Target="AdminService.Status_texts/name">
                <Annotation Term="Common.Label" String="Name"/>
            </Annotations>
            <Annotations Target="AdminService.Status_texts/descr">
                <Annotation Term="Common.Label" String="Description"/>
            </Annotations>
            <Annotations Target="AdminService.Status_texts/code">
                <Annotation Term="Validation.AllowedValues">
                    <Collection>
                        <Record Type="Validation.AllowedValue">
                            <Annotation Term="Core.SymbolicName" String="new"/>
                            <PropertyValue Property="Value" String="N"/>
                        </Record>
                        <Record Type="Validation.AllowedValue">
                            <Annotation Term="Core.SymbolicName" String="assigned"/>
                            <PropertyValue Property="Value" String="A"/>
                        </Record>
                        <Record Type="Validation.AllowedValue">
                            <Annotation Term="Core.SymbolicName" String="in_process"/>
                            <PropertyValue Property="Value" String="I"/>
                        </Record>
                        <Record Type="Validation.AllowedValue">
                            <Annotation Term="Core.SymbolicName" String="on_hold"/>
                            <PropertyValue Property="Value" String="H"/>
                        </Record>
                        <Record Type="Validation.AllowedValue">
                            <Annotation Term="Core.SymbolicName" String="resolved"/>
                            <PropertyValue Property="Value" String="R"/>
                        </Record>
                        <Record Type="Validation.AllowedValue">
                            <Annotation Term="Core.SymbolicName" String="closed"/>
                            <PropertyValue Property="Value" String="C"/>
                        </Record>
                    </Collection>
                </Annotation>
            </Annotations>
        </Schema>
    </edmx:DataServices>
</edmx:Edmx>
 
Thank you!
 
Regards,
Shankar