Das Notes Forum

Domino 9 und frühere Versionen => ND6: Entwicklung => Thema gestartet von: semtex am 21.06.05 - 16:58:56

Titel: Problem mit Mac OS X und Dir() (LS)
Beitrag von: semtex am 21.06.05 - 16:58:56
Hi Leute,
mal wieder ein Problem.

Ich muss auf das Filesystem einer OS X-Maschine zugreifen.
Dabei muss ich überprüfen, ob es ein (temporäres) Verzeichnis schon gibt und wenn nicht wird es angelegt. Dies habe ich beim Windows-PC problemlos folgendermaßen gelöst:

Code
If Dir$(tmpDir , 16)="" Then
   Mkdir tmpDir
End If

Leider funktioniert das Ganze auf'm OS X nicht. Die Designer-Hilfe sagt zum Thema "Macintosh platform differences in LotusScript" lediglich:
Zitat
Dir: Ignores the attributes Hidden Files, and System. Does not return the directory specifications "." and "..". Returns all files for "*.*", not just those containing ".". Returns only those files ending with a period for "*.", not every file without an extension. If ATTR_VOLUME only is specified, returns the empty string.  If any other attribute is specified, ATTR_VOLUME is ignored.

Irgendwie werde ich daraus nicht schlau. Kann mir jemand helfen???
Wie immer vielen Dank schon mal im Voraus!
Cheers,
semtex

Titel: Re: Problem mit Mac OS X und Dir() (LS)
Beitrag von: m3 am 21.06.05 - 17:15:31
Könntest Du "funktioniert das Ganze auf'm OS X nicht" etwas genauer spezifizieren. Welche Fehlermeldung, ertwartetes vis a vis tatsächliches Verhalten, ....
Titel: Re: Problem mit Mac OS X und Dir() (LS)
Beitrag von: semtex am 21.06.05 - 17:34:14
Hi,

also die Fehlermeldung lautet "Path not found".
Soweit ich alle potentiellen Fehlerquellen ausschließen konnte, muss es am Dir()-Aufruf liegen. Erst dachte ich, dass es am MkDir() liegt, das Verzeichnis kann ich aber problemlos erstellen (wenn es noch nicht exisitiert).
Will ich aber Überprüfen, ob es das Verzeichnis schon gibt (wie erwähnt mit dir()), dann kommt die obige Fehlermeldung.
Komisch, komisch, aber ich kann mir momentan nur erklären, dass die Dir()-Funktion auf'm Mac anders funktioniert, oder?

Wie gesagt, ich bin dankbar für jede Anregung!
Titel: Re: Problem mit Mac OS X und Dir() (LS)
Beitrag von: m3 am 21.06.05 - 17:45:38
Wie schaut denn der Pfad aus? Beispiel für einen zu überprüfenden Pfad?
Titel: Re: Problem mit Mac OS X und Dir() (LS)
Beitrag von: semtex am 21.06.05 - 18:08:44
Hallo,
das Verzeichnis soll ins Data-Verzeichnis der Notes-Installation.

Der Pfad wird folgendermaßen ermittelt:
Code
notesDir = session.GetEnvironmentString("Directory", True)
tmpDir = notesDir & seperator & "temp"

"seperator" deshalb, da win32 ja mit \ und OS X mit : arbeitet.

D.h. bei Windows sieht der Pfad (also tmpDir) z.B. so aus: C:\Programme\lotus\notes\data\temp
Bei OS X z.B. so: MacHD:Programme:lotus:notes:data:temp
Abhängig davon, wo die Notes-Installation liegt.

Das Kopieren einer Datei mit diesem Pfad funktioniert auch (bei win & mac).
Hast Du eine Idee?

Danke,
semtex

P.S.: Ich brauch jetzt erst mal Feierabend, also nicht wundern wenn heute kein Feedback mehr kommt! Danke!

Titel: Re: Problem mit Mac OS X und Dir() (LS)
Beitrag von: semtex am 22.06.05 - 16:32:33
Hallo noch mal,

ich hab mal weitergeforscht.
Das Problem auf dem Mac ist, dass, falls das Verzeichnis nicht vorhanden ist, die Überprüfung mit Dir() (s.o.) den Fehler verursacht. Gibt es einen andere Funktion, um das Vorhandenseins eines Verzeichnises im Filesystem zu überprüfen?

Hat niemand eine Idee?
Jeder Vorschlag ist willkommen!

Danke,
semtex
Titel: Re: Problem mit Mac OS X und Dir() (LS)
Beitrag von: Semeaphoros am 22.06.05 - 17:42:14
Wenn das konsistent ist, kannst Du das doch mit On Error abfangen?
Titel: Re: Problem mit Mac OS X und Dir() (LS)
Beitrag von: semtex am 22.06.05 - 17:46:07
Hi,

genau diesen Einfall hatte ich auch gerade.
Bin gerade am Testen. Ist zwar nicht unbedingt die eleganteste Art, könnte aber funktionieren.  ;)

Ich meld mich dann noch mal, ob's geklappt hat!

Danke soweit!
Titel: Re: Problem mit Mac OS X und Dir() (LS)
Beitrag von: Semeaphoros am 22.06.05 - 17:47:26
Hmm, was mich mehr nachdenklich macht ist die Tatsache, dass hier offenbar das Errorhandling insgesamt fehlt ......  :-P
Titel: Re: Problem mit Mac OS X und Dir() (LS)
Beitrag von: semtex am 22.06.05 - 17:51:03
Naja, zugegebenermaßen bin ich nicht der größte Verfechter des Errorhandlings.
Mag was mit Faulheit zu tun haben.  ;D

Aber an den relevanten Stellen habe ich schon genau darauf geachtet, dass Fehler abgefangen werden und schlüßige Meldungen ausgeben werden.
Mit der Dir()-Funktion hatte ich bisher nur noch nie Probleme (da bisher nur Windows-Kisten bedient wurden), so dass ich hier die Fehlerbehandlung unterschlagen habe. Muss ich jetzt wohl nachholen.....
Titel: Re: Problem mit Mac OS X und Dir() (LS)
Beitrag von: semtex am 23.06.05 - 11:53:19
Also, hier meine Lösung:

Wie oben schon angesprochen habe ich das Ganze über das Errorhandling gelöst.
Tritt ein Fehler bei der Dir()-Abfrage auf, existiert das Verzeichnis nicht und muss (mit MkDir)erzeugt werden.
Tritt der Fehler nicht auf, d.h. dir() gibt entweder einen leeren String oder den Namen der ersten Datei zurück, muss das Verzeichnis nicht angelegt werden und das Skript wird ganz normal weiterbearbeitet.

Ist zwar "von hinten durch die Brust ins Auge", aber wenns funzt....

Danke nochmals,
semtex
Titel: Re: Problem mit Mac OS X und Dir() (LS)
Beitrag von: koehlerbv am 23.06.05 - 22:24:59
Sauberes Funktionieren der Dir-Function (und ChDir / MkDir etc.) bekommst Du auch unter Windows nur mit einem noch saubereren ErrorHandling hin. Das werden auch andere Forums-Mitglieder bestätigen können. Ich sehe das also nicht (oder wenn nur in einem speziellen Fall) als MacOS.Problem an.

Bernhard
Titel: Re: Problem mit Mac OS X und Dir() (LS)
Beitrag von: Semeaphoros am 23.06.05 - 22:54:07
Genau so ist es.
Titel: Re: Problem mit Mac OS X und Dir() (LS)
Beitrag von: koehlerbv am 23.06.05 - 23:35:26
Das war schon mal eine massgebliche Bestätigung  :)

@semtex: Nimm ErrorHandling sehr, sehr ernst. Ich bin lange genug in dem Job und bin mir ABSOLUT sicher, dass diese meine Meinung nicht nur eine, sondern DIE allgemeine Verbindlichkeit in sich trägt.

Bernhard
Titel: Re: Problem mit Mac OS X und Dir() (LS)
Beitrag von: Marinero Atlántico am 23.06.05 - 23:46:06
Wenn ich Semtex richtig verstanden habe, verwendet er das Errorhandling als Teil der Programmlogik.
Normalerweise soll ja ein Error eine Ausnahmebedingung sein.
Hier ist sie aber Bestandteil der Programmlogik.
Das gilt nicht als die feine englische, funzt aber tatsächlich.
Es gibt aber, wenn ich mich recht erinnere, noch eine andere Art, um nachzufragen, ob ein Directory existiert. Hab ich aber leider momentan vergessen.
Titel: Re: Problem mit Mac OS X und Dir() (LS)
Beitrag von: Semeaphoros am 23.06.05 - 23:49:50
Das ist richtig, allerdings prallen da verschiedene Philosophien aufeinander, die eine, bei der Fehler schon gar nicht vorkommen sollten, die andere, wo Fehler geradezu - wie Du sagst - logisch genutzt werden. Basic hat - aus Tradition gewachsen - Bestandteile beider Philosphien. Dir ist so ein Beispiel, wo das Errorhandling in den Logikablauf einbezogen werden muss und kein "Exception handling" mehr ist. Alternativen, die nicht Windows-Spezifisch sind, kenne ich nicht. Natürlich gibt es unter Windows andere Möglichkeiten, zum Bleistift das Oeffnen des Filesystem-Objektes über COM.
Titel: Re: Problem mit Mac OS X und Dir() (LS)
Beitrag von: koehlerbv am 24.06.05 - 00:01:20
Natürlich gibt es unter Windows andere Möglichkeiten, zum Bleistift das Oeffnen des Filesystem-Objektes über COM.

... oder WinAPI, aber das hilft uns ja bekanntermassen und wie von Dir auch genannt nicht die erwartete Lösung. Richtig lustig wird es dann mit "Hannover", wenn zahlreiche*) weitere Betriebssysteme hinzukommen (Linux) - OS-spezifische Sachen werden dann eine weitere Herausforderungsstufe darstellen (der wir uns gerne annehmen werden).

Bernhard

*) Das war ernst gemeint.
Titel: Re: Problem mit Mac OS X und Dir() (LS)
Beitrag von: Marinero Atlántico am 24.06.05 - 00:02:39
Zumindest Performance-Verluste muß man im Kauf nehmen. Das Fehler werfen, Fehler abfangen kostet auf jeden Fall extra-Ressourcen. Ob man die merkt, ist eine andere Frage.
Ausserdem würde ich es auf jeden Fall mit einem Kommentar kennzeichnen. Ansonsten können nachfolgende Generationen verwirrt werden. Man rechnet nicht unbedingt damit. 
Titel: Re: Problem mit Mac OS X und Dir() (LS)
Beitrag von: Marinero Atlántico am 24.06.05 - 00:14:48
... oder WinAPI, aber das hilft uns ja bekanntermassen und wie von Dir auch genannt nicht die erwartete Lösung. Richtig lustig wird es dann mit "Hannover", wenn zahlreiche*) weitere Betriebssysteme hinzukommen (Linux) - OS-spezifische Sachen werden dann eine weitere Herausforderungsstufe darstellen (der wir uns gerne annehmen werden).
@Bernhard: Hannover ist ein Java-Client und zumindest die Überprüfung des Vorhandenseins von Dateien ist in Java seit 1995 oder 1996 gelöst.
Da IBM die Offenheit von Eclipse nutzen will, wird es überall Schnittstellen geben, wo man eigene Java-Klassen gemäss der  Eclipse-Architektur einpluggen kann. Also braucht man keinen plattformspezifischen Code.

Titel: Re: Problem mit Mac OS X und Dir() (LS)
Beitrag von: koehlerbv am 24.06.05 - 00:32:29
Genau da sehe ich das Problem, Axel:
Welche Java-Version meinst Du ? Welche OS-Version meinst Du (Linuxe gibt es ja wie Sand am Meer), welche classes meinst Du - auch da fehlen ja Standards (wobei wir wieder bei der installierten Java-Version wären).
"Hannover" muss noch ein weiteres Problem lösen, was es sich ja auch auf die Fahnen geschrieben hat: Es muss auch den LS-Code beherrschen und "irgendwie" umsetzen.

"Hannover" geht aus meiner Sicht der Dinge in die notwendige Richtung. Probleme gibt es aber noch genug.

To be continued ...

Bernhard
Titel: Re: Problem mit Mac OS X und Dir() (LS)
Beitrag von: Marinero Atlántico am 24.06.05 - 06:55:55
NO FAIR.  >:(
Hannover wird mit einer selbst mitgelieferten JVM laufen oder es wird eine Mindestanforderung an die VM geben. Also ist das schon einmal standadisiert. So machen das andere Eclipse Rich Client Produkte auch.
Es ist auch kein Problem, dass auf dem Rechner noch eine andere JVM installiert ist. Java ist nun wirklich eine sehr standardisierte Sprache. Sun kämpft seit Jahren erfolgreich Forks zu verhindern und das ist ein wichtiger Grund, warum Java nicht openSourced worden ist. Des weiteren ist Java auch traditionell sehr gut abwärtskompatibel. Ich hab einiges an Java Zeugs auf meinem Rechner und ich wechsel auch schon mal die Java Version und da gibt es wirklich sehr, sehr wenig Probleme. 

Und natürlich sind die Klassen standardisiert. Wenn nicht, wäre ich schon längst wahnsinnig geworden.

Und natürlich wird es keine Probleme der Hannover-spezifischen Klassen geben. Dafür sorgt der Java Class Loading Mechanismus, den IBM für dieses Produkt kontrollieren kann und glaub mir: Java Class Loading ist zwar vielleich konzeptionell nicht super-einfach zu verstehen ist aber für diesen Fall bombensicher.
Auch für Anwendungsspezifische Klassen, die der Entwickler einer spezifischen Anwendung bereitstellt ist sichergestellt, dass die Klassen gefunden werden, die der Entwickler will und nicht randommässig irgendwelche, die grad zufällig auf dem Rechner rumschwirren.
Dieser Einwurf kommt einer einfachen Übertragung der Erfahrungen mit Applets gleich. Applets gelten seit ca. 2002 für 99% aller Aufgaben als keine gute Idee.
 
Linux Distributionen sind von der Code Basis nicht so unterschiedlich. Von distributionsspezifischen Problemen von Java auf  Linux höre ich aber null.

Das wichtigste Problem liegt in den GUI Libraries von Eclipse: SWT und JFace. Das läuft in Linux traditionell etwas schlechter als auf Windows. Jedoch entwickeln Tausende von Leuten mit Eclipse auf Linux. So schlecht kann es also wiederum nicht sein. Und gerade Mac OX ist aus mir nicht nachvollziehbaren Gründen das Lieblingsbetriebssystem von sehr vielen Java Entwicklern.

Insgesamt ist dein Mißtrauen gegenüber Virtual Maschine mässigen Lösungen wirklich maßlos übertrieben. Die beide heute wichtigsten Plattformen von Enterprise Computing laufen in Virtual Maschines (.NET und Java/J2EE).

Das mit dem LotusScript Code sollte IBM wirklich in den Griff bekommen. So umfangreich ist die Sprache nicht. Und da IBM nun offenbar für Remoting das Lotus proprietäre Remote Method Call Zeugs durch etwas xml/Webservices basiertes ersetzen will, wird es auch nicht mehr die extrem nervigen Garbage Collector Probleme geben, die es bei Lotus immer gab, weshalb man immer diese Spezialmethode aufrufen mußte. Die Ursache davon ist aber, dass sich die Lotus Leute bei der Java Implementierung von Lotus Klassen in Domino 5 bestimmte Gedanken gespart haben. Und zwar in einem Ausmaß, der so sowieso nur in der dot.com bubble Phase möglich war.

Die Äusserungen zu Java in diesem Forum sind zwar ein wenig realistischer geworden, erinnern aber nach wie vor manchmal an mittelalterliche Karten, wo im Sektor Afrika lediglich stand: "Dort gibt es Löwen"  ;D
ipsum habet leonis?
(ipsum ist wahrscheinlich falsch. leonis sieht nicht schlecht aus: Akkusativ. habet sollte auch die 3. Sg. Präsens sein)
Axel
Titel: Re: Problem mit Mac OS X und Dir() (LS)
Beitrag von: Semeaphoros am 24.06.05 - 12:31:21
habet ist richtig, wenn auch sehr, sehr "einfaches" Latein. Fürs Mittelalter durchaus üblich. Leonis anstelle von leones kann im Mittelalter auch mal vorkommen, ist aber nicht Nebenform, sondern eindeutig Verschreiber. Ipsum passt nicht. Du meinst vermutlich ibi (hier).
Titel: Re: Problem mit Mac OS X und Dir() (LS)
Beitrag von: Marinero Atlántico am 24.06.05 - 15:12:58
nö. Mehr das was in der modernen chilenischen Version von Latein acá (dort) heisst.  ;)
Leones ist eine echte Überraschung. Hab aber damals mein kleines Latinum mit einer 4---- bestanden. Mein Banknachbar hat eine 5+ bekommen und er feixte die ganze Zeit bis meine Note drankam, dass ich auch keine 4 bekommen würde. Aber dann. HA.
Latein gehörte damals wirklich nicht zu meinen Stärken.
Was benutzt man statt habet? existem? In modernen chilenischem Latein würd man vermutlich hay oder se encuentran nehmen.

Und noch mal in Kurzform zur Technik:
In einer Java Client Plattform ist sichergestellt:
- In einem property wird ein eigener Bootstrap Classpath angegeben. Bootstrap = die J2SE Klassen. Dort werden nur bestimmte JVMs erlaubt sein.
- In einem globalen Classloaders des Clients werden alle Zusatzklassen von Hannover sein.
Die Klassen dieser beiden Bereiche können vom Entwickler nicht durch eigene Klassen ersetzt werden (hierarchisches Classloading).
- In jeder Anwendung auf Hannover kann der Entwickler eigene Klassen definieren oder 3rd Party Klassen einbinden aber nicht die Klassen in den übergeordneten Classloaders ersetzen. 

Im Gegensatz zu Applets ist so sichergestellt, dass es kein Chaos wg verschiedenen Klassenversionen geben wird.
Die Unsicherheit bezüglich der benutzten Client-Version der Java Klassen ist eine bekannte spezifische Schwäche des Applet-Konzepts.



 
Titel: Re: Problem mit Mac OS X und Dir() (LS)
Beitrag von: Semeaphoros am 24.06.05 - 15:49:31
Also beim Latinum hast Du ganz bestimmt leones für den acc.pl. gelernt, die Nebenform wird nicht wirklich im Unterricht erwähnt :)

Hitzeproblem, ibi ist tatsächlich dort und nicht hier, das wäre "hic" gewesen. A-bär, mein Gefühl sagt mir, dass eine mittelalterliche Karte vermutlich

hic habitant leones

schreiben würde, sprich "hier wohnen die Löwen". Natürlich ist ein "ibi habet leones" durhaus auch möglich, das Mittellatein hat viele, bunte Facetten, schliesslich gabs kein einheitliches Reich mehr, das die Sprache einheitlich zusammenhalten würde. Bei vielen "kleinen" Wörtern gibt es häufig keinen direkt erkennbaren Zusammenhang mehr zum Latein (für den Sprachwissenschaftler sind sie meistens rekonstruierbar). Zu dieser Sorte von Wörtern gehören diese Ortsadverbien hier, so vom Schiff aus beurteilt ist da im chilenischen Neulatein ein anderes Wort verwendet worden als im klassischen/mittelalterlichen Latein.

Statt habet? exsistunt nicht wirklich (das auch existunt geschrieben werden kann). Das heisst erst modern "existieren". Im Latein hat das noch Grundbedeutung: "hervortreten", "erscheinen". Das Existieren wird mit einfachem "sein" (esse) ausgedrückt, das passt aber hier auch nicht, das beste entweder habitare oder eine völlige Umschreibung. Ok, "ibi leones sunt" ist auch gut, bestimmt klassischer als habitant.
Titel: Re: Problem mit Mac OS X und Dir() (LS)
Beitrag von: Glombi am 24.06.05 - 16:19:15
Ich lasse mal die Latein-Exkursion links liegen und erlaube mir, noch etwas zum ursprünglichen Problem zu posten.  ;D

In der KBASE gibt es etwas bzgl. Dir() und Mac OS:

Title:   
   LotusScript Dir Function Does not Work as Expected; Causes Code to Exit with No Error
Product:   Lotus Notes  >  Lotus Notes  >  Version 6.x
Platform(s):   Mac OS X, Mac OS
Date:   13.09.2004
Doc Number:   1157300

Problem
The LotusScript Dir function does not work correctly in Notes 6.x Client on the Macintosh platform.  This results in the calling code to exit without error.

This issue is known to cause the agent, Synchronize Address Book, in the iNotes mail template (iNotes6.ntf) to fail without error.  This ultimately results in the Address Book not synchronizing.



Solution
This issue has been reported to Lotus Software Quality Engineering.

Workaround:
Rather than using the DIR function to check for the existence of a database one can get a handle to the database and then check whether or not the database is opened using the IsOpen property.

General example:
Dim dbcheck as new notesdatabase("", dbstringname)
If not dbcheck.isopen then
  'db doesn't exist....
End If

Example specific to iNotes6 mail template's agent Synchronize Address Book:
The AddressBookSync script library must be edited.  Locate the iN_GetLocalDBPath function and make the edits to it's code noted below.

 '** Make sure database exists
 'sDB = Dir(sName)           'REMARK
 'If (0 = Len(sDB)) Then     'REMARK
 sDB=sName  'NEW
 Dim opendbtry1 As New notesdatabase("", sDB)  'NEW
 If Not opendbtry1.IsOpen Then       'NEW
  '** try again with local path appended
  sPath = Lcase(iN_GetDataPath)
  If (Instr(1, Lcase(sName), sPath, 0) = 0) Then
   'sDB = Dir(sPath & sName)  'REMARK
   sDB = sPath & sName      'NEW
   Dim opendbtry2 As New notesdatabase("", sDB)    'NEW
  End If
  'If (0 = Len(sDB)) Then   'REMARK
  If Not opendbtry2.IsOpen Then    'NEW
   Call iN_LogThis(L_ERR & sprintf(ER_NODB, sName))
   sDB = iN_PromptForDB(sPath, sName)
  End If
 End If

Supporting Information:
In the iNotes mail template (iNotes6.ntf) the Synchronize Address Book agent makes use of functions with the Script Library AddressBookSync.  The function iN_GetLocalDBPath makes the call to the Dir function which fails and causes the agent to exit without completing.

Related Documents:
Synchronizing Contacts Fails in iNotes Web Access Mail File Opened in Notes Client on a Macintosh
Document #:  1094531

Synchronize Contacts in iNotes Web Access Causes "Memory Allocation Request Exceeded 65,000 Bytes"
Document #:  1087821


Andreas
Titel: Re: Problem mit Mac OS X und Dir() (LS)
Beitrag von: Semeaphoros am 24.06.05 - 16:52:17
Das ist noch einmal ein ganz anderer Aspekt und eigentlich echt schelcht ..... :(
Titel: Re: Problem mit Mac OS X und Dir() (LS)
Beitrag von: semtex am 28.06.05 - 15:17:39
@Glombi: Danke für Deinen Beitrag zu meiner Frage. Ich dachte schon das eigentliche Thema geht im Linux-/Java-/Latein-Exkurs unter.  ;)

Also handelt es sich doch um einen Notes-Bug. Aber wie oben beschrieben konnte ich das Ganze mittels Errorhandling abfangen. Ist zwar (imho) nicht der schönste Programmierstil, aber ich will ja auch keinen Schönheitswettbewerb gewinnen.  ;D

Also, danke an Alle,
semtex