Newsgroup: it.comp.appl.notes-domino
Titolo: evento alla creazione di un modulo

ho creato un database con dentro un modulo, chiamiamolo A.
dentro al modulo A ho creato una "azione", che crea una specie di codice
protocollo progressivo, cioe' si va a leggere una vista di tutti i
documenti che riporta solo la colonna relativa al codice in argomento,
prende il primo record, che essendo la vista ordinata in "decrescente"
e' il piu' alto, e lo incrementa di uno.
a quesot punto scrive nel campo "codice" il valore.
ora quello che non riesco a fare e' quello di non utilizzare l'azione,
ma una sorta di evento che alla sola creazione (e non ad ogni
apertura...) popoli questo campo.
qualche suggerimento?
p.s. sul libro di Lynd & Kern non ho trovato lumi....
grazie 1000
kalos

 ha scritto nel messaggio
news:3B962729...@tirompo.com...

1) O metti Il campo "Protocollo" calcolato in composizione con la formula
che ti trova il numero.
2) Nella formula del campo "Protocollo":
@If(Protocollo := ""; Tua_Formula; Protocollo)
3) Da script nel PostOpen del form con un controllo simile al precedente:
if doc.Protocollo(0) = "" then ...
PS se non te ne sei gią reso conto da solo ti svelo un problemino... per
come l'hai fatta tu, la cosa, genera numeri progressivi univoci solo in
ambiente monoutente... meditate gente, meditate.

 ha scritto nel messaggio
news:3B962729...@tirompo.com...


 questo caso far partire la tua procedura di generazione progressivo
...e 4. :-)

 PS se non te ne sei già reso conto da solo ti svelo un problemino... per


 le funzioni Codelock e CodeUnlock?
Agente???
CodeLock CodeUnlock???
Explain, please...

 ha scritto nel messaggio
news:Jkql7.107463$TS4.9...@news2.tin.it...


 O no?
Giusto. Ma dove le trovi quelle funzioni?

 ha scritto nel messaggio
news:ixql7.107511$TS4.9...@news2.tin.it...


 simile. Prova a cercare "How synchronization works".
No, no, no; quello č un lock di processo per il multi-threading. Non
funziona se i processi sono su due macchine diverse.
E' molto piů semplice e comune.

 ha scritto nel messaggio
news:DLql7.107619$TS4.9...@news2.tin.it...


 essere "run on server"?
E poi come ritorni il risultato?

 > Scusa (non so se si puň fare) ma non si puň indicare che l'agente deve


 utente ha lanciato l'agente.
E' più facile...

 Mi diresti come si potrebbe fare secondo te?
E' standard.
- Una vista monodocumento
- Script che fa una GetFirstDocument
- Leggi il numero
- Incrementa il numero sul documento contatore
- Salva il doc contatore ciclando il tutto in un loop while not
doc.Save(False, False)
- Se esci dal ciclo hai un numero univoco

 ha scritto nel messaggio
news:Lorl7.107797$TS4.9...@news2.tin.it...


Non essendo un programmatore ho utilizzato un sistema che non utilizza 
solo i quattro comandi che conosco e sembra funzionare.
Ho creato un modulo con un solo campo contenete un numero, trasparente per 
gli utenti.
Alla creazione di un nuovo documento, all'atto del salvataggio del 
medesimo per non sprecare numeri, leggo il numero nel contatore, lo 
incremento, aggiorno il nuovo documento con il codice e salvo il tutto.
Spero di esservi stato utile.
Saluti Ferdinando

 ha scritto nel messaggio
news:9n7340$4s0$1...@fe1.cs.interbusiness.it...

Vabbč, grazie dl tentativo, ma era solo un giochino, sappiamo come farlo.
Comunque dovresti spiegare su che doc si trova questo campo "trasparente".
Se guardi bene questo 3D trovi anche la soluzione.

scusa, Juda, io ho fatto cosi', per il momento lo script e' in un
bottone (una action).
ed e' questo...
diciamo comunque che sono alla mia seconda settimana di programmazione
domino...
Sub Click(Source As Button)
	Dim session As New NotesSession
	Dim workspace As New NotesUIWorkspace     
	Dim db As NotesDatabase
	Dim doc As NotesDocument
	Dim uidoc As NotesUIDocument
	Dim view As NotesView
	Dim viewdoc As NotesDocument
	Dim NumeroProtocollo As Long
 
     'prende il nome del database corrente
	Set db = session.CurrentDatabase
 
     'prende il nome del documento corrente
	Set uidoc = workspace.CurrentDocument
	Set doc = uidoc.Document
 
     'trova il documento che contiene il valore Protocollo + alto
	ViewName = "(Protocolli)"
	Set view = db.GetView( ViewName )
	Set viewdoc = view.GetFirstDocument
 
	On Error Goto Done
 
	NumeroProtocollo = ViewDoc.LavoroProtocollo(0)
 
     'Genera il nuovo protocollo
	If Isnumeric(NumeroProtocollo) Then
		doc.LavoroProtocollo = 1+ NumeroProtocollo
	Else 
		Print "hai un codice protocollo non numerico"
	End If
 
	Goto Done
 
Done:
	uidoc.Refresh
 
End Sub

 domino...
Non ci sono problemi...
Ci sarebbero diversi commenti, ma il più importante è che il tuo codice non
crea un numero univoco perché non tiene conto di accessi concorrenti.
Guardati cosa ho risposto a DrAlecciandro come "canovaccio" applicativo.

i commenti e le critiche sono bene accette, in fondo ho "scroccato" dal
gruppo per diverso tempo, sempre traendone insegnamento.
come admin di domino non mi sento un guru, ma so fare qualcosina... come
programmer di certo mi sento come quelli che si installano office per la
prima volta e non sanno nemmeno salvare un documento.
il messaggio di DrAlecciandro, l'ho letto, ma non ho capito cosa devo
fare, di certo non ti voglio sottrarre tempo in attesa di un tuo aiuto,
ma se me lo volessi dare, sappi che quello che non ho capito e' come
fare il "lock" del documento.
ciao
kalos


Guarda che non c'è nessun bisogno di giustificazioni.
Devi semplicemente fare un ciclo do while che al suo interno carica il doc
contatore incrementandone il campo e che al posto della condizione del while
ha doc.Save(False, False)
Quando esci dal ciclo hai in una variabile di comodo il numero univoco, in
quanto, se un'altro utente ha salvato il doc tra la tua apertura ed il tuo
salvataggio, la doc.save non salva niente e restituisce False facendoti
ripetere il ciclo.
L'ho visto funzionare con centinaia di utenti.

L'ho visto
funzionare con centinaia di utenti.
crea un milione di numeri per il
protocollo sanitario della lombardia all'anno e non ceffa un colpo!
--------------------------------
Inviato via 
http://usenet.iol.it
 

ecco perche'....
io infatti avevo aggiunto Call doc.Save(False, False) ma non nel ciclo
do while...
solo alla fine della sub.

l'ho modificato cosi', ma non funziona... non capisco.
il ciclo do while, lo devo mettere prima di creare il numero
progressivo?
non ti mettere a ridere, ma non ci ho capito una mazza.
magari con un esempio, non ti rompo piu'...
inoltre, avevo pensato di mettere il
		Call doc.Save(False, False)
nell'evento "exiting" del campo dove scrivo il numero di protocollo, ma
non mi funziona...
p.s. comunque a me serve per il protocollo della scuola... 
Sub Click(Source As Button)
	Dim session As New NotesSession
	Dim workspace As New NotesUIWorkspace     
	Dim db As NotesDatabase
	Dim doc As NotesDocument
	Dim uidoc As NotesUIDocument
	Dim view As NotesView
	Dim viewdoc As NotesDocument
	Dim NumeroProtocollo As Long
 
     'prende il nome del database corrente
	Set db = session.CurrentDatabase
 
     'prende il nome del documento corrente
	Set uidoc = workspace.CurrentDocument
	Set doc = uidoc.Document
 
     'trova il documento che contiene il valore Protocollo + alto
	ViewName = "(Protocolli)"
	Set view = db.GetView( ViewName )
	Set viewdoc = view.GetFirstDocument
 
	On Error Goto Done
 
	NumeroProtocollo = ViewDoc.LavoroProtocollo(0)
 
     'Genera il nuovo protocollo
-----
	Do
			Call doc.Save(False, False)
	While
-----


 p.s. comunque a me serve per il protocollo della scuola...
Ma quanti anni hai?
Così dovrebbe andare... tra l'altro mi ero confuso perché nella condizione
del while ci va un not:
Sub Click(Source As Button)
Dim session As New NotesSession
Dim workspace As New NotesUIWorkspace
 Dim db As NotesDatabase
Dim doc As NotesDocument
Dim uidoc As NotesUIDocument
Dim view As NotesView
Dim viewdoc As NotesDocument
Dim NumeroProtocollo As Long
     'prende il nome del database corrente
Set db = session.CurrentDatabase
     'prende il nome del documento corrente
Set uidoc = workspace.CurrentDocument
Set doc = uidoc.Document
     'trova il documento che contiene il valore Protocollo + alto
ViewName = "(Protocolli)"
Set view = db.GetView( ViewName )
     'Genera il nuovo protocollo
Do
Set viewdoc = view.GetFirstDocument
If Isnumeric(ViewDoc.LavoroProtocollo(0)) Then
ViewDoc.LavoroProtocollo = ViewDoc.LavoroProtocollo(0) + 1
else
ViewDoc.LavoroProtocollo = 1
endif
While Not doc.Save(False, False)
call uidoc.FieldSetText("NumeroProtocollo",
CStr(ViewDoc.LavoroProtocollo(0)))
End Sub
PS Comunque si fa in QuerySave di solito, quindi ti consiglio di farne una
funzione da richiamare dove e quando vuoi.

Supponevo di dire una cosa scontata, ... tanto non mi conoscete e non mi 
rovino la reputazione,.
Nella mia relatà, una ventina di utenti, ho risolto il problema con due 
righe nel campo calcolato in composizione contenete il Codice univoco.
Il documento è stato creato al momento della creazione del datatabase,e a 
detto documento accedo con  il codice UIDOC.
Continuerò a seguirvi; se non potyrò insegnarvi potrò imparare.
Ciao e grazie.
Nando

di anni ne ho 31, e lavoro in sicilia, dove le installazioni di lotus
domino sono come le mosche bianche.
lavoro come freelance... e cerco di arrotondare.


 lavoro come freelance... e cerco di arrotondare.
A!
Scusa ma mi era venuto un dubbio...
Su, verso vicenza, c'č una scuola dove hanno fatto sviluppare il sito agli
studenti in Domino.

si devo averlo letto su una delle riviste che la lotus mi mandava a casa
e ora non mi arriva piu'...
cmq grazie per l'esempio dello script del protocollo.


 cmq grazie per l'esempio dello script del protocollo.
Di niente...
Quello che ci interessa è di avere una comunità che si aiuti.
Magari domani puoi darmi qualche dritta tu ;-)