Informations entre 2 vues

Forum destiné aux questions sur le développement : Formules, LotusScript, Java ...

Messagepar edcj » 21 Déc 2010 à 16:11

Salut à tous, un grand merci pour votre aide.
Voici un exemple de code qui fonctionne entre 2 bases, traitement calculer le total pour une même clé depuis une 2 ème base et mettre à jour ce total dans une autre base (base en cours), le traitement s'appuie sur 2 vues indexés selon vos besoins.
Cordialement

Sub Initialize

On Error Goto ErrorHandler

Dim s As New NotesSession
Dim db1 As NotesDatabase, db2 As NotesDatabase
Dim view1 As NotesView, view2 As NotesView
Dim dc2 As NotesDocumentCollection
Dim doc1 As NotesDocument, doc2 As NotesDocument
Dim prefix As String,ticket As String, cle As String, clelue As String
Dim total As Double,hr As Double
Dim server As String,bases As String
Dim vue1 As String, vue2 As String

'Initialisation Serveur
server ="NOM du SERVEUR"
'Initialisation 2ème Base
bases = "iExtensions\IENTime.nsf"
'Initialisation1ère vue de la base en cours
vue1= "(AllTickets)"
'Initialisation 2ème vue de la 2ème Base
vue2= "(Intervention Par Ticket)"

' instancier la vue des docs Demande INTERVENTION de la base courante
Set db1 = s.CurrentDatabase
Set view1 = db1.GetView(vue1)
If view1 Is Nothing Then
Msgbox "Erreur déclaration 1ère vue base en cours..."
Exit Sub
End If
' instancier la vue des docs detail Des Fiches D'Intervention dans la base 2 (sur le même serveur)
Set db2 = New NotesDatabase(server, bases )
If Not db2.IsOpen Then
Msgbox "Erreur déclaration serveur..."
Exit Sub
End If

Set view2 = db2.GetView(vue2 )
If view2 Is Nothing Then
Msgbox "Erreur déclaration 2ème vue 2ème base..."
Exit Sub
End If

' Parcourir les docs Demandes D'Intervention
Set doc1 = view1.GetFirstDocument()
While Not doc1 Is Nothing
' remettre le compteur à 0 quand on change de doc Demande Intervention
total = 0
' Rechercher les docs detail associés
prefix = doc1.GetItemValue("IENTicketPrefix")(0)
ticket = doc1.GetItemValue("IENTicket")(0)
cle = prefix+ticket

' Set dc2 = view2.GetAllDocumentsByKey( cle, True )
' Parcourir les docs detail pour calculer le total
Set doc2 = view2.GetDocumentByKey(cle)
While Not doc2 Is Nothing
' incrémenter le compteur
clelue = doc2.GetItemValue("css_ticket_display")(0)
'test si même clé
If Not cle = clelue Goto suite
'Totalisation Heures
hr = doc2.GetItemValue("IENTime")(0)
total = total + hr

' passer au doc detail suivant
Set doc2 = view2.GetNextDocument(doc2)
Wend

suite:
' mettre à jour le doc Demande Intervention

Set item= doc1.ReplaceItemValue("IENUserHelpSysNumber03Value",total)
Call doc1.Save(True,True)
' passer au doc Demande Intervention Suivante
Set doc1 = view1.GetNextDocument(doc1)
Wend

Exit Sub

ErrorHandler :
Msgbox "Erreur n° " & Err & " dans 'CalculTotal' à la ligne " & Erl & " : " & Error
Exit Sub
End Sub
edcj
Premier posts
Premier posts
 
Message(s) : 44
Inscrit(e) le : 26 Jan 2009 à 14:29

Messagepar roubech » 21 Déc 2010 à 21:19

pourquoi pour la 2ème boucle tu instancies une collection, mais tu ne la parcours pas (comme je t'ai montré dans mon exemple), tu reparcours la vue en testant ta clé à chaque fois ?
Avatar de l’utilisateur
roubech
Modérateur
Modérateur
 
Message(s) : 4976
Inscrit(e) le : 01 Fév 2007 à 20:22
Localisation : Lille

Messagepar edcj » 27 Déc 2010 à 20:58

Salut Roubech,
Excuses pour le retard, je n'ai pas consulté mes messages.
J'ai refait un test comme tu me l'as conseillé, mais le résultat n'est pas bon.
Ma clé est bonne, mais à la sortie du getalldocumentbykey, j'ai zéro documents, j'ai mis un msgbox après le while not suivant, mais çà ne rentre pas dans la boucle, tous mes documents sont réécrits avec zéro. Je pense que le pb vient du getalldocumentbykey.
Salutations

Set dc2 = view2.GetAllDocumentsByKey( cle, True )
' Parcourir les docs detail pour calculer le total
Set doc2 = dc2.GetFirstDocument()

While Not doc2 Is Nothing
' incrémenter le compteur
'Totalisation Heures
hr = doc2.GetItemValue("IENTime")(0)
total = total + hr
' passer au doc detail suivant
Set doc2 = view2.GetNextDocument(doc2)
Wend
edcj
Premier posts
Premier posts
 
Message(s) : 44
Inscrit(e) le : 26 Jan 2009 à 14:29

Messagepar edcj » 27 Déc 2010 à 21:18

Salut Roubech,
J'ai trouvé le pourquoi, j'avais changé la clé de ma vue entre temps, mais il y avait d'autres petites erreurs par rapport à ton code que j'ai corrigé, je mettrai la dernière version optimisée en ligne,
çà m'a permis de tester plusieurs solutions, merci, à bientôt
edcj
Premier posts
Premier posts
 
Message(s) : 44
Inscrit(e) le : 26 Jan 2009 à 14:29

Messagepar edcj » 27 Déc 2010 à 21:37

Bonjour à tous,

Voici la dernière version qui fonctionne avec Getalldocumentsbykey.
Merci de votre collaboration

Pour Roubech, peux tu me dire comment faire pour mettre le code en ligne comme tu l'as fait avec les couleurs (identique à la copie du code LS), çà sera plus visible pour tout le monde , merci

Cordialement

[syntax="LotusScript"]Sub Initialize

On Error Goto ErrorHandler

Dim s As New NotesSession
Dim db1 As NotesDatabase, db2 As NotesDatabase
Dim view1 As NotesView, view2 As NotesView
Dim dc2 As NotesDocumentCollection
Dim doc1 As NotesDocument, doc2 As NotesDocument
Dim cle As String, clelue As String
Dim total As Double,hr As Double
Dim server As String,bases As String
Dim vue1 As String, vue2 As String

'Initialisation Serveur
'----------------------------
server ="NON SERVEUR"

'init bases
'base1 par présence de l'agent dans une base sur le même serveur
'base1 = "iExtensions\IENhelpdesk.nsf" = Demande INTERVENTION
'Base2= "iExtensions\IENTime.nsf" = Base Temps
bases = "iExtensions\IENTime.nsf"

'Initialisation Vues
'------------------------
vue1= "(AllTickets)"
vue2= "(Intervention Par Ticket)"

'init champs recherchées pour comparer les clés
'------------------------------------------------------------------
rcle= "IENTicketDocumentUniqueID"

'Init des champs , cchamp calcul, champ mise à jour
'-----------------------------------------------------------------------
'Initialisation champ à cumuler
cumchamp= "IENTime"
'Initialisation champ à mettre à jour
majchamp="IENUserHelpSysNumber03Value"

' instancier la vue de la base courante
Set db1 = s.CurrentDatabase
Set view1 = db1.GetView(vue1)
If view1 Is Nothing Then
Msgbox "Erreur déclaration 1ère vue base en cours..."
Exit Sub
End If
' instancier la vue des docs detail dans la base 2
Set db2 = New NotesDatabase(server, bases )
If Not db2.IsOpen Then
Msgbox "Erreur déclaration serveur..."
Exit Sub
End If

Set view2 = db2.GetView(vue2 )
If view2 Is Nothing Then
Msgbox "Erreur déclaration 2ème vue 2ème base..."
Exit Sub
End If

' Parcourir les docs Base 1
Set doc1 = view1.GetFirstDocument()
While Not doc1 Is Nothing
' remettre le compteur à 0 quand on change de clé
total = 0
' Rechercher les docs detail associés
cle= doc1.GetItemValue(rcle)(0)

' Parcourir les docs detail base2 pour calculer le total
Set dc2 = view2.GetAllDocumentsByKey( cle, True )
Set doc2 = dc2.GetFirstDocument()
While Not doc2 Is Nothing
' incrémenter le compteur
'Totalisation Heures
hr = doc2.GetItemValue(cumchamp)(0)
total = total + hr
' passer au doc detail suivant base 2
Set doc2 = dc2.GetNextDocument(doc2)
Wend

' mettre à jour le doc de base 1
Set item= doc1.ReplaceItemValue(majchamp,total)
Call doc1.Save(True,True)
' passer au doc suivant de la base 1
Set doc1 = view1.GetNextDocument(doc1)
Wend

Exit Sub

ErrorHandler :
Msgbox "Erreur n° " & Err & " dans 'CalculTotal' à la ligne " & Erl & " : " & Error
Exit Sub
End Sub[/syntax]
edcj
Premier posts
Premier posts
 
Message(s) : 44
Inscrit(e) le : 26 Jan 2009 à 14:29

Messagepar roubech » 28 Déc 2010 à 20:38

tu sélectionnes le texte en question et tu choisit le language correspondant dans la liste de choix (au dessus de la zone de saisie de texte, pas en réponse rapide)
Avatar de l’utilisateur
roubech
Modérateur
Modérateur
 
Message(s) : 4976
Inscrit(e) le : 01 Fév 2007 à 20:22
Localisation : Lille

Messagepar edcj » 28 Déc 2010 à 23:17

Je te remercie, mais j'y arrive toujours pas, (en faisant nouvelle réponse, j'ai juste vu çà: [syntax="language"]// code[/syntax], mais pas de liste). Ce n'est pas bien grave, par contre toujours concernant mon code, j'ai créé un sujet "erreur 13 mismatch, peux tu jeter un oeil stp. Cordialement
edcj
Premier posts
Premier posts
 
Message(s) : 44
Inscrit(e) le : 26 Jan 2009 à 14:29

Messagepar roubech » 29 Déc 2010 à 21:03

entre la liste de boutons et la zonne de texte
Avatar de l’utilisateur
roubech
Modérateur
Modérateur
 
Message(s) : 4976
Inscrit(e) le : 01 Fév 2007 à 20:22
Localisation : Lille

Précédent

Retour vers Développement