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.




Automatischer Start des Workflows sobald eine neue Zeile gespeichert wurde. Wie?

Unbeantwortet Dieser Beitrag hat 8 Antworten

Ohne Rang
47 Beiträge
BenjaminG erstellt 5 Aug. 2014 07:28
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Die Benutzer haben keine Rechte auf bestimmte Listen zu lesen und zu schreiben. Deswegen füge ich neue Daten mit dem System-Account den Listen hinzu. Dies funktioniert einwandfrei. Bloß wird dadurch der Workflow nicht gestartet, da dies nicht erlaubt ist.

Habe festgestellt, dass es im Webservice (_vti_bin/nintexworkflow/workflow.asmx) eine Methode StartWorkflowOnListItem gibt. Wie muss ich den berechtigten Benutzer hinterlegen, dass der Workflow gestartet werden kann?

Als Fehlermeldung erhalte ich immer:

"The request failed with HTTP status 401: Unauthorized."

Code

Namespace.WorkflowWS.NintexWorkflowWS oService = new Namespace.WorkflowWS.NintexWorkflowWS();
oService.UseDefaultCredentials = true;
oService.Credentials = oCredentials;
oService.StartWorkflowOnListItem(iListItem, listName, workflowName, associationData);

Was muss im Feld associationData übergeben?

Alle Antworten

Ohne Rang
611 Beiträge
Florian Adler Als Antwort am 5 Aug. 2014 08:05
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Wieso ist es dem Systemaccount nicht erlaubt einen WF zu starten? Vielleicht solltet ihr generell eure Zugriffssteuerung überdenken, bevor groß rumgefriemelt wird...

Ich bin wieder (sporadisch) hier!

Ohne Rang
19231 Beiträge
Andi Fandrich Als Antwort am 5 Aug. 2014 09:00
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Hallo Benjamin,

ich würde hier nicht versuchen Workflows unter Systemkonto zu starten, sondern ganz einfach einen speziellen Workflowbenutzer einrichten. Also einen Benutzer, der diese besonderen Listen lesen und beschreiben darf und dann die Elemente unter diesem Account anlegen. Alles weitere geht dann automatisch.

Viele Grüße
Andi
af @ evocom de
Blog
Ohne Rang
47 Beiträge
BenjaminG Als Antwort am 5 Aug. 2014 09:08
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Wie sieht dies dann im Code aus?

Zur Zeit habe ich das so umgesetzt:

SPSecurity.RunWithElevatedPrivileges(delegate()
{
    using (SPSite oSite = new SPSite(this.sUrlSiteCollection))
    {
       using (SPWeb oWeb = oSite.OpenWeb())
       {

            oWeb.AllowUnsafeUpdates = true;

            SPListItemCollection oItemCollection = oWeb.Lists[this.sListName].Items;
            SPListItem oItem = oItemCollection.GetItemById(iId);

.........

            oItem.Update();

........

 

Wie muss ich die Speicherung dann durchführen, wo muss der Benutzer hinterlegt werden?

Ohne Rang
19231 Beiträge
Andi Fandrich Als Antwort am 5 Aug. 2014 09:22
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Ich dachte, Du legst die Elemente per Workflow an und dort kann man das per Impersonierung ja ganz einfach machen ;-)

Im Code solltest Du Dir die Konstruktor-Überladung von SPSite ansehen, die ein SPUserToken entgegennimmt. Dazu holst Du Dir den gewünschten Benutzer z.B. über web.SiteUsers.GetByEmail(...) und rufst dann den Konstruktor so auf

new SPSite(<url>, user.UserToken)

Viele Grüße
Andi
af @ evocom de
Blog
Ohne Rang
47 Beiträge
BenjaminG Als Antwort am 5 Aug. 2014 09:40
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

[quote user="Andi Fandrich"]

Ich dachte, Du legst die Elemente per Workflow an und dort kann man das per Impersonierung ja ganz einfach machen ;-)

Im Code solltest Du Dir die Konstruktor-Überladung von SPSite ansehen, die ein SPUserToken entgegennimmt. Dazu holst Du Dir den gewünschten Benutzer z.B. über web.SiteUsers.GetByEmail(...) und rufst dann den Konstruktor so auf

new SPSite(<url>, user.UserToken)

[/quote]

Wenn ich den User per Emailadresse hole, wird dann keine Authentifizierung mit Passwort benötigt?

Ohne Rang
19231 Beiträge
Andi Fandrich Als Antwort am 5 Aug. 2014 10:23
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

[quote user="BenjaminG"]Wenn ich den User per Emailadresse hole, wird dann keine Authentifizierung mit Passwort benötigt?[/quote]

Nein, das funktioniert tadellos so - habe ich schon oft verwendet.

Viele Grüße
Andi
af @ evocom de
Blog
Ohne Rang
47 Beiträge
BenjaminG Als Antwort am 5 Aug. 2014 10:31
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Bis jetzt funktioniert es einwandfrei mit meinem Benutzer. Sobald ich den Projekt-User habe, werde ich den einbauen.

Gibst du dem dann nur die Rechte für die Listen, die dieser benötigt zum Schreiben und Lesen? Oder wird der als Owner der SiteCollection eingetragen?

Ohne Rang
19231 Beiträge
Andi Fandrich Als Antwort am 5 Aug. 2014 10:36
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

[quote user="BenjaminG"]Gibst du dem dann nur die Rechte für die Listen, die dieser benötigt zum Schreiben und Lesen? Oder wird der als Owner der SiteCollection eingetragen?[/quote]

Je nachdem, was er können muß :-)

Ein solcher interner Benutzer, mit dem sich ja normalerweise niemand anmeldet, wird meist für alle möglichen Sachen benutzt, die normale Benutzer nicht dürfen. Da hat es meist Sinn ihn generell als Owner einzutragen.

Viele Grüße
Andi
af @ evocom de
Blog