2016-11-02 16 views
1

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

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

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

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

Что делать?

ответ

3

Формула

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

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

3

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

Notes использует формулы «спрятать-когда» навсегда, но люди действительно склонны думать с точки зрения зрения, когда в их требованиях! Мы знаем, когда хотим видеть вещи (когда в этом случае мы наблюдатели или админы). И нам очень плохо, когда мы обращаем внимание на то, что нужно, чтобы спрятать эти формулы, потому что мы действительно плохо помним DeMorgan's Law, в котором говорится о таких вещах, как:^(P & Q) == (^ P |^Q)

Так что, если мы сформулируем требование так:

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

мы склонны иметь проблемы с включением его в правильную формулу с двумя @IsNotMember вызовы (которые неявно логические неимущими), потому что мы забываем, что 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)); 

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

+1

Gotta love that elementary logic :-) –

+1

Сокращенная версия, которую я нахожу проще: ! (@ Userroles = "[Admin]": "[Supervisor]"); - the!превращает hide-when в show-when (проще думать, как говорит Ричард) - «=» пробегает все комбинации списка @userroles и список, с которым сравнивается, поэтому, если у пользователя есть Admin или Supervisor , они будут видеть кнопку. – user2808054