SharePointCommunity
Die deutschsprachige Community für SharePoint, Microsoft 365, Teams, Yammer und mit Azure

Sponsored by

Willkommen im Forum Archiv.
Einträge sind hier nicht mehr möglich, aber der Bestand von 12 Jahren SharePoint-Wissen ist hier recherchierbar.




Client Side JS + createDelegate Parameter

Unbeantwortet Dieser Beitrag hat 2 Antworten

Ohne Rang
96 Beiträge
Stefan Walter erstellt 12 Jan. 2013 01:06
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Ich erstelle mittels Client Side JS mehrere Listitems, soweit so gut. Natürlich möchte ich danach auch eine Meldung an den User liefern, das die Datensätze angelegt wurden. Allerdings bekomme ich immer nur das zuletzt bearbeitete element zurück....

function createListItem(data, result)
{
    var clientContext = new SP.ClientContext.get_current();
    var oList = clientContext.get_web().get_lists().getByTitle('Demo'); 
    var columnHeaders = new Array();
   
    for (var i=0; i<data.length; i++)
    {
        var datacolumns = data[i].split(';');
       
        if(i==0)
        {
            for (var x=0; x<datacolumns.length; x++)
            {
                columnHeaders[x] = datacolumns[x];
            }
        }
        else
        {
            var itemCreateInfo = new SP.ListItemCreationInformation();
            this.oListItem = oList.addItem(itemCreateInfo);       
           
            for (var x=0; x<datacolumns.length; x++)
            {
                this.oListItem.set_item(columnHeaders[x], datacolumns[x]);
            }

            this.oListItem.update();

            clientContext.load(this.oListItem);
            clientContext.executeQueryAsync(Function.createDelegate(this, function(){createSucess(i);}), Function.createDelegate(this, this.OnLoadFailed));       
        }
    }
}

function createSucess(param)
{
    alert(param);
}

Nach dem Ausführen habe ich x Listitems erzeugt, und bekomme x mal eine Alertbox mit dem Inhalt "5" (wenn es 5 Items waren). Hat einer von euch eine Idee, was ich da falsch mache?

DANKE

Alle Antworten

Ohne Rang
19231 Beiträge
Andi Fandrich Als Antwort am 13 Jan. 2013 14:43
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Das ist JavaScript und nicht C# und verhält sich deshalb "komisch".

Wenn Die Methode createSucess aufgerufen wird, wird ihr der derzeitige Wert von i übergeben und nicht der Wert von i als der delegate erstellt wurde. Offenbar werden zuerst alle ListItems erzeugt und erst dann wird (fünfmal) die Funktion aufgerufen.

Ich ärgere mich auch ständig mit solchen Problemchen in JavaScript rum. Ich denke man kann das Problem lösen, indem man in der Schleife jedesmal ein neues Objekt erzeugt und das an den delegate übergibt: { "count": i }

Viele Grüße
Andi
af @ evocom de
Blog
Ohne Rang
96 Beiträge
Stefan Walter Als Antwort am 13 Jan. 2013 20:47
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Thx für den Hinweis, werd das bei Gelegenheit mal austesten! Mittlerweile habe ich einen Workaround geschnitzt, aber dennoch wäre es natürlich schön zu wissen wie es wirklich funktionieren würde ... wenn es soweit ist markier ich es als Antwort.

www.stefan-walter.net
SharePoint MCITP, MCPD, MCTS, MOS