"SAP Fiori Master-Detail Application"템플릿을 사용하여 SAPUI5 응용 프로그램을 생성했습니다. 마스터 및 세부 정보 페이지가 제대로 작동하고 OData 서비스에 제대로 연결되어 있습니다. 내가 지금하려고하는 것은 Detail 페이지를 두 번째 (다른) Detail 페이지로 라우팅하는 것입니다.SAPUI5 : 키의 변형 된 URI 리터럴 구문
첫 번째 세부 정보 페이지 (Detail1)에는 Detail2 개체 목록이 포함되어 있습니다. 목록에있는 해당 개체 중 하나를 클릭하면 Detail2 페이지로 이동하게됩니다 (더 많은 정보가 표시됨).
WebIDE를 사용하여 새로운 Detail2 View 및 Controller를 작성 했으므로 필러 코드가 포함되어 있습니다. 두 개의 매개 변수 당신이 패턴에서 볼 수 있듯이
{
"name": "detail2Object",
"pattern": "Detail2(Master={masterId},Id={detail1Id})",
"titleTarget": "",
"greedy": false,
"target": ["master", "detail2"]
}
"detail2Object": {
"viewType": "XML",
"transition": "slide",
"clearAggregation": true,
"viewName": "Detail2",
"title": "",
"viewId": "detail2page",
"viewLevel": 3
}
, 서비스가 필요 : 나는 또한 manifest.json을 파일에 새로운 경로를 만들어 마스터 및 ID (마스터 ID이며, 최초의 결함 Id)을 .
잘 내 응용 프로그램 데이터를 반환에서 독립적 인 서비스를 테스트 :
http://{root}.com:{port}/sap/opu/odata/sap/TEST_SRV/Detail2(Master='552364',Id='0004')
나는 마스터에 전달하는 내 Detail1 컨트롤러에 NavTo 기능을 생성 및 ID 매개 변수 :
_onNav : function (oEvent) {
// get the list item, either from the listItem parameter or from the event's source itself (will depend on the device-dependent mode).
this._showDetail2(oEvent.getParameter("listItem") || oEvent.getSource());
},
_showDetail2 : function (oItem) {
this.getRouter().navTo("detail2Object", {
masterId: oItem.getBindingContext().getProperty("Master"),
detail1Id: oItem.getBindingContext().getProperty("Id")
});
}
나는를 실행하면 Detail1 페이지의 Detail2 객체를 클릭하면 WebIDE 테스트 (라이브 OData 및 내가 만든 Mockdata 모두)를 통해 다음과 같은 오류를 표시하는 새 페이지로 이동합니다.
,451,515,This <"ObjectName"> is not available
F12 도구로 가는데, 나는 다음과 같은 오류를 참조하십시오, 많은 연구를 통해 유일한 일을
http://localhost:54634/webapp/test/mockServer.html?hc_reset&origional-url=mockServer.html&sap-ui-appCacheBuster=..%2F..%2F..%2F&sap-ui-xx-componentPreload=off#/Detail2(Master= '552364',Id='0004')
이 URL이 제대로 매개 변수를 뽑아에도 불구하고 발생하는
MockServer: Malformed URI literal syntax in key 'Id' -
HTTP request failed400,Bad Request,{"error":{"code":400,"message":{"lang":"en","value":"Malformed URI literal syntax in key 'Id'"}}} -
이 오류는 메타 데이터 파일과 관련이있을 수 있습니다. 그러나 이드는 모두 Edm.String
이고 철자가 똑같은 방식이므로 철자가 맞지 않습니다. 또한 앞에서 설명한 것처럼 응용 프로그램과 독립적으로 실행되는 동일한 매개 변수로 서비스가 잘 실행됩니다.
도움을 주시면 감사하겠습니다. Detail2 객체의 목록을 포함
업데이트
Detail1보기 :
<List noDataText="Drop list items here" id="__list0" items="{DetailToDetail2}" headerText="Defects">
<items>
<ObjectListItem type="Navigation" title="{Detail2Title}" number="{Qty}" numberUnit="Detail Qty" press="_onNav">
<attributes>
<ObjectAttribute text="{Detail2_Attr}" id="__attribute11" title="Detail2 Attr"/>
<ObjectAttribute id="__attribute12" title="Detail2 Attr2" text="{Detail2_Attr2}"/>
</attributes>
</ObjectListItem>
</items>
</List>
item="{DetailToDetail2}"
서비스의 메타 데이터에 NavigationProperty 및 협회로 나타납니다.그것은 Detail1 엔티티에 어떻게 보이는지
이입니다
<NavigationProperty Name="DetailToDetail2" Relationship="TEST_SRV.DetailToDetail2" FromRole="FromRole_DetailToDetail2" ToRole="ToRole_DetailToDetail2"/>
이 전체 Detail2 법인 인 다음 DetailToDetail2 협회
<EntityType Name="Detail2" sap:content-version="1">
<Key>
<PropertyRef Name="Id"/>
<PropertyRef Name="Master"/>
</Key>
<Property Name="Id" Type="Edm.String" Nullable="false" MaxLength="4" sap:unicode="false" sap:label="Id" sap:creatable="false" sap:updatable="false" sap:sortable="false" sap:filterable="false"/>
<Property Name="Master" Type="Edm.String" Nullable="false" MaxLength="12" sap:unicode="false" sap:label="Master" sap:creatable="false" sap:updatable="false" sap:sortable="false" sap:filterable="false"/>
<Property Name="Attr1" Type="Edm.String" MaxLength="40" sap:unicode="false" sap:label="Attribute 1" sap:creatable="false" sap:updatable="false" sap:sortable="false" sap:filterable="false"/>
<Property Name="Qty" Type="Edm.Int32" sap:unicode="false" sap:label="Detail Qty" sap:creatable="false" sap:updatable="false" sap:sortable="false" sap:filterable="false"/>
<Property Name="Attr2" Type="Edm.String" MaxLength="40" sap:unicode="false" sap:label="Attribute 2" sap:creatable="false" sap:updatable="false" sap:sortable="false" sap:filterable="false"/>
<Property Name="Attr3" Type="Edm.String" MaxLength="4" sap:unicode="false" sap:label="Attribute 3" sap:creatable="false" sap:updatable="false" sap:sortable="false" sap:filterable="false"/>
</EntityType>
그리고 여기에 있습니다 :
<Association Name="DetailToDetail2" sap:content-version="1">
<End Type="TEST_SRV.Detail1" Multiplicity="1" Role="FromRole_DetailToDetail2"/>
<End Type="TEST_SRV.Detail2" Multiplicity="*" Role="ToRole_DetailToDetail2"/>
<ReferentialConstraint>
<Principal Role="FromRole_DetailToDetail2">
<PropertyRef Name="Id"/>
</Principal>
<Dependent Role="ToRole_DetailToDetail2">
<PropertyRef Name="Master"/>
</Dependent>
</ReferentialConstraint>
</Association>
발생하는 오류는 OData 형식이며 라우팅 자체와는 거의 관련이 없습니다. 보기 2의 탐색기 처리기를 보여주십시오. 가장 일반적인 문제는 바인딩 경로/odata URL 구성에 있습니다. Pls. 또한 잘못된 URI를 생성 한 잘못된 서비스 URL을 게시합니다. – cschuff
문제가 라우팅이 아닌 OData에서 비롯된 것입니다. 문제가있는 곳이 좁혀집니다. 내 서비스 메타 데이터에 대한 정보를 추가했습니다. 어쩌면 우리가 응용 프로그램과 독립적으로 서비스를 테스트 할 때 호출하지 않는 것이 문제 일 수 있습니다. –
잘못 구성된 URI 오류가 발생한 잘못된 서비스 URL은 위에 게시 한 localhost url입니다. http : // localhost : 54634/webapp/test/mockServer.html? hc_reset & origional-url = mockServer.html & sap-ui-appCacheBuster =. % 2F .. % 2F .. % 2F & sap-ui-xx-componentPreload = off #/Detail2 (Master = '552364', Id = '0004') –