Multiple OR (||) Conditions in If Statement
.everyoneloves__top-leaderboard:empty,.everyoneloves__mid-leaderboard:empty,.everyoneloves__bot-mid-leaderboard:empty{ margin-bottom:0;
}
Can anyone explain why the following If statement does not work with multiple OR conditions. The goal is when this trigger runs, if the user's Id who is updating the record is not equal to a specific Id, then an error is thrown. The If clause works only when I compare the current user's Id with a single specific Id.
String currentUserId = UserInfo.getUserId();
if (currentUserId != 'XXXXXXXXX' || currentUserId != 'YYYYYYYYY' || currentUserId != 'ZZZZZZZZZ') {
Trigger.new[0].addError('Only specific users are able to change the Account Classification Field');
}
{EDIT} FYI: I know I can accomplish this by using the following code, but I am curious as to why the OR operator is not working as I had expected.
if (currentUserId != 'XXXXXXXXX') {
if (currentUserId != 'YYYYYYYYY') {
if (currentUserId != 'ZZZZZZZZZ') {
Trigger.new[0].addError('Only specific users are able to change the Account Classification Field');
}
}
}
apex trigger if
add a comment |
Can anyone explain why the following If statement does not work with multiple OR conditions. The goal is when this trigger runs, if the user's Id who is updating the record is not equal to a specific Id, then an error is thrown. The If clause works only when I compare the current user's Id with a single specific Id.
String currentUserId = UserInfo.getUserId();
if (currentUserId != 'XXXXXXXXX' || currentUserId != 'YYYYYYYYY' || currentUserId != 'ZZZZZZZZZ') {
Trigger.new[0].addError('Only specific users are able to change the Account Classification Field');
}
{EDIT} FYI: I know I can accomplish this by using the following code, but I am curious as to why the OR operator is not working as I had expected.
if (currentUserId != 'XXXXXXXXX') {
if (currentUserId != 'YYYYYYYYY') {
if (currentUserId != 'ZZZZZZZZZ') {
Trigger.new[0].addError('Only specific users are able to change the Account Classification Field');
}
}
}
apex trigger if
add a comment |
Can anyone explain why the following If statement does not work with multiple OR conditions. The goal is when this trigger runs, if the user's Id who is updating the record is not equal to a specific Id, then an error is thrown. The If clause works only when I compare the current user's Id with a single specific Id.
String currentUserId = UserInfo.getUserId();
if (currentUserId != 'XXXXXXXXX' || currentUserId != 'YYYYYYYYY' || currentUserId != 'ZZZZZZZZZ') {
Trigger.new[0].addError('Only specific users are able to change the Account Classification Field');
}
{EDIT} FYI: I know I can accomplish this by using the following code, but I am curious as to why the OR operator is not working as I had expected.
if (currentUserId != 'XXXXXXXXX') {
if (currentUserId != 'YYYYYYYYY') {
if (currentUserId != 'ZZZZZZZZZ') {
Trigger.new[0].addError('Only specific users are able to change the Account Classification Field');
}
}
}
apex trigger if
Can anyone explain why the following If statement does not work with multiple OR conditions. The goal is when this trigger runs, if the user's Id who is updating the record is not equal to a specific Id, then an error is thrown. The If clause works only when I compare the current user's Id with a single specific Id.
String currentUserId = UserInfo.getUserId();
if (currentUserId != 'XXXXXXXXX' || currentUserId != 'YYYYYYYYY' || currentUserId != 'ZZZZZZZZZ') {
Trigger.new[0].addError('Only specific users are able to change the Account Classification Field');
}
{EDIT} FYI: I know I can accomplish this by using the following code, but I am curious as to why the OR operator is not working as I had expected.
if (currentUserId != 'XXXXXXXXX') {
if (currentUserId != 'YYYYYYYYY') {
if (currentUserId != 'ZZZZZZZZZ') {
Trigger.new[0].addError('Only specific users are able to change the Account Classification Field');
}
}
}
apex trigger if
apex trigger if
edited Apr 18 at 16:42
Max Goldfarb
asked Apr 18 at 16:38
Max GoldfarbMax Goldfarb
134
134
add a comment |
add a comment |
4 Answers
4
active
oldest
votes
"OR" means "true if either value is true". If the ID is "XXXXXXXXX", for example, it will NOT be "YYYYYYYYY", therefore OR will result in a true value. You need to use "AND" (&&) instead, meaning "true only if both values are true."
Side note: It's not enough to just put an error on Trigger.new[0]; there may be multiple records in the trigger context, and this can result in a "too many retries" error during bulk data operations.
Maybe my logic is incorrect, but I believe do want "true if either [any] value is true" and not "true only if both values are true." Please correct me if I am wrong, but if I use the && operator than the error will be thrown only if the User's Id is equal to XXXXXXXXX, YYYYYYYYY, AND ZZZZZZZZZ?
– Max Goldfarb
Apr 18 at 16:44
Then use==
instead of!=
in your comparison.
– Sebastian Kessel
Apr 18 at 16:46
That'd meanIf the user is EQUAL to X OR Y OR Z
. You have it written asif the user is DIFFERENT to X OR Y OR Z
– Sebastian Kessel
Apr 18 at 16:48
2
@MaxGoldfarb You'll want to look at de Morgan's Laws. If the user Id must be one of three values, you would say "Id is equal to XXXXX OR YYYYY OR ZZZZZ".
– sfdcfox
Apr 18 at 16:52
Awesome thanks for your help guys, I really appreciate it, @sfdcfox using the && operator seems to satisfy my requirements from my brief testing. Again, really appreciate you guys/girls help!
– Max Goldfarb
Apr 18 at 16:55
|
show 1 more comment
@sfdcfox is correct, Although I would do a
!( (new List<String>{'XXXX','YYYY','ZZZZ'}).contains(currentUserId) )
Chaining a bunch of Logical OR's gets messy, especially if you need to add to the list in the future. I would make a public static variable of it to describe the classes permission if you plan on using that permission group you have there in more than one place.
That's a really good idea, will probably do this. Thanks!
– Max Goldfarb
Apr 18 at 16:59
If you want also you could make a property of the class and say something like Class.UserIsInAdminGroup
– Zach Hutchins
Apr 18 at 17:01
I would look into this ticket if you are planning on using List<Id> salesforce.stackexchange.com/questions/224490/…. Theres a reason i use string because salesforce fixing things won't come in your or my lifetime
– Zach Hutchins
Apr 18 at 17:14
add a comment |
In programming,
if (currentUserId != 'XXXXXXXXX' || currentUserId != 'YYYYYYYYY' || currentUserId != 'ZZZZZZZZZ') {}
means that, if at least any of the 3 conditions is TRUE, the full expression is TRUE.
For a currentUserId='XXXXXXXXX', the expression is evaluated as
currentUserId != 'XXXXXXXXX' ==> FALSE
currentUserId != 'YYYYYYYYY' ==> TRUE
currentUserId != 'ZZZZZZZZZ' ==> TRUE
So, for currentUserId='XXXXXXXXX', it adds the error Only specific users are able to change the Account Classification Field
, which is not desirable.
It can be explained by De Morgan's Law.
Not (A and B) is the same as Not A or Not B.
Not (A or B) is the same as Not A and Not B.
In your case,
currentUserId NOT ('XXXXXXXXX' OR 'YYYYYYYYY' OR 'ZZZZZZZZZ')
which can be written as
currentUserId NOT 'XXXXXXXXX' AND currentUserId NOT 'YYYYYYYYY' AND currentUserId NOT 'ZZZZZZZZZ'
add a comment |
While your logic will always return true because the value is always not one of the three values, correcting this code by inverting ||
to &&
would be missing the point that there is a better way to filter logic so it is specific to a subset of users. The two most ideal ways to code for this so that it is configurable are Custom Permissions
and Hierarchy Custom Settings
.
Custom Permissions
- Create a
Custom Permission
named e.g.CanDoOperationX
. - Create a
Permission Set
which contains only this permission. - Assign this
Permission Set
to eachUser
in your whitelist. - Update your condition to check
FeatureManagement.checkPermission('CanDoOperationX')
Hierarchy Custom Setting
This option doesn't make as much sense unless you have other user specific overrides for this functionality, but it is certainly viable.
- Create a
Hierarchy Custom Setting
named e.g.MyTriggerSettings
. - Add a
Checkbox
field named e.g.Can_Do_Operation_X__c
. - Create a new record in this setting for each
User
in your whitelist. - Update your condition to check
$MyTriggerSettings__c.getInstance().Can_Do_Operation_X__c
.
add a comment |
Your Answer
StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "459"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});
function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: false,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: null,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});
}
});
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fsalesforce.stackexchange.com%2fquestions%2f258350%2fmultiple-or-conditions-in-if-statement%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
4 Answers
4
active
oldest
votes
4 Answers
4
active
oldest
votes
active
oldest
votes
active
oldest
votes
"OR" means "true if either value is true". If the ID is "XXXXXXXXX", for example, it will NOT be "YYYYYYYYY", therefore OR will result in a true value. You need to use "AND" (&&) instead, meaning "true only if both values are true."
Side note: It's not enough to just put an error on Trigger.new[0]; there may be multiple records in the trigger context, and this can result in a "too many retries" error during bulk data operations.
Maybe my logic is incorrect, but I believe do want "true if either [any] value is true" and not "true only if both values are true." Please correct me if I am wrong, but if I use the && operator than the error will be thrown only if the User's Id is equal to XXXXXXXXX, YYYYYYYYY, AND ZZZZZZZZZ?
– Max Goldfarb
Apr 18 at 16:44
Then use==
instead of!=
in your comparison.
– Sebastian Kessel
Apr 18 at 16:46
That'd meanIf the user is EQUAL to X OR Y OR Z
. You have it written asif the user is DIFFERENT to X OR Y OR Z
– Sebastian Kessel
Apr 18 at 16:48
2
@MaxGoldfarb You'll want to look at de Morgan's Laws. If the user Id must be one of three values, you would say "Id is equal to XXXXX OR YYYYY OR ZZZZZ".
– sfdcfox
Apr 18 at 16:52
Awesome thanks for your help guys, I really appreciate it, @sfdcfox using the && operator seems to satisfy my requirements from my brief testing. Again, really appreciate you guys/girls help!
– Max Goldfarb
Apr 18 at 16:55
|
show 1 more comment
"OR" means "true if either value is true". If the ID is "XXXXXXXXX", for example, it will NOT be "YYYYYYYYY", therefore OR will result in a true value. You need to use "AND" (&&) instead, meaning "true only if both values are true."
Side note: It's not enough to just put an error on Trigger.new[0]; there may be multiple records in the trigger context, and this can result in a "too many retries" error during bulk data operations.
Maybe my logic is incorrect, but I believe do want "true if either [any] value is true" and not "true only if both values are true." Please correct me if I am wrong, but if I use the && operator than the error will be thrown only if the User's Id is equal to XXXXXXXXX, YYYYYYYYY, AND ZZZZZZZZZ?
– Max Goldfarb
Apr 18 at 16:44
Then use==
instead of!=
in your comparison.
– Sebastian Kessel
Apr 18 at 16:46
That'd meanIf the user is EQUAL to X OR Y OR Z
. You have it written asif the user is DIFFERENT to X OR Y OR Z
– Sebastian Kessel
Apr 18 at 16:48
2
@MaxGoldfarb You'll want to look at de Morgan's Laws. If the user Id must be one of three values, you would say "Id is equal to XXXXX OR YYYYY OR ZZZZZ".
– sfdcfox
Apr 18 at 16:52
Awesome thanks for your help guys, I really appreciate it, @sfdcfox using the && operator seems to satisfy my requirements from my brief testing. Again, really appreciate you guys/girls help!
– Max Goldfarb
Apr 18 at 16:55
|
show 1 more comment
"OR" means "true if either value is true". If the ID is "XXXXXXXXX", for example, it will NOT be "YYYYYYYYY", therefore OR will result in a true value. You need to use "AND" (&&) instead, meaning "true only if both values are true."
Side note: It's not enough to just put an error on Trigger.new[0]; there may be multiple records in the trigger context, and this can result in a "too many retries" error during bulk data operations.
"OR" means "true if either value is true". If the ID is "XXXXXXXXX", for example, it will NOT be "YYYYYYYYY", therefore OR will result in a true value. You need to use "AND" (&&) instead, meaning "true only if both values are true."
Side note: It's not enough to just put an error on Trigger.new[0]; there may be multiple records in the trigger context, and this can result in a "too many retries" error during bulk data operations.
answered Apr 18 at 16:40
sfdcfoxsfdcfox
267k13213461
267k13213461
Maybe my logic is incorrect, but I believe do want "true if either [any] value is true" and not "true only if both values are true." Please correct me if I am wrong, but if I use the && operator than the error will be thrown only if the User's Id is equal to XXXXXXXXX, YYYYYYYYY, AND ZZZZZZZZZ?
– Max Goldfarb
Apr 18 at 16:44
Then use==
instead of!=
in your comparison.
– Sebastian Kessel
Apr 18 at 16:46
That'd meanIf the user is EQUAL to X OR Y OR Z
. You have it written asif the user is DIFFERENT to X OR Y OR Z
– Sebastian Kessel
Apr 18 at 16:48
2
@MaxGoldfarb You'll want to look at de Morgan's Laws. If the user Id must be one of three values, you would say "Id is equal to XXXXX OR YYYYY OR ZZZZZ".
– sfdcfox
Apr 18 at 16:52
Awesome thanks for your help guys, I really appreciate it, @sfdcfox using the && operator seems to satisfy my requirements from my brief testing. Again, really appreciate you guys/girls help!
– Max Goldfarb
Apr 18 at 16:55
|
show 1 more comment
Maybe my logic is incorrect, but I believe do want "true if either [any] value is true" and not "true only if both values are true." Please correct me if I am wrong, but if I use the && operator than the error will be thrown only if the User's Id is equal to XXXXXXXXX, YYYYYYYYY, AND ZZZZZZZZZ?
– Max Goldfarb
Apr 18 at 16:44
Then use==
instead of!=
in your comparison.
– Sebastian Kessel
Apr 18 at 16:46
That'd meanIf the user is EQUAL to X OR Y OR Z
. You have it written asif the user is DIFFERENT to X OR Y OR Z
– Sebastian Kessel
Apr 18 at 16:48
2
@MaxGoldfarb You'll want to look at de Morgan's Laws. If the user Id must be one of three values, you would say "Id is equal to XXXXX OR YYYYY OR ZZZZZ".
– sfdcfox
Apr 18 at 16:52
Awesome thanks for your help guys, I really appreciate it, @sfdcfox using the && operator seems to satisfy my requirements from my brief testing. Again, really appreciate you guys/girls help!
– Max Goldfarb
Apr 18 at 16:55
Maybe my logic is incorrect, but I believe do want "true if either [any] value is true" and not "true only if both values are true." Please correct me if I am wrong, but if I use the && operator than the error will be thrown only if the User's Id is equal to XXXXXXXXX, YYYYYYYYY, AND ZZZZZZZZZ?
– Max Goldfarb
Apr 18 at 16:44
Maybe my logic is incorrect, but I believe do want "true if either [any] value is true" and not "true only if both values are true." Please correct me if I am wrong, but if I use the && operator than the error will be thrown only if the User's Id is equal to XXXXXXXXX, YYYYYYYYY, AND ZZZZZZZZZ?
– Max Goldfarb
Apr 18 at 16:44
Then use
==
instead of !=
in your comparison.– Sebastian Kessel
Apr 18 at 16:46
Then use
==
instead of !=
in your comparison.– Sebastian Kessel
Apr 18 at 16:46
That'd mean
If the user is EQUAL to X OR Y OR Z
. You have it written as if the user is DIFFERENT to X OR Y OR Z
– Sebastian Kessel
Apr 18 at 16:48
That'd mean
If the user is EQUAL to X OR Y OR Z
. You have it written as if the user is DIFFERENT to X OR Y OR Z
– Sebastian Kessel
Apr 18 at 16:48
2
2
@MaxGoldfarb You'll want to look at de Morgan's Laws. If the user Id must be one of three values, you would say "Id is equal to XXXXX OR YYYYY OR ZZZZZ".
– sfdcfox
Apr 18 at 16:52
@MaxGoldfarb You'll want to look at de Morgan's Laws. If the user Id must be one of three values, you would say "Id is equal to XXXXX OR YYYYY OR ZZZZZ".
– sfdcfox
Apr 18 at 16:52
Awesome thanks for your help guys, I really appreciate it, @sfdcfox using the && operator seems to satisfy my requirements from my brief testing. Again, really appreciate you guys/girls help!
– Max Goldfarb
Apr 18 at 16:55
Awesome thanks for your help guys, I really appreciate it, @sfdcfox using the && operator seems to satisfy my requirements from my brief testing. Again, really appreciate you guys/girls help!
– Max Goldfarb
Apr 18 at 16:55
|
show 1 more comment
@sfdcfox is correct, Although I would do a
!( (new List<String>{'XXXX','YYYY','ZZZZ'}).contains(currentUserId) )
Chaining a bunch of Logical OR's gets messy, especially if you need to add to the list in the future. I would make a public static variable of it to describe the classes permission if you plan on using that permission group you have there in more than one place.
That's a really good idea, will probably do this. Thanks!
– Max Goldfarb
Apr 18 at 16:59
If you want also you could make a property of the class and say something like Class.UserIsInAdminGroup
– Zach Hutchins
Apr 18 at 17:01
I would look into this ticket if you are planning on using List<Id> salesforce.stackexchange.com/questions/224490/…. Theres a reason i use string because salesforce fixing things won't come in your or my lifetime
– Zach Hutchins
Apr 18 at 17:14
add a comment |
@sfdcfox is correct, Although I would do a
!( (new List<String>{'XXXX','YYYY','ZZZZ'}).contains(currentUserId) )
Chaining a bunch of Logical OR's gets messy, especially if you need to add to the list in the future. I would make a public static variable of it to describe the classes permission if you plan on using that permission group you have there in more than one place.
That's a really good idea, will probably do this. Thanks!
– Max Goldfarb
Apr 18 at 16:59
If you want also you could make a property of the class and say something like Class.UserIsInAdminGroup
– Zach Hutchins
Apr 18 at 17:01
I would look into this ticket if you are planning on using List<Id> salesforce.stackexchange.com/questions/224490/…. Theres a reason i use string because salesforce fixing things won't come in your or my lifetime
– Zach Hutchins
Apr 18 at 17:14
add a comment |
@sfdcfox is correct, Although I would do a
!( (new List<String>{'XXXX','YYYY','ZZZZ'}).contains(currentUserId) )
Chaining a bunch of Logical OR's gets messy, especially if you need to add to the list in the future. I would make a public static variable of it to describe the classes permission if you plan on using that permission group you have there in more than one place.
@sfdcfox is correct, Although I would do a
!( (new List<String>{'XXXX','YYYY','ZZZZ'}).contains(currentUserId) )
Chaining a bunch of Logical OR's gets messy, especially if you need to add to the list in the future. I would make a public static variable of it to describe the classes permission if you plan on using that permission group you have there in more than one place.
answered Apr 18 at 16:56
Zach HutchinsZach Hutchins
829
829
That's a really good idea, will probably do this. Thanks!
– Max Goldfarb
Apr 18 at 16:59
If you want also you could make a property of the class and say something like Class.UserIsInAdminGroup
– Zach Hutchins
Apr 18 at 17:01
I would look into this ticket if you are planning on using List<Id> salesforce.stackexchange.com/questions/224490/…. Theres a reason i use string because salesforce fixing things won't come in your or my lifetime
– Zach Hutchins
Apr 18 at 17:14
add a comment |
That's a really good idea, will probably do this. Thanks!
– Max Goldfarb
Apr 18 at 16:59
If you want also you could make a property of the class and say something like Class.UserIsInAdminGroup
– Zach Hutchins
Apr 18 at 17:01
I would look into this ticket if you are planning on using List<Id> salesforce.stackexchange.com/questions/224490/…. Theres a reason i use string because salesforce fixing things won't come in your or my lifetime
– Zach Hutchins
Apr 18 at 17:14
That's a really good idea, will probably do this. Thanks!
– Max Goldfarb
Apr 18 at 16:59
That's a really good idea, will probably do this. Thanks!
– Max Goldfarb
Apr 18 at 16:59
If you want also you could make a property of the class and say something like Class.UserIsInAdminGroup
– Zach Hutchins
Apr 18 at 17:01
If you want also you could make a property of the class and say something like Class.UserIsInAdminGroup
– Zach Hutchins
Apr 18 at 17:01
I would look into this ticket if you are planning on using List<Id> salesforce.stackexchange.com/questions/224490/…. Theres a reason i use string because salesforce fixing things won't come in your or my lifetime
– Zach Hutchins
Apr 18 at 17:14
I would look into this ticket if you are planning on using List<Id> salesforce.stackexchange.com/questions/224490/…. Theres a reason i use string because salesforce fixing things won't come in your or my lifetime
– Zach Hutchins
Apr 18 at 17:14
add a comment |
In programming,
if (currentUserId != 'XXXXXXXXX' || currentUserId != 'YYYYYYYYY' || currentUserId != 'ZZZZZZZZZ') {}
means that, if at least any of the 3 conditions is TRUE, the full expression is TRUE.
For a currentUserId='XXXXXXXXX', the expression is evaluated as
currentUserId != 'XXXXXXXXX' ==> FALSE
currentUserId != 'YYYYYYYYY' ==> TRUE
currentUserId != 'ZZZZZZZZZ' ==> TRUE
So, for currentUserId='XXXXXXXXX', it adds the error Only specific users are able to change the Account Classification Field
, which is not desirable.
It can be explained by De Morgan's Law.
Not (A and B) is the same as Not A or Not B.
Not (A or B) is the same as Not A and Not B.
In your case,
currentUserId NOT ('XXXXXXXXX' OR 'YYYYYYYYY' OR 'ZZZZZZZZZ')
which can be written as
currentUserId NOT 'XXXXXXXXX' AND currentUserId NOT 'YYYYYYYYY' AND currentUserId NOT 'ZZZZZZZZZ'
add a comment |
In programming,
if (currentUserId != 'XXXXXXXXX' || currentUserId != 'YYYYYYYYY' || currentUserId != 'ZZZZZZZZZ') {}
means that, if at least any of the 3 conditions is TRUE, the full expression is TRUE.
For a currentUserId='XXXXXXXXX', the expression is evaluated as
currentUserId != 'XXXXXXXXX' ==> FALSE
currentUserId != 'YYYYYYYYY' ==> TRUE
currentUserId != 'ZZZZZZZZZ' ==> TRUE
So, for currentUserId='XXXXXXXXX', it adds the error Only specific users are able to change the Account Classification Field
, which is not desirable.
It can be explained by De Morgan's Law.
Not (A and B) is the same as Not A or Not B.
Not (A or B) is the same as Not A and Not B.
In your case,
currentUserId NOT ('XXXXXXXXX' OR 'YYYYYYYYY' OR 'ZZZZZZZZZ')
which can be written as
currentUserId NOT 'XXXXXXXXX' AND currentUserId NOT 'YYYYYYYYY' AND currentUserId NOT 'ZZZZZZZZZ'
add a comment |
In programming,
if (currentUserId != 'XXXXXXXXX' || currentUserId != 'YYYYYYYYY' || currentUserId != 'ZZZZZZZZZ') {}
means that, if at least any of the 3 conditions is TRUE, the full expression is TRUE.
For a currentUserId='XXXXXXXXX', the expression is evaluated as
currentUserId != 'XXXXXXXXX' ==> FALSE
currentUserId != 'YYYYYYYYY' ==> TRUE
currentUserId != 'ZZZZZZZZZ' ==> TRUE
So, for currentUserId='XXXXXXXXX', it adds the error Only specific users are able to change the Account Classification Field
, which is not desirable.
It can be explained by De Morgan's Law.
Not (A and B) is the same as Not A or Not B.
Not (A or B) is the same as Not A and Not B.
In your case,
currentUserId NOT ('XXXXXXXXX' OR 'YYYYYYYYY' OR 'ZZZZZZZZZ')
which can be written as
currentUserId NOT 'XXXXXXXXX' AND currentUserId NOT 'YYYYYYYYY' AND currentUserId NOT 'ZZZZZZZZZ'
In programming,
if (currentUserId != 'XXXXXXXXX' || currentUserId != 'YYYYYYYYY' || currentUserId != 'ZZZZZZZZZ') {}
means that, if at least any of the 3 conditions is TRUE, the full expression is TRUE.
For a currentUserId='XXXXXXXXX', the expression is evaluated as
currentUserId != 'XXXXXXXXX' ==> FALSE
currentUserId != 'YYYYYYYYY' ==> TRUE
currentUserId != 'ZZZZZZZZZ' ==> TRUE
So, for currentUserId='XXXXXXXXX', it adds the error Only specific users are able to change the Account Classification Field
, which is not desirable.
It can be explained by De Morgan's Law.
Not (A and B) is the same as Not A or Not B.
Not (A or B) is the same as Not A and Not B.
In your case,
currentUserId NOT ('XXXXXXXXX' OR 'YYYYYYYYY' OR 'ZZZZZZZZZ')
which can be written as
currentUserId NOT 'XXXXXXXXX' AND currentUserId NOT 'YYYYYYYYY' AND currentUserId NOT 'ZZZZZZZZZ'
answered Apr 18 at 17:05
Noor A ShuvoNoor A Shuvo
1316
1316
add a comment |
add a comment |
While your logic will always return true because the value is always not one of the three values, correcting this code by inverting ||
to &&
would be missing the point that there is a better way to filter logic so it is specific to a subset of users. The two most ideal ways to code for this so that it is configurable are Custom Permissions
and Hierarchy Custom Settings
.
Custom Permissions
- Create a
Custom Permission
named e.g.CanDoOperationX
. - Create a
Permission Set
which contains only this permission. - Assign this
Permission Set
to eachUser
in your whitelist. - Update your condition to check
FeatureManagement.checkPermission('CanDoOperationX')
Hierarchy Custom Setting
This option doesn't make as much sense unless you have other user specific overrides for this functionality, but it is certainly viable.
- Create a
Hierarchy Custom Setting
named e.g.MyTriggerSettings
. - Add a
Checkbox
field named e.g.Can_Do_Operation_X__c
. - Create a new record in this setting for each
User
in your whitelist. - Update your condition to check
$MyTriggerSettings__c.getInstance().Can_Do_Operation_X__c
.
add a comment |
While your logic will always return true because the value is always not one of the three values, correcting this code by inverting ||
to &&
would be missing the point that there is a better way to filter logic so it is specific to a subset of users. The two most ideal ways to code for this so that it is configurable are Custom Permissions
and Hierarchy Custom Settings
.
Custom Permissions
- Create a
Custom Permission
named e.g.CanDoOperationX
. - Create a
Permission Set
which contains only this permission. - Assign this
Permission Set
to eachUser
in your whitelist. - Update your condition to check
FeatureManagement.checkPermission('CanDoOperationX')
Hierarchy Custom Setting
This option doesn't make as much sense unless you have other user specific overrides for this functionality, but it is certainly viable.
- Create a
Hierarchy Custom Setting
named e.g.MyTriggerSettings
. - Add a
Checkbox
field named e.g.Can_Do_Operation_X__c
. - Create a new record in this setting for each
User
in your whitelist. - Update your condition to check
$MyTriggerSettings__c.getInstance().Can_Do_Operation_X__c
.
add a comment |
While your logic will always return true because the value is always not one of the three values, correcting this code by inverting ||
to &&
would be missing the point that there is a better way to filter logic so it is specific to a subset of users. The two most ideal ways to code for this so that it is configurable are Custom Permissions
and Hierarchy Custom Settings
.
Custom Permissions
- Create a
Custom Permission
named e.g.CanDoOperationX
. - Create a
Permission Set
which contains only this permission. - Assign this
Permission Set
to eachUser
in your whitelist. - Update your condition to check
FeatureManagement.checkPermission('CanDoOperationX')
Hierarchy Custom Setting
This option doesn't make as much sense unless you have other user specific overrides for this functionality, but it is certainly viable.
- Create a
Hierarchy Custom Setting
named e.g.MyTriggerSettings
. - Add a
Checkbox
field named e.g.Can_Do_Operation_X__c
. - Create a new record in this setting for each
User
in your whitelist. - Update your condition to check
$MyTriggerSettings__c.getInstance().Can_Do_Operation_X__c
.
While your logic will always return true because the value is always not one of the three values, correcting this code by inverting ||
to &&
would be missing the point that there is a better way to filter logic so it is specific to a subset of users. The two most ideal ways to code for this so that it is configurable are Custom Permissions
and Hierarchy Custom Settings
.
Custom Permissions
- Create a
Custom Permission
named e.g.CanDoOperationX
. - Create a
Permission Set
which contains only this permission. - Assign this
Permission Set
to eachUser
in your whitelist. - Update your condition to check
FeatureManagement.checkPermission('CanDoOperationX')
Hierarchy Custom Setting
This option doesn't make as much sense unless you have other user specific overrides for this functionality, but it is certainly viable.
- Create a
Hierarchy Custom Setting
named e.g.MyTriggerSettings
. - Add a
Checkbox
field named e.g.Can_Do_Operation_X__c
. - Create a new record in this setting for each
User
in your whitelist. - Update your condition to check
$MyTriggerSettings__c.getInstance().Can_Do_Operation_X__c
.
answered Apr 18 at 17:13
Adrian Larson♦Adrian Larson
111k19122259
111k19122259
add a comment |
add a comment |
Thanks for contributing an answer to Salesforce Stack Exchange!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fsalesforce.stackexchange.com%2fquestions%2f258350%2fmultiple-or-conditions-in-if-statement%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown