Mapping von Feldern beim schrankübergreifenden Verschieben von Dokumenten

Hallo zusammen,

vielleicht hat jemand einen Tipp zu folgender Problemstellung oder etwas in der Art bereits in der Vergangenheit gelöst.

Sachverhalt
Beim schrankübergreifenden Verschieben von Dokumenten in enaio werden im Standard lediglich die Feldwerte in Feldern mit identischem internen Namen übernommen. Wir haben den Fall, dass Feldwerte übernommen werden müssen, die internen Feldnamen aber nicht matchen. D.h. es müsste eine Art Mapping der Quell- und Zielfelder erfolgen. Es soll dabei möglichst keine externe Anwendung im Rich-Client eingesetzt werden sondern über den Standardweg Drag&Drop erfolgen.

Problem
OnMoveExtern kennt nur die Quelle (also dort, von wo man drag-n-drop startet). Man hat meinen Tests nach in dem Event keinen Zugriff auf die Felder des Ziels.
OnShow kennt zwar das Ziel, weiß jedoch nichts davon, dass es verschoben worden ist (in Event-Übergabe-Datei kann ich keine Infos zur Quelle finden).

Lösungsansatz
Beim Verschieben bleibt ja die Id des Dokuments gleich.

Man könnte beim OnMoveExtern die bei der „Quelle“ genutzten Metadaten ins OsTmpVerz. schreiben (mit Dateinamen, in dem die Id enthalten ist), um die Metadaten so zwischenspeichern zu können. (ggfs. nur dann, wenn das Ziel der unterstützte Schrank ist.)

Dann beim OnShow vom Dok im Ziel-Schrank nachschauen, ob es zu der Dok.-Id eine Datei mit der Id im Dateinamen gibt und, falls es sie gibt, davon ausgehen, dass es sich um Verschieben gehandelt hat, die Daten auslesen und nutzen. Im OnShow würde die Zwischen-Speicher-Datei wieder gelöscht werden.

Wenn man in der Zwischen-Speicher-Datei noch einen Datum+Uhrzeit mitgibt, könnte man in OnShow noch ergänzen, dass die Daten der Datei nur genutzt werden, wenn sie nur ein paar Sekunden alt sind.

Gibt es weitere (elegantere) Ansätze?

Vielen Dank vorab für euer Feedback!

1 Like

Ideen:

  • Grünen Pfeil nutzen statt direkt verschieben und diese per Event/Skript „auflösen“ zu den Originaldokumenten.
  • Tool in der Toolbar (externe Anwendung) mit Auschneiden- und Einfügen-Buttons.
  • Die wichtigen Felder bereits auf der Quellmaske versteckt hinterlegen (mit den internen Namen der Zielmaske).

Variablen für das Copy’n’Paste lassen sich in enaio so speichern:

Application.SetVariable("CopyPaste", xyz)

Und dann später:

Application.GetVariable("CopyPaste")

Damit können externe Anwendungen, die z. B. nur aus einem VBScript bestehen Werte speichern.

1 Like

Beim Setzen der Variablen muss man in einer externen Anwendung allerdings die Client-COM über Application2 wie folgt initialisieren:

Dim oOS As New optimal_AS.Application2

Das ist ja komisch, ich erzeuge „einen ganz normalen“ optimal_AS.Application-Objekt innerhalb einer .NET-Anwendung, welches dann die oben genannten Funktionen aufrufen durfte. Sicher gut zu wissen und ich prüfe mal, ob es vielleicht an einem Versionsunterschied liegen kann.