none
CAML запрос. Непрямая связь списков (между 2-мя списками есть 3-й, который их связывает) - можно ли построить запрос? RRS feed

  • Вопрос

  • Есть "Список 1", на элементы которого ссылается "Список 2" (через Lookup поле по ID). И есть "Список 3", который ссылается на "Список 2", так же через поле подстановки.

    Вопрос - можно ли отобрать такие элементы "Списка 3", которые ссылаются на элементы "Списка 2", которые ссылаются на конкретный элемент "Списка 1"? Отбор я хочу сделать средствами CAML запросов, причем декларативно, через свойство SelectCommand соответствующих источников данных.

    Проблем нет, если необходимо просто отобрать элементы "Списка 2", которые ссылаются на конкретный элемент "Списка 1". Дело в том, что "Список 3" не имеет прямых ссылок на "Список 1", он опосредовано с ним связан через "Список 2".

    Есть ли решения данной задачи без добавления прямой ссылки в "Список 3"?

    Тему подкорректирую, если узнаю, как правильно называются такие связи (или запросы), или если кто-то предложит более точный и емкий вариант.

    9 января 2017 г. 14:59

Ответы

  • Добрый день,

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

    Проще добавить скрытое поле и проставлять в него значение в РП, а имеющиеся элементы изменить пробежав по ним в PowerShell.


    MS,MCTS,MCP,MCPD: SharePoint Developer 2010

    • Помечено в качестве ответа Denis Prokofjev 10 января 2017 г. 7:26
    10 января 2017 г. 2:00
  • Добрый день

    на сколько я знаю, CAML не поддерживает джойны как SQL.

    варианты Вам уже предложил Максим. 

    1. делать несколько вызовов и уже потом объединять результат. если нужно получить приличный объем данных не самый лучший подход, т.к. будет занимать время и лишние запросы к серверу.

    2. добавить дополнительное поле и заполнять его средствами js или РП. в этом случае можно использовать стандартные средства получения данных CAML или REST. при этом меньше дополнительных накладных расходов.


    мой блог Немного о SharePoint

    • Помечено в качестве ответа Denis Prokofjev 10 января 2017 г. 7:27
    10 января 2017 г. 7:07
    Модератор

Все ответы

  • Добрый день,

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

    Проще добавить скрытое поле и проставлять в него значение в РП, а имеющиеся элементы изменить пробежав по ним в PowerShell.


    MS,MCTS,MCP,MCPD: SharePoint Developer 2010

    • Помечено в качестве ответа Denis Prokofjev 10 января 2017 г. 7:26
    10 января 2017 г. 2:00
  • Добрый день

    на сколько я знаю, CAML не поддерживает джойны как SQL.

    варианты Вам уже предложил Максим. 

    1. делать несколько вызовов и уже потом объединять результат. если нужно получить приличный объем данных не самый лучший подход, т.к. будет занимать время и лишние запросы к серверу.

    2. добавить дополнительное поле и заполнять его средствами js или РП. в этом случае можно использовать стандартные средства получения данных CAML или REST. при этом меньше дополнительных накладных расходов.


    мой блог Немного о SharePoint

    • Помечено в качестве ответа Denis Prokofjev 10 января 2017 г. 7:27
    10 января 2017 г. 7:07
    Модератор
  • Спасибо, Максим, Владимир. Т.е. CAML не поддерживает обращение к реквизитам своих объектов "через точку", по крайней мере - далее первого уровня. В моем случае jQuery скорее всего не подойдет, т.к. речь идет о запросах в источниках данных.

    Я склоняюсь к варианту с дополнительным полем в "Справочник 3". Данное поле будет заполняться после выбора значения в поле, которое ссылается на элемент "Справочника 2". Попробую найти как это сделать (подробно), если не найду, встретимся в новой теме :).

    10 января 2017 г. 7:26