Announcement

Collapse
No announcement yet.

Wie kann man prüfen, ob ein Datensatz in Bearbeitung ist?

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Wie kann man prüfen, ob ein Datensatz in Bearbeitung ist?

    Hallo an alle Wissenden,

    ich versuche folgendes Proble zu lösen. Aus einem Warenwirtschaftssystem werden jede Stunde Auftagsdaten an ein anders
    Warenwirtschaftssystem via PHP-Script übergeben. Eine Aktion im Script markiert den Datensatz als gesendet (0=nicht gesendet, 1=gesendet)

    Das Problem ist, dass wenn ein Mitarbeiter diesen Datensatz zeitgleich bearbeitet, werden unvollständige Daten übertragen und der Datesatz
    kann nicht als gesendet markiert werden.

    Frage: Gibt es eine Möglichkeit zu prüfen ob ein Datensatz in bearbeitung ist?

    Datenbank: MSSQL

    Vielen Dank

    Gruß Nevada

  • #2
    Du kannst versuchen ein write lock auf die abzuziehenden Daten zu legen, also bevor die "Kopie" angelegt wird.
    Hier wäre die Frage, das allein würde allerdings keine Vollständigkeit garantieren.

    Wenn Du das WW System selbst unter Kontrolle hast, würde ich versuchen, nach dem editieren einen Status zu setzten (neu, vollständig, ..). Die lädt dann nur "vollständige" Sätze.
    Gruß, defo

    Comment


    • #3
      Frage: Gibt es eine Möglichkeit zu prüfen ob ein Datensatz in bearbeitung ist?
      Willst du wirklich wissen ob der Datensatz in Bearbeiung ist (In Bearbeitung heist ja nicht das er am Ende auch wirklich geändert wird)? Und was ist wenn der Mitarbeiter die Daten kurz nach deinem Senden verändert hat? Ist der gesendete Datensatz dann nicht genauso falsch bzw. unvollständig. Was ist die Definition von vollständig? Oder wird bei jedem ändern des Datensatzes das Flag wieder zurückgesetzt um es später nochmal zu senden? In dem Fall wäre es wohl sinnvoller gar nicht mit Flags am Datensatz zu arbeiten ,das mit sperren zu synchronisieren wird immer problematisch sein z.B. weil euer Warenwirtschaftssystem gar nicht darauf vorbereitet ist das es bestimmte Datensätze einfach nicht direkt bekommt oder doch zumindest Performance kosten, sondern bei jeder Änderung denn Datensatz sofort in eine Queue schreiben und das senden der Datensätze dann aus dieser Queue vorzunehmen. Gesendete Datensätze werden dann also einfach aus dieser Queue gelöscht. Ob es zu einem eigentlichen Datensatz noch Daten zum senden gibt siehst du dann daran das ein entsprechender Datensatz (oder Sätze falls sich das ganze häufiger geändert hat) in dieser Queue gibt.

      Comment


      • #4
        Normalerweise sind die Datensätze solange gesperrt bis die Auftragerfassung abgeschlossen ist. Erst dann wird von dem Mitarbeiter der Datensatz auf "Freigegeben" gesetzt. Das Problem ist nur, wenn der Datensatz noch einmal angefasst wird, z.B. Adresse nicht richtig o.ä. und dann nicht gespeichert wird oder in diesem Moment der Zugriff vom Script erfolgt, wird der Datensatz nicht als gesendet markiert weil ich nicht in die DB zurückschreiben kann.

        Comment


        • #5
          Wenn Du schon ein Statushandling hast, dann braucht man doch bloß vor einem erneuten Editieren des DS den Status zurückzusetzen bzw das editieren sperren, wenn der Status "freigeben" ist.
          Gruß, defo

          Comment


          • #6
            Dann sollte doch ein simples

            - erst flag zurückschreiben (wenn nicht möglich weil gesperrt abbrechen)
            - dann senden
            - jetzt commiten (oder rollbacken)

            funktionieren?

            Comment

            Working...
            X