2016-09-13 6 views
0

다음 코드 조각이 있습니다. Xamarin Sitecore Extension과 함께 제공되는 샘플 코드의 약간 수정 된 버전입니다. 내가ReadItemsRequestWithSitecoreQuery의 응답을 구문 분석하려면 어떻게해야합니까?

ReadItemsRequestWithPath("/sitecore/content/home") 

ReadItemsRequestWithSitecoreQuery("select * from /sitecore/content/Home//*[@@TemplateName='Article']") 

을 대체하지만 인터넷이 예기치 않은 형식이에서 위의 블록이 "[Sitecore 모바일 SDK] 데이터가 발생하는 경우

var requesttwo = ItemWebApiRequestBuilder.ReadItemsRequestWithSitecoreQuery("select * from /sitecore/content/Home//*[@@TemplateName='Article']") 
.AddFieldsToRead(new string[3] { "Title", "Author", "Content" }) 
.AddScope(ScopeType.Self) 
.Build(); 

ScItemsResponse response = null; 
try 
{ 
    // And execute it on a session asynchronously 
    response = await session.ReadItemAsync(requesttwo); 
} 
catch (Exception e) 
{ 
    String error = e.Message; 
} 

그것은 예상대로 작동합니다. " 나는 this question을 찾았고 sitecore 쿼리가 "@"를 사용한다는 것을 알아 냈습니다. 그러나 제안 된 것처럼 아래의 스 니펫을 추가하여 동일한 응답을 받았습니다.

string format = HttpUtility.HtmlEncode("select * from /sitecore/content/Home//*[@@TemplateName='Article']"); 

답변

0

나는이 문제를 파악했다. 아래 코드는 예상대로 작동합니다.

var requesttwo = ItemWebApiRequestBuilder.ReadItemsRequestWithSitecoreQuery("/sitecore/content/Home//*[@@TemplateName='Article']") 
.AddFieldsToRead(new string[3] { "Title", "Author", "Content" }) 
.Build(); 

ScItemsResponse response = null; 
try 
{ 
    // And execute it on a session asynchronously 
    response = await session.ReadItemAsync(requesttwo); 
} 
catch (Exception e) 
{ 
    String error = e.Message; 
} 

는 그냥 "SELECT * FROM"제거했다. AddFieldsToRead가 "select * from select * from foo bar"같은 요청을하는 자체 select 문을 추가한다고 생각합니다. 쿼리에서 해당 부분을 제거하면 적절한 응답을 얻을 수 있습니다.

단서는 this document입니다. 아래의 예는 전체 쿼리와 달리 사이트 코어 경로 만 보여줍니다.

string query = "/sitecore/media library/images/*"; 

var request = ItemWebApiRequestBuilder.ReadItemsRequestWithSitecoreQuery(query) 
.AddScope(ScopeType.Self) 
.PageNumber(0) 
.ItemsPerPage(2) 
.Build(); 

var response = await this.session.ReadItemAsync(request); 
관련 문제