create-actions.js dynamically remove option from dropdown

In sugarCRM 7.2.0 I have a dropdown with legacy items in it. The display values for those items include the text "(legacy)" . I don't want those legacy items to display when creating a new record, they should however display in record view.

In 6.5.15 I would unset those legacy items in the app list strings array during in the pre display on view.edit.php for new records.

In 7.2.0 I am trying to reproduce that functionality in create-actions.js

console.log() is my new best friend and I know I'm getting to the items I want to remove by looping through the app list strings and using javascript match (see hideLegacyValues below).

I just don't know how to unset the options that i want to hide...

It seems that $('[data-name="territory_classification_c"]').options is undefined.
and there are actually no "options" as such in the source code.

Any clues as to the proper way to manipulate dropdown values in code?

Thanks,
FrancescaS

               
   render: function()
   {
      this._super('render');
      this.hideLegacyValues();
   },
                       
   hideLegacyValues: function(){
     // hide legacy items from territory classification
     var territory_list = app.lang.getAppListStrings('territory_classification_list_DD');
     Object.keys(territory_list).forEach(function(key) {
        var check = territory_list[key].match(/legacy/);
        if(territory_list[key].match(/legacy/)){
           //the line below gives an ERROR
           $('[data-name="territory_classification_c"]').options[territory_list[key]].remove();
        }
     });
Parents
  • DID IT!
    Thank you Jason Eggers and Angel Magaña for the inspiration to move forward tonight!

    The dom for dropdowns cannot be easily manipulated because it's hard to know what to reference (see html source above). So Angel suggested manipulating the app list strings instead.

    While there is a getAppListStrings there is no setAppListStrings so I checked out the render function for enum and found that options can be either the dd name or a json encoded key:val list.
    The render function checks, if it's key:val it just uses those, if it's a string it goes to get the AppListStrings for it.

    Once I figured out how to reference a field object (yeah, that took a while) setting the options was a one liner.
     
                   
       hideLegacyValues: function(){
         // hide legacy items from territory classification
         var territory_list = app.lang.getAppListStrings('territory_classification_list_DD');
         Object.keys(territory_list).forEach(function(key) {
            var check = territory_list[key].match(/legacy/);
            if(territory_list[key].match(/legacy/)){
               delete territory_list[key];
            }
         });
         this.model.fields['territory_classification_c'].options = territory_list;
       },
                       


    Thanks again guys for getting me going again.

    It's been a long long day!

    FrancescaS

  • Hi Francesca.
    The same code should work on record.js?

    Thx.
    Antonio.

  • Antonio, I have not tried this in record.js but I suppose it should work.
    Are you having trouble getting it to work?
Reply Children
No Data