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.




Problem mit ProcessBatchData

Unbeantwortet Dieser Beitrag hat 5 Antworten

Ohne Rang
49 Beiträge
HeenzKetchup erstellt 17 Okt. 2013 12:13
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Hallo,

ich will mehrere neue Elemente einer Liste hinzufügen. Bisher lief das so:

 For Index = 1 To UBound(Daten)
     Item = Liste.Items.Add
     Item("MailingID") = IDZeile
     For SpalteNr = LBound(Daten(Index).Spalte) To UBound(Daten(Index).Spalte)
          If Not (Daten(Index).Spalte(SpalteNr) Is Nothing Or Daten(Index).Spalte(SpalteNr) = "") Then
              Item("Label" & (SpalteNr + 1).ToString) = Daten(Index).Spalte(SpalteNr)
         End If
     Next 'SpalteNr
     Item.Update()
Next 

Jetzt wollte ich das aber über einen Batchstring machen ähnlich wie http://sharepointcommunity.de/blogs/owirkus/archive/2013/02/11/sharepoint-processbatchdata.aspx :

       Public Shared Sub SpeicherAdressenNEU(ByVal Daten() As SDAten, ByVal IDZeile As String)
           ' Set up the variables to be used.
           Dim methodBuilder As StringBuilder = New StringBuilder()
           Dim batch As String = String.Empty
           Dim SpaltenBuilder As StringBuilder = New StringBuilder()

           Dim batchFormat As String = "<?xml version=""1.0"" encoding=""UTF-8""?>" + _
             "<ows:Batch OnError=""Return"">{0}</ows:Batch>"

            Dim methodFormat As String = "<Method ID=""{0}""><SetList>{1}</SetList>" + _
            "<SetVar Name=""Cmd"">Save</SetVar>" + _
            "<SetVar Name=""ID"">New</SetVar>" + _
            "<SetVar Name=""urn:schemas-microsoft-com:office:office#MailingID"">{2}</SetVar>" + _
            "{3}" + _
            "</Method>"

            Dim SpaltenFormat As String = "<SetVar Name=""urn:schemas-microsoft-com:office:office#Label{0}"">{1}</SetVar>"

 

            Using site As SPSite = SPContext.Current.Site

                Using web As SPWeb = site.OpenWeb()

                    ' Get the list containing the items to update.
                   Dim list As SPList = web.Lists("Adressen")
                   Dim listGuid As String = list.ID.ToString()

                    ' Build the CAML update commands.
                   For Index As Integer = 1 To UBound(Daten)
                       For SpalteNr = LBound(Daten(Index).Spalte) To UBound(Daten(Index).Spalte)
                           If Not (Daten(Index).Spalte(SpalteNr) Is Nothing Or Daten(Index).Spalte(SpalteNr) = "") Then
                               SpaltenBuilder.AppendFormat(SpaltenFormat, SpalteNr + 1, Daten(Index).Spalte(SpalteNr))
                           End If
                       Next 'SpalteNr

                        methodBuilder.AppendFormat(methodFormat, Index, listGuid, IDZeile, SpaltenBuilder.ToString())
                   Next

                   ' Put the pieces together.
                   batch = String.Format(batchFormat, methodBuilder.ToString())

                    ' Process the batch of commands.
                   Dim batchReturn As String = web.ProcessBatchData(batch.ToString)

                End Using

            End Using

        End Sub

 

Der String wird an sich korrekt zusammengebaut, allerdings bekomme ich immer die Fehlermeldung:

"Der Vorgang kann nicht erfolgreich beendet werden.  Bitte versuchen Sie es erneut."

Im Log steht: "Failed to compile XML."

 

Aber warum? Wenn ich die Werte "per Hand", also fest, eintrage, dann geht es. Nur mit meiner Schleife nicht, obwohl das alles Strings sind und wenn ich mir den Batchstring ansehe, dann sieht das gut aus.

Wo ist also der Fehler? 

 

Danke für eure Hilfe.

 

Alle Antworten

Ohne Rang
19231 Beiträge
Andi Fandrich Als Antwort am 17 Okt. 2013 12:33
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

[quote user="HeenzKetchup"]Failed to compile XML[/quote]

Dein XML-String ist kein wohlgeformtes XML. Ich habe aber keine Lust (und keine Zeit) zu suchen. Greife Dir den String im Debugger, speichere ihn in eine Datei und öffne ihn dann in einem XMl-Editor. Der wird Dir dann sagen, wo das Problem liegt.

Viele Grüße
Andi
af @ evocom de
Blog
Ohne Rang
49 Beiträge
HeenzKetchup Als Antwort am 17 Okt. 2013 12:36
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Ich habe mir die Strings angesehen, die sehen komplett gleich aus. Nur einmal gehts, und einmal nicht...

 

 

Das ist mein XML mit meinen Werten aus der For-Schleife. Wenn ich die fest in den Code einbaue, dann gehts. Aber das XML-Zeugs sieht in dem Fall genauso aus!

 

Ich versteh das nicht...

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

[quote user="HeenzKetchup"]Das ist mein XML mit meinen Werten aus der For-Schleife. Wenn ich die fest in den Code einbaue, dann gehts[/quote]

Irgednwo muß aber doch einen Unterschied geben? Oder der Fehler entsteht an einer ganz anderen Stelle. Ich fürchte, da hilft nur ausgiebiges Debuggen :-(

Viele Grüße
Andi
af @ evocom de
Blog
Ohne Rang
49 Beiträge
HeenzKetchup Als Antwort am 17 Okt. 2013 17:16
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Wo könnte es denn noch Fehler geben? Ich übergebe zweimal den gleichen String, einmal mit gefüllten Werten und einmal mit fest gecodeten Werten. Im ersten Fall kommt die Fehlermeldung, im zweiten funktionierts. Das ist doch seltsam, oder?

Ohne Rang
19231 Beiträge
Andi Fandrich Als Antwort am 18 Okt. 2013 08:30
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Dann muß das Problem wohl in den Werten liegen. Wenn dort z.B. spitze Klammern < oder > enthalten sind, wird das XML ungültig. Deshalb hatte ich oben schon gesagt, Du solltest den generierten String abfangen und in einem XML-Editor anschauen.

Viele Grüße
Andi
af @ evocom de
Blog