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: