안녕하세요 저는 셰어 포인트와 caml의 세계에 처음 왔기 때문에 올바른 방향으로 나를 가리켜 줄 수있는 힌트가 있습니다.Sharepoint Camlex Caml 가입 오류
좋은 방법으로 caml 쿼리를 작성하는 데 Camlex https://camlex.codeplex.com/ 라이브러리를 선택했습니다. 내가 먼저 코드에 InnerJoin
var caml =
Camlex.Query().
InnerJoin(x => x[CesaDocument.DocType_field].PrimaryList(CESAContext.Documents).ForeignList(CESAContext.DocumentType)).
Where(x => (string)x[CesaDocument.RiOID_field] == id).
Scope(ViewScope.RecursiveAll).ToCamlQuery();
에 추가 될 때까지
모든
가 잘 작동 된 것은 마지막에 가입 나왔다 - 그게 내가 소스 코드를 가지고 문제이고 나는 그럭저럭 믿음 처음에는 Join.그래서이 코드를 내게주었습니다.
<View Scope="RecursiveAll">
<Joins> <Join Type="INNER" ListAlias="Document Types">
<Eq> <FieldRef List="Documents" Name="Doc_x0020_Type" RefType="Id" />
<FieldRef List="Document Types" Name="Id" />
</Eq> </Join> </Joins> <Query> <Where> <Eq>
<FieldRef Name="RiO_x0020_ID" />
<Value Type="Text">1</Value>
</Eq> </Where> </Query></View>
그러나 여전히 나에게이 코드를 -giving 오류가 발생한 것을.
<nativehr>0x80070057</nativehr><nativestack></nativestack>
실행 기능을 호출했을 때.
List list = null;
ListItemCollection ListCollection = null;
list = this.Web.Lists.GetByTitle(List);
ListCollection = list.GetItems(query);
this.Load(ListCollection);
this.ExecuteQuery();
return ListCollection;
인터넷 검색 allowunsafeUpdates=true
을 설정하는 가져올 것으로 보인다하지만 난 Micrsoft.Sharepoint.Client 객체를 사용하고 있는데 내가 그 속성을 볼 수없고 내가 업데이트하고 있습니다. Caml 쿼리를 SP CAML 쿼리 도우미 온라인에 붙여 넣었으며 예상대로 실행됩니다.
내가이 일을 제대로하고 있습니까? 몇 가지 방법을 시도했지만 아무 소용이 없습니다. SPQuery 객체를 사용해야합니까, CSOM에서 작동 할 수 있습니까? 그렇다면 어떤 라이브러리입니까?
내 가입시 Document_x0020_Types
을 사용해야합니까? 편집 - 시도했지만 작동하지 않았습니다.
편집 2 그냥 작동하지만 아니 겠지.
<Joins>
<Join Type="INNER" ListAlias="Document_x0020_Types">
<Eq>
<FieldRef List="Documents" Name="Doc_x0020_Type" RefType="Id" />
<FieldRef List="Document_x0020_Types" Name="Id" />
</Eq>
</Join>
</Joins>
<View Scope="RecursiveAll">
<Query>
<Where>
<Eq>
<FieldRef Name="RiO_x0020_ID" />
<Value Type="Text">2</Value>
</Eq>
</Where>
</Query>
</View>
편집 3 그래서 지금은 내 camlex의 generater을 고칠 수의 Caml의 형식에 대해 좀 더 알고 있었다.
var caml =
Camlex.Query()
.InnerJoin(x => x[CesaDocument.DocType_field].ForeignList(CESAContext.DocumentType))
.Where(x => (string)x[CesaDocument.RiOID_field] == id)
.Scope(ViewScope.RecursiveAll)
.ToCamlQuery();
기본 비트를 삭제하면 트릭을 수행했습니다.
RiOID는 문서 목록 또는 문서 유형 목록의 필드입니까? – Thriggle
RiOID가 '문서'목록에 있습니다. 유형 목록에 없습니다. –