Autor Thema: Speichern und dann neue Maske öffnen mit Script  (Gelesen 6524 mal)

Offline headshrinker

  • Frischling
  • *
  • Beiträge: 41
Speichern und dann neue Maske öffnen mit Script
« am: 09.11.06 - 10:37:58 »
Hallo,

irgendwie steh ich aber so was von aufn Schlauch!
Habe ein Aktion mit folgenden Script drinne

Code
Sub Click(Source As Button)
If Not uidoc.editmode Then uidoc.editmode = True
uidoc.document.Number = GenerateSequentialNumber( profileNumberForm_Main$ )
Call uidoc.save
End Sub

Ich möchte gerne das nach dem Speichern, sich eine bestimmte Maske öffnet.
Mittlerweile habe ich schon so eingies ausprobiert und seh wohl vor lauter Wald den Baum nicht mehr. Wäre super wenn Ihr mir helfen könntet.

Offline Johnson

  • Senior Mitglied
  • ****
  • Beiträge: 258
  • Geschlecht: Männlich
Re: Speichern und dann neue Maske öffnen mit Script
« Antwort #1 am: 09.11.06 - 10:49:38 »
Willst du ein neues/anderes Dokument oder das aktuell geöffnete Dokument, in dem sich die Action befindet, mit einer bestimmten Maske öffnen?
Gruß
Johnson

Offline headshrinker

  • Frischling
  • *
  • Beiträge: 41
Re: Speichern und dann neue Maske öffnen mit Script
« Antwort #2 am: 09.11.06 - 10:55:01 »
Man befindet sich bereits in einer Maske, in der man einige Felder etc. ausgefüllt hat. Mit der Aktion soll eine Nummer generiert werden, diese gespeichert und danach soll sich halt eine neue Maske öffnen, die im Grunde nur eine Art Druckversion der vorherigen darstellt.

Offline Johnson

  • Senior Mitglied
  • ****
  • Beiträge: 258
  • Geschlecht: Männlich
Re: Speichern und dann neue Maske öffnen mit Script
« Antwort #3 am: 09.11.06 - 11:09:58 »
Also...
du kannst natürlich über das NotesUIWorkspace Objekt eine Maske öffnen.
Aber nur um das ganze etwas genauer zu sagen:
Einer "geöffneten" Maske liegt immer ein Dokument zu grunde.
Im Prinzip sagt das im Dokument enthaltene Feld "Form" welche Maske zum Anzeigen des Dokuments verwendet werden soll:

! Ich hab den Code direkt hier eingegeben, also noch nicht laufen gelassen !

Code
Dim db as NotesDatabase
Dim doc as NotesDocument
Dim s as NotesSession
Dim uidoc as NotesUIDocument
Dim uiws as NotesUIWorkspace
Set s = New NotesSession
Set db = s.CurrentDatabase
Set doc = db.CreateDocument
doc.Form = "Preview"
Set uiws = New NotesUIWorkspace
Set uidoc = uiws.EditDocument(True, doc, False)

Um das aktuelle Dokument in einer neuen Maske zu öffnen:

Code
Dim doc as NotesDocument
Dim uidoc as NotesUIDocument
Dim uidoc_preview as NotesUIDocument
Dim uiws as NotesUIWorkspace
Set uiws = New NotesUIWorkspace
Set uidoc = uiws.CurrentDocument
Set doc = uidoc.Document
Set s = New NotesSession
Set db = s.CurrentDatabase
Set doc_preview = doc.CopyToDatabase(doc.ParentDatabase)
doc_preview.Form = "Preview"
Set uidoc_preview = uiws.EditDocument(True, doc_preview, False)

!! Das aktuelle Dokument (uidoc) wird, wenn es gespeichert wird, zukünftig auch mit der Maske "Maskenname" geöffnet.

Um das zu umgehen kann man ein temporäres Dokument für die Vorschau erstellen:

Code
Dim db as NotesDatabase
Dim doc as NotesDocument
Dim doc_preview as NotesDocument
Dim s as NotesSession
Dim uidoc as NotesUIDocument
Dim uidoc_preview as NotesUIDocument
Dim uiws as NotesUIWorkspace
Set uiws = New NotesUIWorkspace
Set uidoc = uiws.CurrentDocument
Set doc = uidoc.Document
doc.Form = "Preview"
Set uidoc_printpreview = uiws.EditDocument(True, doc, False)


Gruß
Johnson

Offline headshrinker

  • Frischling
  • *
  • Beiträge: 41
Re: Speichern und dann neue Maske öffnen mit Script
« Antwort #4 am: 09.11.06 - 11:31:14 »
Habe den letzten Teil in die Aktion eingebaut und es funzt einwandfrei.

Sieht jetzt so aus

Code
Sub Click(Source As Button)
Dim db As NotesDatabase
Dim doc As NotesDocument
Dim doc_preview As NotesDocument
Dim s As NotesSession
Dim uidoc As NotesUIDocument
Dim uidoc_preview As NotesUIDocument
Dim uiws As NotesUIWorkspace
Set uiws = New NotesUIWorkspace
Set uidoc = uiws.CurrentDocument
Set doc = uidoc.Document
doc.Form = "BerichtDeutsch"
Set uidoc_printpreview = uiws.EditDocument(True, doc, False)
If Not uidoc.editmode Then uidoc.editmode = True
uidoc.document.Number = GenerateSequentialNumber( profileNumberForm_Main$ )
Call uidoc.save
Call uidoc.Close
End Sub

Danke für die Hilfe.

Gruß Bernd

Offline Johnson

  • Senior Mitglied
  • ****
  • Beiträge: 258
  • Geschlecht: Männlich
Re: Speichern und dann neue Maske öffnen mit Script
« Antwort #5 am: 09.11.06 - 11:37:21 »
 :o
Hab noch nen Bug gefunden:
Ändere "uidoc_printpreview" in "uidoc_preview"!

Du solltest auch im Options-Bereich eines jeden Scripts die Anweisung "Option Declare" respektive "Option Explicit" verwenden.
Damit sagst du, daß alle verwendeten Variablen deklariert werden müssen. So werden Schreibfehler bei Variablennamen folglich auch Fehler verhindert.
Gruß
Johnson

Offline outerspace

  • Frischling
  • *
  • Beiträge: 39
  • Geschlecht: Männlich
Re: Speichern und dann neue Maske öffnen mit Script
« Antwort #6 am: 09.11.06 - 12:03:54 »
Hallo headshrinker,
noch eine kleine Anmerkung zu folgenden Zeilen:

If Not uidoc.editmode Then uidoc.editmode = True
uidoc.document.Number = GenerateSequentialNumber( profileNumberForm_Main$ )
Call uidoc.save

Wenn ein Dokument im Edit Mode geöffnet ist und man per uidoc.Document in das Backend
einen Wert schreibt, dürfte meines Wissens der Wert im Gespeicherten Doc nicht ankommen,
weil uidoc.Save das Backend mit dem Frontend überschreibt es sei den es ist in deiner GenerateSequentialNumber Funktion irgendwo ein Reload.
Besser wäre eventuell
Call uidoc.FieldSetText(CStr("Number", GenerateSequentialNumber( profileNumberForm_Main$ )))

Gruß
Andreas

Offline Johnson

  • Senior Mitglied
  • ****
  • Beiträge: 258
  • Geschlecht: Männlich
Re: Speichern und dann neue Maske öffnen mit Script
« Antwort #7 am: 09.11.06 - 12:07:20 »
Jep!

Solange uidoc.AutoReload = False ist (Standard ist auf True).
Gruß
Johnson

Offline headshrinker

  • Frischling
  • *
  • Beiträge: 41
Re: Speichern und dann neue Maske öffnen mit Script
« Antwort #8 am: 04.12.06 - 08:37:58 »
Hallo,

wollte nicht extra ein neues Thema aufmachen.

Bislang lief der NummernGenerator Local und machte keine Probleme.
Aufn Server jedoch generiert er mir keine Nummer. Habe mir den Generator aus
der Sandbox geholt und dort hatte unter Reviews wohl schonmal einer das gleiche Problem.

Kann mein Problem mit dem
Zitat
Wenn ein Dokument im Edit Mode geöffnet ist und man per uidoc.Document in das Backend
einen Wert schreibt, dürfte meines Wissens der Wert im Gespeicherten Doc nicht ankommen,
weil uidoc.Save das Backend mit dem Frontend überschreibt es sei den es ist in deiner GenerateSequentialNumber Funktion irgendwo ein Reload.
Besser wäre eventuell
Call uidoc.FieldSetText(CStr("Number", GenerateSequentialNumber( profileNumberForm_Main$ )))

bzw. mit diesem

Zitat
Jep!

Solange uidoc.AutoReload = False ist (Standard ist auf True)

zusammenhängen. Wo müßte ich ein Auto.Reload einfügen, hatte das nicht so ganz verstanden. Bin für jeder noch so kleine Hilfe dankbar.

Offline Johnson

  • Senior Mitglied
  • ****
  • Beiträge: 258
  • Geschlecht: Männlich
Re: Speichern und dann neue Maske öffnen mit Script
« Antwort #9 am: 04.12.06 - 14:55:55 »
CODE!!!

Was gibt dir denn die GenerateSequentialNumber Funktion zurück?
Will sagen: Ist der Rückgabewert der Funktion bereits ein leerer String.

Gruß
Johnson
Gruß
Johnson

Offline m3

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 8.102
  • Geschlecht: Männlich
  • Non ex transverso sed deorsum!
    • leyrers online pamphlet
Re: Speichern und dann neue Maske öffnen mit Script
« Antwort #10 am: 04.12.06 - 15:11:42 »
Bislang lief der NummernGenerator Local und machte keine Probleme.
Aufn Server jedoch generiert er mir keine Nummer. Habe mir den Generator aus
der Sandbox geholt und dort hatte unter Reviews wohl schonmal einer das gleiche Problem.
Kein Profil-Dokument eingerichtet?  ;)
HTH
m³ aka. Martin -- leyrers online pamphlet | LEYON - All things Lotus (IBM Collaborations Solutions)

All programs evolve until they can send email.
Except Microsoft Exchange.
    - Memorable Quotes from Alt.Sysadmin.Recovery

"Lotus Notes ist wie ein Badezimmer, geht ohne Kacheln, aber nicht so gut." -- Peter Klett

"If there isn't at least a handful of solutions for any given problem, it isn't IBM"™ - @notessensai

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: Speichern und dann neue Maske öffnen mit Script
« Antwort #11 am: 04.12.06 - 15:16:14 »
Profildokument, Server und Nummerngenerator? Das kann doch gar nichts werden - der produziert doch dann sackweise doppelte Nummern ...

Bernhard

Offline m3

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 8.102
  • Geschlecht: Männlich
  • Non ex transverso sed deorsum!
    • leyrers online pamphlet
Re: Speichern und dann neue Maske öffnen mit Script
« Antwort #12 am: 04.12.06 - 15:21:17 »
LOL. "Nummerngenerator", "Profil" oder "Datum konvertieren" in einem Posting und Bernhard ist schon da. Hast Du eine spezielle Suche dafür? ;)

Klar kann das nix werden, das sagt der Autor aber auch:
Zitat
So how does the Generator guarantee a unique sequential number? Well, it does not. Not a 100% guarantee, but the likelihood is very very very slim that more than one document receive the same number.
HTH
m³ aka. Martin -- leyrers online pamphlet | LEYON - All things Lotus (IBM Collaborations Solutions)

All programs evolve until they can send email.
Except Microsoft Exchange.
    - Memorable Quotes from Alt.Sysadmin.Recovery

"Lotus Notes ist wie ein Badezimmer, geht ohne Kacheln, aber nicht so gut." -- Peter Klett

"If there isn't at least a handful of solutions for any given problem, it isn't IBM"™ - @notessensai

Offline headshrinker

  • Frischling
  • *
  • Beiträge: 41
Re: Speichern und dann neue Maske öffnen mit Script
« Antwort #13 am: 04.12.06 - 15:22:01 »
So habe mich gerade mal wieder mit meinem Problem befassen können.

Der Code des Scriptes für den NummernGenerator ist:

Code
' Assignes a unique number and formats it according to prefs. defined in profileNumber
' profileNumber is NOT and in-memory profile document
' Inputs -
'               The name of the form to be assigned a number
' Returns-
'               a sequential number
' Calls-
'              MaskNumber, CreateProfileSequential
Function GenerateSequentialNumber( formName$ ) As String
Dim s As New notessession
Dim doc As notesdocument
Dim viewNumber As notesview
Dim bSaved As Integer ' acts as semaphor
Dim tries%, delay% ' record locking    
Dim num%, newnum% ' current and next number    
Dim currentYear%, currentMonth%, currentDay% ' today in numbers
Dim txtYear$, txtMonth$, txtDay$ ' today in text
Dim proNum%, proYear%, proMonth%, proDay% ' last vals (in profileNumber)
Dim mask$, resetNum$ ' formatting (in profileNumber)
Dim maskedNewNum$ ' the final result  
Dim n As New notesname( s.currentdatabase.server )
Dim srv$
srv$ = n.abbreviated
If srv$ = "" Then srv$ = "[Local]" ' cant use blank as key
On Error Goto errorHandling
Set viewNumber = s.currentdatabase.getview( lookSequentialNumber$ ) ' lookup view
bSaved = False
currentYear% = Year( Today )
currentMonth% = Month( Today )
currentDay% = Day( Today )
tries% = 1
     ' Loop while document profileNumber is not saved
     ' If another user has the document open then it can not be saved.
     ' Aborts after 10 tries and returns 0000 as number
While bSaved = False
profileID$ = formName$ & "_" &  srv$ ' key
Set doc = viewNumber.getdocumentbykey( profileID$ )
          ' Exit if no number setup document
[b]If doc Is Nothing Then Error 4001, "No sequential number setup document"[/b]
          ' if disabled then return blank
If doc.mask(0) = "DISABLED" Then
GenerateSequentialNumber = ""
Exit Function    ' exit
End If
If Not doc.hasitem("Year") Then ' extra precautions
doc.Year = currentYear%
doc.Month = currentMonth%
doc.Day = currentDay%
End If
          ' Get settings from profile document
proNum% = doc.Number(0)
num% = proNum%
proYear% = doc.Year(0)
proMonth% = doc.Month(0)
proDay% = doc.Day(0)
mask$ = doc.Mask(0)
ResetNum$ = doc.Reset(0)
          ' Year
If proYear% <> currentYear% Then doc.year = currentYear%
txtYear$ = Cstr( currentYear% )
          ' Month
If proMonth% <> currentMonth% Then doc.month = currentMonth%
If currentMonth% < 10 Then txtMonth$ = "0" & Cstr(currentMonth%) Else txtMonth$ = Cstr(currentMonth%)
          ' Day
If proDay% <> currentDay% Then doc.day = currentDay%
If currentDay% < 10 Then txtDay$ = "0" & Cstr( currentDay% ) Else txtDay$ = Cstr( currentDay% )
          ' Reset
Select Case ResetNum$
Case "N" : num% = proNum% ' never
Case "Y" : If proYear% = currentYear% Then num% = proNum% Else num% = 0 ' year
Case "M" : If proMonth% = currentMonth% Then num% = proNum% Else num% = 0 ' month
Case "D" : If proDay% = currentDay% Then num% = proNum% Else num% = 0 ' day
End Select
newnum% = num% + 1 ' set new number
          ' Mask (format) the new number
maskedNewNum$ = MaskNumber( newnum%, mask$, txtYear$, txtMonth$, txtDay$ )    
          ' Try to save doc
doc.Number = newnum%
bSaved = doc.save( False, False )
If bSaved = False Then
Set doc = Nothing ' release to prevent deadlock
tries% = tries% + 1
If tries% > 10 Then
                    ' make sure we dont end up in an indefinate loop
Print msgBarTimedOut$
GenerateSequentialNumber = "0000" ' exit and return 0000
Exit Function
Else
For delay% = 1 To 10000
                         ' wait
                         ' redo the whole thing again
Next              
End If
Else
Print "Number assigned: " & maskedNewNum$
End If
Wend ' while bSaved = false
     '*** New number has been generated and document profileNumber saved
GenerateSequentialNumber = maskedNewNum$
Exit Function
errorHandling:
Print "SequentialNumber.GenerateSequentialNumber reports:"    
Print Err & " " & Error$
Print "Sequential Number Generator Failed"
GenerateSequentialNumber = "0000"
Exit Function
End Function

Habe mal den Debugger laufen lassen.
Bis hier geht alles reibunglos: If doc Is Nothing Then Error 4001, "No sequential number setup document" und dann springt er zum ende  "errorHandling"

und schmeißt mir dann die "0000" aus als Nummer
Profildokument ist eingerichtet etc. Wie gesagt local hat das ganze gut funktioniert.

Offline m3

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 8.102
  • Geschlecht: Männlich
  • Non ex transverso sed deorsum!
    • leyrers online pamphlet
Re: Speichern und dann neue Maske öffnen mit Script
« Antwort #14 am: 04.12.06 - 15:23:31 »
Woks as designed.
HTH
m³ aka. Martin -- leyrers online pamphlet | LEYON - All things Lotus (IBM Collaborations Solutions)

All programs evolve until they can send email.
Except Microsoft Exchange.
    - Memorable Quotes from Alt.Sysadmin.Recovery

"Lotus Notes ist wie ein Badezimmer, geht ohne Kacheln, aber nicht so gut." -- Peter Klett

"If there isn't at least a handful of solutions for any given problem, it isn't IBM"™ - @notessensai

Offline Thomas Schulte

  • @Notes Preisträger
  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 4.388
  • Geschlecht: Männlich
  • Ich glaub mich tritt ein Pferd
Re: Speichern und dann neue Maske öffnen mit Script
« Antwort #15 am: 04.12.06 - 16:07:09 »
Wenn man schon klaut, dann sollte man wenigstens in der Lage sein zu verstehen was man geklaut hat.

Der Code ist von Villi Helgason und eine der besseren Implementationen für das erstellen von Sequentiellen Nummern.
Und weil es das Teil gut ist hat es auch die Möglichkeit das erstellen dieser Nummer auf einen bestimmten Server zu begrenzen. Warscheinlich hast du entweder gar keinen oder nicht den richtigen Server Namen angegeben.
Thomas Schulte

Collaborative Project Portfolio and Project Management Software

"Aber wo wir jetzt einmal soweit gekommen sind, möchte ich noch nicht aufgeben. Versteh mich recht, aufgeben liegt mir irgendwie nicht."

J.R.R.Tolkien Herr der Ringe, Der Schicksalsberg

OpenNTF Project: !!HELP!! !!SYSTEM!!  !!DRIVER!!

Skype: thomasschulte-kulmbach

Offline Johnson

  • Senior Mitglied
  • ****
  • Beiträge: 258
  • Geschlecht: Männlich
Re: Speichern und dann neue Maske öffnen mit Script
« Antwort #16 am: 04.12.06 - 16:53:39 »
Oder der Übergabe-Parameter "formName$" ist passt nicht - Oder?
(Ich hab dat Ding noch nie gebraucht  ::)).
Gruß
Johnson

Offline Thomas Schulte

  • @Notes Preisträger
  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 4.388
  • Geschlecht: Männlich
  • Ich glaub mich tritt ein Pferd
Re: Speichern und dann neue Maske öffnen mit Script
« Antwort #17 am: 04.12.06 - 17:07:40 »
@Johnson Nur als kleiner Tipp. Geh mal davon aus, das wenn das lokal funktioniert hat der FormName$ richtig sein muss.
Thomas Schulte

Collaborative Project Portfolio and Project Management Software

"Aber wo wir jetzt einmal soweit gekommen sind, möchte ich noch nicht aufgeben. Versteh mich recht, aufgeben liegt mir irgendwie nicht."

J.R.R.Tolkien Herr der Ringe, Der Schicksalsberg

OpenNTF Project: !!HELP!! !!SYSTEM!!  !!DRIVER!!

Skype: thomasschulte-kulmbach

Offline Johnson

  • Senior Mitglied
  • ****
  • Beiträge: 258
  • Geschlecht: Männlich
Re: Speichern und dann neue Maske öffnen mit Script
« Antwort #18 am: 04.12.06 - 17:16:23 »
 :P ::)
Gruß
Johnson

Offline outerspace

  • Frischling
  • *
  • Beiträge: 39
  • Geschlecht: Männlich
Re: Speichern und dann neue Maske öffnen mit Script
« Antwort #19 am: 04.12.06 - 17:50:42 »
Zeigt die View den Namen denn auch als Abbreviated an ?
Über unterschiedliche Keys wegen der Namensanzeige bin ich auch schon des öfteren gestolpert.

Gruss
Andreas

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz