Autor Thema: Speichern und dann neue Maske öffnen mit Script  (Gelesen 6415 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