Multiple OR (||) Conditions in If Statement Announcing the arrival of Valued Associate #679: Cesar Manara Planned maintenance scheduled April 23, 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
Why should I vote and accept answers?
Chinese Seal on silk painting - what does it mean?
When a candle burns, why does the top of wick glow if bottom of flame is hottest?
Generate an RGB colour grid
Can a new player join a group only when a new campaign starts?
What is the font for "b" letter?
How could we fake a moon landing now?
How to install press fit bottom bracket into new frame
Sum letters are not two different
Hangman Game with C++
NumericArray versus PackedArray in MMA12
Does lack of seasonality imply random time series?
How often does castling occur in grandmaster games?
What do you call the main part of a joke?
Should I follow up with an employee I believe overracted to a mistake I made?
Why aren't air breathing engines used as small first stages?
Source for Esri sample data from 911 Hot Spot Analysis
Do I really need to have a message in a novel to appeal to readers?
What is the topology associated with the algebras for the ultrafilter monad?
Selecting user stories during sprint planning
Can anything be seen from the center of the Boötes void? How dark would it be?
Take 2! Is this homebrew Lady of Pain warlock patron balanced?
Significance of Cersei's obsession with elephants?
Most bit efficient text communication method?
Multiple OR (||) Conditions in If Statement
Announcing the arrival of Valued Associate #679: Cesar Manara
Planned maintenance scheduled April 23, 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 4 hours ago
Max Goldfarb
asked 5 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
4 hours ago
Then use==instead of!=in your comparison.
– Sebastian Kessel
4 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
4 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
4 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
4 hours 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
4 hours ago
If you want also you could make a property of the class and say something like Class.UserIsInAdminGroup
– Zach Hutchins
4 hours 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
4 hours 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
4 hours ago
Then use==instead of!=in your comparison.
– Sebastian Kessel
4 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
4 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
4 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
4 hours 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
4 hours ago
Then use==instead of!=in your comparison.
– Sebastian Kessel
4 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
4 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
4 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
4 hours 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 4 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
4 hours ago
Then use==instead of!=in your comparison.
– Sebastian Kessel
4 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
4 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
4 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
4 hours 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
4 hours ago
Then use==instead of!=in your comparison.
– Sebastian Kessel
4 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
4 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
4 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
4 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
4 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
4 hours ago
Then use
== instead of != in your comparison.– Sebastian Kessel
4 hours ago
Then use
== instead of != in your comparison.– Sebastian Kessel
4 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
4 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
4 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
4 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
4 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
4 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
4 hours 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
4 hours ago
If you want also you could make a property of the class and say something like Class.UserIsInAdminGroup
– Zach Hutchins
4 hours 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
4 hours 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
4 hours ago
If you want also you could make a property of the class and say something like Class.UserIsInAdminGroup
– Zach Hutchins
4 hours 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
4 hours 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 4 hours ago
Zach HutchinsZach Hutchins
829
829
That's a really good idea, will probably do this. Thanks!
– Max Goldfarb
4 hours ago
If you want also you could make a property of the class and say something like Class.UserIsInAdminGroup
– Zach Hutchins
4 hours 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
4 hours ago
add a comment |
That's a really good idea, will probably do this. Thanks!
– Max Goldfarb
4 hours ago
If you want also you could make a property of the class and say something like Class.UserIsInAdminGroup
– Zach Hutchins
4 hours 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
4 hours ago
That's a really good idea, will probably do this. Thanks!
– Max Goldfarb
4 hours ago
That's a really good idea, will probably do this. Thanks!
– Max Goldfarb
4 hours ago
If you want also you could make a property of the class and say something like Class.UserIsInAdminGroup
– Zach Hutchins
4 hours ago
If you want also you could make a property of the class and say something like Class.UserIsInAdminGroup
– Zach Hutchins
4 hours 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
4 hours 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
4 hours 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 4 hours 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 4 hours 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