[gelöst]Requester zur Auswahl eines Pfades

16. Oktober 2006 19:28

Die Funktion FileOpen der Codeunit Common Dialog Management bietet ja bekanntlich einen Requester in dem man nach einer Datei suchen kann und den Dateinamen samt Pfad in ein Feld schreiben lassen kann.
Wenn man jetzt aber nur einen Pfad einstellen will, z.B. wohin XML-Dateien mit Daten für den Webshop geschrieben werden sollen, ist der Requester nicht nutzbar. Die Automation CommonDialog bietet auch weder ein Property noch eine Methode dafür.

Weiss zufällig jemand, ob dafür eine andere Automation nutzbar ist?
Zuletzt geändert von Michael Schumacher am 24. April 2007 17:13, insgesamt 1-mal geändert.

16. Oktober 2006 19:51

Auch hier hilft mal wieder ein Griff in meine allseits beliebte "Tools-Datenbank", wo ich so manche nützliche Funktion gesammelt habe.

Ich wollte die Codeunit ursprünglich als Download hochladen, aber irgendwie funktioniert das gerade nicht, daher hänge ich die Datei einfach mal hier an diesen Beitrag an.
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.

16. Oktober 2006 21:09

Danke, das ist das was ich gesucht habe.
Ich bekomme allerdings eine Fehlermeldung, dass die gewählte Typenbibliothek nicht geladen werden kann.
Die Automation namens ActiveWindow ist ein unbekannter Automationserver....

16. Oktober 2006 21:50

Die Variable 'ActiveWindow' ist ein AutomationServer vom SubType 'CSideWindowCheck'.WindowCheck

Für den Fall, dass dieser AutomationServer nicht verfügbar ist (wie es bei dir der Fall ist), kann auch alternativ der SubType 'C/SIDE Utility Classes'.ActiveWindow verwendet werden.

Für den (seltenen) Fall (z. B. in älteren Navision-Versionen), dass auch dieser AutomationServer nicht verfügbar ist, kann auch einfach eine 0 (in Worten: Null) übergeben werden, jedoch kann dann nicht sichergestellt werden, dass der Rückgabewert an das richtige Programm (in diesem Fall Navision) zurückgegeben wird.

17. Oktober 2006 08:29

leider hab ich beide nicht in der Liste (Nav4.0 SP1).
Weißt Du, welche DLL oder OCX dahinter steht?
Dann muss ich die Datei mal suchen und registrieren

17. Oktober 2006 19:11

Ich habe mich mal auf die Suche gemacht und bin fündig geworden:

Entpacke die angehängte Datei direkt nach C:\ (die notwendigen Unterverzeichnisse sind als absolute Pfade im Archiv gespeichert)
Ich gehe mal davon aus, dass die Datei anschließend noch in Windows registriert werden muss.
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.

17. Oktober 2006 20:21

Die dll läßt sich nicht registrieren, die TLB nur mit dem Programm OleRegistration, aber nicht mit regsvr32....
nachdem die TLB registriert wurde, konnte ich die Automation auswählen, aber beim Run kommt die Meldung, dass keine Instanz registriert werden konnte.
Also muss es weiter mit der 0 gehen......
unter welchen bedingungen könnte denn der von Dir erwähnte Fehler auftauchen, dass die Antwort nicht im richtigen Fenster landet?

17. Oktober 2006 21:42

Michael Schumacher hat geschrieben:[...]
unter welchen bedingungen könnte denn der von Dir erwähnte Fehler auftauchen, dass die Antwort nicht im richtigen Fenster landet?


tomtror (auf mibuso.com) hat geschrieben:[...] But if I use 0 instead of the window handle parameter, the folder selection window disapears suddenly when I move the mouse... [...]

17. Oktober 2006 21:55

Das Phänomen hab ich nicht, ich kann ganz normal den Pfad aussuchen....

24. April 2007 11:45

Ich habe bei mibuso eine Alternative Bibliothek für das WindowHandle gefunden.

Die dll lässt sich auch problemlos aus Navision heraus registrieren.
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.

Re:

7. Januar 2010 12:47

Timo Lässer hat geschrieben:Auch hier hilft mal wieder ein Griff in meine allseits beliebte "Tools-Datenbank"...


Kann es sein, dass diese Codeunit, bzw. die Funktionen unter dem RTC nicht mehr funktionieren? Mir stürzt der Client regelmässig ab, wenn ich OpenFolder aufrufe.

Re: Re:

24. Juli 2012 11:37

rotsch hat geschrieben:
Timo Lässer hat geschrieben:Auch hier hilft mal wieder ein Griff in meine allseits beliebte "Tools-Datenbank"...


Kann es sein, dass diese Codeunit, bzw. die Funktionen unter dem RTC nicht mehr funktionieren? Mir stürzt der Client regelmässig ab, wenn ich OpenFolder aufrufe.


Dieses Problem habe ich derzeit auch.
Das ActiveWindow Control habe ich mit 0 ersetzt, da ich nicht auf allen Kundenrechnern die .dll installieren möchte.
Die Rückgabe an NAV funktioniert im Classic einwandfrei.

Im RTC (2009 R2) habe ich jedoch auch das Problem, dass der Client abschmiert.
Hat jemand eine Idee woran das liegen könnte oder ggfs. noch eine andere Möglichkeit, Ordner in NAV (RTC) auszuwählen?

Re: Re:

24. Juli 2012 11:57

dannyt hat geschrieben:Hat jemand eine Idee woran das liegen könnte oder ggfs. noch eine andere Möglichkeit, Ordner in NAV (RTC) auszuwählen?

Generell müssen für Datei- und Ordnerfunktionen Automation-Variablen verwendet werden.
Automation 'Microsoft Shell Controls And Automation'.Shell verfügt über die Methode BrowseForFolder.
Denkt nur daran, die Variable vorher zu initialisieren.
Wenn eure Variable z.B. Shell heißt, dann:

Code:
  IF ISCLEAR(Shell) THEN
    CREATE(Shell,FALSE,TRUE);

Re: [gelöst]Requester zur Auswahl eines Pfades

24. Juli 2012 12:21

Ich habe das mittlerweile mit dotnet interop gelöst. Das ist einfacher, eleganter und bringt viel weniger Probleme mit sich.

Meine Funktion dazu heisst SelectFolder

Code:
Lokale Variable
Name                   DataType   Subtype
FolderBrowser   DotNet   'System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.Windows.Forms.FolderBrowserDialog

RetVal ist mein ReturnValue der Funktion

FolderBrowser := FolderBrowser.FolderBrowserDialog();
FolderBrowser.ShowNewFolderButton := _NewFolder;
FolderBrowser.Description := Text000;
FolderBrowser.ShowDialog();

IF FolderBrowser.SelectedPath <> '' THEN
  RetVal := FolderBrowser.SelectedPath +'\'
ELSE
  RetVal := '';

Re: [gelöst]Requester zur Auswahl eines Pfades

24. Juli 2012 12:24

Hallo Natalie,

das war der einigermaßen entscheidende Hinweis.

Zwar habe ich die Variable initialisiert, aber nicht korrekt.
Im Code wurde die Variable vorher mit
Code:
CREATE(ShellControl);

initialisiert.
Dies bedeutete, dass der Automation Server auf dem Middle Tier, also dem NAV Server, initialisiert wurde. Dies ging aber nicht und somit stürzte der RTC ab.

Hier der komplette Codeschnipsel zur Auswahl eines Pfades:
Code:
OpenFolder() : Text[1024]

IF ISCLEAR(ShellControl) THEN
  CREATE(ShellControl,false,true);

Folder := ShellControl.BrowseForFolder(0,Text000,0);

IF NOT ISCLEAR(Folder) THEN BEGIN
  CLEAR(ShellControl);
  EXIT(Folder.Items().Item.Path);
END;


Variablen:
Name DataType Subtype Length
ShellControl Automation 'Microsoft Shell Controls And Automation'.Shell
Folder Automation 'Microsoft Shell Controls And Automation'.Folder3



VG
dannyt