Domanda

Qualcuno ha scoperto un modo per estendere o modificare la funzionalità della vista di SharePoint Foglio dati (la vista usata quando si modifica un elenco in modalità Foglio dati, quello che sembra un foglio di lavoro di Excel di base)?

ho bisogno di fare diverse cose ad esso, se possibile, ma devo ancora trovare un modo non-hacker decente per modificare qualsiasi funzionalità in esso.

EDIT: Un esempio di ciò che voglio fare è quello di consentire il filtraggio a cascata sui campi di ricerca - quindi una scelta in un campo limita le possibilità di scelta in un altro. C'è un metodo per fare questo in forma visualizzazione standard, ma la visualizzazione Foglio dati è completamente separata.

Saluti

Moo

È stato utile?

Soluzione

Non credo che si può modificare in alcun modo non hacker, ma è possibile creare una nuova visualizzazione Foglio dati da zero. A tale scopo, la creazione di un nuovo controllo ActiveX, ed esponendo come un oggetto COM, e modificando il file web.config per fare riferimento al nuovo controllo ActiveX.

C'è un esempio qui: creazione di un controllo personalizzato scheda tecnica.

Altri suggerimenti

In realtà, si può fare questo. Ecco un frammento di codice ho messo a nudo fuori posto dove sto facendo solo quello che hai chiesto. Ho provato a rimuovere le specifiche.

var gridFieldOverrideExample = (function (){
    function fieldView(ctx){
        var val=ctx.CurrentItem[curFieldName];
        var spanId=curFieldName+"span"+ctx.CurrentItem.ID;
        if (ctx.inGridMode){
            handleGridField(ctx, spanId);
        }       
        return "<span id='"+spanId+"'>"+val+"</span>";      
    } 

    function handleGridField(ctx, spanID){
        window.SP.SOD.executeOrDelayUntilScriptLoaded(function(){
            window.SP.GanttControl.WaitForGanttCreation(function (ganttChart){
                var gridColumn = null;
                var editID = "EDIT_"+curFieldName+"_GRID_FIELD";
                var columns = ganttChart.get_Columns();
                for(var i=0;i<columns.length;i++){
                    if(columns[i].columnKey == curFieldName){
                        gridColumn = columns[i];
                        break;
                    } 
                }
                if (gridColumn){
                    gridColumn.fnGetEditControlName = function(record, fieldKey){
                        return editID;
                    };
                    window.SP.JsGrid.PropertyType.Utils.RegisterEditControl(editID, function (ctx) {
                        editorInstance = new SP.JsGrid.EditControl.EditBoxEditControl(ctx, null);
                        editorInstance.NewValue = "";
                        editorInstance.SetValue = function (value) {
                            _cellContext = editorInstance.GetCellContext(); 
                            _cellContext.SetCurrentValue({ localized: value });
                        };
                        editorInstance.Unbind = function () {
                            //This happens when the grid cell loses focus - hide controls here, do cleanup, etc.
                        }
                        //Below I grabbed a reference to the original 'BindToCell' function so I can prepend to it by overwriting the event.
                        var origbtc = editorInstance.BindToCell;
                        editorInstance.BindToCell = function(cellContext){
                            if ((cellContext.record) && 
                                (cellContext.record.properties) && 
                                (cellContext.record.properties.ID) && 
                                (cellContext.record.properties.ID.dataValue)){
                                editorInstance.ItemID = cellContext.record.properties.ID.dataValue;
                            }
                            origbtc(cellContext);
                        };
                        //Below I grabbed a reference to the original 'OnBeginEdit' function so I can prepend to it by overwriting the event.                   
                        var origbte = editorInstance.OnBeginEdit;
                        editorInstance.TargetID;
                        editorInstance.OnBeginEdit = function (cellContext){
                            this.TargetID = cellContext.target.ID;
                            /*
                            . . .
                            Here is where you would include any custom rendering 
                            . . .
                            */
                            origbte(cellContext);
                        };
                        return editorInstance;
                    }, []);

                }
            });
        },"spgantt.js");
    }

    return{
        fieldView : fieldView
    }
})();

(function () {
    function OverrideFields(){
        var overrideContext = {}; 
        overrideContext.Templates = overrideContext.Templates || {};
        overrideContext.Templates.Fields = {
            'FieldToOverride' : {
                'View': gridFieldOverrideExample.fieldView
            }
        };   
        SPClientTemplates.TemplateManager.RegisterTemplateOverrides(overrideContext);
    }   
    ExecuteOrDelayUntilScriptLoaded(OverrideFields, 'clienttemplates.js');
})();   

Inoltre, ci sono un paio di altri esempi là fuori. Spiacente, non ho più i link:

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top