2016-10-27 6 views
0

Ich bin auf eine doppelte Lernkurve mit SharePoint 2013 Entwicklung und JavaScript.Sharepoint 2013 Javascript - Get List Felder

Bitte beachten Sie unten.

function GetListFields(listname, viewname, ResultCallBackFunction) 
{ 
    var clientContext = new SP.ClientContext.get_current(); 
    var web = clientContext.get_web(); 
    var list = web.get_lists().getByTitle(listname); 
    if (viewname == "") 
    { 
    var view = list.get_views().getByTitle(viewname); 
    var listFields = view.get_viewFields(); 
    } 
    else 
    { 
    this.listFields = list.get_fields().getByInternalNameOrTitle("Title"); 
    } 
    clientContext.load(this.listFields); 
    clientContext.executeQueryAsync(onListFieldsQuerySucceeded, onListFieldsQueryFailed); 


    function onListFieldsQuerySucceeded() 
    { 
    console.log(listFields.get_fields().getByInternalNameOrTitle("Title").get_internalName()); 

    var fldArray = new Array(); 
    var fieldEnumerator = listFields.getEnumerator(); 
    while (fieldEnumerator.moveNext()) 
    { 
     var oField = fieldEnumerator.get_current(); 
     fldArray.push(oField); 
    } 

    ResultCallBackFunction(fldArray); 
    } 

    function onListFieldsQueryFailed() 
    { 
    alert("Something went wrong. The End is Nigh."); 
    } 
} 

Die Absicht ist GetListFields rufen ein Array mit der Liste der Feldnamen zurückzukehren. Dies gibt den Fehler "Kann die Eigenschaft 'get_fields' von undefined oder NULL-Referenz" in der Zeile "console.log ...." nicht erhalten. Bitte beachten Sie, dass dies für mein Debugging ist.

Wenn ich den Code für die Funktion GetListFields ändern wie folgt:

var clientContext = new SP.ClientContext.get_current(); 
var web = clientContext.get_web(); 
var list = web.get_lists().getByTitle(listname); 
if (viewname == "") 
    viewname = "All Items"; 
var view = list.get_views().getByTitle(viewname); 
this.listFields = view.get_viewFields(); 

bekomme ich ein Ergebnis, aber diese enthält ein Feld namens ‚Linktitle‘, die ich in meiner Liste noch nicht vorhanden, weil ich umbenannt Dies. Was vermisse ich?

Zusätzlich zu den oben genannten, habe ich einen Fehler, wenn

this.listFields = ... 

indem fixiert mit

var listFields = ... 

, die aber nicht verstehen den Unterschied.

Danke für jede Hilfe oder Hinweise.

Antwort

1

Ich habe einen Moment gebraucht, um Ihren Code in meiner Sharepoint 2013-Umgebung zu testen.

Ich habe einige Änderungen vorgenommen und jetzt funktioniert es.

Sie können das resultierende Skript unten sehen.

Hier sind einige wichtige Informationen zu den Feldnamen im Ergebnis-Array.

Die Namen der Felder in der von Sharepoint zurückgegebenen Ansicht sind die internen Namen und nicht der Titel des Felds.

Dies ist der Grund, warum Sie LinkTitle anstelle des echten Titels Ihres Feldes erhalten.

Wenn Sie ein Feld in der Sharepoint-Schnittstelle erstellen, erstellt Sharepoint einen Titel für das Feld und auch einen internen Namen basierend auf dem Titel.

Wenn ich zum Beispiel ein Feld mit dem Namen «mein Testfeld» erstelle, sagt Sharepoint, dass der Titel des Feldes «mein Testfeld» lautet und der interne Name «my_x0020_test_x0020_field» lautet.

<script> 
function GetListFields(listname, viewname, ResultCallBackFunction) 
{ 
    var clientContext = new SP.ClientContext.get_current(); 
    var web = clientContext.get_web(); 
    var list = web.get_lists().getByTitle(listname); 
    var listFields; 
    var view; 
    var defaultViewName = 'All Items'; 
    if (viewname === "") 
    { 
    viewname = defaultViewName; 
    } 
    view = list.get_views().getByTitle(viewname); 
    listFields = view.get_viewFields(); 

    clientContext.load(listFields); 
    clientContext.executeQueryAsync(onListFieldsQuerySucceeded, onListFieldsQueryFailed); 

    function onListFieldsQuerySucceeded() 
    { 
    var fldArray = new Array(); 
    var fieldEnumerator = listFields.getEnumerator(); 
    while (fieldEnumerator.moveNext()) 
    { 
     var oField = fieldEnumerator.get_current(); 
     fldArray.push(oField); 
    } 

    ResultCallBackFunction(fldArray); 
    } 

    function onListFieldsQueryFailed() 
    { 
    alert("Something went wrong. The End is Nigh."); 
    } 
} 

function MyCallBack(fieldArray) { 
    for (var x=0;x<fieldArray.length;x++) { 
    console.log(fieldArray[x]); 
    } 
} 
</script> 
<a id="callGetListFields" href="#" onclick="GetListFields('MyListName','MyViewName', MyCallBack);">Call function GetListFields</a> 

Hoffe diese Hilfe!

+0

Danke dafür. Entschuldigung, ich kann den Kommentar nicht abstimmen, aber die Seite meldet Folgendes: –

Verwandte Themen