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.




Zugriff auf Sharepointlisten

Unbeantwortet Dieser Beitrag hat 9 Antworten

Ohne Rang
20 Beiträge
galaxyprune erstellt 13 Okt. 2009 13:07
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Hallo Community,

ich habe eine Liste "Mitarbeiter", in der Name, Email und ein Feld "Rolle" zu finden sind.

Jetzt habe ich einen Workflow entwickelt (Visual Studio Sequentieller Workflow), der für jedes Dokument in meiner Dokumentenbibliothek gestartet wird. Bei diesem Workflow werden Tasks in die gleichnamige Taskliste geschrieben. Leider weiß ich nicht, wie ich nun während des Workflows, einen Task für jeden User der Rolle "xyz" anlegen kann.

Ich habe mir überlegt, bei der Activity "onCreateTask" bei der Taskproperty.AssignedTo den empfänger auf z. B. "user1;user2;user3" zu setzen. Dafür müsste ich aber zunächst die Mitarbeiter Liste während des Workflows auslesen. Aber wie? Ich hab viel gegooglt und eine Möglichkeit per Webservice -> gefällt mir irgendwie nicht.. und eine Möglichkeit über SPWeb.
Ich hab hierfür diesen Codeschnipsel gefunden:

SPWeb web = new SPControl.GetContextWeb(Context);
SPist myList = web.Lists["Mitarbeiter"];
SPListItemsCollection items = myList.items;
for each (SPListItem item in items) { emfaenger = emfaenger + ";" + item["Name"].toString();  ...}

Haltet Ihr das für einen "sinnvollen" Ansatz? Wäre über euer Feedback bzw. Alternativvorschläge sehr dankbar.

Schöne Grüße

Martin

Alle Antworten

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

Das kann man schon so machen, aber willst Du nicht die User einer bestimmten Rolle? Mit obigem Code bekommst Du alle in der Liste...

Falls Du sie filtern willst, dann prüfe vor dem Hinzufügen zu "emfaenger" das Feld "Rolle". Falls es viele Einträge in der Liste gibt, dann solltest Du nur die relevanten auslesen. Siehe dazu SPQuery.

Willst Du jetzt eigentlich einen Task für alle User oder jeweils einen Task pro User?

Viele Grüße
Andi
af @ evocom de
Blog
Ohne Rang
20 Beiträge
galaxyprune Als Antwort am 13 Okt. 2009 13:36
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Hallo Andi,

der obige code sollte nur exemplarisch zeigen, dass ich über das Sharepointobjektmodell auf die Liste zugreifen möchte. Beim Entwicklen muss ich natürlich nach den Rollen filtern (danke für den tipp mit SPQuery!).

Die Dokumentenbibliothek hat  zusätzliche Spalten: Rolle 1, Rolle 2, Rolle 3. Diese können den Wert true/false haben. Wenn der Ersteller des Dokumentes für Rolle 1 = true, Rolle 2 = true, Rolle 3 = false einstellt. Dann soll der Workflow für alle User der Rollen 1 und 2 jeweils ein Task erstellen (dafür muss er in der Liste "Mitarbeiter" nachschauen, wer, welche Rolle hat), damit diese das eingestellte Dokument lesen und danach das Lesen bestätigen können. Dadurch soll der Ersteller des Dokumentes ein Feedback bekommen, dass auch alle relevanten User das Dokument gelesen haben oder nicht.

Hoffe ich habe mich verständlich ausgedrückt.

Gruß

Martin

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

Das hört sich für mich so an, als ob Du mit diesem System das Berechtigungssystem von SharePoint nachbauen wolltest. Dort gibt es bereits Benutzergruppen und ihnen zugewiesene Berechtigungsstufen (aka Rollen). Wenn Du das nutzen würdest, dann müßtest Du per Workflow nur noch die entsprechenden Berechtigungen setzen und fertig. Das sieht dann so aus: die Benutzer sind Mitglied in ein oder mehreren Benutzergruppen. Der Workflow prüft die Rollenfelder und erteilt der entsprechenden Gruppe dann Lese-/Schreibrechte. Bei Bedarf werden auch Benachrichtigungen oder Aufgaben verteilt (an die Gruppe).

Vergiß was ich sage, falls ich Dich komplett falsch verstanden habe :-)

Viele Grüße
Andi
af @ evocom de
Blog
Ohne Rang
20 Beiträge
galaxyprune Als Antwort am 13 Okt. 2009 20:54
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Danke für deine Antwort! Leider ist die Businesslogik etwas komplizierter (kann ich leider nicht ändern D: ) und deshalb bin ich gezwungen, diesen umständlichen weg zu gehen. Mein Problem ist es, dass ich einen Sequentiellen Workflow in Visual Studio 2008 erstelle, und nicht weiß, wie ich Tasks für mehrere User und Rollen erstelle.

 Beispiel: Man lädt ein Dokument in die Dokumentenbibliothek hoch. Setzt in den Spalten: "Teamleiter" = true ( heißt, Personen dieser Rolle, müssen das Dokument lesen) und "QM Mitarbeiter" = true ... Rest auf false. Dann wird der Workflow gestartet. Dieser erkennt, welche Rollen in den Spalten auf "true" gesetzt wurden. Der Workflow erstellt einen Task für jeden User der betroffenen Rollen (Teamleiter "Hans" und "Peter" bekommen einen individuellenTask), damit jeder in seiner "My Tasks" liste nachschauen kann, welche Dokumente er lesen und bestätigen muss. Leider kann ich ja nicht einfach

createTask1_TaskProperties1.AssignedTo = @"hier die ganzen User mit einem Semikolon getrennt eintragen" :(

Würde das funktionieren, wenn ich eine While (für jeden betroffenen User) Konstuktion verwende? Gibt es vielleicht einen anderen, "einfacheren" Ansatz?

Vielen Dank, dass hier auch "dumme" Fragen beantwortet werden. Mein Lob!

Grüße

Martin

Ohne Rang
183 Beiträge
Dominik Kovacic-Voß Als Antwort am 13 Okt. 2009 23:33
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

also für mich hört sich das eher an, dass hier Nintex Workflow Dir viel Arbeit abnehmen würde. Denn hier kann man mit einer sehr guten Oberfläche wunderbare Workflows machen. Und was Du hier machst, haben wir dort schon mehrfach in ähnlicher Form umgesetzt.

Sorry für das abschweifen, wenn Du schon so weit bist :)

Ohne Rang
20 Beiträge
galaxyprune Als Antwort am 14 Okt. 2009 00:20
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Hallo Dominik, das klingt sehr interessant. Jedoch geht es mir, zu lernen - daher muss ich auf solche Tools verzichten.

Ohne Rang
19231 Beiträge
Andi Fandrich Als Antwort am 14 Okt. 2009 08:33
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Und warum holst Du Dir nicht alle User der entsprechenden Rolle und erstellst für jeden ein Task?

Viele Grüße
Andi
af @ evocom de
Blog
Ohne Rang
20 Beiträge
galaxyprune Als Antwort am 14 Okt. 2009 10:11
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Hi Andi!

Ich hatte beim Googlen gelesen, dass dies aus irgendeinem Grund nicht so einfach sein soll: http://social.msdn.microsoft.com/Forums/en-US/sharepointworkflow/thread/eaa3a47d-e274-47ae-9f81-f51ec5c91756

Wenn ich mich in Sharepoint Workflows so gut auskennen würde, dann würd ich nicht so blöde fragen stellen :).

BTW. Ich hab nochmal deinen Vorschlag überdacht, Sharepoint Gruppen anstatt einer selbst gebastelten Liste zu verwenden. Habe in meiner Dokumentenbibliothek nun eine Spalte, in der man die Gruppe eingeben kann. Kann man dann im Sequenziellen Workflow auch jeden User der Gruppe einen seperaten Task anlegen (also vergleichbar mit Expand Groups)? Wenn das ginge, dann wär mein Tag gerettet.

Schöne Grüße

Martin

Ohne Rang
19231 Beiträge
Andi Fandrich Als Antwort am 14 Okt. 2009 12:39
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Die Lösung steht doch auf der von Dir verlinkten Seite ziemlich weit unten? wenn Dir das nicht reicht, dann kannst Du auch aus dem Workflow manuell Elemente in einer Taskliste anlegen. Allerdings mußt Du Dich dann selbst um die Logik kümmern, die überwacht, ob alle Tasks erledigt sind...

Du hast natürlich recht: einfach ist das nicht. Ich wollte das auch nicht so darstellen, also sorry, falls das so rüberkam :-)

Viele Grüße
Andi
af @ evocom de
Blog