[Gelöst] Dokumente aus Attain heraus öffnen und schließen

26. September 2006 13:22

Ich öffne aus Attain heraus z.B. ein *.pdf dokument mit "Hyperlink". So weit so gut. Ist es möglich dieses Dokument auch wieder aus Attain zu schließen? Welche Automationserver müsste ich da wählen, oder bin ich auf dem falschen Weg?
Kann mir jemand helfen?

mfg Michael
Zuletzt geändert von mespelage am 27. September 2006 14:20, insgesamt 1-mal geändert.

26. September 2006 14:18

Für den Automation Server "Adobe Acrobat 7.0 Type Library" gibt es die Class "AcroApp" mit den Methoden Hide, Exit, CloseAllDocs usw. Einfach mal ausprobieren.

26. September 2006 14:37

@@KOWA

Ich erhalte die Fehlermeldung: Für den Automationserver.... konnte keine Instanz erstellt werden.

Code:

A_Process Automation 'Adobe Acrobat 7.0 Type Library'.AcroApp   

CREATE(A_Process);

26. September 2006 19:40

Eventuell muss die dll-Datei neu registriert werden. Das geht über Extras/Custom Controls => hier das Control "Adobe PDF Reader"auswählen und unten auf "Reregister"

Infos zur den Methoden etc. und Codebeispiele für andere Sprachen :
Adobe Interapplication Communication Overview

27. September 2006 07:32

Hallo,
das Thema mit den PDF´s finde ich auch sehr interessant.
Allerdings habe ich bei der Recherche bei MIBUSO einen Beitrag gelesen, das es nur mit der Vollversion funktionieren würde (zumindest beim Drucken aus Navision heraus), ist evtl. bei dieser Problematik auch was dran?

Leider habe ich die Links zu den Beiträgen nicht mehr zur Hand. Ich hatte nach "adobe Automation" bei MIBUSO gesucht.

Gruß Mikka

27. September 2006 14:20

Es ist definitiv so, dass der Automationserver bei der freien Version von AcrobatReader 7.0 nicht funktioniert. Ich habe es mit der Vollversion (Trialversion) versucht, und siehe da, es funktioniert.

Dank an alle

Michael

27. September 2006 20:21

mikka hat geschrieben:das Thema mit den PDF´s [...], dass es nur mit der Vollversion funktionieren würde (zumindest beim Drucken aus Navision heraus), ist evtl. bei dieser Problematik auch was dran?

Das Drucken ist nicht das Problem, das geht ganz hervorragend mit der Shell-Automation, aufzurufen mit Printfile(<Dateiname mit Pfad>); (Funktionen siehe unten)
Sein Problem war das Schließen der Anwendung, nachdem es zur Ansicht geöffnet wurde.
Übrigens,
bei den Meisten Anwendungen, nicht nur bei Acrobat, klappt das auf unten beschriebene weise, es geht immer dann, wenn im Kontextmenü der Datei im Explorer ein Drucken oder Print zu finden ist.
In der Regel schließt sich die Anwendung danach selbständig wieder.

Funktion: Printfile(Filename : Text[250])
Code:
CREATE(objShell);
IF NOT EXISTS(Filename) THEN EXIT;
SplitDirFile(Filename,Dir,File);
objFolder := objShell.NameSpace(Dir);
objFolderItems := objFolder.Items;
objFolderItem := objFolderItems.Item(File);
objVerbs := objFolderItem.Verbs;
i:=-1;
REPEAT
  i+=1;
  IF i<objVerbs.Count THEN
    objVerb := objVerbs.Item(i);
UNTIL (STRPOS(UPPERCASE(objVerb.Name),'PRINT')>0) OR (STRPOS(UPPERCASE(objVerb.Name),'DRUCKEN')>0) OR (i >=objVerbs.Count);

IF i<=objVerbs.Count THEN BEGIN
  objVerb.DoIt;
END ELSE
  ERROR(Text104, Filename);


Die nötigen Variablen:
Code:
Name           DataType      Subtype
objShell       Automation   'Microsoft Shell Controls And Automation'.Shell   
objFolder      Automation   'Microsoft Shell Controls And Automation'.Folder   
objFolderItems Automation   'Microsoft Shell Controls And Automation'.FolderItems   
objFolderItem  Automation   'Microsoft Shell Controls And Automation'.FolderItem   
objVerbs       Automation   'Microsoft Shell Controls And Automation'.FolderItemVerbs   
objVerb        Automation   'Microsoft Shell Controls And Automation'.FolderItemVerb   
Dir            Text   250
File           Text   250
i              Integer      


Funktion: SplitDirFile(Filename : Text[250];VAR Dir : Text[250];VAR File : Text[250])
Code:
Position:=0;
REPEAT
  temppos:=STRPOS(COPYSTR(Filename,Position+1),'\');
  Position+=temppos;
UNTIL temppos=0;
IF Position>0 THEN BEGIN
  Dir:=PADSTR(Filename,Position);
  File:=COPYSTR(Filename,Position+1);
END ELSE BEGIN
  Dir:='';
  File:=Filename;
END;



Und die Variablen:
Code:
Name      DataType   
Position  Integer      
temppos   Integer