2017-01-27 4 views
0

Я просто использую Sharepoint в течение нескольких дней, и я знаю, что этот вопрос задал много раз, но я пробовал их все, и никто из них не работает.Присоединяйтесь к 2 спискам в общей точке с использованием запроса CAML

Это мой дизайн

  • Документ как тип библиотеки документов имеет Id список

    Id | DocumentName 
    ---+------------- 
    1 | Document A 
    2 | Document B 
    
  • Деятельности, имеет внешний ключ 'DocId', что ссылка на идентификатор документа

    Id | DocId | Name 
    ---+-------+----------- 
    1 | 1  | Activity A 
    2 | 1  | Activity B 
    3 | 1  | Activity C 
    4 | 2  | Activity D 
    

Проблема заключается в том, что мне нужно получить все действия, включающие имя документа в документе.

В SQL я могу использовать запрос Join для получения дополнительной информации из другой таблицы. Но я попробовал некоторый оператор Join в запросе CAML, и никто из них не работает. Вот результат, который мне нужно получить.

Id | DocId | Name  | DocumentName 
---+-------+-------------------------- 
1 | 1  | Activity A | Document A 
2 | 1  | Activity B | Document A 
3 | 1  | Activity C | Document A 
4 | 2  | Activity D | Document B 

Может кто-нибудь предложить мне запрос?

Вот мой запрос:

<View> 
    <ViewFields> 
    <FieldRef Name = 'DocLeafRef'/> 
    <FieldRef Name = 'ID'/> 
    <FieldRef Name = 'e8_document'/> 
    <FieldRef Name = 'Title'/> 
    <FieldRef Name = 'Author'/> 
    <FieldRef Name = 'Created'/> 
    </ViewFields> 
    <Joins> 
    <Join Type = 'INNER' ListAlias = 'Documents'> 
     <Eq> 
     <FieldRef Name ='e8_document' RefType = 'Id'/> 
     <FieldRef Name ='ID' List ='Documents'/> 
     </Eq> 
    </Join> 
    </Joins> 
    <ProjectedFields> 
    <Field ShowField ='FileLeafRef' Type ='Lookup' Name ='DocLeafRef' List ='Documents'/> 
    </ProjectedFields> 
    <Query> 
    <Where> 
     <Eq> 
      <FieldRef Name='e8_caseId'></FieldRef> 
      <Value Type = 'Number'>23</Value> 
     </Eq> 
    </Where> 
    </Query> 
</View> 

Я запрос в списке деятельности и e8_document является полем поиска, что ссылка на идентификатор в документе. Насколько я понимаю, нам нужна проекция, и я добавил проекцию, но запрос вызывает ошибку.

+0

Можете ли вы опубликовать запрос CAML, который вы пробовали, который дал вам вышеуказанный результат? Затем мы можем рассказать вам, как исправить это, используя [соединения и прогнозы списка] (https://msdn.microsoft.com/en-us/library/office/ee539975%28v=office.14%29.aspx?f=255&MSPPError = -2147217396). – Thriggle

+0

@Thriggle Я добавляю свой запрос, не могли бы вы помочь мне в чем-то непонятно с запросом –

ответ

0

Элемент Query недействителен в вашем случае, в основном Query элемент не может содержать Joins в качестве дочернего элемента.

Серверное объектная модель

Для SPQuery ClassJoins element нужно указать с помощью SPQuery.Joins Property:

var qry = new SPQuery(); 
qry.Joins = @"<Join Type="LEFT" ListAlias="Documents"> 
      <Eq> 
       <FieldRef Name="DocId" RefType="ID" /> 
       <FieldRef Name="ID" List="Documents" /> 
      </Eq> 
     </Join>"; 

Client-Side Object Model

Вот полный CAML запрос для CSOM API:

<View> 
    <ViewFields> 
     <FieldRef Name="ID" /> 
     <FieldRef Name="DocId" /> 
     <FieldRef Name="Name" /> 
     <FieldRef Name="Documents" /> 
    </ViewFields> 
    <Joins> 
     <Join Type="LEFT" ListAlias="Documents"> 
      <Eq> 
       <FieldRef Name="DocId" RefType="ID" /> 
       <FieldRef Name="ID" List="Documents" /> 
      </Eq> 
     </Join> 
    </Joins> 
    <ProjectedFields> 
     <Field ShowField="DocumentName" Type="Lookup" Name="Documents" List="Documents" /> 
    </ProjectedFields> 
    <Query /> 
</View> 
+0

Привет, я применяю ваш запрос, но я получаю ошибку от клиента SharePoint: один или несколько типов полей установлены неправильно. Чтобы удалить эти поля, перейдите на страницу настроек списка.Что-то не так с моим запросом –

+0

В моем втором примере имя поля поиска DocId, учитывая ваш пример, вам, вероятно, нужно заменить его на e8_document, есть два вхождения: один в элементе ViewFields, другой в элементе Join –

+0

У меня есть еще одна проблема с в качестве запроса выше необходимости FileLeafRef в чужом списке, который является типом «Файл», и я получаю ошибку «Значение не входит в ожидаемый диапазон». Эта ошибка возникает из-за того, что файл является длинным или для типа файла нужен другой способ получить –