• CampaignCalldown 页面调试


    先跑的CF_gridGetObjectMeta

    View Code
    function CF_gridGetObjectMeta(obj, success_cb, failure_cb) {
        CF_beginProgress('Loading Metadata');
        
        CampaignCallDown.getObjectMeta(obj, function(result, event) {
            if (event.status == true) {
                // success - check picklists
                
                if (obj == 'CampaignMember') {
                    eval('var rsCM = ' + result['CampaignMember']);
                    eval('var rsCT = ' + result['Contact']);
                    eval('var rsAC = ' + result['Account']);
                    eval('result  = ' + result[obj]);
                    
                    result.fields = [];
                    result.children = [];
    
                    for (var i = 0; i < rsCM.fields.length; i++) {
                        rsCM.fields[i].Name = rsCM.fields[i].Name;
                        result.fields.push(rsCM.fields[i]);
                    }
                    for (var i = 0; i < rsCT.fields.length; i++) {
                     rsCT.fields[i].HackObject = 'Contact';
                        rsCT.fields[i].HackField = rsCT.fields[i].Name;
                        
                        rsCT.fields[i].Name = 'Contact.' + rsCT.fields[i].Name;
                        rsCT.fields[i].Label = 'Contact: ' + rsCT.fields[i].Label;
    
                        rsCT.fields[i].HackExtra = true;
                        
                        if (rsCT.fields[i].Controller != null && rsCT.fields[i].Controller != '') {
                            rsCT.fields[i].Controller = 'Contact.' + rsCT.fields[i].Controller;
                        }
                        
                        rsCT.fields[i].IsUpdateable = false;
                        rsCT.fields[i].IsCreateable = false;
                                        
                        result.fields.push(rsCT.fields[i]);
                    }
                    for (var i = 0; i < rsAC.fields.length; i++) {
                     rsAC.fields[i].HackObject = 'Account';
                        rsAC.fields[i].HackField = rsAC.fields[i].Name;
                        
                        rsAC.fields[i].Name = 'Contact.Account.' + rsAC.fields[i].Name;
                        rsAC.fields[i].Label = 'Account: ' + rsAC.fields[i].Label;
    
                        rsAC.fields[i].HackExtra = true;
                        if (rsAC.fields[i].Controller != null && rsAC.fields[i].Controller != '') {
                            rsAC.fields[i].Controller = 'Contact.Account.' + rsAC.fields[i].Controller;
                        }
                        
                        rsAC.fields[i].IsUpdateable = false;
                        rsAC.fields[i].IsCreateable = false;
                        
                        result.fields.push(rsAC.fields[i]);
                    }
                    
                    $.merge(result.children,$.merge(rsAC.children,rsCT.children));
                
    
                } else {
                    eval('result = ' + result[obj]);
                }
                
                var picklistsToLoad = [];
                var resByName = {};
                for (var i = 0; i < result.fields.length; i++) {
                    if (result.fields[i].DisplayType == 'MULTIPICKLIST' || result.fields[i].DisplayType == 'PICKLIST') {
                        if (result.fields[i].PicklistVals) {
                            // already loaded
                        } else {
                            // need to load these - possibly over the governance limit
                            picklistsToLoad.push(result.fields[i].Name);
                            resByName[result.fields[i].Name] = result.fields[i];
                        }
                    }
                }
    
                var endFunc = function() {
                    // go through all the picklists and set the defaults now
                    for (var i = 0; i < result.fields.length; i++) {
                        if (result.fields[i].PicklistVals) {
                            var defaultVal = null;
                            for (var j = 0; j < result.fields[i].PicklistVals.length; j++) {
                                if (result.fields[i].PicklistVals[j].isDefault) {
                                    defaultVal = result.fields[i].PicklistVals[j].value;
                                    break;
                                }
                            }
                            if (defaultVal) { 
                                result.fields[i].DefaultValue = defaultVal;
                            }
                        }
                    }
                    success_cb(result);
                    CF_endProgress();
                }
                if (picklistsToLoad.length > 0) {
                    // call the API to load the next batch - hopefully there aren't more than 200 picklists
                    Configero_GridApp.getObjectPicklistMeta(obj, picklistsToLoad, function(pl_result, pl_event) {
                        if (pl_event.status == true) {
                            eval('pl_result = ' + pl_result);
                            for (var x in pl_result) {
                                resByName[x].PicklistVals = pl_result[x];
                            }
                            endFunc();
                        } else {
                            alert(pl_event.message);
                            if (failure_cb) failure_cb();
                            CF_endProgress();
                        }
                    }, {escape: false});
                } else {
                    endFunc();
                }
            } else {
                // failure
                alert(event.message);
                if (failure_cb) failure_cb();
                CF_endProgress();
            }
        }, {escape: false});
       
    }

    next:handleObjectMetaResults

    View Code
    function handleObjectMetaResults(result) {
        var objType = result.objectAPIName;
        preprocessMetaResults(result);
        handleObjectMetaResultsCommon(result, objType,templateName);
        postProcessMetaResults(allFieldsByAPIName[objType], objType);
    }

    next: handleObjectMetaResultsCommon

    View Code
    function handleObjectMetaResultsCommon(result, objType, templateGroup) {
        if (!templateGroup) templateGroup = objType;
        allFields[objType] = result.fields;
        allChildRelationships[objType] = result.children;
        allObjectProps[objType] = {feedEnabled: result.feedEnabled, hasRecordTypes: result.hasRecordTypes, keyPrefix: result.keyPrefix, isCreateable: result.isCreateable, isDeletable: result.isDeletable, isUpdateable: result.isUpdateable};
        
        allFieldsByAPIName[objType] = {};
        for (var i = 0; i < allFields[objType].length; i++) {
            allFieldsByAPIName[objType][allFields[objType][i].Name] = allFields[objType][i];
        }
        allTemplates[objType] = result.templates;
        for (var i = 0; i < allTemplates[objType].length; i++) {
            allTemplates[objType][i][CF_NAMESPACE_PREFIX + 'BulkEditTemplateFields__r'] = allTemplates[objType][i][CF_NAMESPACE_PREFIX + 'BulkEditTemplateFields__r']['records'];
        }
    
        var def = buildDefaultTemplate(allObjectProps[objType], allFieldsByAPIName[objType]);
        var xar = {};
        xar['Id'] = '';
        xar['Name'] = 'System Default';
        xar[CF_NAMESPACE_PREFIX + 'JustMyRecords__c'] = true;
        xar['OwnerId'] = '';
        xar[CF_NAMESPACE_PREFIX + 'Private__c'] = true;
        xar[CF_NAMESPACE_PREFIX + 'BulkEditTemplateFields__r'] = def;
        allTemplates[objType].unshift(xar);
    
        // determine which template should be selected
        selectedTemplate[templateGroup] = determineDefaultTemplateFromList(allTemplates[objType], templateGroup);
    }

    next:postMetaResults

    View Code
    // called once the meta data is loaded - go ahead and prepare the grid and load the results based on the template that we have loaded
    function postMetaResults() {
        // add the parent field to the default template
        if (PM_getGridParam('mygrid', 'parentField')) {
         var xar = {};
         xar[CF_NAMESPACE_PREFIX + 'Width__c'] = DEFAULT_COLUMN_WIDTH;
         xar['Name'] = PM_getGridParam('mygrid', 'parentField');
            allTemplates[OBJECT_TYPE][0][CF_NAMESPACE_PREFIX + 'BulkEditTemplateFields__r'].push(xar);
        }
        beginNewSearch('mygrid', OBJECT_TYPE);
    }

    next:beginNewSearch

    View Code
    function beginNewSearch(gridName, objType) {if (window[gridName]) window[gridName].CF_clearSearchHistory();ndDataSequence[gridName] = [];beginTemplateSearch(objType);}

     next:beginTemplateSearch

    View Code
    function beginTemplateSearch(objType) {
      // get field info for this template
      var template = getTemplateById(objType, selectedTemplate[templateName]);
      beginBulkSearch(objType, template[CF_NAMESPACE_PREFIX + 'BulkEditTemplateFields__r']);
    }

    next:beginBulkSearch

    View Code
    function beginBulkSearch(objName, templateFields) {
      fieldsLoaded[objName] = [];
      var prevFilters = false;
      if (loadPreviousResults['mygrid'] && mygrid) {
        prevFilters = mygrid.CF_getFilters();
      }
      rebuildGrid(templateFieldsToFieldDef(fieldsLoaded[objName], templateFields, allFieldsByAPIName[objName], objName));
      if (loadPreviousResults['mygrid']) {
          delete loadPreviousResults['mygrid'];
          if (!ndDataSequence['mygrid']) ndDataSequence['mygrid'] = [];
          mygrid.CF_dataSequence = ndDataSequence['mygrid'].slice(0);
          if (prevFilters) {
              mygrid.attachEvent('CF_onLoadComplete', function() {
                mygrid.CF_applyFilters(prevFilters);
              });
          }
          ndDataSequence['mygrid'] = [];
          mygrid.CF_dataById = {};
      }
      mygrid.CF_beginSearch();
    }

    next:templateFieldsToFieldDef

    View Code
    function templateFieldsToFieldDef(fieldsLoaded, templateFields, allFieldsByAPIName, obj) {
      // for bulk editing
      var fieldDef = [
          {'name':'','sort':'str','width':'0','align':'center','type':'ch','field':'__selectall','value_func':function(rec){return 0},'filter':'#master_rah_checkbox','skip_export':true,'bulk_edit_override':'','skip_track_changes':true,'selalltype':'master',allowResize:'false'},
          {'name':'<div class="error_icon" />','sort':'str','width':'0','align':'center','field':'__error','type':'err','value_func':function(rec){return '';},'filter':'','skip_export':true,'skip_track_changes':true,allowResize:'false'}
      ];
    
      // build fieldDef from list of fields for this template
      for (var i = 0; i < templateFields.length; i++) {
          var f = templateFields[i];
          var n = f.Name;
          var a = allFieldsByAPIName[n];
          if (!a) continue;  // maybe the field is no longer valid yet exists in the template?
          fieldsLoaded.push(n);
    
          var fd = {'name': a.Label, 'soapType': a.SoapType, 'dynamicFieldIndex': i, 'sort':'str','defaultvalue':a.DefaultValue,'width':f[CF_NAMESPACE_PREFIX + 'Width__c'], 'summary':f[CF_NAMESPACE_PREFIX + 'SummaryType__c'], 'align':'left', 'field': a.Name, 'filter':'#textregex_filter', 'createable': a.IsCreateable, 'updateable': a.IsUpdateable, 'controller': a.Controller, 'object': obj};
    
          if (f[CF_NAMESPACE_PREFIX + 'SplitAt__c']) fd.split = true;
    
          var readOnly = (!a.IsUpdateable && !a.IsCreateable) || a.Name == 'RecordTypeId';
          if (a.SoapType == 'BOOLEAN') {
              // checkbox
              fd['align'] = 'center';
              fd['type'] = readOnly ? 'chro' : (getDependencyChain(allFieldsByAPIName, a.Name).length > 0 ? 'chvf' : 'ch');
              fd['value_func'] = function(rec, fld) { return rec[fld['field']] ? '1' : '0' };
              fd['filter'] = '#yesno_filter';
          } else if (a.SoapType == 'DATE' || a.SoapType == 'DATETIME') {
              fd['sort'] = 'date';
              fd['align'] = 'center';
              fd['type'] = readOnly ? 'rotxt' : 'dhxCalendarA';
          } else if (a.SoapType == 'DOUBLE' || a.SoapType == 'INTEGER') {
              fd['sort'] = 'int';
              fd['align'] = 'right';
              fd['type'] = readOnly ? 'ron' : 'edn';
              fd['filter'] = '#numeric_filter';
              var s = '';
              for (var j = 0; j < a.Scale; j++) s += '0';
              if (s != '') s = '.' + s;
              fd['numberFormat'] = (a.DisplayType == 'CURRENCY' ? '$' : '') + '0,000' + s;
          } else if (a.DisplayType == 'PICKLIST') {
              fd['type'] = readOnly ? 'corotxt' : 'plvf';
              fd['PicklistVals'] = a['PicklistVals'];
              //fd['filter'] = '#plist_filter'; // get rid of for now - need to show only displayed values?  What about filtering on blank vs showing all?
              fd['sort'] = 'pl';
          } else if (a.DisplayType == 'MULTIPICKLIST' ) {
              fd['type'] = readOnly ? 'rotxt' : 'vf';
              fd['PicklistVals'] = a['PicklistVals'];
          } else if (a.IsHtmlFormatted) {
              if(a.DisplayType == 'TEXTAREA') {
                fd['type'] = readOnly ? 'ro' : 'edtxtvf';
              } else {
                fd['type'] = readOnly ? 'ro' : 'ed';
              }
          } else if (a.DisplayType == 'TEXTAREA') {
              fd['type'] = readOnly ? 'rotxt' : 'edtxtvf';
          } else {
              fd['type'] = readOnly ? 'rotxt' : 'edtxt';
          }
          // if is NOT updateable, then disable bulk edit
          if (readOnly) {
              fd['skip_track_changes'] = true;
          }
          // if is a reference field, add bulk edit info
          if (a.ReferenceTo) {
              fd['related'] = a.ReferenceTo;
              fd['related_field'] = a.Relationship;
          }
          fd['defaultvalue'] = a.DefaultValue;
          if (a.HackExtra) fd['hackextra'] = a.HackExtra;
          if (a.HackObject && a.HackObject != '') fd['hackobject'] = a.HackObject;
          if (a.HackField && a.HackField != '') fd['hackfield'] = a.HackField;
          fieldDef.push(fd);
      }
      return fieldDef;
    }

    next:rebuildGrid

    View Code
    function rebuildGrid(fieldDef) { 
        resetMainGrid();
    
     var dynamicBegin = fieldDef.length;
        for (var i = 0; i < fieldDef.length; i++) {
         if (fieldDef[i].dynamicFieldIndex == 0) {
          dynamicBegin = i;
          break;
         }
        }
    
        // don't care about view link if don't have a way to open it
        if (PM_getGridParam('mygrid', 'openUrlFunc')) {
         fieldDef.splice(dynamicBegin, 0, {'name':'','sort':'str','width':'30','align':'center','field':'__link','type':'link','value_func':function(rec){return '<img title="Open" src="/resource/1342856524000/AppIcons/actions/go-next.png" />^javascript:PM_getGridParam("mygrid","openUrlFunc")("' + rec.Id + '")'; },'filter':'','skip_export':true,'skip_track_changes':true,allowResize:'false'});
         dynamicBegin++;
        } 
        
        // assume whatever field is here will get the parent defined
        if (PM_getGridParam('mygrid', 'parentField')) {
      fieldDef[dynamicBegin]['type'] = 'tree';
     }
        buildGrid(fieldDef);
    }

    next:buildGrid

    View Code
    function buildGrid(fieldDef) {
       var hasContactId = false;
       for (var i = 0; i < fieldDef.length; i++) {
           if (fieldDef[i].field == 'ContactId') hasContactId = true;
       }
       if (!hasContactId) {
           fieldDef.push({'name':'hackContact','width':'0','skip_track_changes':true,'skip_export':true,'type':'rotxt','hack_field':'hackContactId','value_func':function(rec){return rec.ContactId}});
       }
       fieldDef.push({'name':'hackContactName','width':'0','skip_track_changes':true,'skip_export':true,'type':'rotxt','hack_field':'hackContactName','value_func':function(rec){return rec.Contact.Name; }});
       fieldDef.push({'name':'hackAccountName','width':'0','skip_track_changes':true,'skip_export':true,'type':'rotxt','hack_field':'hackAccountName','value_func':function(rec){return (rec.Contact.Account ? rec.Contact.Account.Name : ''); }});  
       
       buildGridBase(OBJECT_TYPE, fieldDef);
       buildTabBase();
       mygrid.CF_searchGetIdsFunc = doRemoterSearchGetIds;
       mygrid.CF_searchLoadDataForIdsFunc = doRemoterGetDataForIds;
       
    
     
    }

    next:buildGridBase

    View Code
    function buildGridBase(objType, fieldDef, toolbarFilterFuncCustom, gridDefHandlerCustom) {
       var gridDefHandler = function(grid) {
        if (gridDefHandlerCustom) grid = gridDefHandlerCustom(grid);
        return grid;
       }
       var toolbarFilterHandler = function(btns, obj) {
            btns.unshift(
            {
                type: "button",
                id: "save_btn",
                img: "Configero/save.png",
                tooltip: 'Save',
                text: 'Save',
                onClick: function(grid) {
                  if (!grid.CF_hasBulkEditEnabled) return;
                  grid.CF_saveChanges();
                }
            }
            );
            for (var i = 0; i < btns.length; i++) {
             if (btns[i].id == 'delete') {
              var delete_func = btns[i].onClick;
              btns[i].onClick = function(grid) {
               if (grid.CF_hasBulkEditEnabled) {
                //delete_func(grid);
                grid.CF_deleteRows();
                grid.CF_saveChanges();
               } else {
                delete_func(grid);
               }
              }
              break;
             }
            }
         if (toolbarFilterFuncCustom) btns = toolbarFilterFuncCustom(btns, obj);
         return btns;
       }
       __cf._attachGrid(gridCell, {
           'var':  'mygrid',
           'grid': gridDefHandler({
               fields: fieldDef,
               allowFilter: !PM_getGridParam('mygrid', 'suppressHeaderFilter'),
               allowBulkEdit: !PM_getGridParam('mygrid', 'parentField'),
               postInit: function(grid) {
                 grid.attachEvent('onResizeEnd', function() { saveTemplate(grid, objType); });
                    if (PM_getGridParam(grid.CF_var, 'parentField')) {
                     grid.attachEvent('onRowDblClicked', function(id) {
                         var editurl = PM_getGridParam(grid.CF_var, 'editUrlFunc')();
                         if(editurl) {
                             var idd =grid.getSelectedId();
                             $.doLookupEdit(editurl+'&idd='+escape(idd)+'&grid='+escape(grid.CF_var), null,null,'lookupEditDialog', PM_getGridParam(grid.CF_var, 'editTitleFunc') ? PM_getGridParam(grid.CF_var, 'editTitleFunc')(idd) : '');
                         }
                     });
                     grid.rowToDragElement=function(rid) {
                      for (var i = 0; i < grid.CF_fieldDef.length; i++) {
                 if (grid.CF_fieldDef[i]['field'] == 'Name') {
                     var text = grid.cells(rid, i).getValue();
                     return text;
                 }
             }
             return '';
                     }
    
                     grid.setFiltrationLevel(0);
                     grid.enableDragAndDrop(true);
                     
                     grid.attachEvent('onDragIn', function(dId, lId, sobj, tobj) { return sobj == tobj; });
                     grid.attachEvent('onDrag', function(sourceId, targetId, sourceGrid, targetGrid, colIndexStart, colIndexEnd) {
                         // only allow drag/drop among ourselves
                         if (sourceGrid != targetGrid) return false;
     
                         // if it's the same parent already, only do something if ctrl key is parent (ie - unset relationship)
                         var currentParent = grid.getParentId(sourceId);
                         if (currentParent == targetId) {
                             // if control key pressed, undo - otherwise do nothing
                             if (!CF_currentKeysPressed[17]) return false;
                             targetId = null;
                         }
     
                         // call the webapp to see if this is allowed
                         CF_beginProgress('Moving...');
                         grid.CF_dragRowFunc(sourceId, targetId, function(result, event) {
                            if (event.status == true) {
                                reParentRecord(sourceGrid, sourceId, targetId == null ? 0 : targetId);
                            } else {
                                alert(event.message);
                            }
                            CF_endProgress();
                         });
                         return false;
                     });
                   } else {
                     // for now set them all to the same thing
                     grid.CF_saveRecsFunc = function(recsToSend, saveChangesHandler, extraParams) {
                      var afterSave = function(res, event) {
                       saveChangesHandler(res, event);
                       // if nothing is selected, reset the depend views
                       if (!grid.getSelectedId()) {
                        grid.callEvent('onRowSelect', ['', '', false]);
                       }
                      }
                      Configero_CampaignCalldownApp.saveRecs(objType, fieldsLoaded[objType], recsToSend, afterSave, extraParams);
            }
                   }
               },
               'toolbar': {
                   'var':'grid_toolbar',
                   items: getGenericGridToolbarSet('mygrid', objType, toolbarFilterHandler)
               }
           })
       });
       mygrid.attachEvent('CF_onLoadComplete', function() {
            if (PM_getGridParam('mygrid', 'autoScrollToId') && PM_getGridParam('mygrid', 'autoScrollToId') != '') {
                // add this event so it runs after all other progress events are done
                CF_doWhenIdle(function() {
                    CF_beginProgress('Finding record');
                    if (mygrid.CF_hasId(PM_getGridParam('mygrid', 'autoScrollToId'))) {
                        mygrid.showRow(PM_getGridParam('mygrid', 'autoScrollToId'));
                        mygrid.selectRowById(PM_getGridParam('mygrid', 'autoScrollToId'));
                        mygrid.callEvent('onRowSelect', [PM_getGridParam('mygrid', 'autoScrollToId'), '', true]);
                    }
                    PM_setGridParam('mygrid', 'autoScrollToId', null);
                    CF_endProgress();
                });
            }
       });
     }

    next:buildTabBase

    View Code
     function buildTabBase() {
       var tabs = getTabsForPage();
       hookedTabBars['propertiesCell'] = buildTabBaseAndHooks(tabs, propertiesCell);
     }

    next:doRemoterSearchGetIds

    View Code
    function doRemoterSearchGetIds(loadPageSize,searchResultsHandler, extraParams) {
        campaignId = $("#allCampaigns").val();
        if (!campaignId) {
            CF_endProgress();
            return;
        }
        
        var selStatus ;
        var cmStatus=[];
        selStatus=$("#cmStatus option:selected").each(function(index,obj){
          var o = $(obj);
          var v = o.val();
          cmStatus.push(v);
         }) 
    
     CampaignCallDown.getCampaignMembers(getFieldsToLoad(),campaignId,cmStatus, loadPageSize, searchResultsHandler, extraParams);
    }

    next:doRemoterGetDataForIds

    View Code
    function doRemoterGetDataForIds(lastIdBatch, handleLoadResults, extraParams) {
     Configero_CampaignCalldownApp.getDataForIds(OBJECT_TYPE, getFieldsToLoad(), lastIdBatch, handleLoadResults, extraParams);
    }
  • 相关阅读:
    受益一生的15个学习习惯
    如何在工作的头三年里让自己变得强大
    linux定时执行脚本
    SpringMVC基础入门
    Spring与Quartz的整合实现定时任务调度[转]
    强肝保肝养肝4大食物
    Spring官网jar包下载方法
    tomcat管理端的页面安全措施
    Struts2 Action 动态传参数
    Java之控制反转和依赖注入
  • 原文地址:https://www.cnblogs.com/EasonSun/p/2608011.html
Copyright © 2020-2023  润新知