Problem des konkurrierenden Zugriffs auf dms-files


Getting started ... Alles für einen gelungenen Start.

Moderatoren: Jan, Steff

Problem des konkurrierenden Zugriffs auf dms-files

Beitragvon Elghali » 13.01.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
Elghali
ForumUser
 
Beiträge: 8
Registriert: 12.01.2019, 02:04
Dank erhalten: 0 mal
Ich bin: Student/in

Sponsor

Alte ABAP-Entwicklerweisheit: Weißt du weder aus noch ein, baust du einen BADI ein

Re: Problem des konkurrierenden Zugriffs auf dms-files

Beitragvon black_adept » 13.01.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.
live long and prosper
Stefan Schmöcker

email: stefan@schmoecker.de

Für diese Nachricht hat black_adept einen Dank bekommen :
Elghali
black_adept
Top Expert
 
Beiträge: 3196
Registriert: 08.01.2003, 13:33
Wohnort: Lehrte ( bei Hannover )
Dank erhalten: 560 mal
Ich bin: Freiberufler/in

Re: Problem des konkurrierenden Zugriffs auf dms-files

Beitragvon a-dead-trousers » 13.01.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.
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

Für diese Nachricht hat a-dead-trousers einen Dank bekommen :
Elghali
a-dead-trousers
Top Expert
 
Beiträge: 3180
Registriert: 07.02.2011, 13:40
Dank erhalten: 789 mal
Ich bin: Entwickler/in

Re: Problem des konkurrierenden Zugriffs auf dms-files

Beitragvon a-dead-trousers » 13.01.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
a-dead-trousers
Top Expert
 
Beiträge: 3180
Registriert: 07.02.2011, 13:40
Dank erhalten: 789 mal
Ich bin: Entwickler/in

Re: Problem des konkurrierenden Zugriffs auf dms-files

Beitragvon Elghali » 13.01.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.01.2019, 23:51, insgesamt 2-mal geändert.
Elghali
ForumUser
 
Beiträge: 8
Registriert: 12.01.2019, 02:04
Dank erhalten: 0 mal
Ich bin: Student/in

Re: Problem des konkurrierenden Zugriffs auf dms-files

Beitragvon deejey » 13.01.2019, 20:20

btw ... sy-subrc muss nach dem read erfolgen und nicht nach append. Wundert mich dass das überhaupt je funktioniert hat.
deejey
Specialist
 
Beiträge: 182
Registriert: 31.07.2016, 11:20
Dank erhalten: 14 mal
Ich bin: Entwickler/in

Re: Problem des konkurrierenden Zugriffs auf dms-files

Beitragvon Elghali » 14.01.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) ?
Elghali
ForumUser
 
Beiträge: 8
Registriert: 12.01.2019, 02:04
Dank erhalten: 0 mal
Ich bin: Student/in

Re: Problem des konkurrierenden Zugriffs auf dms-files

Beitragvon DeathAndPain » 14.01.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.

Für diese Nachricht hat DeathAndPain einen Dank bekommen :
Elghali
DeathAndPain
Expert
 
Beiträge: 971
Registriert: 05.05.2006, 10:14
Dank erhalten: 222 mal
Ich bin: Entwickler/in


Zurück zu ABAP® für Anfänger

  Aktuelle Beiträge   
(LKW)Bedarfsvorschau je Debitor
vor 59 Minuten von owny 0 Antw.
(LKW)Bedarfsvorschau je Debitor
vor 59 Minuten von owny 0 Antw.
Lieferplan, Einteilungen, Feinabrufe
vor 15 Stunden von bapimueller 0 Antw.
gelöst Smartforms Struktur rechtsbündig
vor 19 Stunden von qyurryus 3 Antw.
CALL_FUNCTION_SYSCALL_ONLY in RFC-Aufruf
vor 21 Stunden von lausek 0 Antw.

  Ähnliche Beiträge beta
ZIP-Files aus SAP heraus erstellen
21.06.2006, 14:28 von legi 0 Antw.
Einlesen eines TXT-Files von Unix
26.03.2004, 15:33 von black_adept 3 Antw.
Files im Hintergrund aus NICHT APP-Server Directory lesen
10.05.2012, 10:51 von a-dead-trousers 4 Antw.
ALV Problem
30.05.2006, 15:53 von barbara 20 Antw.
SQL Problem
22.04.2008, 11:52 von ereglam 3 Antw.

 

Wer ist online?

Mitglieder in diesem Forum: Google Adsense [Bot]