Verhindert, dass mehrere Benutzer Bearbeiten die gleiche Listenelement in sharepoint 2010
Wir entwickelt haben, die einen benutzerdefinierten webpart mit mehreren Steuerelementen und Bereitstellung auf sharepoint 2010-Website, die akzeptiert Eingaben vom Benutzer und wenn der Benutzer klickt auf den submit-button werden alle Werte gespeichert, die in der sharepoint-Liste mit den Spalten, für die ein hyperlink. Klickt der Benutzer auf diesen hyperlink , über den Abfrage-string wird er umgeleitet auf die selbe Art wieder.
Ich würde gerne wissen, ob der Benutzer geklickt hat, auf diesen hyperlink, um Ausgaben zu dieser form, können wir vermeiden, ein anderer Benutzer änderungen an diesem Formular?
Teilen Sie bitte Ihre Gedanken dazu auf.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn ich verstehe deine Frage richtig, du willst verhindern, dass weitere Benutzer von der Bearbeitung eines Listenelements, wenn jemand bereits ist, es zu editieren. Das kann gemacht werden mit irgendeiner Art der Sperre, ggf. gespeichert, in der Liste selbst, aber diese Strategie leidet an zwei wichtige Fehler:
Denke, dass der erste Benutzer auf den link klickt, um in den Bearbeitungsmodus zu gelangen, und wir sperren Sie die Liste posten. Wenn der Benutzer seinen browser schließt, ohne Sie fortfahren (oder sein Netzwerk ausfällt, oder sein system abstürzt, oder seinen computer stirbt), wird der Artikel gesperrt bleiben, und alle anderen gehindert werden, Bearbeiten es, bis wir das loslassen, es irgendwie (meist nach einiger timeout, oder basteln mit es außerhalb des web-Teil).
Unserer web-Teil durchsetzen wird, daß die Sperre, aber kein anderer code wird so zu tun, einschließlich SharePoint selbst (durch andere Webparts oder aus server-side code) und die ganze Außenwelt (durch das Client-Objekt-Modell). Also jedem gegebenen Punkt der Liste wäre immer noch anfällig zu ändern, während der Benutzer es Bearbeiten, und
SPListItem.Update()
würde immer noch eine Ausnahme auslösen, wenn das passiert.Einer besseren Strategie wäre die Nutzung von SharePoint-eigenen locking-Mechanismus, indem Sie das Element, wenn der erste Benutzer wechselt in den Bearbeiten-Modus und natürlich die Aktivierung der link nur, wenn das Element nicht bereits ausgecheckt.
Jedoch nicht lösen die anhaltende lock-problem (wenn überprüfen wir den Artikel zurück, wenn der Benutzer seinen browser schließt?). Auch, CheckOut() wird implementiert, indem SPFile, nicht SPListItem, das heißt, Sie haben ein Dokument-Bibliothek profitieren von diesem feature.
Alles in allem, ich glaube nicht, dass es eine wirklich benutzerfreundliche Lösung für dein problem: entweder Sie lassen Ihre Benutzer Bearbeiten die gleiche Sache zur gleichen Zeit und mit den Folgen umgehen (nur einer von Ihnen gewinnt), oder nicht, und Sie verlassen könnten veraltete sperren, um (jeder verliert).
Save Conflict. Your changes conflict with those made concurrently by another user
Nachricht, dass die SharePoint-eigenen Weg, um mit dem problem umzugehen (durch das abfangen der Ausnahme, die ausgelöst durchSPListItem.Update()
). Die Meldung sagt dir die Seite zu aktualisieren und übermitteln Sie Ihre änderungen, damit das Neuladen der widersprüchliche Punkt der Liste, bevor Sie versuchen, zu aktualisieren, es selbst wieder. Natürlich gibt es immer noch keine Garantie, dass etwas nicht aktualisieren Sie das Element auch nach rechts, bevor Sie tun, und wenn das passiert, werden Sie wieder auf Platz eins.Verwenden Sie die Kaufabwicklung und überprüfen und dann über einen workflow verfügen, die löscht sperren, die gesperrt sind für mehr als eine vorgegebenen Zeit...
Können Sie check-out/check-in-Mechanismus in SharePoint.