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.




C# Programm bricht ab ohne Fehlermeldung

Unbeantwortet Dieser Beitrag hat 9 Antworten

Ohne Rang
47 Beiträge
BenjaminG erstellt 25 Nov. 2014 13:00
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Ich habe ein sehr komisches Problem, wo ich leider nicht weiter kommen.

Es wurde ein Formular angelegt. Sobald dieses Formular abgespeichert wird, wird die Vererbung für diesen Eintrag aufgelöst. Dann werden die Rechte für die vorhandenen Gruppen gesetzt. Zum Schluß lege ich noch für 3 verschiedene Benutzer eine eigenständige Gruppe mit Schreibrechte an. Bei diesem Schritt bricht einfach das Programm ab, ohne das der Code bis zum Ende durchgelaufen wird. Ich erhalte auch keine Fehlermeldunge.

Woran kann dies denn liegen?

 

var list = oWeb.Lists.GetList(SPContext.Current.ListId, true);
var item = list.GetItemById(SPContext.Current.ListItem.ID);

oWeb.AllowUnsafeUpdates = true;

item.BreakRoleInheritance(false);

// Setzen der vorhandenen Gruppen

oWeb.SiteGroups.Add(title, owner, defaultUser, description);

item.Update();

oWeb.Update();

oWeb.AllowUnsafeUpdates = false;

Alle Antworten

Ohne Rang
634 Beiträge
Olaf Didszun Als Antwort am 25 Nov. 2014 13:21
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Findest du irgendetwas zu dem Problem im ULS Log? Hast du schon mal versucht einen try-catch um deinen Code zu setzen, ob du da irgendeine Exception erhältst?

Grüße

Olaf

Ohne Rang
19231 Beiträge
Andi Fandrich Als Antwort am 25 Nov. 2014 13:24
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Irgendwo wird es schon einen Fehler geben. Was macht Dich denn so sicher, daß es keinen gibt? Und in welchem Kontext läuft dieser Code?

Fehler kann ich in den Schnipseln keine erkennen, nur ein paar "seltsame" Dinge:

- item.BreakRoleInheritance ohne Prüfung, ob das vielleicht schon geschehen ist.

- item.Update() ist nicht notwendig, wenn nur Berechtigungen geändert werden.

- oWeb.Update() scheint überhaupt nicht notwendig zu sein.

- oWeb.AllowUnsafeUpdates = false; sollte man nicht "einfach so" setzen, sondern lieber auf den ursprünglich vorhandenen Wert.

Und je nachdem, in welchem Kontext das läuft, mußt Du auch berücksichtigen, daß zum Manipulieren der Berechtigungen relativ hohe Rechte erforderlich sind. Und das erzeugen von Gruppen in großen Mengen ist auch nicht unbedingt sinnvoll.

Viele Grüße
Andi
af @ evocom de
Blog
Ohne Rang
47 Beiträge
BenjaminG Als Antwort am 25 Nov. 2014 15:13
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Danke für die Infos!

Ich habs es jetzt fast am Laufen. Bloß wenn ich einen zweiten Eintrag hinzufüge, dann bricht der Nintex-Workflow beim Starten ab, mit der Begründung, dass dieser keine Berechtigung hat.

Sobald ich den Eintrag der Liste hinzufüge, mit dem Code item.Update(), dann wird normalerweise der Nintex-Workflow gestartet. Nach dem item.Update() werden aber erst die Berechtigungsvererbung aufgelöst und die neuen Gruppen gesetzt. Wie kann ich den Ablauf anpassen, dass der Nintex-Workflow erst nach dem Ändern der Berechtigung gestartet wird?

Ohne Rang
19231 Beiträge
Andi Fandrich Als Antwort am 25 Nov. 2014 15:24
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Beschreibe bitte mal genauer den gesamten Ablauf und vor allem wo genau Dein Code läuft.

Was triggert denn den Workflow? Jede Änderung? Du kannst z.B. Nintex so konfigurieren, daß nicht jede Änderung greift, sondern nur ganz bestimmte Änderungen. Und wie oben schon geschrieben, alleine zum Ändern der Berechtigungen braucht es gar kein item.Update().

Viele Grüße
Andi
af @ evocom de
Blog
Ohne Rang
47 Beiträge
BenjaminG Als Antwort am 26 Nov. 2014 07:11
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

1. Neuer Eintrag wird erstellt und Klick auf Speichern

2.

a) Workflow wird gestartet, sobald das Event geschmießen wird

b) Berechtigungen werden Parallel zu 2.a) angepasst

 

Wenn jetzt die Berechtigungsvergabe noch nicht fertig ist, aber der Workflow schon startet, dann bricht der Workflow ab dem zweiten Eintrag ab, da er anscheinend den Workflow ab dem zweiten Mal schneller starten kann.

 

Meine Idee ist jetzt, dass ich den Eintrag speichere, dann die Berechtigungen setzte und am Schluß, den Workflow manuell starten lasse.

Ohne Rang
19231 Beiträge
Andi Fandrich Als Antwort am 26 Nov. 2014 08:17
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Dein Code läuft also in einem EventReceiver? Und der Workflow startet ohne weitere Bedingung automatisch bei Neuanlage?

Ich sehe hier mehrere Möglichkeiten:
- lasse den Workflow mit Bedingung starten. Du kannst dann den Code machen lassen, was er will und erst ganz zum Schluß sorgst Du dafür, daß die Startbedingung für den Workflow erfüllt ist.
- Verzichte ganz auf den Code und baue alles in den Workflow ein. Mit Nintex kann man auch Berechtigungen setzen.
- Lasse den Workflow gar nicht automatisch starten, sondern starte ihn per Code ganz am Ende des EventReceivers.
- Baue in den Workflow ganz am Anfang eine Pause ein. Damit wartet der Workflow, bis der EvenetReceiver fertig ist und macht erst danach seine Änderungen.

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

Ich habe ein eigenes Formular für die Dateneingabe erstellt. In diesem wird die Berechtigungen gesetzt.

Du hast weiter oben beschrieben, dass man grundsätzlich nicht soviele Massengruppen anlegen soll.

Wenn ich jetzt aber in der Item-Berechtigung nur User hinzufüge, dann fügt er mir den User auch in die Web-, sowie Listenberechtigung hinzu. Kann ich das irgendwie unterbinden, sonst habe ich ja in der Web- sowie Listenberechtigung ein totales durcheinander mit duzenden von Benutzern, wenn ich die Berechtigung pro Item vergeben muss. Wie sieht hier ein Best Practice aus?

Ohne Rang
19231 Beiträge
Andi Fandrich Als Antwort am 27 Nov. 2014 09:52
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

[quote user="BenjaminG"]Wenn ich jetzt aber in der Item-Berechtigung nur User hinzufüge, dann fügt er mir den User auch in die Web-, sowie Listenberechtigung hinzu[/quote]

Das ist notwendig und kann auch nicht unterbunden werden. Bei Gruppen wäre es übrigens genauso.

Am Besten ist es, wenn man die Berechtigungen auf einige wenige, fest definierte Gruppen herunterbrechen kann. Also nach dem Motto hier darf Team1 lesen und Team2 bearbeiten. Woanders darf Team3 lesen und Team1 bearbeiten. Das hat auch den Vorteil, daß man Berechtigungen verändern kann, indem man nur die Gruppenmitgliedschaft ändert (ohne an den Elementberechtigungen zu schrauben).

Einzelberechtigungen für einzelne Benutzer werden sehr schnell unübersichtlich und schlecht wartbar. Manchmal ist es aber trotzdem notwendig...

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

Das geht leider nicht, da jeder Eintrag andere Berechtigungsmitglieder erhalten muss. Deswegen werde ich das jetzt mit den Usern machen müssen, da dies mit der Gruppe leider nicht funktioniert hat. Beim Starten des Workflow gab es einen Fehler, dass er den Datensatz nicht mehr lesen kann. Ich habe bis jetzt nicht herausgefunden warum das passiert.