Enaio Full-Client: Drag & Drop von mehreren Dateien

Drag & Drop von mehreren Dateien in den enaio Full-Client

Da mich schon mehrere Kunden nach dieser Funktion gefragt haben, beschreibe ich hier kurz eine Beispiel Umsetzung des Events.

Als erstes muss ein FileDrop-Event auf Ordnerebene angelegt was bedeutet, der Event-Dokumenttyp übergreifend ist. In diesem Event wird per asfile.filename die Drag & Drop Informationen als INI übergeben. Leider sind die Informationen nicht als Eigenschaften des asfile-Objekts verfügbar. Daher müssen diese per oxHelp ausgelesen werden.

Hierbei sind folgende Informationen verfügbar:

  • FILES.COUNT → Anzahl Drag & Drop-Dateien
  • FILES.FILE[1-9] → Dateipfad

Beispiel-Event

' INI File Helper initializieren
' Info: Dies ist mindestens in enaio 9.10 nicht mehr nötig da immer vorhanden. Ansonsten folgendermassen initialisieren
' Dim oxHelp: Set oxHelp = CreateObject("oxactive.CoxHelp")

' Anzahl Dateien
Dim FileCount: oxHelp.GetProfString "FILES", "COUNT", -1, FileCount, asfile.Filename

' Wenn mindestens eine Datei per Drag & Drop auf die Maske gezogen wurde
If FileCount > 0 Then
	For i=1 To FileCount
		' Auslesen des jeweiligen Dateipfads 
		Dim FilePath: oxHelp.GetProfString "FILES","FILE" & i, "", FilePath, asfile.Filename
		
		' Hier können über die üblichen Methoden der Client und Server API die Dateien verarbeitet werden
		
		' asfile.ResultCode=1 => Client aktualisiert nur die Tefferliste (eigener Code hat die Dateien ins enaio geladen)
		' asfile.ResultCode=0 => Datei(en) werden an den normalen Client Anlage Dialog übergeben
		' asfile.ResultCode=-1 => Anlage wird abgebrochen
		
		asfile.ResultCode=1
		asfile.WriteToFile
	Next
Else
	asfile.ResultCode=-1
	asfile.WriteToFile
End If	

Beispiel-Übergabedatei

[GLOBALS]
EventCode=200
OrdIdent=111
OrdType=1
RegIdent=4294967295
RegType=4294967295
[FILES]
COUNT=2
FILE1=C:\Users\uw\Documents\test.pdf
FILE2=C:\Users\uw\Documents\test.docx

Die ID und der Type des Ordner und Registers sind über das asfile Objekt direkt erreichbar und müssen daher nicht manuell aus der INI Datei ausgelesen werden.

Buildin Eigenschaften asfle

Offizielle Dokumentation

5 „Gefällt mir“

Danke , gleichmal bei einem Kunden einbauen!

Vielen Dank für dieses Beispiel.

Ich habe es gerade in enaio 9.10 einmal ausprobiert. Die Lösung selbst funktioniert wunderbar, ich bin allerdings auf ein Problem gestoßen, weshalb ich das Thema noch einmal wiederbeleben muss.

Zunächst habe ich habe asfile.ResultCode = 0 gesetzt, damit der Client für jede Datei die Indexdatenmaske öffnet. Das hat auch geklappt; Ich habe drei Dateien per Drag & Drop in einen Ordner gezogen, es öffnete sich drei Mal die Indexdatenmaske und wenn ich alle drei Dokumente speichere, liegen sie anschließend auch im Ordner.

ABER:

Ich wollte den Dateinamen (ohne Pfad und Dateiendung) als Name des Dokuments vorausfüllen. Daher habe ich im OnShow-Event des Dokuments den Basename der Datei ermittelt und in das Feld „Name“ eingetragen:

Dim Maske : Set Maske = New Test_MultiDND_Dokument

If FileWasDropped() Then
	Maske.Name = File_Basename(DroppedFilePath())
End If

Function DroppedFilePath()
	GetProfString "GLOBALS", "EXTERNDROPFILE", "", DroppedFilePath, OSFile
End Function

Function File_Basename(Path)
	Dim fs : Set fs = CreateObject("Scripting.FileSystemObject")
	File_Basename = fs.GetBaseName(Path)
End Function

ResultCode = 1
WriteToFile

Interessanterweise steht in EXTERNDROPFILE jedes Mal derselbe Dateipfad drin. Ich ziehe also drei Dateien in den Ordner, es öffnet sich drei Mal die Indexdatenmaske und es wird auch tatsächlich nacheinander eine der Dateien abgelegt. Ich erhalte über EXTERNDROPFILE allerdings in allen drei Fällen den gleichen Wert.

Guten Morgen @tordeu,

ich kann das Verhalten auch in der Version enaio 11 Beta nachvollziehen.
Vermutlich wäre es am besten, wenn Sie dies als Ticket an den Support von Optimal Systems oder Ihrem zuständigen Partner melden. Möglicherweise handelt es sich hierbei um ein Bug welcher behoben werden kann.

Ich habe diesen Fall auch im Rahmen des Beta Programms gemeldet. Ob dieser aber hier Beachtung findet kann ich nicht genau sagen.

Ich wünsche Ihnen einen erfolgreichen Tag.

Vielen Dank, dass Sie das Verhalten in enaio 11 Beta nachvollzogen haben.

Ich habe nun ebenfalls ein Ticket erstellt, um auf das Verhalten aufmerksam zu machen. Es ist für uns glücklicherweise nicht kritisch, da ich die Lösung mit dem Drag & Drop mehrerer Dateien lediglich testen wollte.

1 „Gefällt mir“

Noch ein Hinweis von meiner Seite: wird die Mailabalge per Drag’n’Drop durch den as.cfg Schalter „DRAGDROPMODE=0“ verhindert, übersteuert das FileDrop-Event diese Einstellung und lässt wieder eine Ablage per Drag’n’Drop (mindestens aus dem Mailclient) zu.

1 „Gefällt mir“

@mm Danke für den Hinweis. Ist das im konkreten Fall gut oder schlecht?

In meinem Fall ist es negativ, da die Mailablage per Drag & Drop aus Outlook nicht möglich sein soll und ich dies gerne mit Bordmitteln erreicht hätte.
Gleichzeitig soll es weiterhin möglich sein, mehrere Dateien per Drag & Drop abzulegen.

Aktuell lebe ich damit, dass man aus Outlook wieder per Drag & Drop ablegen kann. :slight_smile:

Hallo zusammen,

ich habe mir die Lösung angeschaut und bin begeistert. Sie funktioniert sehr gut.

Ich habe allerdings ein Thema bei dem ich auch vom OS Support keine Lösung genannt bekommen habe.

Wie löst ihr das Problem, dass die Dokumentenvorschau beim ablegen von mehreren Dokumenten nicht angezeigt wird. Die Indexierung ist dann schwierig, wenn jedes Dokument manuell indexiert werden soll . Eine Lösung habe ich leider nicht gefunden. Laut OS Support ist das Problem auch in keiner Kundensituation bekannt :wink: .

Technisch wird es damit begründet, dass die Prozesse zur Erstellung der Inhaltsvorschau nach dem Speichern des Dokumentes starten.

Gruß,
Michael

1 „Gefällt mir“

Hallo @MiPa, schön, dass Du hier bist :slight_smile:

das ist ein guter Punkt. In Szenarien, bei denen die Metadaten sich komplett aus dem Dateinamen zusammensetzen, ist das automatisierbar. Ich nehme an, Du willst wie @tordeu asfile.ResultCode = 0 einsetzen, damit für jedes Dokument eine separate Indexdatenmaske kommt?

Wenn der Dokumenttyp einfach wäre (immer PDF, immer JPEG, …) könnte man auf der Maske in Web-Control nutzen und dort selbst eine Vorschau rendern, da die Dokumentquelle aus der Übergabedatei bekannt wäre. Wenn auch Office-Dokumente etc. genutzt werden sollen, wird es schwieriger.


Anderer Gedanke: Im (noch nur OS-internen Marketplace) bzw. aus Präsentationen kenne ich Multi-Drag’n’Drop-Lösungen von OSVK (Dashlet) und OSVH (Windows-App). Diese haben, soweit ich weiss, noch keine Vorschauen, aber das wäre ja auch dort ergänzbar.

Hallo Roland,

danke für den Tipp. Gucke ich mir mal an.

Danke und Gruß

Das von @rk erwähnte Multi Drag 'n Drop Tool von OSVH haben wir im Einsatz. Ich habe mich bislang aber kaum mit der Konfiguration auseinandergesetzt und hatte nach der Einführung nur sehr minimale Anpassungen vorgenommen.

Die Indizierung erfolgt hier automatisch und kann für die einzelnen Objekttypen konfiguriert werden. Felder können z.B. mit dem Dateinamen, dem aktuellen Datum, dem aktuellen Benutzer oder einem Festwert gefüllt werden. Es können auch jeweils kleine Skripte hinterlegt werden, um die Werte zuvor noch zu verändern (z.B. um den Haupttyp des Dokuments abhängig vom Dateiformat festzulegen).

Wir setzen das Tool ein, um den Usern die Übernahme von Altdaten in enaio im Bedarfsfall zu erleichtern. Die Indexdatenmaske öffnet sich hierbei nicht. Ob sich das ändern lässt, kann ich derzeit leider nicht sagen.

Soweit mögliche, versuche ich aber gerne Fragen zum Tool zu beantworten.

2 „Gefällt mir“

@tordeu
Erstmal Danke für das Angebot bei Fragen.

Gab es ggf. damals eine Antwort zu dem OS Ticket bzgl. des identischen Dateinamens bei „EXTERNDROPFILE“ ?

Gruß

@MiPa

Ja, es gab damals eine Antwort, mit der das Ticket dann auch geschlossen wurde; die Antwort bezog sich allerdings eher auf Multi Drag & Drop allgemein und ist nicht konkret auf den Wert in EXTERNDROPFILE eingegangen.

Zusammengefasst lautete die Antwort, dass

  • D&D nur mit einer Datei funktioniert, weil üblicherweise die Indexdatenmaske geöffnet wird und der Benutzer sonst nicht weiß, welches Objekt er gerade verschlagwortet
  • Mehrfach D&D deutlich komplexer ist, das gesamte Ablagehandling im Script gemacht werden muss und der Client die Dateien lediglich dem Script übergibt, aber nicht mehr weiterverarbeitet

Ich hatte das Thema damals nicht weiterverfolgt.

1 „Gefällt mir“