2010-02-26 7 views
2

하여 SharePoint 메시지 보드에서 모든 항목을 검색 :CAML 내가 다음 CAML에서 SP의 웹 서비스와 나눠의 GetListItems 메소드를 호출하는 자바 스크립트를 사용하고

var CAML = "<Query>" 
      + "<ViewAttributes Scope=\"Recursive\" />" 
      + "<Where>" 
      + "<Or>" 
      + "<Eq>" 
      + "<FieldRef Name=\"ID\"/>" 
      + "<Value Type=\"Counter\">" + id + "</Value>" 
      + "</Eq>" 
      + "<Eq>" 
      + "<FieldRef Name=\"ParentFolderId\" />" 
      + "<Value Type=\"Integer\">" + id + "</Value>" 
      + "</Eq>" 
      + "</Or>" 
      + "</Where>" 
      + "</Query>"; 

    var fieldinfo = "<ViewFields><FieldRef Name='Title' /><FieldRef Name='Body' /><FieldRef Name='CorrectBodyToShow' /><FieldRef Name='Created' /><FieldRef Name='Author' /><FieldRef Name='Editor' /><FieldRef Name='PersonalImage' /><FieldRef Name='DiscussionLastUpdated' /></ViewFields>" 

그리고 난 단지 최상위 레벨의 아이템을받을 토론 유형 항목으로 돌아갑니다. ParentFolderId 1과 관련된 2 가지 메시지 유형 항목이 있지만 반환되지 않습니다.

제쳐두고 U2U 도구에서 CAML을 실행하면 전체 스레드 ... 하나의 토론과 두 개의 메시지가 반환됩니다.

답변

0

에 반대하지 개체입니다. 당신은 당신의 CAML에서 이것을했지만 잘못된 장소에 있습니다. 당신이 개체 모델을 사용하는 경우 웹 서비스를 사용하고 그러나

당신은

query.ViewAttributes = "Scope=\"Recursive\"";

을 사용합니다. 귀하의 예에서는 ViewAttributes 노드의 자식으로 두었습니다. 그러나 이것은 잘못되었습니다.

그것은 GetListItems

의 paramater 그래서 코드뿐만 아니라 당신이 내 다음

var queryOptions = "<QueryOptions>" + 
         "<ViewAttributes Scope='Recursive' />" + 
         "</QueryOptions>"; 

을 태어나 셨 것이다 위의 queryOptions의 일부가되어야 당신이 와 같은 이름을 부를 것이다 자바 스크립트 래퍼 (참고 - 이것은 분명히 작동하지 않지만 아이디어는 얻을 수 있습니다.)

listService.GetListItems("List_Name", null, 
         CAML, fieldinfo , null, 
         queryOptions, null); 
+0

래퍼가 모든 것을 롤백하기 때문에 SOAP 본문에 루트 수준 노드로 새 쿼리 옵션을 추가해야합니까? –

+0

나는 그것과 비슷한 것을 생각할 것이다. queryoptions는 .GetListItems 웹 서비스를 호출 할 때 별도의 매개 변수입니다. SOAP 요청에 어딘가에 넣을 것입니다.하지만 전에는 원시 SOAP 요청을 처리하지 않았습니다. (VS가 모든 배관을 처리합니다. – Ryan

+0

당신의 의지는 영혼이었습니다! 그것은 루트 아래에있는 별도의 노드입니다 ... 제가 놓친 부분은 QueryOptions가 " "쿼리 노드와 마찬가지로 작동합니다. 감사합니다. –

0

은 당신이 아니라 쿼리 CAML에서보다는 SPQuery 객체의 recusion을 설정해야 직감, 예를 들어 있습니다

qry.ExpandRecurrence = true 

을하지만 잘못 될 수도 있습니다 :) 좀 정렬하지 않았다 발견 언제나 일해.

+0

당신이 뭔가있는 것 같아요. 이전 컨설턴트가 CAML을 SOAP 봉투로 롤백하라는 javascript 래퍼를 만들었습니다. 어디에서 ExpandRecurrence를 설정해야하는지 알고 싶습니까? –

+0

왜 비누가 필요한지 잘 모르겠다. 웹 서비스를 사용하는 대신 서버에서 aspx를 사용할 수 있습니까? 그렇다면 SPQuery 객체를 사용할 수 있습니다. 그렇지 않다면 js에서 재귀 적 기능을 코드화해야한다. – Jonesie

+0

아,이 블로그 게시물에 대한 도움이 될만한 의견이 있습니다. http://www.u2u.info/Blogs/Patrick/Lists/Posts/Post.aspx?ID=1765 – Jonesie

1

재귀 기능은 쿼리 옵션의 일부가보기 옵션은 웹 서비스 당신은 = 재귀를 속성이라고 범위를 설정해야