“не содержит” в CAML?

Это несколько неясно объяснено в документах :

  /**
   * An execution definition.
   * The first value is a unique name for the execution.
   *
   * ...
   *
   * Plugin info annotation parameters:
   *  ...
   *  users (java.util.Set) - Users permitted to query this plugin for information or invoke it.
   *  groups (java.util.Set) - Groups permitted to query this plugin for information or invoke it.
   *
   * ...
   */

  myExecution(version:version, description:description, httpMethod: 'GET', users:[], groups:[], params:[:]) { params ->
  }

Существует несколько необязательных параметров, которые вы можете передать при создании плагина выполнения, два из которых users и groups. Если они опущены или пусты, плагины могут выполнять только пользователи-администраторы. Если вы хотите, чтобы пользователи без прав администратора запускали плагин, вам необходимо добавить имена пользователей в список users или имена групп в список groups. Например:

executions {
    repoInfo(httpMethod: 'GET', users: ['tom', 'bill'], groups: ['dev-team']) { params ->
        // ...
    }
}

В этом случае люди, которые могут использовать этот плагин: tom, bill, кто-либо в группе dev-team и кто-либо с правами администратора.


Иногда имеет смысл сделать плагин доступным для всех и каждого. Для этого вы обычно делаете что-то вроде:

executions {
    publicRepoInfo(httpMethod: 'GET', groups: ['readers']) { params ->
        // ...
    }
}

Artifactory устанавливает с уже существующей группой под названием readers, которая автоматически добавляется всем новым пользователям и предоставляет им базовый доступ для чтения, поэтому все вошедшие в систему пользователи должны быть частью этой группы. Все пользователи, которые не вошли в систему, считаются зарегистрированными как специальный пользователь anonymous, который также является частью группы readers.

7
задан Gilles 'SO- stop being evil' 2 March 2012 в 13:20
поделиться

4 ответа

То же ограничение относится к BeginWith. Я не знаю хорошего решения печально. Что Вы могли сделать: Сделайте Содержать-запрос, цикл через каждый объект и получите идентификаторы, затем сделайте другой большой запрос для "идентификатора NotEqual 1 или идентификатора NotEqual 2 или идентификатора NotEqual 3......" Так как идентификатор индексируется насколько я знаю, это должно оказать меньшее влияние на базу данных, но это все еще действительно плохо пахнет.

Для маленького списка это не имеет значения для больших списков, я использовал бы SQL Server Profiler для наблюдения, каково влияние.

4
ответ дан 7 December 2019 в 07:51
поделиться

@drax: давайте надеяться, что CAML уходит - период. Это - определенно один из худших аспектов текущего программирования SP.

0
ответ дан 7 December 2019 в 07:51
поделиться

Эта проблема с 'Содержит', и 'BeginsWith' беспокоит меня также. Я надеюсь, что в следующей версии Sharepoint caml будет расширен, чтобы быть реальным инструментом, не только скалой на нашем участке.

Путем я делаю это должно указать запрос как можно больше и затем отфильтровать строки, которые не соответствуют условиям в коде C#. Это иногда довольно ужасно, поскольку иногда необходимо обрабатывать 100 строк для окончания с 1 результатом того матча условия.

0
ответ дан 7 December 2019 в 07:51
поделиться

Итак, как лучше всего получить элементы , не содержащие строки?

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

Например, столбец называется IsCritical . Затем добавьте столбец как «ДА / НЕТ» и формулу как

=ISNUMBER(FIND("Critical"), [Title])

Затем в вашем запросе CAML

<Query>
<Where>
   <Eq>
     <FieldRef Name='IsCritical'/>
     <Value Type='Boolean'>0</Value>
   </Eq>
</Where>
</Query>

0 в этом запросе как бы отражает «не критично». Однако я не уверен, какой может быть производительность, в отличие от наличия собственного CAML «Not Containts», которого, к сожалению, не существует.

См. Также Схема запроса CAML в MSDN

3
ответ дан 7 December 2019 в 07:51
поделиться
Другие вопросы по тегам:

Похожие вопросы: