Java API:Enumerated Fields

From LongJump Support Wiki
Revision as of 01:57, 6 October 2011 by imported>Aeric
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)

About Enumerated Fields

There are multiple types of enumerated fields. The type is specified using FieldMetaDataBean.setType(String type). These are the possible values. (They are passed within quotes, as strings):

  • PICK_LIST
  • GLOBAL_PICK_LIST
  • DEPENDENT_PICK_LIST
  • MULTI_PICK_LIST
  • RADIO_BUTTON
  • MULTI_CHECK_BOX

The standard field methods are used to work with enumerated fields:

  • Functions.addFieldMetaData(FieldMetaDataBean fmdb);
  • Functions.updateFieldMetaData(FieldMetaDataBean fmdb);
  • Functions.deleteFieldMetaData(FieldMetaDataBean fmdb);
Considerations
  • Add/update/delete is not supported for global picklists. All other enumeration types are supported.

Retrieving Field Metadata

import com.platform.beans.EnumerationDetailsBean.*;

//Retrieving the FieldMetaData
FieldMetaDataBean fmdb = getFieldMetaData("myObject", "picklistField");
StringBuilder sb = new StringBuilder();

//Get the field name
String fieldName = fmdb.getTableColumn();

//Get the field type
// (PICK_LIST, DEPENDENT_PICK_LIST, RADIO_BUTTON, MULTI_CHECK_BOX, GLOBAL_PICKLIST)
String fieldType = fmdb.getType();

//String object Id
String objectId = fmdb.getObjectId();

//Get the field label
String fieldLabel = fmdb.getTitle();

// Echo the attributes
sb.append("Field Name -> " + fieldName + "\n") ;
sb.append("Field Type -> " + fieldType + "\n");
sb.append("Object Id -> " + objectId + "\n");
sb.append("Field Label -> " + fieldLabel + "\n");

//Enumeration Details
EnumerationDetailsBean  enumerationDetails = fmdb.getEnumerationDetails();

//Internal Id of the Enumerated Type field
String name =  enumerationDetails.getName();
sb.append("Internal Picklist Id -> " + name + "\n");

//Sort flag
Boolean sortFlag = enumerationDetails.getSortFlag();
sb.append("Sort flag -> " + sortFlag + "\n");

//Show first value as default flag
Boolean showFirstValAsDefaultFlag = enumerationDetails.getShowFirstValueAsDefault();

//Get the list of Enumeration Items
List<EnumerationItemBean> enumerationItems = enumerationDetails.getEnumerationItems();

//Extracting the Item details
for(EnumerationItemBean item : enumerationItems)
{
    //Enumeration Item Id
    String id = item.getId();	
    sb.append("Enumeration Item Id -> " + id + "\n");

    //Enumeration Item label
    String enumeratedItemLabel = item.getPicklistLabel();
    sb.append("Enumeration Item Label -> " + enumeratedItemLabel + "\n");

    //Enumeration Item Value
    String enumeratedItemValue = item.getPicklistValue();	
    sb.append("Enumeration Item Value -> " + enumeratedItemValue + "\n");
	
    //Text color of the Enumeration Item Label
    String textColor = item.getTextColor();
    sb.append("Enuemration Label text color -> " + textColor + "\n");

    //Text background color of the Enumeration Item label
    String textBackgroundColor = item.getTextBgColor();	
    sb.append("Enumeration Label text background color -> " + textBackgroundColor + "\n");

    //Show only image flag
    Boolean showOnlyImageFlag = item.getShowOnlyImage();	
    sb.append("Show only image flag -> " + showOnlyImageFlag + "\n");

    //Indicates if the item is an option group laabel
    Boolean flagIsOptGroup = item.getFlagIsOptgroup();	
    sb.append("Is options group flag -> " + flagIsOptGroup + "\n");
		
    //Order of the Item
    Integer itemOrder = item.getItemOrder();	
    sb.append("Item order -> " + itemOrder + "\n");
}

Functions.debug(sb.toString());

Adding a Picklist Field

To create an enumerated field:

  1. Add the new field to the object using Functions.addFieldMetaData().
  2. Add the list of items, using the Functions.updateFieldMetaData().
//Instantiate FieldMetaDataBean
FieldMetaDataBean fmdb = new FieldMetaDataBean();

//Setting the objectId
fmdb.setObjectId("myObject");

//Setting the field name
fmdb.setTableColumn("priority_picklist");

//Setting the field type
fmdb.setType("PICK_LIST");

//Setting the field label
fmdb.setTitle("Priorities");

//Setting enumeration details
EnumerationDetailsBean enumDetails = new EnumerationDetailsBean();
String[] items = {"priority", "urgent", "rush", "second-day delivery"};  
List<String> itemList = Arrays.asList(items);
enumDetails.setEnumerationItems(itemList);

//Sorting the enumerated values 
enumDetails.setSortFlag(true);

fmdb.setEnumerationDetails(enumDetails);

//On successful addition of the field, the field name name is returned
String fieldName = Functions.addFieldMetaData(fmdb);

Functions.debug("Added field " + fieldName);

Updating a Picklist

To update a specific item in an enumeration, it's ID must be specified.

To update the entire field:

  • The new list of items replaces the old one. All existing enumeration items must be included in the list, or they are not preserved.
  • For dependent picklists, all existing items plus the ParentToChildMapping beans must be provided.
import com.platform.beans.EnumerationDetailsBean.*;

//Instantiate FieldMetaDataBean
FieldMetaDataBean fmdb = getFieldMetaData("myObject", "picklistField");

//Setting enumeration details
EnumerationDetailsBean enumDetails = new EnumerationDetailsBean();
String[] items = {"priority", "rush", "second-day delivery"};  
List<String> itemList = Arrays.asList(items);
enumDetails.setEnumerationItems(itemList);

//Sorting the enuerated values 
enumDetails.setSortFlag(true);

//Creating a list of Enumeration items
List<EnumerationItemBean> listEnumItems = new ArrayList<EnumerationItemBean>();

//Setting up an enumeration item
EnumerationItemBean enumItemBean = new EnumerationItemBean();

//Specify the ID of the enumeration item to be update, 
//where ENUMERATION_ITEM_ID is retrieved using getFieldMetaData()
//enumItemBean.setId(ENUMERATION_ITEM_ID)

//setting the label of the Enumerated item
enumItemBean.setPicklistLabel("Label 1");

//setting the value of the Enumerated item
enumItemBean.setPicklistValue("value1");

//Setting the text color of the Enumerated item label
enumItemBean.setTextColor("#000000");

//Setting the Back ground color of the Enumerated item label
enumItemBean.setTextBgColor("#FFFFFF");

//Adding enumeration item to the list. In a similar way we can add more items
listEnumItems.add(enumItemBean);

//Setting the list of Enumeration Items in the EnumerationDetailsBean
enumDetails.setEnumerationItems(listEnumItems);

//Setting in the Enumeration details in the FieldMetaDataBean
fmdb.setEnumerationDetails(enumDetails);

//On successful addition of the field, the field name is returned
String fieldName = Functions.updateFieldMetaData(fmdb);

Define Mapping for a Dependent Picklist

A Dependent Picklist is one where the list of choices depends on a selection made in a parent field (another field of type enumerated). This sample code maps each choice in a parent picklist to the list of values in the dependent picklist.

import com.platform.beans.EnumerationDetailsBean.*;

//Retrieve the  metadata for the dependent picklist 
FieldMetaDataBean dependentPicklistMeta = getFieldMetaData("myObject", "dependentField");

String parentFieldName = dependentPicklistMeta.getParentPicklistTableColumn();
FieldMetaDataBean parentEnumeratedFieldMeta = getFieldMetaData("myObject", parentFieldName);
EnumerationDetailsBean parentEnumerationDetails = 
    parentEnumeratedFieldMeta.getEnumerationDetails();
List<EnumerationItemBean> parentEnumerationItemList = 
    parentEnumerationDetails.getEnumerationItems();
Map<String,String> parentItemValToItemIdMap = new HashMap<String,String>();

for(EnumerationItemBean item : parentEnumerationItemList)
{
    String itemValue = item.getPicklistValue();
    String itemLabel = item.getPicklistLabel();
    String itemId = item.getId();
    parentItemValToItemIdMap.put(itemValue,itemId);
}

EnumerationDetailsBean dependentEnumerationDetails = 
    dependentPicklistMeta.getEnumerationDetails();
List<EnumerationItemBean> dependentEnumerationItemList =
    dependentEnumerationDetails.getEnumerationItems();
Map<String,String> dependentItemValToItemIdMap = new HashMap<String,String>();

for(EnumerationItemBean item : dependentEnumerationItemList)
{
    String itemValue = item.getPicklistValue();
    String itemLabel = item.getPicklistLabel();
    String itemId = item.getId();
    dependentItemValToItemIdMap.put(itemValue,itemId);
}

List<ParentToChildMapping> pTc = new ArrayList<ParentToChildMapping>();
String dependentItemId = dependentItemValToItemIdMap.get("dep1");
String parentItemId = parentItemValToItemIdMap.get("value1");
ParentToChildMapping tmpPTCMap = new ParentToChildMapping();
tmpPTCMap.setDependentPicklistItemId(dependentItemId);
tmpPTCMap.setParentPicklistItemId(parentItemId);
pTc.add(tmpPTCMap);
dependentEnumerationDetails.setParentToChildMapping(pTc);

String response = Functions.updateFieldMetaData(dependentPicklistMeta);