[gelöst] Ordnerauswhl im RTC

2. März 2011 12:59

HI Leute,

ich habe ein kleines Problem.

Wenn ich im RTC eine .txt Datei auswähle bzw. speichere ist alles in Ordnung, dies löse ich über Dialog Management, aber sobald ich einen Ordner auswählen möchte (gelöst mit Automation) schmiert der ganze RTC ab.
Welche Automation benuzt ihr ? oder gibt es eine andere Lösung?

Gruß 249611491
Zuletzt geändert von 249611491 am 4. März 2011 12:35, insgesamt 1-mal geändert.

Re: Ordnerauswhl im RTC

2. März 2011 13:15

Zum Thema Ordner im RTC hatten wir erst gestern ein Thema:
viewtopic.php?f=40&t=12427
Resümee: Achte darauf, wie die Automation-Variable initialisiert wird. Es gibt neue Parameter. Im Link ist ein Beispiel.

Funktioniert es denn mit dem gleichen Quelltext im CC?

Re: Ordnerauswhl im RTC

2. März 2011 14:05

Hi Natalie,

bei mir funktioniert es im CC schon, nur wie gesagt nicht im RTC.

Ich habe die andere möglichkeit mal ausprobiert und es funktioniert noch nicht so wie ich möchte.

Code:
IF ISCLEAR(Wsh) THEN
  CREATE(Wsh,FALSE,TRUE);
Wsh.Exec('%windir%\explorer.exe');


Er ruft ja nun einfach den Explorer auf, aber ich möchte ja einen Ordner auswählen und die Rückgabe des Pfades.

Re: Ordnerauswhl im RTC

2. März 2011 14:18

Du solltest nur das CREATE deiner Automationvariable ergänzen, nicht den ganze Code austauschen ;-)

Re: Ordnerauswhl im RTC

2. März 2011 14:24

ok, das habe ich ja auch gemacht, aber funtkioniert trotzdem nicht :/

Code:
IF NOT CREATE(ShellObj,TRUE) THEN EXIT;
FolderName := '';
FolderObj := ShellObj.NameSpace(FolderName);
FolderObj := ShellObj.BrowseForFolder(0,Text000,9);
IF NOT ISCLEAR(FolderObj) THEN
  FolderName := FolderObj.Items.Item.Path;
EXIT(FolderName);}

Re: Ordnerauswhl im RTC

2. März 2011 14:26

Wie bist du jetzt auf den hier gekommen?
Code:
IF NOT CREATE(ShellObj,TRUE) THEN
  EXIT;


Ich meinte
Code:
IF NOT CREATE(ShellObj,FALSE,TRUE) THEN
  EXIT;


Und wenn es nicht funktioniert, dann beschreibe es bitte unter Angabe einer Fehlermeldung oder des Fehlverhaltens.

Re: Ordnerauswhl im RTC

2. März 2011 14:28

Benutzt ihr R2? Dann würde ich schauen, ob das nicht über den DotNet Typ lösbar ist.

Re: Ordnerauswhl im RTC

2. März 2011 14:30

jap wir benutzen R2

Re: Ordnerauswhl im RTC

2. März 2011 14:39

@Natalie vielen dank, nun hat es funktioniert

Re: [gelöst] Ordnerauswhl im RTC

14. April 2011 16:28

Ich habe versucht, den o.a. Code zu benutzen, allerdings bin ich mir bei 2 Variablen nicht sicher, von welchem Typ sie sind, deswegen kann das leider nicht nachbauen:

ShellObj - 'Windows Script Host Object Model'.WshShell ?
FolderObj - ?

Könnte mir da jemand evtl. bitte helfen?

Re: [gelöst] Ordnerauswhl im RTC

14. April 2011 17:16

InfoWissler hat geschrieben:ShellObj - 'Windows Script Host Object Model'.WshShell ?
FolderObj - ?

Ich kanns dir grade auch nicht sagen, aber gib doch mal in der Varialbendeklaration erst nur 'Windows Script Host Object Model' an und drück dann den Assist-Button. Wähle nun etwas mit "Folder".
Zurück im Quelltext kannst du mittels F5 herausfinden, ob du mit deiner Auswahl FolderObj.Items.Item.Path nachbilden kannst.

Re: [gelöst] Ordnerauswhl im RTC

15. April 2011 09:49

'Windows Script Host Object Model'.WshShell scheint auch falsch zu sein.

Ich habe jetzt so ziemlich alle Klassen der 'Windows Script Host Object Model' durch, aber ich finde einfach keine Methoden namens NameSpace, BrowseForFolder oder Items.

EDIT:

Ich habe eine andere Lösung gefunden: viewtopic.php?f=40&t=12440&p=64123
Code:
*********************VARIABLEN*********************
MSShell
 Automation
 'Microsoft Shell Controls And Automation'.Shell
 
Folder
Automation
'Microsoft Shell Controls And Automation'.Folder3
 
FilesInFolder
Automation
'Microsoft Shell Controls And Automation'. FolderItems3

CurrentFile
Automation
'Microsoft Shell Controls And Automation'. FolderItem2

SelectedFolder
Text

*********************CODE*********************
CREATE(MSShell, FALSE, TRUE);
Folder := MSShell.BrowseForFolder(0, 'NAV Folder Browser', 0);
FilesInFolder := Folder.Items();
CurrentFile := FilesInFolder.Item();
SelectedFolder := FORMAT(CurrentFile.Path);
MESSAGE('Selected Folder: %1\Contains %2 files',
SelectedFolder, FilesInFolder.Count());


Allerdings habe ich da das Problem, dass bei einem Klick des Users auf "Abbrechen" statt auf "OK" zur Ordnerauswahl die Fehlermeldung kommt, dass für diese Automation Variable keine Instanz erstellt wurde und ich sie entweder erstellen oder ihr eine zuordnen soll. Nicht weiter schlimm, aber unschön.
Weiß jemand, was man da machen könnte?
Einfach ein Create auf FilesInFolder und/oder Folder funktioniert nicht (Fehlermeldung: für die Automation konnte keine Instanz erstellt werden).

Re: [gelöst] Ordnerauswhl im RTC

15. April 2011 10:55

InfoWissler hat geschrieben:'die Fehlermeldung kommt, dass für diese Automation Variable keine Instanz erstellt wurde und ich sie entweder erstellen oder ihr eine zuordnen soll. Nicht weiter schlimm, aber unschön.
Weiß jemand, was man da machen könnte?

Steht doch schon weiter oben (viewtopic.php?p=62549#p62549): Du musst auf alle verwendeten Automation-Variablen zunächst ein CREATE(Variablenname, FALSE, TRUE) absetzen.

Re: LÖSUNG: Ordnerauswahl im RTC

15. April 2011 11:35

Wie geschrieben - dann kommt ein Fehler.

Ich habe jetzt einfach noch die Abfrage IF NOT ISCLEAR(Folder) THEN BEGIN… vor der 3. Zeile eingefügt.

Variablen + Code 100% funktionsfähig:

*********************VARIABLEN*********************
Code:
MSShell
Automation
'Microsoft Shell Controls And Automation'.Shell

Folder
Automation
'Microsoft Shell Controls And Automation'.Folder3

FilesInFolder
Automation
'Microsoft Shell Controls And Automation'. FolderItems3

CurrentFile
Automation
'Microsoft Shell Controls And Automation'. FolderItem2

SelectedFolder
Text
250



*********************CODE Funktion "SelectFolder" *********************

Code:
CREATE(MSShell, FALSE, TRUE);
Folder := MSShell.BrowseForFolder(0, 'NAV Folder Browser', 0);
IF NOT ISCLEAR(Folder) THEN BEGIN
  FilesInFolder := Folder.Items();
  CurrentFile := FilesInFolder.Item();
  SelectedFolder := FORMAT(CurrentFile.Path);
 
  EXIT(SelectedFolder);
END;

Mein Aufruf (mit einer neuen lokalen Variable „SelectedFolder“, damit ich die nur zuweise, wenn der User auch etwas ausgewählt hat ohne die Funktion 2x aufrufen zu müssen:

Code:
SelectedFolder := SelectFolder();
IF SelectedFolder <> '' THEN
  <Record-Feld> := SelectedFolder;


Oder zum schnellen Testen:
Message(SelectFolder());


EDIT:
Kann sich jemand erklären, warum die Ordnerauswahl mit obigem Code im Classic Client rasend schnell funktioniert; im RTC aber sehr lange dauert, bis der Pfad als String in ein Feld übernommen wird?