Multiple OR (||) Conditions in If Statement Announcing the arrival of Valued Associate #679: Cesar Manara Planned maintenance scheduled April 17/18, 2019 at 00:00UTC (8:00pm US/Eastern) 2019 Moderator Election Q&A - Questionnaire 2019 Community Moderator Election ResultsBug in List.contains for Id data type?Multiple conditions on rendered attributeMultiple conditions in visualforcehow to bulkify soql with multiple where conditionsMultiple OR conditions not working IF statementLimiting Number of Accounts for UserRun a Trigger only during weekdaysPublic Write Access allows for mass edits, how to throttle editable batch size for certain users for specific field?Methods to Check if Sobjects are EqualWhy does the trigger always read my if statement as null?SOQL Search function of Contact Name With Account Parent to Contact Child
How does the math work when buying airline miles?
How would a mousetrap for use in space work?
As a beginner, should I get a Squier Strat with a SSS config or a HSS?
Effects on objects due to a brief relocation of massive amounts of mass
Why wasn't DOSKEY integrated with COMMAND.COM?
How could we fake a moon landing now?
Hangman Game with C++
Why does it sometimes sound good to play a grace note as a lead in to a note in a melody?
Did Krishna say in Bhagavad Gita "I am in every living being"
Why aren't air breathing engines used as small first stages?
How to write this math term? with cases it isn't working
An adverb for when you're not exaggerating
What is GELU activation?
If windows 7 doesn't support WSL, then what does Linux subsystem option mean?
Project Euler #1 in C++
Dating a Former Employee
Did MS DOS itself ever use blinking text?
What would you call this weird metallic apparatus that allows you to lift people?
Is it fair for a professor to grade us on the possession of past papers?
How come Sam didn't become Lord of Horn Hill?
Significance of Cersei's obsession with elephants?
How do I use the new nonlinear finite element in Mathematica 12 for this equation?
What are the out-of-universe reasons for the references to Toby Maguire-era Spider-Man in Into the Spider-Verse?
Trademark violation for app?
Multiple OR (||) Conditions in If Statement
Announcing the arrival of Valued Associate #679: Cesar Manara
Planned maintenance scheduled April 17/18, 2019 at 00:00UTC (8:00pm US/Eastern)
2019 Moderator Election Q&A - Questionnaire
2019 Community Moderator Election ResultsBug in List.contains for Id data type?Multiple conditions on rendered attributeMultiple conditions in visualforcehow to bulkify soql with multiple where conditionsMultiple OR conditions not working IF statementLimiting Number of Accounts for UserRun a Trigger only during weekdaysPublic Write Access allows for mass edits, how to throttle editable batch size for certain users for specific field?Methods to Check if Sobjects are EqualWhy does the trigger always read my if statement as null?SOQL Search function of Contact Name With Account Parent to Contact Child
.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 2 hours ago
Max Goldfarb
asked 2 hours ago
Max GoldfarbMax Goldfarb
133
133
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
2 hours ago
Then use==instead of!=in your comparison.
– Sebastian Kessel
2 hours ago
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
2 hours ago
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
2 hours ago
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
1 hour ago
|
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
1 hour ago
If you want also you could make a property of the class and say something like Class.UserIsInAdminGroup
– Zach Hutchins
1 hour ago
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
1 hour ago
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 Permissionnamed e.g.CanDoOperationX. - Create a
Permission Setwhich contains only this permission. - Assign this
Permission Setto eachUserin 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 Settingnamed e.g.MyTriggerSettings. - Add a
Checkboxfield named e.g.Can_Do_Operation_X__c. - Create a new record in this setting for each
Userin 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
2 hours ago
Then use==instead of!=in your comparison.
– Sebastian Kessel
2 hours ago
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
2 hours ago
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
2 hours ago
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
1 hour ago
|
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
2 hours ago
Then use==instead of!=in your comparison.
– Sebastian Kessel
2 hours ago
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
2 hours ago
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
2 hours ago
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
1 hour ago
|
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 2 hours ago
sfdcfoxsfdcfox
266k13212459
266k13212459
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
2 hours ago
Then use==instead of!=in your comparison.
– Sebastian Kessel
2 hours ago
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
2 hours ago
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
2 hours ago
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
1 hour ago
|
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
2 hours ago
Then use==instead of!=in your comparison.
– Sebastian Kessel
2 hours ago
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
2 hours ago
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
2 hours ago
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
1 hour ago
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
2 hours ago
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
2 hours ago
Then use
== instead of != in your comparison.– Sebastian Kessel
2 hours ago
Then use
== instead of != in your comparison.– Sebastian Kessel
2 hours ago
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
2 hours ago
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
2 hours ago
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
2 hours ago
@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
2 hours ago
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
1 hour ago
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
1 hour ago
|
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
1 hour ago
If you want also you could make a property of the class and say something like Class.UserIsInAdminGroup
– Zach Hutchins
1 hour ago
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
1 hour ago
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
1 hour ago
If you want also you could make a property of the class and say something like Class.UserIsInAdminGroup
– Zach Hutchins
1 hour ago
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
1 hour ago
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 1 hour ago
Zach HutchinsZach Hutchins
829
829
That's a really good idea, will probably do this. Thanks!
– Max Goldfarb
1 hour ago
If you want also you could make a property of the class and say something like Class.UserIsInAdminGroup
– Zach Hutchins
1 hour ago
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
1 hour ago
add a comment |
That's a really good idea, will probably do this. Thanks!
– Max Goldfarb
1 hour ago
If you want also you could make a property of the class and say something like Class.UserIsInAdminGroup
– Zach Hutchins
1 hour ago
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
1 hour ago
That's a really good idea, will probably do this. Thanks!
– Max Goldfarb
1 hour ago
That's a really good idea, will probably do this. Thanks!
– Max Goldfarb
1 hour ago
If you want also you could make a property of the class and say something like Class.UserIsInAdminGroup
– Zach Hutchins
1 hour ago
If you want also you could make a property of the class and say something like Class.UserIsInAdminGroup
– Zach Hutchins
1 hour ago
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
1 hour ago
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
1 hour ago
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 1 hour ago
Noor A ShuvoNoor A Shuvo
1256
1256
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 Permissionnamed e.g.CanDoOperationX. - Create a
Permission Setwhich contains only this permission. - Assign this
Permission Setto eachUserin 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 Settingnamed e.g.MyTriggerSettings. - Add a
Checkboxfield named e.g.Can_Do_Operation_X__c. - Create a new record in this setting for each
Userin 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 Permissionnamed e.g.CanDoOperationX. - Create a
Permission Setwhich contains only this permission. - Assign this
Permission Setto eachUserin 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 Settingnamed e.g.MyTriggerSettings. - Add a
Checkboxfield named e.g.Can_Do_Operation_X__c. - Create a new record in this setting for each
Userin 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 Permissionnamed e.g.CanDoOperationX. - Create a
Permission Setwhich contains only this permission. - Assign this
Permission Setto eachUserin 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 Settingnamed e.g.MyTriggerSettings. - Add a
Checkboxfield named e.g.Can_Do_Operation_X__c. - Create a new record in this setting for each
Userin 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 Permissionnamed e.g.CanDoOperationX. - Create a
Permission Setwhich contains only this permission. - Assign this
Permission Setto eachUserin 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 Settingnamed e.g.MyTriggerSettings. - Add a
Checkboxfield named e.g.Can_Do_Operation_X__c. - Create a new record in this setting for each
Userin your whitelist. - Update your condition to check
$MyTriggerSettings__c.getInstance().Can_Do_Operation_X__c.
answered 1 hour ago
Adrian Larson♦Adrian Larson
110k19121259
110k19121259
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