Problem des konkurrierenden Zugriffs auf dms-files

Getting started ... Alles für einen gelungenen Start.
8 Beiträge Seite 1 von 1
8 Beiträge Seite 1 von 1

Problem des konkurrierenden Zugriffs auf dms-files

Beitrag von Elghali (ForumUser / 8 / 5 / 0 ) » 13. Jan 2019 17:27

Liebe SAP- und DMS-Experte,

ich möchte mich gerne erkundigen, wie man die Größe einer Datei, die auf dem App Server -AL11- abgelegt wird, zur Laufzeit prüfen kann? (d.h. während des Ablegens)

Hintergrund dieser Frage ist folg.:
Die (dms-)Datei wird mittels des FuBas HTTP_GET_FILE vom Tresor in dem App Server (AL11) abgelegt. (Codeausschnitt steht im Anhang)
Problem ist dabei, dass manchmal ein Hintergrund-Job diese Datei während des Ablegens ließt und an einer Email anhängt.
Folglich wird die Datei leider unvollständig von dem Hintergrund-Job gelesen und in der Email angehängt. (da die Datei während des Ablegens gelesen wurde)

Ich habe mir bis jetzt folg. überlegt:
Beim Lesen der Datei wird die Größe der "originalen" Datei mit der hochgeladenen Datei verglichen. Sollte beide Größen ungleich sein, dann 1 Sekunde warten und wiederholen zu vergleichen bis beide Größen gleich sind. Aber dies ist unmöglich da ich die Dateigröße während des Hochladens nicht messen konnte.

Falls die Ermittlung der Dateigröße zur Laufzeit nicht möglich ist oder diese Lösungsansatz nicht effizient ist, gibt’s vielleicht anderen Ideen um dieses Problem zu vermeiden?

Ich hoffe, dass ich eine klare Vorstellung von dem Problem geben konnte.
Ich wäre für jede Hilfe, Idee und weiterführende Information dankbar!

Khaled Elghali


Re: Problem des konkurrierenden Zugriffs auf dms-files

Beitrag von black_adept (Top Expert / 3244 / 54 / 568 ) » 13. Jan 2019 17:32

Moin Khaled,

ich glaube du denkst da zu kompliziert. Da du von einem Hintergrundjob sprichst gehe ich erst mal davon aus, dass dieser auch im SAP-System läuft. Und für konkurrierende Zugriffe hat sich SAP doch das Sperrprinzip ausgedacht.
Bau dir ein Sperrobjekt und während des Schreibens sperrst du den Namen der Datei und wenn sie fertig geschrieben ist löst du die Sperre wieder. Und das Emailprogramm soll dann halt vorab prüfen, ob die zu lesende Datei ungesperrt ist.

Folgende Benutzer bedankten sich beim Autor black_adept für den Beitrag:
Elghali

live long and prosper
Stefan Schmöcker

email: stefan@schmoecker.de

Re: Problem des konkurrierenden Zugriffs auf dms-files

Beitrag von a-dead-trousers (Top Expert / 3220 / 81 / 800 ) » 13. Jan 2019 18:21

Alternativ kann man das auch mit einer Sperrdatei lösen:
Wenn die Datei von HTTP übertragen wird, wird auch eine zweite Datei mit demselben Namen und z.B. der Erweiterung ".lock" erstelt.
Solange diese Datei vorhanden ist, darf der Hintergrundjob die andere Datei nicht auslesen.
Nachdem die Übertragung vom HTTP abgeschlossen wurde, wird die Lock-Datei gelöscht und der Hintergrundjob darf nun die Datei verarbeiten.

Nachteil der ganzen Sache ist, dass im Falle eines Fehlers die Sperrdatei eventuell nicht gelöscht wird, was bei balck_adept's Ansatz durch die Sperrobjekte eben nicht der Fall ist. Wenn ein Programm abbricht werden Sperren normalerweise automatisch abgebaut. Andererseits sieht man so nicht ob die Datei fehlerfrei übertragen wurde und der Hintergrundjob verarbeitet die unvollständige Datei. Wenn also im Austauschverzeichnis viele Sperrdateien herumliegen sieht man so ob es Probleme bei der Übertragung gibt.

Alles hat sein Für und Wider.

Folgende Benutzer bedankten sich beim Autor a-dead-trousers für den Beitrag:
Elghali

Theory is when you know something, but it doesn't work.
Practice is when something works, but you don't know why.
Programmers combine theory and practice: Nothing works and they don't know why.

ECC: 6.07
Basis: 7.40

Re: Problem des konkurrierenden Zugriffs auf dms-files

Beitrag von a-dead-trousers (Top Expert / 3220 / 81 / 800 ) » 13. Jan 2019 18:23

Eine weitere Möglichkeit wäre, die Daten nicht am Dateisystem, sondern als XSTRING in der Datenbank abzulegen.
Damit hängt die Ablage am Transaktionsmanagement der Datenbank und somit kann es zu keinen Überschneidungen kommen. Sprich ohne COMMIT WORK sehen andere Prozesse die Daten nicht.
Das ist aber nur bei relativ kleinen Daten sinnvoll, weil die Datenbank sonst zum Flaschenhals wird.
Theory is when you know something, but it doesn't work.
Practice is when something works, but you don't know why.
Programmers combine theory and practice: Nothing works and they don't know why.

ECC: 6.07
Basis: 7.40

Re: Problem des konkurrierenden Zugriffs auf dms-files

Beitrag von Elghali (ForumUser / 8 / 5 / 0 ) » 13. Jan 2019 18:29

Hallo zusammen,

zunächst einmal vielen Dank für Ihre Rückmeldungen!

Also hier ist eine kürze Überblick über die Programme/Reports:
Es geht um zwei Reports: ein Druckprogramm und ein Hintergrund-Job
- Ablegen der Datei (CAD Material-Zeichnung) wird nach der Aufrufen von einem Druckreport
- Hintergrund-Job läuft jede x-Minuten in SAP, wobei es die Dateien ließt und an einer Email anhängt.

An dem Sperrprinzip habe ich mir auch überlegt aber ich glaube, dass die Sperrung erfolgt nur, wenn beide Programme von dem selben Benutzer ausgeführt werden. (was in diesem Fall nicht erfüllt, da die Hint.-Job nicht von mir ausgeführt)
PS: Da ich relativ neu im Bereich der SAP-Entwicklung bin und es verschiedene Sperrkonzepte gibt, könnte es sein, dass ich die falsche Dokumentation gelesen habe :(

Könnten Sie bitte einen Codeausschnitt zu dem Sperren schreiben? Dafür habe ich Ihnen den Codeausschnitt des Lesenverfahrens der Datei (OPEN DATASET, READ, CLOSE DATASET) angehängt. :)
... und während des Schreibens sperrst du den Namen der Datei und wenn sie fertig geschrieben ist löst du die Sperre wieder. Und das Emailprogramm soll dann halt vorab prüfen, ob die zu lesende Datei ungesperrt ist
(auch ein Link zu einem Beispiel oder Dokumentation wäre hilfreich)

Vielen Dank im Voraus!
Khaled Elghali
Zuletzt geändert von Elghali am 13. Jan 2019 23:51, insgesamt 2-mal geändert.

Re: Problem des konkurrierenden Zugriffs auf dms-files

Beitrag von deejey (Specialist / 199 / 48 / 16 ) » 13. Jan 2019 20:20

btw ... sy-subrc muss nach dem read erfolgen und nicht nach append. Wundert mich dass das überhaupt je funktioniert hat.

Re: Problem des konkurrierenden Zugriffs auf dms-files

Beitrag von Elghali (ForumUser / 8 / 5 / 0 ) » 14. Jan 2019 00:27

black_adept hat geschrieben:und wenn sie fertig geschrieben
a-dead-trousers hat geschrieben:Nachdem die Übertragung vom HTTP abgeschlossen wurde
Wie kann ich herausfinden, dass die Datei "vor dem Entsperren" fertig abgelegt bzw. geschrieben ist und dass das Ablegen im Hintergrund nicht weiter läuft (parallel) ?

Re: Problem des konkurrierenden Zugriffs auf dms-files

Beitrag von DeathAndPain (Top Expert / 1053 / 122 / 230 ) » 14. Jan 2019 11:35

An dem Sperrprinzip habe ich mir auch überlegt aber ich glaube, dass die Sperrung erfolgt nur, wenn beide Programme von dem selben Benutzer ausgeführt werden.
Solch ein Sperrkonzept wäre ja komplett sinnlos! Wenn jemand in einer Kundennummer, Materialnummer, Personalnummer im Änderungsmodus drinsteht, kann kein anderer zeitgleich dasselbe tun. Das ist das Sperrkonzept!

https://help.sap.com/saphelp_nw70ehp3/h ... cache=true

Leider steht auf der o.g. Seite wie immer bei SAP-Originaldokumentationen nur Blabla und nicht die Funktionsbausteine, mit denen man das nutzt, und ich bin gerade zu faul, das zu recherchieren. Aber das kannst Du ja selber machen; das findet man.

Folgende Benutzer bedankten sich beim Autor DeathAndPain für den Beitrag:
Elghali


Seite 1 von 1

Aktuelle Forenbeiträge

Konstruktoren-Probleme.... gelöst
vor 22 Stunden von AdrianSchm 8 / 325
Workflow über Report starten
vor 22 Stunden von LostDarkness 2 / 73
Liste Angebote/ Aufträge nach ERNAM = sy-uname
Gestern von wreichelt 4 / 122
DOCVARIABLE in Worddokument setzen (OLE?)
Gestern von msfox 2 / 113
BAPI_PO_CREATE1 und Einkaufsinfosatz
Gestern von whaslbeck 2 / 155

Unbeantwortete Forenbeiträge

WCOCO: Gruppe für Betragsfelder 0S01
vor einer Woche von SAP_ENTWICKLER 1 / 95
CAS-Nr.: Chemical Abstracs Service
vor 3 Wochen von SAP_ENTWICKLER 1 / 124
Interaktives Skript, Rolle IC-Manager
vor 4 Wochen von erubadhron86 1 / 170
Wie findet man das Rahmenprogramm eines Infosets?
vor 4 Wochen von DeathAndPain 1 / 171