我需要帮助使用正确的VisualForce语法来使用“或”逻辑。我正在使用的代码是:
<apex:page action="{!if($User.Alias !='Item1',
null,
urlFor($Action.Account.Delete, $CurrentPage.Parameters.id, [retURL='/001'], true)
)
}"
standardController="Account">
<apex:pageBlock >
<apex:PageMessage summary="You are not allowed to delete Accounts"
severity="Warning"
strength="3"/>
<apex:pageMessages />
</apex:pageBlock>
</apex:page>
在第一行:
{!if($User.Alias !='Item1',
我需要使用“或”逻辑指定多个项目,以便在任何指定的“Items”为真时评估IF语句。我想要这样的东西,但我不知道正确的语法是什么:
{!if($User.Alias !='Item1', OR 'Item2', OR 'Item3',
感谢您的帮助和耐心!
答案 0 :(得分:6)
您可以使用逻辑运算符或使用公式函数来执行此操作。
https://help.salesforce.com/HTViewHelpDoc?id=customize_functions.htm
这就是我称之为“程序员的语法”,因为它使用管道(||
)和&符号(&&
);操作员更容易阅读。
IF($User.Alias = 'JohnDoe' || $User.Alias = 'JBloggs' || $User.Alias = 'FooBar',
value_if_true,
value_if_false
)
您还可以使用“Excel语法”,其中OR()
函数可以使用任意数量的参数。
IF(OR($User.Alias = 'JohnDoe', $User.Alias = 'JBloggs', $User.Alias = 'FooBar'),
value_if_true,
value_if_false
)
尽量不要在业务逻辑中使用用户别名。用户可以更改自己的别名,使您的支票无效。看看您是否可以根据$Profile
,$UserRole
或可能在用户记录上创建一些复选框字段,使其仅对SysAdmins可编辑...
在此特定方案中 - 有一种方法可以在运行时检查用户是否有权删除帐户。检查Using apex:relatedList in a Visualforce page when the user profile denies access to child objects(您需要“isDeletable”版本)。
修改(重新:关于!
和!=
的评论)
我在你用过的第一个链接中提到过;)
!=
,有时<>
是程序员用来写“不等于”的东西。它看起来类似于“削减等号”(≠),但不需要记住该字符的一些奇怪的代码。这种约定在许多编程语言中非常统一。
就您而言 - 公式和Visualforce表达式的语法可以互换使用:
=
和==
代表“等于”!=
和<>
代表“不等于”(后者也适用于Excel)所以如果你写IF($User.Alias = 'JohnDoe', 'Allow', 'Deny')
,你的意思是只有他会看到“允许”。
还有一件事可能会让你感到困惑 - 否定操作符:站在任何表达式前面的!
将转换为真↔false。这也可以通过在NOT(some true/false expression here)
。
(感叹号表示合并字段开始并不意味着否定。因此{!some expression}
仅表示该表达式的逻辑(或数字或文本)值。要否定它,您要么{{1 }或{!!expression}
。