Формула SELECT Lotus Notes с использованием @IsMember и @UserRoles для представления

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

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

Обратите внимание, что английский не является моим родным языком ;-)

У меня есть 4 разных типа документов, 3 (TypeA, TypeB и TypeC) видны всем, а 1 (TypeD) нужна определенная роль (например, [RoleD]).

Представление классифицируется по типу документа, и в каждом документе есть поля безопасности, которые предотвращают их просмотр, если у вас нет соответствующей роли. Поэтому, когда вы смотрите на представление, не являясь членом [RoleD], вы получаете следующий результат:

TypeA
    Doc1
    Doc2
    Doc3
TypeB
    Doc4
    Doc5
TypeC
    Doc6
    Doc7
TypeD
    {Empty}

Моя проблема в том, что хотя все документы TypeD скрыты, я также хочу скрыть «категорию».

Я пробовал использовать некоторые условия в выборе представления, чтобы выбирать документы TypeD только тогда, когда пользователь является членом роли [RoleD], но безуспешно, используя @If, @IsMember (и @IsNotMember) и @UserRoles. Результат странный, даже если я член роли, категория и документы скрыты (?!?!?).

Вот что я пробовал до сих пор:

Try #1
    @If(@IsNotMember("[RoleD]";@UserRoles) ; DocTypeField != "TypeD" ; 1=1)
Try #2
    @IsNotMember("[RoleD]";@UserRoles) & DocTypeField != "TypeD"
    |
    @IsMember("[RoleD]";@UserRoles) & 1=1

Надеюсь, это не слишком запутанно.

Спасибо за столь необходимую помощь.


person MoJoE3131    schedule 12.07.2012    source источник


Ответы (2)


Есть свойство вида "не показывать пустые категории". Это набор на ваш взгляд?

person Ken Pespisa    schedule 12.07.2012
comment
:-((((( Я никогда не видел эту недвижимость... позор мне! Спасибо, Кен! - person MoJoE3131; 12.07.2012

Ответ Кена правильный. Однако я хочу отметить две вещи.

Во-первых, «не показывать пустые категории» может снизить производительность для пользователей. Это особенно верно в случаях, когда документов много (многие десятки тысяч), а отдельные пользователи имеют доступ только к очень небольшому их проценту.

Во-вторых, причина, по которой вы не можете надежно использовать @UserRoles в представлении, заключается в том, что для обычных представлений индекс представления не создается клиентом. Это задача индексатора на сервере, которая применяет формулу выбора, поэтому @UserRoles возвращает роли, применимые к идентификатору сервера. Если вы используете частное представление, которое индексируется клиентом, @UserRoles вернет то, что вы ожидаете. Есть и другие детали, которые следует учитывать, но эмпирическое правило заключается в том, что формулы выбора представления обычно не должны использовать функции, которые возвращают разные результаты для разных пользователей или разные результаты в разные дату/время.

person Richard Schwartz    schedule 12.07.2012
comment
Спасибо, rhsatrhs. Я попробую не показывать пустые категории, потому что это маленькое представление, и мои пользователи имеют полный доступ примерно к 90% документов. Большое спасибо за предупреждение! - person MoJoE3131; 12.07.2012