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 is the most important source of natural gas? coal, oil or other?

Can you heal a summoned creature?

Why are C64 games inconsistent with which joystick port they use?

Why does not valiant's reduction show NP=RP?

How can people dance around bonfires on Lag Lo'Omer - it's darchei emori?

Different circular sectors as new logo of the International System

How were these pictures of spacecraft wind tunnel testing taken?

Array Stutter Implementation

Integrating an absolute function using Mathematica

What is the 中 in ダウンロード中?

Is healing by fire possible?

Full backup on database creation

Windows 10 Programs start without visual Interface

Is CD audio quality good enough for the final delivery of music?

Tic-tac-toe for the terminal, written in C

Ticket sales for Queen at the Live Aid

Full horizontal justification in table

If a person had control of every single cell of their body, would they be able to transform into another creature?

What is the largest (size) solid object ever dropped from an airplane to impact the ground in freefall?

Were pens caps holes designed to prevent death by suffocation if swallowed?

Employer demanding to see degree after poor code review

What is the difference between “/private/var/vm” and “/vm”?

Would Brexit have gone ahead by now if Gina Miller had not forced the Government to involve Parliament?

Is it possible to play as a necromancer skeleton?



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,6981234




      1,6981234




















          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

          19.8k53265




          19.8k53265












          • 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

          Category:9 (number) SubcategoriesMedia in category "9 (number)"Navigation menuUpload mediaGND ID: 4485639-8Library of Congress authority ID: sh85091979ReasonatorScholiaStatistics

          Circuit construction for execution of conditional statements using least significant bitHow are two different registers being used as “control”?How exactly is the stated composite state of the two registers being produced using the $R_zz$ controlled rotations?Efficiently performing controlled rotations in HHLWould this quantum algorithm implementation work?How to prepare a superposed states of odd integers from $1$ to $sqrtN$?Why is this implementation of the order finding algorithm not working?Circuit construction for Hamiltonian simulationHow can I invert the least significant bit of a certain term of a superposed state?Implementing an oracleImplementing a controlled sum operation

          Magento 2 “No Payment Methods” in Admin New OrderHow to integrate Paypal Express Checkout with the Magento APIMagento 1.5 - Sales > Order > edit order and shipping methods disappearAuto Invoice Check/Money Order Payment methodAdd more simple payment methods?Shipping methods not showingWhat should I do to change payment methods if changing the configuration has no effects?1.9 - No Payment Methods showing upMy Payment Methods not Showing for downloadable/virtual product when checkout?Magento2 API to access internal payment methodHow to call an existing payment methods in the registration form?