Как показать кнопку, если есть две роли Lotus Formula скрипт

У меня есть страница в Lotus, на которой есть кнопка действия. Эта кнопка не должна отображаться, если пользователь не является частью роли администратора или супервизора. Я сделал это, добавив эту формулу:

@IsNotMember ("[Admin]"; @UserRoles) | @IsNotMember ("[Супервизор]"; @UserRoles)

Но это не работает.. Если у меня есть только 1, например: @IsNotMember("[Admin]"; @UserRoles) и роль Admin, то в качестве администратора я могу видеть это.

Но я также хотел бы иметь это, если пользователь из роли Supervisor, а не Admin, он все еще может видеть кнопку.

Что делать?

2 ответа

Решение

Формула

 @IsNotMember("[Admin]" : "[Supervisor]"; @UserRoles)

возвращает @True, если у пользователя нет ни роли "[Admin]", ни "[Supervisor]". Используйте это как формула скрытия когда для вашей кнопки. Только администраторы и супервизоры увидят кнопку тогда.

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

В Notes всегда использовались формулы "скрыть когда", но люди действительно склонны мыслить в терминах "время видения" в своих требованиях! Мы знаем, когда мы хотим что-то увидеть (когда мы Супервизоры или Администраторы в этом случае). И мы действительно плохо умеем превращать эти требования "когда" в формулы "скрыть когда", потому что мы очень плохо помним Закон Деморгана, который гласит: ^(P & Q) == (^P | ^Q)

Итак, если мы сформулируем требование следующим образом:

Hide when the user isn't a Supervisor or an Admin

у нас, как правило, возникают проблемы с превращением его в правильную формулу с двумя вызовами @IsNotMember (которые являются неявно логическими Nots), потому что мы забываем, что Ors должны превращаться в Ands, чтобы сделать это правильно. Но если мы подумаем об этом так:

See when the user is an Admin or the user is an Supervisor

Легко понять, как это выразить:

@IsMember("[Supervisor]"; @UserRoles) | @IsMember("[Admin]"; @UserRoles);

Или используя силу списков языков формул, мы можем сократить это до следующего:

@IsMember("[Supervisor]": "[Admin]" ; @UserRoles);

Чтобы превратить это в эквивалентное время скрытия, все, что вам нужно сделать, это поместить вокруг него логическое Не вот так:

! (@IsMember("[Supervisor]": "[Admin]" ; @UserRoles));

Вы можете сделать это с помощью любой видимой формулы - просто заключите ее в скобки и вставьте! перед ним, но в особом случае формулы, которая просто использует @IsMember, вы можете просто изменить ее на @IsNotMember, что возвращает ее к решению Кнута.

Другие вопросы по тегам