SugarClub
SugarClub
  • User
  • Site
  • Search
  • User
SugarClub
SugarClub
  • User
  • Site
  • Search
  • User
DevClub
DevClub
Dev Tutorials Programatically manage Dropdown List
  • Dev Blog
  • Answers & Best Practices
  • Developer On-boarding
  • Dev Tutorials
  • Developer Events
  • Event Recaps
  • Members
  • Developer Suggestions
  • Sub-Groups
  • More
  • Cancel
  • New
Click here to join "DevClub" to engage in the conversation with this group and curate your SugarClub experience.
  • +On-Boarding Framework
  • +Customization Guides
  • +UI Redesign Technical Guide
  • Did you know? Copying related records is a breeze!
  • How to write code for SugarCloud webinar Q&A
  • HOW TO: enforce ACL on Tags
  • Programatically manage Dropdown List
  • Remove custom fields created via package installation
  • Sugar Developer Tools
  • Tutorial:  How to register custom platforms in Sugar instances via Platform extension
  • Adding a google reCAPTCHA in a Web-to-Lead form
  • Sugar Developer Blog Style Guide

Programatically manage Dropdown List

Custom API developed in order to change/add/delete key's from a dropdownList

This API have 2 ways to be called, that works for 3 different means:

  • Add a new Key from a DropDown
    • rest/v10/DropdownListKey/add
  • Edit an existing Key from a DropDown
    • rest/v10/DropdownListKey/add
  • Remove an existing Key from a DropDown
    • rest/v10/DropdownListKey/delete

In order to work we need to call a POST for the desired endPoint with the configuration body:

{
"list_name":"<LIST_NAME>",
"item_key":"<KEY_DROPDOWN>",
"item_value":"<KEY_VALUE>",
"lang":"<LANG>"
}

API code:

custom/clients/base/api/DropDownFiller.php

<?php

if (!defined('sugarEntry') || !sugarEntry)
    die('Not A Valid Entry Point');

class DropDownFiller extends SugarApi {
    public function registerApiRest() {
         
        $dropDownApi = array(
            'dropdownListAddKey' => array(
                'reqType' => 'POST',
                'path' => array('DropdownListKey','add'),
                'pathVars' => array('',''),
                'method' => 'addDropDownKeyValue',
                'shortHelp' => 'create a new item to an specific list',
                'longHelp' => 'custom/clients/base/api/help/MyEndPoint_MyGetEndPoint_help.html',
            ),
            'dropdownListRemoveKey' => array(
                'reqType' => 'POST',
                'path' => array('DropdownListKey','delete'),
                'pathVars' => array('', ''),
                'method' => 'removeDropDownKeyValue',
                'shortHelp' => 'Remove a key from an specific list',
                'longHelp' => 'custom/clients/base/api/help/MyEndPoint_MyGetEndPoint_help.html',
            ),
        );

        return $dropDownApi;
    }

    /**
     * Method to be used for rest/v10/DropdownListKey/add endpoint
     */
    public function addDropDownKeyValue($api, $args) {
         
        require_once('include/utils.php');
        require_once('modules/ModuleBuilder/MB/ModuleBuilder.php');
        require_once('modules/ModuleBuilder/parsers/parser.dropdown.php');
         
        $list_name = $args['list_name'];
        $item_key = $args['item_key'];
        $item_value = $args['item_value'];
        $lang = $args['lang'];
         
        $displayValue = translate($list_name, '', $item_key);
         
        if(!isset($displayValue)){
            return "DropdownList not found";
        }
        else if( is_array($displayValue) ){
            $parser = new ParserDropDown();
            $params = array();
            $_REQUEST['view_package'] = 'studio';
            $params['view_package'] = 'studio';
            $params['dropdown_name'] = $list_name;
            $params['dropdown_lang'] = $lang;
            $_REQUEST['dropdown_lang'] = $lang;
             
            $displayValue[$item_key] = $item_value;
             
            foreach ($displayValue as $k=>$v) {
                $drop_list[] = array($k,$v);
            }
             
            $json = getJSONobj();
            $params['list_value'] = $json->encode($drop_list);
            $parser->saveDropDown($params);
             
            return "Key/value added";
        }
        else{
            $displayValue = translate($list_name);
             
            $parser = new ParserDropDown();
            $params = array();
            $_REQUEST['view_package'] = 'studio';
            $params['view_package'] = 'studio';
            $params['dropdown_name'] = $list_name;
            $params['dropdown_lang'] = $lang;
            $_REQUEST['dropdown_lang'] = $lang;
             
            $displayValue[$item_key] = $item_value;
             
            foreach ($displayValue as $k=>$v) {
                $drop_list[] = array($k,$v);
            }
             
            $json = getJSONobj();
            $params['list_value'] = $json->encode($drop_list);
            $parser->saveDropDown($params);
             
            return "Key/value changed";
        }
    }
     
    /**
     * Method to be used for rest/v10/DropdownListKey/delete endpoint
     */
    public function removeDropDownKeyValue($api, $args) {
         
        require_once('include/utils.php');
        require_once('modules/ModuleBuilder/MB/ModuleBuilder.php');
        require_once('modules/ModuleBuilder/parsers/parser.dropdown.php');
         
        $list_name = $args['list_name'];
        $item_key = $args['item_key'];
        $lang = $args['lang'];
         
        $displayValue = translate($list_name, '', $item_key);
         
        if(!isset($displayValue)){
            return "DropdownList not found";
        }
        else if( is_array($displayValue) ){
            return "Key not found";
        }
        else{
            $parser = new ParserDropDown();
            $params = array();
            $_REQUEST['view_package'] = 'studio';
            $params['view_package'] = 'studio';
            $params['dropdown_name'] = $list_name;
            $params['dropdown_lang'] = $lang;
            $_REQUEST['dropdown_lang'] = $lang;
             
            $displayValue = translate($list_name);
             
            unset($displayValue[$item_key]);
             
            foreach ($displayValue as $k=>$v) {
                $drop_list[] = array($k,$v);
            }
             
            $json = getJSONobj();
            $params['list_value'] = $json->encode($drop_list);
            $parser->saveDropDown($params);
             
            return "Key removed";
        }
    }
}
?>
  • Integrations & Connectors
  • drop-down edit
  • sugar 7.x
  • api
  • rest api
  • Share
  • History
  • More
  • Cancel
Anonymous
  • Dennis Wangerin
    Dennis Wangerin over 5 years ago

    Very nice approach!

    • Cancel
    • Up 0 Down
    • Reply
    • More Actions
    • Cancel
Related
Recommended