Is it possible for Apex code to determine whether it is with or without sharing?Sharing / without sharing and @RemoteActionSFDC: Understanding With Sharing, Without Sharing & Unspecified Sharing Classesare Triggers (and their delegated classes) or Batch affected by sharing?Use runAs to unit test class without 'with sharing' keywordDoes “with sharing” only apply to 1st entry point of code?Security and sharing for apex classWith sharing and without sharing in apexRole-based sharing rules for partner community usersDoes class that is being called from Process Builder also runs in system Mode?How to come to a conclusion to create a Helper class “with” or “without” Sharing

What should the arbiter and what should have I done in this case?

Was there a priest on the Titanic who stayed on the ship giving confession to as many as he could?

Winning Strategy for the Magician and his Apprentice

Should I give professor gift at the beginning of my PhD?

Why doesn’t a normal window produce an apparent rainbow?

Does an ice chest packed full of frozen food need ice?

Why would future John risk sending back a T-800 to save his younger self?

How to tell your grandparent to not come to fetch you with their car?

How did they achieve the Gunslinger's shining eye effect in Westworld?

Inconsistent behavior of compiler optimization of unused string

Why was the Sega Genesis marketed as a 16-bit console?

When conversion from Integer to Single may lose precision

What is the actual quality of machine translations?

Why only the fundamental frequency component is said to give useful power?

Movie about a boy who was born old and grew young

What makes an item an artifact?

Is open-sourcing the code of a webapp not recommended?

What does the term "railed" mean in signal processing?

Should an arbiter claim draw at a K+R vs K+R endgame?

Do simulator games use a realistic trajectory to get into orbit?

Compiling c files on ubuntu and using the executable on Windows

Is an early checkout possible at a hotel before its reception opens?

Can a user sell my software (MIT license) without modification?

Do any instruments not produce overtones?



Is it possible for Apex code to determine whether it is with or without sharing?


Sharing / without sharing and @RemoteActionSFDC: Understanding With Sharing, Without Sharing & Unspecified Sharing Classesare Triggers (and their delegated classes) or Batch affected by sharing?Use runAs to unit test class without 'with sharing' keywordDoes “with sharing” only apply to 1st entry point of code?Security and sharing for apex classWith sharing and without sharing in apexRole-based sharing rules for partner community usersDoes class that is being called from Process Builder also runs in system Mode?How to come to a conclusion to create a Helper class “with” or “without” Sharing






.everyoneloves__top-leaderboard:empty,.everyoneloves__mid-leaderboard:empty,.everyoneloves__bot-mid-leaderboard:empty margin-bottom:0;








3















As an author of the code, I can, of course, know if the context is with or without sharing when I write my code into a class with either of these keywords.



But what if I am writing my code into a class with inherited sharing, which may be consumed by classes which are both with and without sharing?



Is there any way to know in which mode the code is operating so that I could add conditional logic instead of having two completely separate implementations that might be largely identical?










share|improve this question






























    3















    As an author of the code, I can, of course, know if the context is with or without sharing when I write my code into a class with either of these keywords.



    But what if I am writing my code into a class with inherited sharing, which may be consumed by classes which are both with and without sharing?



    Is there any way to know in which mode the code is operating so that I could add conditional logic instead of having two completely separate implementations that might be largely identical?










    share|improve this question


























      3












      3








      3








      As an author of the code, I can, of course, know if the context is with or without sharing when I write my code into a class with either of these keywords.



      But what if I am writing my code into a class with inherited sharing, which may be consumed by classes which are both with and without sharing?



      Is there any way to know in which mode the code is operating so that I could add conditional logic instead of having two completely separate implementations that might be largely identical?










      share|improve this question
















      As an author of the code, I can, of course, know if the context is with or without sharing when I write my code into a class with either of these keywords.



      But what if I am writing my code into a class with inherited sharing, which may be consumed by classes which are both with and without sharing?



      Is there any way to know in which mode the code is operating so that I could add conditional logic instead of having two completely separate implementations that might be largely identical?







      apex sharing executioncontext






      share|improve this question















      share|improve this question













      share|improve this question




      share|improve this question








      edited May 21 at 7:57









      Oleksandr Berehovskyi

      10.6k32339




      10.6k32339










      asked May 21 at 7:55









      Brian KesslerBrian Kessler

      1,7061234




      1,7061234




















          2 Answers
          2






          active

          oldest

          votes


















          5














          This might not be the answer, but let me put my thoughts.



          When you use inherited sharing it's the responsibility of the caller class to handling the sharing settings for the code which the called class will be executing.



          Now, you say you want to add conditional logic based on sharing settings, this means you don't have trust in the caller, Thus I would say there is no point in using the inherited sharing.



          I would go by having 2 separate classes which would specify the sharing context in name, now it would be callers responsibility to call appropriate classes.
          eg. MyLogicClassWithSharing , MyLogicClassWithoutSharing



          If you worry about code duplication, I can think about putting the generic reusable code in some service method or putting it in a generic master class.






          share|improve this answer























          • The problem with this approach is that there may be some long chain of dependencies between the initial invocation of some code and the code which would contain the conditional logic, so using two classes instead would require conditional logic to determine which class to invoke which would mean passing information all the way from the beginning of the chain. And if I were to do that, I might as well use that for my conditional logic in the class itself.

            – Brian Kessler
            May 22 at 21:27


















          0














          I don't think there is. Although, Salesforce has introduced Inherited Sharing keyword, recently in their Winter 19 Release, to solve ambiguity issues associated with the with and without sharing Keywords.



          You can read more about it here :



          https://developer.salesforce.com/docs/atlas.en-us.apexcode.meta/apexcode/apex_classes_keywords_sharing.htm






          share|improve this answer























          • Cheers for the response, but the entire problem is that I want a class with inherited sharing to determine conditional logic based on the caller.

            – Brian Kessler
            May 22 at 21:24











          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
          );



          );













          draft saved

          draft discarded


















          StackExchange.ready(
          function ()
          StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fsalesforce.stackexchange.com%2fquestions%2f263095%2fis-it-possible-for-apex-code-to-determine-whether-it-is-with-or-without-sharing%23new-answer', 'question_page');

          );

          Post as a guest















          Required, but never shown

























          2 Answers
          2






          active

          oldest

          votes








          2 Answers
          2






          active

          oldest

          votes









          active

          oldest

          votes






          active

          oldest

          votes









          5














          This might not be the answer, but let me put my thoughts.



          When you use inherited sharing it's the responsibility of the caller class to handling the sharing settings for the code which the called class will be executing.



          Now, you say you want to add conditional logic based on sharing settings, this means you don't have trust in the caller, Thus I would say there is no point in using the inherited sharing.



          I would go by having 2 separate classes which would specify the sharing context in name, now it would be callers responsibility to call appropriate classes.
          eg. MyLogicClassWithSharing , MyLogicClassWithoutSharing



          If you worry about code duplication, I can think about putting the generic reusable code in some service method or putting it in a generic master class.






          share|improve this answer























          • The problem with this approach is that there may be some long chain of dependencies between the initial invocation of some code and the code which would contain the conditional logic, so using two classes instead would require conditional logic to determine which class to invoke which would mean passing information all the way from the beginning of the chain. And if I were to do that, I might as well use that for my conditional logic in the class itself.

            – Brian Kessler
            May 22 at 21:27















          5














          This might not be the answer, but let me put my thoughts.



          When you use inherited sharing it's the responsibility of the caller class to handling the sharing settings for the code which the called class will be executing.



          Now, you say you want to add conditional logic based on sharing settings, this means you don't have trust in the caller, Thus I would say there is no point in using the inherited sharing.



          I would go by having 2 separate classes which would specify the sharing context in name, now it would be callers responsibility to call appropriate classes.
          eg. MyLogicClassWithSharing , MyLogicClassWithoutSharing



          If you worry about code duplication, I can think about putting the generic reusable code in some service method or putting it in a generic master class.






          share|improve this answer























          • The problem with this approach is that there may be some long chain of dependencies between the initial invocation of some code and the code which would contain the conditional logic, so using two classes instead would require conditional logic to determine which class to invoke which would mean passing information all the way from the beginning of the chain. And if I were to do that, I might as well use that for my conditional logic in the class itself.

            – Brian Kessler
            May 22 at 21:27













          5












          5








          5







          This might not be the answer, but let me put my thoughts.



          When you use inherited sharing it's the responsibility of the caller class to handling the sharing settings for the code which the called class will be executing.



          Now, you say you want to add conditional logic based on sharing settings, this means you don't have trust in the caller, Thus I would say there is no point in using the inherited sharing.



          I would go by having 2 separate classes which would specify the sharing context in name, now it would be callers responsibility to call appropriate classes.
          eg. MyLogicClassWithSharing , MyLogicClassWithoutSharing



          If you worry about code duplication, I can think about putting the generic reusable code in some service method or putting it in a generic master class.






          share|improve this answer













          This might not be the answer, but let me put my thoughts.



          When you use inherited sharing it's the responsibility of the caller class to handling the sharing settings for the code which the called class will be executing.



          Now, you say you want to add conditional logic based on sharing settings, this means you don't have trust in the caller, Thus I would say there is no point in using the inherited sharing.



          I would go by having 2 separate classes which would specify the sharing context in name, now it would be callers responsibility to call appropriate classes.
          eg. MyLogicClassWithSharing , MyLogicClassWithoutSharing



          If you worry about code duplication, I can think about putting the generic reusable code in some service method or putting it in a generic master class.







          share|improve this answer












          share|improve this answer



          share|improve this answer










          answered May 21 at 8:35









          Pranay JaiswalPranay Jaiswal

          20k53266




          20k53266












          • The problem with this approach is that there may be some long chain of dependencies between the initial invocation of some code and the code which would contain the conditional logic, so using two classes instead would require conditional logic to determine which class to invoke which would mean passing information all the way from the beginning of the chain. And if I were to do that, I might as well use that for my conditional logic in the class itself.

            – Brian Kessler
            May 22 at 21:27

















          • The problem with this approach is that there may be some long chain of dependencies between the initial invocation of some code and the code which would contain the conditional logic, so using two classes instead would require conditional logic to determine which class to invoke which would mean passing information all the way from the beginning of the chain. And if I were to do that, I might as well use that for my conditional logic in the class itself.

            – Brian Kessler
            May 22 at 21:27
















          The problem with this approach is that there may be some long chain of dependencies between the initial invocation of some code and the code which would contain the conditional logic, so using two classes instead would require conditional logic to determine which class to invoke which would mean passing information all the way from the beginning of the chain. And if I were to do that, I might as well use that for my conditional logic in the class itself.

          – Brian Kessler
          May 22 at 21:27





          The problem with this approach is that there may be some long chain of dependencies between the initial invocation of some code and the code which would contain the conditional logic, so using two classes instead would require conditional logic to determine which class to invoke which would mean passing information all the way from the beginning of the chain. And if I were to do that, I might as well use that for my conditional logic in the class itself.

          – Brian Kessler
          May 22 at 21:27













          0














          I don't think there is. Although, Salesforce has introduced Inherited Sharing keyword, recently in their Winter 19 Release, to solve ambiguity issues associated with the with and without sharing Keywords.



          You can read more about it here :



          https://developer.salesforce.com/docs/atlas.en-us.apexcode.meta/apexcode/apex_classes_keywords_sharing.htm






          share|improve this answer























          • Cheers for the response, but the entire problem is that I want a class with inherited sharing to determine conditional logic based on the caller.

            – Brian Kessler
            May 22 at 21:24















          0














          I don't think there is. Although, Salesforce has introduced Inherited Sharing keyword, recently in their Winter 19 Release, to solve ambiguity issues associated with the with and without sharing Keywords.



          You can read more about it here :



          https://developer.salesforce.com/docs/atlas.en-us.apexcode.meta/apexcode/apex_classes_keywords_sharing.htm






          share|improve this answer























          • Cheers for the response, but the entire problem is that I want a class with inherited sharing to determine conditional logic based on the caller.

            – Brian Kessler
            May 22 at 21:24













          0












          0








          0







          I don't think there is. Although, Salesforce has introduced Inherited Sharing keyword, recently in their Winter 19 Release, to solve ambiguity issues associated with the with and without sharing Keywords.



          You can read more about it here :



          https://developer.salesforce.com/docs/atlas.en-us.apexcode.meta/apexcode/apex_classes_keywords_sharing.htm






          share|improve this answer













          I don't think there is. Although, Salesforce has introduced Inherited Sharing keyword, recently in their Winter 19 Release, to solve ambiguity issues associated with the with and without sharing Keywords.



          You can read more about it here :



          https://developer.salesforce.com/docs/atlas.en-us.apexcode.meta/apexcode/apex_classes_keywords_sharing.htm







          share|improve this answer












          share|improve this answer



          share|improve this answer










          answered May 21 at 8:29









          Ajinkya PhadnisAjinkya Phadnis

          666




          666












          • Cheers for the response, but the entire problem is that I want a class with inherited sharing to determine conditional logic based on the caller.

            – Brian Kessler
            May 22 at 21:24

















          • Cheers for the response, but the entire problem is that I want a class with inherited sharing to determine conditional logic based on the caller.

            – Brian Kessler
            May 22 at 21:24
















          Cheers for the response, but the entire problem is that I want a class with inherited sharing to determine conditional logic based on the caller.

          – Brian Kessler
          May 22 at 21:24





          Cheers for the response, but the entire problem is that I want a class with inherited sharing to determine conditional logic based on the caller.

          – Brian Kessler
          May 22 at 21:24

















          draft saved

          draft discarded
















































          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.




          draft saved


          draft discarded














          StackExchange.ready(
          function ()
          StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fsalesforce.stackexchange.com%2fquestions%2f263095%2fis-it-possible-for-apex-code-to-determine-whether-it-is-with-or-without-sharing%23new-answer', 'question_page');

          );

          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







          Popular posts from this blog

          Wikipedia:Vital articles Мазмуну Biography - Өмүр баян Philosophy and psychology - Философия жана психология Religion - Дин Social sciences - Коомдук илимдер Language and literature - Тил жана адабият Science - Илим Technology - Технология Arts and recreation - Искусство жана эс алуу History and geography - Тарых жана география Навигация менюсу

          Bruxelas-Capital Índice Historia | Composición | Situación lingüística | Clima | Cidades irmandadas | Notas | Véxase tamén | Menú de navegacióneO uso das linguas en Bruxelas e a situación do neerlandés"Rexión de Bruxelas Capital"o orixinalSitio da rexiónPáxina de Bruselas no sitio da Oficina de Promoción Turística de Valonia e BruxelasMapa Interactivo da Rexión de Bruxelas-CapitaleeWorldCat332144929079854441105155190212ID28008674080552-90000 0001 0666 3698n94104302ID540940339365017018237

          What should I write in an apology letter, since I have decided not to join a company after accepting an offer letterShould I keep looking after accepting a job offer?What should I do when I've been verbally told I would get an offer letter, but still haven't gotten one after 4 weeks?Do I accept an offer from a company that I am not likely to join?New job hasn't confirmed starting date and I want to give current employer as much notice as possibleHow should I address my manager in my resignation letter?HR delayed background verification, now jobless as resignedNo email communication after accepting a formal written offer. How should I phrase the call?What should I do if after receiving a verbal offer letter I am informed that my written job offer is put on hold due to some internal issues?Should I inform the current employer that I am about to resign within 1-2 weeks since I have signed the offer letter and waiting for visa?What company will do, if I send their offer letter to another company