Display conditional fields in the data cards based on Stage
Modify the object name, control field, and displayed fields map for this extension to function on your grid.
Type: Javascript
var objName = 'Opportunity';
var controlField = 'StageName';
var displayedFieldsMap = {
'Prospecting' : ['ForecastCategoryName', 'Description'],
'Perception Analysis': ['Owner', 'LeadSource', 'NextStep']
}
//DO NOT MODIFY ANYTHING BELOW THIS LINE
var gridInfo = getGridInfoByApiName(objName);
var controlFieldCol = getMetaColByFieldName(gridInfo, controlField);
var colName = controlFieldCol.fieldId;
jq(document).ready(function(){
var isChildGrid = gridInfo.gridId != 'p';
var childGridId = isChildGrid ? 'c' + (parseInt(gridInfo.gridId) - 1) : '';
for(var controlFieldValue in displayedFieldsMap){
for(var parentRow in gridData){
var rowData = gridData[parentRow];
if(isChildGrid){
var childRowData = rowData[childGridId];
for(var childRow in childRowData){
var fieldValue = childRowData[childRow][colName];
if(fieldValue == controlFieldValue || (modData && modData[childRowData.id] && modData[childRowData.id][colName] == controlFieldValue)){
showHideFieldsInDataCard(childRow, parentRow, displayedFieldsMap[controlFieldValue]);
}
}
}
else{
var fieldValue = rowData[colName];
if(fieldValue == controlFieldValue || (modData && modData[rowData.id] && modData[rowData.id][colName] == controlFieldValue)){
showHideFieldsInDataCard(parentRow, null, displayedFieldsMap[controlFieldValue]);
}
}
}
}
jq('.gbPage').on('change', 'td[name='+colName+'] input', function(e){
var field = jq(e.target);
var val = field.val();
var rowName = field.closest('tr.dr').attr('name');
var isMassUpdate = field.closest('.massUpdatesBox').length == 1;
var parentRowName = field.closest('tr.cr').length > 0 ? field.closest('tr.cr').attr('name') : '';
if(displayedFieldsMap[val]){
showHideFieldsInDataCard(rowName, parentRowName, displayedFieldsMap[val], isMassUpdate);
}
})
})
function showHideFieldsInDataCard(row, parentRow, fieldsToShow, isMassUpdate){
var dataCard;
if(parentRow){
dataCard = jq('tr.cr[name="'+parentRow+'"] tr.dr[name="'+row+'"]').next('.dataCard');
}
else{
dataCard = isMassUpdate ? jq('.massUpdatesBox .dataCard') : jq('#gbMainTable > tbody > tr.dr[name="'+row+'"]').next('.dataCard');
}
var sections = jq('.cardItem', dataCard);
for(var i = 0, len = sections.length; i < len; i++){
var section = jq(sections[i]);
var sectionFieldName = getMetaColByCellName(section.attr('name'), gridInfo).fieldName;
if(fieldsToShow.indexOf(sectionFieldName) == -1){
section.hide();
}
else{
section.show();
}
}
}