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.




FeldwertÄnderungen

Unbeantwortet Dieser Beitrag hat 10 Antworten

Ohne Rang
57 Beiträge
Code-Dynamics erstellt 27 Sept. 2010 13:20
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Hy leute,

ich stehe vor einem kleinem problem.

Benutzergruppenvalidierung ist abgeschlossen und rennt :D.

Benutzer der Gruppe a können nichts , von den Listen der Gruppe b löschen.

 

ItemEventreceiver war hierfür ein stichwort. So ItemDelete und dass hab ich geschafft aber wo ein delete ist kann auch ein update sein..wo ich dass selbe umsetzen möchte.

 

Ich habe 3 boolsche felder wo man häkchen setzen muss...beim Event Item Updating (event wird immer brav gefeuert)..müsste ich quasi jetzt sagen / bzw programmieren...dass nur USer X aus der Gruppe Y auf dieses Feld zugreifen darf bzw den wert ändern...wenn er den wert ändern will- wird der defaultwert einfach neu reingeklatscht beim update versuch :).

Habe schon irgendwie versucht mit den properties zu basteln aber komm da auf kein effizientes ergebnis, was fehlerfrei läuft :(

Alle Antworten

Ohne Rang
19231 Beiträge
Andi Fandrich Als Antwort am 27 Sept. 2010 13:26
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Sorry, aber kannst Du vielleicht nochmal in halbwegs verständlichem Deutsch schreiben, wo eigentlich das Problem liegt. Ich habe fast nur Bahnhof verstanden...

Den User hast Du doch. Die Felder kannst Du mittels properties.BeforeProperties, properties.AfterProperties und properties.ListItem vergleichen (je nach Event und Liste/Bibliothek).

Viele Grüße
Andi
af @ evocom de
Blog
Ohne Rang
57 Beiträge
Code-Dynamics Als Antwort am 27 Sept. 2010 13:52
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Sorry :D, hab es etwas mit der Dialektform in Vorarlberg hehe.

Wie du bereits geschrieben hast, den User habe ich... bei den Before und AfterProperties. ChangedProperties habe ich Count 0.

 

Hier mein konkretes Beispiel:

Ja/Nein feld für Person A - muss von Person A bestätigt werden, Person B und Person C dürfen keine änderungen machen können bzw weiterleitung mit Errormessage.

Ja/Nein feld für Person B - muss von Person B bestätigt werden, Person C und Person A .... hier ebenfalls dass gleiche kriterium.

 

Mein Ansatz : Gruppe.Users.GetByID(properties.CurrentUserID).Name == "Ferial-01" , die Bedingung funktioniert ..

und wenn der User nicht Ferial-01 ist folgt:

properties.cancel = true;

properties.errormessage = "Your not allowed to change this value";.

 

Für eine Person funktionierts , nur problem ist in der Gruppe habe ich 3 User...so wenn jetzt zumbeispiel der 2te User eingeloggt ist - geht die erste Bedingung auf False da er nicht Ferial-01 ist, und die Elsebedingung mit dem error kommt..wie kann ich dass umgehen ? Sitz da vor einem Wald ohne Lichtblick

Ohne Rang
19231 Beiträge
Andi Fandrich Als Antwort am 27 Sept. 2010 14:22
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Kapiert habe ich es immer noch nicht, aber Du scheinst eher ein logisches als ein technisches Problem zu haben.

Wie gesagt, je nach Randbedingungen kann man mit Before/AfterProperties und ListItem die Vorher- und Nachherwerte vergleichen. Dann machst Du einfach sowas:
if (oldValue1 != newValue1 && username != "EinUserDerDasDarf") {
 properties.Cancel = true;
}

D.h. wenn sich Value1 geändert hat und es war ein Benutzer, der das nicht darf, dann abbrechen. Du kannst beliebig weitere Prüfungen  für andere Felder anhängen.

Viele Grüße
Andi
af @ evocom de
Blog
Ohne Rang
57 Beiträge
Code-Dynamics Als Antwort am 27 Sept. 2010 14:44
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

dass mit oldvalue und newvalue nehme ich mal stark an sind die werte aus der hashtable von den afterproperties..bei den listitems geht ja beim ItemUpdating - die beforeproperty nicht, bzw liefert keine werte.

Muss indemfall mal schauen, ob ich ein gutes einfaches beispiel finde zu den afterproperties und wie man mit der hashtable da vorgeht

Ohne Rang
19231 Beiträge
Andi Fandrich Als Antwort am 27 Sept. 2010 14:56
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Hängt wie gesagt, von den Randbedingungen ab. Bei Listen stehen in ItemUpdating die alten Werte in properties.ListItem und die neuen Werte in properties.AfterProperties.

Viele Grüße
Andi
af @ evocom de
Blog
Ohne Rang
57 Beiträge
Code-Dynamics Als Antwort am 27 Sept. 2010 15:07
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

boolean duenserold = convert.toboolean(properties.ListItem["Dünser_F"].GetFieldValue(properties.ListItem["Dünser_F"].ToString()));

Hier bekomme ich false zurück , dass passt soweit :) wegen dem alten Wert den ich durch Listitem bekomme.


Object duesnernew = properties.Afterproperties;

Hier bekomme ich Count = 0 zurück , keine änderung .. obwohl der Haken gesetzt wurde. ?

 

Ohne Rang
57 Beiträge
Code-Dynamics Als Antwort am 27 Sept. 2010 15:22
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Ich hab ich hab den Tilt,...man muss bei AfterProperties den Internal Name verwenden, ...hab einen Link gefunden in dem dass kurz erklärt wird...was die Hints sind bei den Event Handlern.

http://labs.ecraft.com/Blogs/SharePoint-Event-Handler-Gotchas

 

to get the new value from AfterProperties, you have to do properties.AfterProperties[“Evaluation_x0020_Date”]. Here comes the even sneakier behaviour; if you try to do properties.AfterProperties[“Evaluation Date”], it doesn’t fail, but returns null

Ohne Rang
19231 Beiträge
Andi Fandrich Als Antwort am 27 Sept. 2010 15:44
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Man sollte IMHO sowieso immer den InternalName verwenden. Der DisplayName ändert sich einfach zu oft...

Und zu dem, was Du oben mit dem ListItem machst: das geht viel einfacher:
bool value = Convert.ToBoolean(properties.ListItem["Fieldname"]);

Viele Grüße
Andi
af @ evocom de
Blog
Ohne Rang
57 Beiträge
Code-Dynamics Als Antwort am 27 Sept. 2010 15:56
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Hehe danke vielmals für den simpleren trick, ich habe da mal nach nem Boolschen Ausdruck gesucht und der hatte dass ganze doch auch ersichtlich, recht komplex gelöst. Deine Variante ist da definitiv augenfreundlicher :D

 

Thx Für die Tipps !!! :)

 

Ohne Rang
57 Beiträge
Code-Dynamics Als Antwort am 28 Sept. 2010 10:36
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Danke dir nochmals für die guten Lösungsansätze, konnte jetzt alles so wie gewünscht umsetzen..die prüfprozedur wird jetzt etwas langwierig aber es hat sich ausgezahlt :) bin mit dem Ergebnis sehr zufrieden :).

 

Danke Nochmals -> Top Support hier im Forum

Lg aus Österreich