Autor Thema: Automatisches Erzeugen und umbenennen eines privaten Ordners mit Lotusscript  (Gelesen 2963 mal)

Offline anderlaender

  • Frischling
  • *
  • Beiträge: 16
  • Ich liebe dieses Forum!
Hallo,

ich arbeite gerade an einem Problem einer älteren 4.X Notesapplikation. Die genauen technischen Details/Hintergründe, warum
die Anwendung so aussieht sind mir leider unbekannt.

Zur Sache:

In der Anwendung werden "Shared, private folder on first use" Ordner verwandt.
Bislang wurde der Ordner immer manuell vom jeweiligen Anwender erzeugt.

Buttonformel

rc:=@Prompt([YESNOCANCEL];"Info";"Bitte benennen Sie im folgenden Dialog den Ordner mit dem Namen \"Warenkorb\"!"+@Char(10)+
"Diese Funktion müssen Sie abbrechen, wenn Sie bereits einen funktionierende Warenkorb angelegt haben!");
@If(rc=0 | rc = -1;@Return("");"");
@Command([OpenView];"XXXWarenkorb");
@Command([FolderRename];"";"XXXWarenkorb");

Ab und an haben wir verständlicherweise damit Schwierigkeiten. Der Ordner wird nicht oder falsch angelegt.
Nach einer neuen Anforderung soll dies nun nach Möglichkeit automatisiert werden. Aus diesem
Grund versuche ich nun im Postopen der Anwendung den
Button zu ersetzen. Unglücklicherweise bekomme ich jedoch stets Error - script is busy...

Sub Postopen(Source As Notesuidatabase)
On Error Goto Errorhandler

'/ Check is a shopping cart for a user is availabale or not.
'/ If no the cart is not available - create one.

Dim dbCurrent As Notesdatabase
Dim intIsFolder As Integer '/ bool
Dim session As New NotesSession
Dim viewShoppingCart As NotesView

'/ Access current database backend
Set dbCurrent = source.database

Print "Suche Warenkorb..."

'/ Get view/folder "Warenkorb"
Set viewShoppingCart = dbCurrent.getView("Warenkorb")
If Not viewShoppingCart Is Nothing Then
intIsFolder = viewShoppingCart.isFolder
If intIsFolder Then
Print "Warenkorb vorhanden."
Else
Print "Warenkorb ist kein Ordner. Bitte wenden Sie sich an Ihren Administrator. "
End If
Else
'/ Check if the view object is a folder...
Print "Kein Warenkorb vorhanden. Versuche diesen zu erzeugen..."
Call source.OpenView("WWSWarenkorb")
'/ Get VIEW-Unid, Set $Title to "Warenkorb"
End If

Finish:
Exit Sub
Errorhandler:
'/ Print {Fehler Nr.} & Str(Err) & { in "Datenbank - Initialisieren", Zeile } & Str(Erl) & {, } & Error$
Resume Finish

End Sub

Auch eine intensive Suche im Web brachte keinen Lösungsansatz. Also hat jemand eine Idee wie ich den Vorgang automatisieren kann.

Vorab herzlichen Dank für Interesse und Unterstützung

anderlaender

PS: Schönes Forum ...

Original englischsprachiges Posting
http://www-10.lotus.com/ldd/46dom.nsf/ShowMyTopicsAllThreadedweb/210129f5af00269e85256ebc003f008f?OpenDocument

« Letzte Änderung: 23.06.04 - 15:03:52 von anderlaender »

Offline anderlaender

  • Frischling
  • *
  • Beiträge: 16
  • Ich liebe dieses Forum!
OOOps, kann man einen Beitrag auch einem Forumbereich zuordnen, denn es gehört wohl eher in R5 Entwicklerforum...

Sorry

« Letzte Änderung: 23.06.04 - 15:03:16 von anderlaender »

Offline ata

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 5.092
  • Geschlecht: Männlich
  • drenaiondrufflos
    • Anton Tauscher Privat
... ein Umbenennen des Ordners geht nach meiner Erkenntnis nicht. Anstelle dessen kannst du einen neuen, richtigen Ordner erstellen, die Dokumente verschieben und den falschen Ordner letztendlich löschen...

ata
Grüßle Toni :)

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
@ata:
Um das Umbenennen ging es - soweit ich das verstanden habe - nicht, es soll lediglich der SPOFU-Folder erzeugt werden.

@Ingo AKA anderlaender:
Im LDD-Forum hat Ronny eigentlich das geschrieben, was mir dazu auch gestern spontan einfiel:
Zitat
The normal way for a user to obtain such a folder is to click on the shared folder. Users who find the information in this folder of interest will definitely click on it. The rest doesn't need the private folder ;-)
In Deinem Code verwendest Du ausserdem gleich drei Bezeichnungen für den Folder:
"XXXWarenkorb" (im @function-Button)
"Warenkorb" und
"WWSWarenkorb" (im LS-Code).
Das macht mich natürlich erstmal stutzig hinsichtlich der Strukturiertheit des Vorgehens.

Weiterhin:
Was meint der Debugger, bevor Du die Meldung "Script is busy" bekommst ? Bis zu welcher Zeile geht Dein Code gut ?
Du sprichst von R4. Ist das eine alte R4-Applikation oder bist Du noch auf R4 ? Auch das wäre eine xtrem wichtige Angabe für uns.

So long,
Bernhard

Offline anderlaender

  • Frischling
  • *
  • Beiträge: 16
  • Ich liebe dieses Forum!
Wow, herzlichen Dank für die ganzen Antworten und das Verschieben meiner Frage in das richtige Forum... DANKE

-> koehlerbv
Ich habe die Anwendung nicht geschrieben und sie entstand scheinbar noch unter 4.5.
Der 'private' Warenkorb Folder (XXXWarenkorb =  WWSWarenkorb) wird benötigt, da jeder User seinen eigenen Warenkorb erhalten soll. Jedoch heißt der private Ordner einfach "Warenkorb".

1. Damit dieser private Ordner angelegt wird, muß dieser zumindest 1* mit den Userrechten geöffnet werden.
2. Ich denke schon das man das $Title-Feld des Ordners (Zugriff auf das Designdokument über view.universalID) ändern kann und somit den Ordner umbenennen kann, aber im Postopen schmiert mir der Debugger direkt nach der ersten Zeile ab.

Ich öffne anschließend die Anwendung und dann steht in der Statuszeile Error - Script is busy. Scheibenkleister

Momentan habe ich einfach keine Idee, wie ich diesen Ordner im Hintergrund anlege und nichtsdestotrotz die Standardansicht öffnen kann.

DANKE für die Unterstützung, schönen Tag

Ingo AKA anderlaender :-)

« Letzte Änderung: 24.06.04 - 13:11:03 von anderlaender »

Offline Axel

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 8.658
  • Geschlecht: Männlich
  • It's not a bug, it's Notes
Momentan habe ich einfach keine Idee, wie ich diesen Ordner im Hintergrund anlege und nichtsdestotrotz die Standard ansicht öffnen kann.

Wenn es sich um private Ornder handelt, die auf einen SOFU (Gemeinsam, privat bei Erstbenutzung) handelt, ist das kein Problem.

Füge folgende zwei Zeilen in den PostOpen-Event des Datenbankscriptes ein:

@Command([OpenView]; "Meine Dokumente");
@Command([FileCloseWindow])

Damit wird bei jedem Öffnen der DB der Ordner "Meine Dokumente" kurz geöffnet, wenn er nicht existiert, wird er angelegt. Der User bekommt davon, außer bei langsameren Rechner oder schlechten Netzwerkverbindungen - dann flackerts kurz, nichts mit.


Axel
 
Ohne Computer wären wir noch lange nicht hinterm Mond!

Offline anderlaender

  • Frischling
  • *
  • Beiträge: 16
  • Ich liebe dieses Forum!
@Axel
Danke, probier ich gleich mal aus, aber der Ordner ist dadurch noch nicht umbenannt...

Ingo

Offline Axel

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 8.658
  • Geschlecht: Männlich
  • It's not a bug, it's Notes
Hi,

umbenennen ist nicht so ohne weiteres möglich. Im Hintergrund bzw. programmgesteuert geht es meines Wissens nicht. Es sein denn über die API.

Das habe ich in derDesigner-Hilfe gefunden:

Zitat
FolderRename  

Öffnet das Dialogfeld "Umbenennen", in dem Sie die Namen von Ordnern und Ansichten ändern können.
Syntax
@Command( [FolderRename] )
Verwendung
In einer Datenbank muß eine Ansicht oder ein Ordner geöffnet sein.

In der Sandkiste gibt's noch das: LotusScript DatabaseDesign Class.

Schau mal ob dir das was hilft.

Axel
Ohne Computer wären wir noch lange nicht hinterm Mond!

Offline anderlaender

  • Frischling
  • *
  • Beiträge: 16
  • Ich liebe dieses Forum!
Tja, geht nicht gibts nicht  ...
Der folgende Code scheint zu laufen. Allerdings gibt es einen Schönheitsfehler... Es werden zwei Fenster beim erstellen geöffent und ich weiss noch nicht, wie ich dieses zweite fenster schließe...

Danke

Ingo


Sub Postopen(Source As Notesuidatabase)
   Stop
   '/ Check is a shopping cart for a user is availabale or not.
   '/ If no the cart is not available - create one.
   
   On Error Goto Errorhandler
   
   Dim dbCurrent As Notesdatabase
   Dim docDesign As Notesdocument
   Dim intIsFolder As Integer '/ bool
   Dim strviewUNID As String
   Dim viewShoppingCart As NotesView
   Dim viewTemp As Notesview
   Dim viewUITemp As NotesUIview
   Dim ws As New NotesUIWorkspace
   
   '/ Access current database backend
   Set dbCurrent = source.database
   
   Print "Suche Warenkorb..."
   
   '/ Get view/folder "Warenkorb"
   Set viewShoppingCart = dbCurrent.getView("Warenkorb")
   If Not viewShoppingCart Is Nothing Then
      intIsFolder = viewShoppingCart.isFolder
      If intIsFolder Then
         Print "Warenkorb vorhanden."
      Else
         Print "Warenkorb ist kein Ordner. Bitte wenden Sie sich an Ihren Administrator. "
      End If    
   Else
      '/
      Print "Kein Warenkorb vorhanden. Versuche diesen zu erzeugen..."
      Call source.OpenView("WWSWarenkorb")
      Set viewUITemp = ws.CurrentView
      Set viewtemp = viewUITemp.View
      '/ Get Design note
      strviewUNID =  viewtemp.universalID
      Set docDesign = dbCurrent.GetDocumentByUNID(strviewUNID)
      If Not docDesign Is Nothing Then
         '/ Set new name for the folder ...
         docDesign.~$Title = "Warenkorb"
         Call docDesign.save(False, False)
         Print "Ordner " & docDesign.~$Title(0) & " neu erstellt und umbenannt."
      Else
         Print "Ordner " & docDesign.~$Title(0) & " konnte nicht umbekannt werden. "
      End If
      
   End If
   Call source.OpenView("ArtikelArtikelBez")
   
Finish:
   Exit Sub
Errorhandler:
   Print {Fehler Nr.}  & Str(Err) & { in "Datenbank - Initialisieren", Zeile } & Str(Erl) & {, } & Error$
   Resume Finish
End Sub

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz