Привет, я новичок в мире sharepoint и caml, поэтому любые подсказки, чтобы указать мне в правильном направлении полезными.Sharepoint Camlex Caml Присоединиться к ошибке
Я собрал библиотеку Camlex https://camlex.codeplex.com/, чтобы помочь мне сделать запросы caml красивым способом.
Все работает хорошо, пока я не добавил в 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();
На первый код вышел с Соединить в конце - полагая, что это проблема, которую я получил исходный код, и мне удалось получить Присоединиться в начале.
Так что дал мне этот код.
<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>
Однако это все еще ошибочно, передав мне этот код.
<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;
Googling, кажется, довести до включения allowunsafeUpdates=true
но я использую объект Micrsoft.Sharepoint.Client и я не могу видеть, что свойство, ни я обновляю. Я вставил запрос Caml в SP CAML Query Helper Online, и он работает как ожидалось.
Я делаю это правильно? Я пробовал несколько способов, но безрезультатно. Должен ли я использовать объект 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>
Edit 3 Так что теперь я знал немного больше о формате Caml я мог исправить мой camlex generater.
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 находится в списке «Документы». Это не в списке типов. –