Is it possible to dynamically set properties of an `Object` using Apex?





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







1















Background



I would like to be able to dynamically set properties of an Object (not SObject).



Given this class:



public class Invoice {
public String Ref { get; set; }
}


I would like to be able to do this:



Invoice inv = new Invoice();
inv.put('Ref', 'REF123');


But when I do Execute Anonymous Apex with above code, I this error:




ERROR: Compilation failed.

! ERROR: Line: 3, Column: 12

! Method does not exist or incorrect signature: void put(String, String)

! from the type Invoice

ERROR: Execution failed.




Question




  1. Is it possible to dynamically set properties of an Object (not SObject) using Apex?

  2. How would I dynamically set a property of an Object using Apex?










share|improve this question































    1















    Background



    I would like to be able to dynamically set properties of an Object (not SObject).



    Given this class:



    public class Invoice {
    public String Ref { get; set; }
    }


    I would like to be able to do this:



    Invoice inv = new Invoice();
    inv.put('Ref', 'REF123');


    But when I do Execute Anonymous Apex with above code, I this error:




    ERROR: Compilation failed.

    ! ERROR: Line: 3, Column: 12

    ! Method does not exist or incorrect signature: void put(String, String)

    ! from the type Invoice

    ERROR: Execution failed.




    Question




    1. Is it possible to dynamically set properties of an Object (not SObject) using Apex?

    2. How would I dynamically set a property of an Object using Apex?










    share|improve this question



























      1












      1








      1








      Background



      I would like to be able to dynamically set properties of an Object (not SObject).



      Given this class:



      public class Invoice {
      public String Ref { get; set; }
      }


      I would like to be able to do this:



      Invoice inv = new Invoice();
      inv.put('Ref', 'REF123');


      But when I do Execute Anonymous Apex with above code, I this error:




      ERROR: Compilation failed.

      ! ERROR: Line: 3, Column: 12

      ! Method does not exist or incorrect signature: void put(String, String)

      ! from the type Invoice

      ERROR: Execution failed.




      Question




      1. Is it possible to dynamically set properties of an Object (not SObject) using Apex?

      2. How would I dynamically set a property of an Object using Apex?










      share|improve this question
















      Background



      I would like to be able to dynamically set properties of an Object (not SObject).



      Given this class:



      public class Invoice {
      public String Ref { get; set; }
      }


      I would like to be able to do this:



      Invoice inv = new Invoice();
      inv.put('Ref', 'REF123');


      But when I do Execute Anonymous Apex with above code, I this error:




      ERROR: Compilation failed.

      ! ERROR: Line: 3, Column: 12

      ! Method does not exist or incorrect signature: void put(String, String)

      ! from the type Invoice

      ERROR: Execution failed.




      Question




      1. Is it possible to dynamically set properties of an Object (not SObject) using Apex?

      2. How would I dynamically set a property of an Object using Apex?







      apex object dynamic-apex






      share|improve this question















      share|improve this question













      share|improve this question




      share|improve this question








      edited 43 mins ago







      Robs

















      asked 1 hour ago









      RobsRobs

      2,554743




      2,554743






















          1 Answer
          1






          active

          oldest

          votes


















          2














          For some isolated cases - yours is one of them - there is this (ab)use of the serialize methods:



          Invoice inv = (Invoice) JSON.deserialize(JSON.serialize(new Map<<String, Object>{
          'Ref' => 'REF123'
          })), Invoice.class);


          Here, the capability of JSON.deserialize to create an instance of the specified type and set the properties of the instance is being used.



          But in general, Apex is missing the map-like behavior for objects or a reflection API.






          share|improve this answer
























            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%2f260323%2fis-it-possible-to-dynamically-set-properties-of-an-object-using-apex%23new-answer', 'question_page');
            }
            );

            Post as a guest















            Required, but never shown

























            1 Answer
            1






            active

            oldest

            votes








            1 Answer
            1






            active

            oldest

            votes









            active

            oldest

            votes






            active

            oldest

            votes









            2














            For some isolated cases - yours is one of them - there is this (ab)use of the serialize methods:



            Invoice inv = (Invoice) JSON.deserialize(JSON.serialize(new Map<<String, Object>{
            'Ref' => 'REF123'
            })), Invoice.class);


            Here, the capability of JSON.deserialize to create an instance of the specified type and set the properties of the instance is being used.



            But in general, Apex is missing the map-like behavior for objects or a reflection API.






            share|improve this answer




























              2














              For some isolated cases - yours is one of them - there is this (ab)use of the serialize methods:



              Invoice inv = (Invoice) JSON.deserialize(JSON.serialize(new Map<<String, Object>{
              'Ref' => 'REF123'
              })), Invoice.class);


              Here, the capability of JSON.deserialize to create an instance of the specified type and set the properties of the instance is being used.



              But in general, Apex is missing the map-like behavior for objects or a reflection API.






              share|improve this answer


























                2












                2








                2







                For some isolated cases - yours is one of them - there is this (ab)use of the serialize methods:



                Invoice inv = (Invoice) JSON.deserialize(JSON.serialize(new Map<<String, Object>{
                'Ref' => 'REF123'
                })), Invoice.class);


                Here, the capability of JSON.deserialize to create an instance of the specified type and set the properties of the instance is being used.



                But in general, Apex is missing the map-like behavior for objects or a reflection API.






                share|improve this answer













                For some isolated cases - yours is one of them - there is this (ab)use of the serialize methods:



                Invoice inv = (Invoice) JSON.deserialize(JSON.serialize(new Map<<String, Object>{
                'Ref' => 'REF123'
                })), Invoice.class);


                Here, the capability of JSON.deserialize to create an instance of the specified type and set the properties of the instance is being used.



                But in general, Apex is missing the map-like behavior for objects or a reflection API.







                share|improve this answer












                share|improve this answer



                share|improve this answer










                answered 51 mins ago









                Keith CKeith C

                97.4k1197220




                97.4k1197220






























                    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%2f260323%2fis-it-possible-to-dynamically-set-properties-of-an-object-using-apex%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

                    Fluorita

                    Hulsita

                    Península de Txukotka