SharePointCommunity
Die deutschsprachige Community für SharePoint 2016, 2013 und Office 365

SPD Workflow mehrere Personen in eine Spalte einfügen

bewertet von 0 Usern
Beantwortet Dieser Beitrag hat 1 Geprüfte Antwort | 5 Antworten | 1 Follower

Top-75-Beitragsschreiber
Weiblich
167 Beiträge
ExpoIT erstellt in 10 Mrz 2017 20:34

Hallo liebes Forum,

ich habe ein Workflow geschrieben, welches u.a. die Personen aus einer externen Liste auslesen und in eine SP-Liste einfügen soll, dabei hat die Personenspalte die Eigenschaft mehrere Personen aufzunehmen.

Wie müsste da mein Workflow-Code aussehen?

Get d/results from ServiceResponse (Output to Variable: list )

then Count Items in Variable: list (Output to Variable: count )

then Set Variable: index to 0

Schleife: 1

Der Inhalt dieser Schleife wird ausgeführt. Variable: count mal

Get d/results[%Variable: index%] from Variable: ServiceResponse (Output to Variable: item)

then Get Job_No from Variable: item (Output to Variable: jobnno )

then Get USER_ID from Variable: item (Output to Variable: userid )

Schleife 2

Der Inhalt dieser Schleife wird ausgefürhr, wenn Aktuelles Element:Job No eqal Variable:jobnno

Set Projectmembers to Variable:userid

then Calculate Variable: index plus (Output to Variable: indexPlusOne )

Set Variable: index to Variable: indexPlusOne 

Wie kann ich hierfür ein Array setzen? Hat jemand ein Codestück für mich?

 

 

 

 

Viele Grüße AS

Beantwortet Geprüfte Antwort

Top-75-Beitragsschreiber
Weiblich
167 Beiträge

mein Script sieht letztendlich so aus:

 

               $lotsofpeople = [Microsoft.SharePoint.SPFieldUserValueCollection]$item["Projectmembers"]

                $User1 = $webDestination.EnsureUser($row.Name)

                $user1Value = New-Object Microsoft.SharePoint.SPFieldUserValue($webDestination, $User1.ID, $User1.Name)

                $lotsofpeople.Add($user1Value)

                $item["Projectmembers"] = $lotsofpeople     

                Write-Host $lotsofpeople      

                $item.update()

 

und es tut was es soll.

Danke und Gruß

Viele Grüße AS

Alle Antworten

Top-10-Beitragsschreiber
Männlich
17.807 Beiträge

Ich glaube, ich hab das tatsächlich noch nie per Workflow versucht. Ich würde zuerst testen, ob es nicht ausreicht, wenn Du die einzelnen Logins mit Semikolon getrennt aneinanderhängst.

Es könnte aber auch deutlich komplizierter werden. Intern wird jeder Benutzer mit seiner numerischen ID und dem Login getrennt durch Semikolon und Raute ;# gespeichert. Die einzelnen Benutzer sind dabei ebenfalls durch Semikolon und Raute getrennt. Schlimmstenfalls mußt Du also genau das zusammenbauen.

Viele Grüße
Andi
af @ evocom de
Blog
Top-75-Beitragsschreiber
Weiblich
167 Beiträge

Hallo Andi, meine nächste Alternative wäre ein Powershellscript, allerdings kann ich hiermit einfach die User nicht aufrufen, irgendwie steckt hier ein Fehler:

ich nutze ein csv-file als zwischenspeicher. Mein Skript holt die Daten aus dem Odata und schreibt sie in die csv-datei. Klappt super, aber die Abfrage, falls Job No gleich ist sollen die User zusammen in ein Feld geschrieben werden bzw. der nachrücker soll den vorgängereintrag nicht überschreiben sondern dazugeschrieben werden, ist nicht da. Mein aktueller code sieht so aus und funktioniert auch gar nicht wirklich

foreach($row in $csvVariable)

{     $added = 0

     $spQuery = New-Object Microsoft.SharePoint.SPQuery

        $camlQuery = '<Where><Eq><FieldRef Name="Job_No" /><Value Type="Text">'+ $row.Job_No +'</Value></Eq></Where>'

        $spQuery.Query = $camlQuery

        $listItems = $list.GetItems($spQuery)

        $updateitem = $list.Items | Where { $_["Job_No"] -eq $row.Job_No } 

        foreach($item in $items)

        #loop through SharePoint list

        {

        #check if item exists

            if($item["Job_No"] -eq $row."Job_No") 

            { 

                Write-Host "Item already on the list"

                $added++

            } 

        }

        #add new item if item does not exist

              if($added -eq 0){

       $row = $webDestination.Site.RootWeb.EnsureUser($row.Name)

    $newItem = $list.items.Add()

    $newItem["Name"] = $row."Name"

    Write-Host "$row"

    }

}

$webDestination.Dispose()

ISt es falsch hier überhaupt mit Powershell zu arbeiten? Welche Schritte würdest du gehen?

Viele Grüße AS

Top-10-Beitragsschreiber
Männlich
17.807 Beiträge

Also mit PowerShell bis Du natürlich besser dran, weil Du viel mehr machen kannst, als mit einem Workflow. Das ganze Script kann ich Dir nicht schreiben, dazu fehlt mir die Zeit. Ich sehe aber, daß Du dreimal die Abfrage auf die JOBNO hast. Einmal in Form der CAML-Query sollte rfeichen. Sie liefert dann automatisch nur die richtigen Elemente.

Schaue Dir das laufende Script im Debugger an, damit Du siehst, was da wirklich vor sich geht. Im einfachsten Fall kannst Du Ausgaben erzeugen mit Write-Host. Besser ist aber eine ordentliche Entwicklungsumgebung. Mit Windows bekommst Du die ISE installiert, aber es gibt auch bessere wie z.B. PowerGUI.

Und zu dem Multi-Personenfeld: es enthält eine SPFieldUserValueCollection als Wert bzw. erwartet eine solche. Die Collection enthält einzelne Werte vom Typ SPFieldUserValue. Du kannst also die bereits vorhandenen nehmen und neue hinzufügen.

Und nicht vergessen, immer wenn Du auf diese Art etwas veränderst, mußt Du Update() aufrufen, damit es auch wirklich gespeichert wird. Hier also $item.Update()

Viele Grüße
Andi
af @ evocom de
Blog
Top-75-Beitragsschreiber
Weiblich
167 Beiträge

danke, dass du dir die Zeit genommen hast, es mir zu erklären. Ich werde es mal auf diesem Wege versuchen.

Viele Grüße AS

Top-75-Beitragsschreiber
Weiblich
167 Beiträge

mein Script sieht letztendlich so aus:

 

               $lotsofpeople = [Microsoft.SharePoint.SPFieldUserValueCollection]$item["Projectmembers"]

                $User1 = $webDestination.EnsureUser($row.Name)

                $user1Value = New-Object Microsoft.SharePoint.SPFieldUserValue($webDestination, $User1.ID, $User1.Name)

                $lotsofpeople.Add($user1Value)

                $item["Projectmembers"] = $lotsofpeople     

                Write-Host $lotsofpeople      

                $item.update()

 

und es tut was es soll.

Danke und Gruß

Viele Grüße AS

Seite 1 von 1 (6 Elemente) | RSS