WebQueryOpen

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

WebQueryOpen

Messagepar geraldb » 18 Mars 2011 à 11:53

Bonjour,

La doc sur "DocumentContext property" dit :

« Pour un agent exécuté à partir d'un navigateur avec @Command[ToolsRunMacro], le document en mémoire est le document en cours.
Dans le cas de WebQueryOpen, c'est le document avant que Domino ne le convertisse en HTML et ne l'envoie au navigateur... »

Ce que je souhaite, c'est de récupérer le dernier document créé (cf pj), incrémenter un compteur (pris dans ce dernier document) et créer un nouveau document.
Ceci afin de réserver le document en cours à l'utilisateur.
Je voudrais que le nouveau compteur ( NumDme ) apparaisse dans le masque ce qui n'est pas le cas :(

Merci de votre aide :)

Le script :

Code : Tout sélectionner
Sub Initialize   
   Dim s As New NotesSession
   Dim db As NotesDatabase
   Set db = s.currentdatabase
   'vue repertoriant les numero des demandes
   Dim viewNumDme As notesview
   Set viewNumDme = db.getview("VueNumDmes")
   
' -----------------------------------------------------------------------------------------------------------------
' Calcul du N° de commande à utiliser
' -----------------------------------------------------------------------------------------------------------------       
   Dim docNum As NotesDocument
   Dim mNumDme   As String
   Dim mKeyAnnee As String
   Dim mNum As Integer   
   
'recuperation de l annee en cours
   Dim dateTime As New NotesDateTime( "" )
   dateTime.LSLocalTime = Now
   
   Dim sdatetime As String
   sdatetime = dateTime.DateOnly
   mKeyAnnee = Mid$( sDateTime, 7, 4)    
   
   mNumDme = ""      'Init du numero de demande du doc en cours
   
      ' on calcule un nouveau numéro
    ' Recherche dans les commandes de l annee   
   Set docNum = viewNumDme.GetDocumentByKey( mKeyAnnee , True)   
   ' Set docNum = s.DocumentContext
   
   'Si pas de commande pour cette annee, on commence à 1 (par exemple 2004-0001)
   If ( docNum Is Nothing ) Then
      mNumDme = mKeyAnnee + "-"  + "0000001"   
      
       ' Sinon on prend la derniere commande créée et on incremente
     ' La vue est triée ds l'ordre décroissant --> on prend le premier doc
      ' de la collection
   Else
      mStr = docNum.NumDme(0)
      ' extraction du Numero  + 1
      mNum = Cint( Right$( mStr, 7 ) ) + 1
      ' Reconstitution de la partie numérique du Numero commande completé avec des zero
      mStr = Left$( "0000000" , 7 - Len( Trim$ (Str$( mNum ) ) ) )  + Trim$ (Str$( mNum ) )
      mNumDme = mkeyannee + "-" + mStr   
   End If
' -----------------------------------------------------------------------------------------------------------------
' FIN Calcul du N° de commande à utiliser
' -----------------------------------------------------------------------------------------------------------------    
   
   Call docNum.ReplaceItemValue("NumDme", mNumDme)
   Msgbox "NumDme : " & docNum.NumDme(0)
   Call docNum.Save( True, False )
   
End Sub


[Admin] => il ya des balises pour insérer du code, c'est plus pratique à lire qu'un fichier texte
geraldb
Découvre Dominoarea
Découvre Dominoarea
 
Message(s) : 4
Inscrit(e) le : 18 Mars 2011 à 10:49

Messagepar Michael DELIQUE » 18 Mars 2011 à 13:25

salut

dédie une vue pour ton compteur trié par ordre décroissant et tu prend le premier !
Cordialement

Michael (SMS-Phobique)
----------------------------
"La théorie, c'est quand on sait tout et que rien ne fonctionne. La pratique, c'est quand tout fonctionne et que personne ne sait pourquoi."
Albert EINSTEIN
Avatar de l’utilisateur
Michael DELIQUE
Administrateur
Administrateur
 
Message(s) : 12183
Inscrit(e) le : 16 Déc 2004 à 10:36
Localisation : Paris/Cergy

Messagepar geraldb » 18 Mars 2011 à 15:25

Merci, mais je récupère bien le n° de compteur. Mon problème, c'est que je n'arrive pas à l'afficher à l'écran.
J'ai un masque dans lequel un champ nommé NumDme (calculé) existe et il n'est pas alimenté à l'affichage.
geraldb
Découvre Dominoarea
Découvre Dominoarea
 
Message(s) : 4
Inscrit(e) le : 18 Mars 2011 à 10:49

Messagepar Michael DELIQUE » 18 Mars 2011 à 15:33

re,

tu as essayé un truc du genre ?

call DocContext.replaceItemValue("compteur",valeurcompteur)
Cordialement

Michael (SMS-Phobique)
----------------------------
"La théorie, c'est quand on sait tout et que rien ne fonctionne. La pratique, c'est quand tout fonctionne et que personne ne sait pourquoi."
Albert EINSTEIN
Avatar de l’utilisateur
Michael DELIQUE
Administrateur
Administrateur
 
Message(s) : 12183
Inscrit(e) le : 16 Déc 2004 à 10:36
Localisation : Paris/Cergy

Messagepar geraldb » 18 Mars 2011 à 16:44

Le problème, c'est que le :
Set DocContext = session.DocumentContext me renvoie NULL !
geraldb
Découvre Dominoarea
Découvre Dominoarea
 
Message(s) : 4
Inscrit(e) le : 18 Mars 2011 à 10:49

Messagepar Michael DELIQUE » 18 Mars 2011 à 16:46

re,

je viens de realiser, le tools runmacro de ton agent meme s'il c'est agent est dans le webqueryopen n'aurra pas comme document context le form affiché mais l'agent lancé.

si tu m'en disais plus sur ce que tu veux faire

tu lance bien tes traitement via un navigateur web ? c'est pas du dev client lourd ?
Cordialement

Michael (SMS-Phobique)
----------------------------
"La théorie, c'est quand on sait tout et que rien ne fonctionne. La pratique, c'est quand tout fonctionne et que personne ne sait pourquoi."
Albert EINSTEIN
Avatar de l’utilisateur
Michael DELIQUE
Administrateur
Administrateur
 
Message(s) : 12183
Inscrit(e) le : 16 Déc 2004 à 10:36
Localisation : Paris/Cergy

Messagepar geraldb » 18 Mars 2011 à 17:48

C'est bien pour du traitement web.
Le besoin d'utiliser le WebQueryOpen est le suivant :
Actuellement, si 2 utilisateurs appellent un formulaire presqu'en même temps, ce formulaire sera préchargé avec le même n° de demande (par exemple : 16).
La sauvegarde des 2 formulaires sera effectuée sous le même n° : 16.

Avec le WebQueryOpen, je peux incrémenter immédiatement le compteur de formulaire lors de l'affichage.
En conséquence, je ne devrais plus avoir de doublons.
geraldb
Découvre Dominoarea
Découvre Dominoarea
 
Message(s) : 4
Inscrit(e) le : 18 Mars 2011 à 10:49

Messagepar Michael DELIQUE » 18 Mars 2011 à 17:50

dis moi la variable doccontext tu l'a bien instancié ?

set DocContext = Session.documentcontexy
Cordialement

Michael (SMS-Phobique)
----------------------------
"La théorie, c'est quand on sait tout et que rien ne fonctionne. La pratique, c'est quand tout fonctionne et que personne ne sait pourquoi."
Albert EINSTEIN
Avatar de l’utilisateur
Michael DELIQUE
Administrateur
Administrateur
 
Message(s) : 12183
Inscrit(e) le : 16 Déc 2004 à 10:36
Localisation : Paris/Cergy

Messagepar roubech » 18 Mars 2011 à 22:59

pour le compteur, tu as le choix de,
soit te baser sur les docs eux même,
soit stocker le compteur dans un doc dédié, que tout le monde modifie à chaque nouveau document comme tu as choisit de le faire.
Dans les 2 cas, il faut éviter d'avoir 2 docs avec le même numéro et en générale on souhaite que les numéros se suivent (sans trou)
Si 2 personnes créent un doc en même temps, en plus du riisque d'avoir le même numéro, avec la solution du doc compteur, tu risques aussi de créer un conflit lors de l'enregistremnt du doc compteur
De plus, tu as fait le choix d'incrémenter le compteur à l'ouverture du formulaire pour créer un nouveau doc. Si l'utilisateur n'enregistre pas le doc finalement, ton compteur aura quand même été incrémenté, et tes numéros de docs ne seront plus consécutifs.
Mais si tu n'enregistre pas le nouveau compteur lors de l'ouverture, je suis d'accord que entre le moment où le user 1 ouvre le formulaire et le moment où il enregistre le doc et sauve le nouveau compteur, plusieurs users peuvent crééer des docs.
Donc si tu n'a pas besoin d'afficher le numéro de la fiche lors de la création, je recommande de calculer le numéro lors du premier enregistrement. Dans ce cas, à la fin de la sauvegarde, tu peux afficher un message du genre "votre demande a été enregistrer sous le numéro xxx. Pour revenir à la vue xxx cliquer ici"

sinon, pour en revenir à ton code, il est appelé comment exactement ?
Tu ouvres ton masque avec une url du genre MonMasque?OpenForm
Dans le WebQueryOpen du masque, tu lances l'agent avec @Command([ToolsRunMacro]; "MonAgentWQO")
Et ce code est dans le initialize de cet agent ?
Dans ce code, je vois que tu récupères le docNum, que tu incrémentes le compteur et que tu sauves le docNum. Mais je ne vois nul part l'instanciation du doc courant avec set docContext = session.DocumentContext et l'affectation de la valeur calculé avec call DocContext.replaceItemValue("compteur", docNum.NumDme(0))
Avatar de l’utilisateur
roubech
Modérateur
Modérateur
 
Message(s) : 4976
Inscrit(e) le : 01 Fév 2007 à 20:22
Localisation : Lille

Messagepar roubech » 18 Mars 2011 à 23:12

ah non, je viens de relire ton code, il semblerait que c'est pas le 2ème choix, mais bien le 1er : tu parcoures les commande pour trouver le numero de la dernière et l'incrémenter.
Mais le pb c'est que
1°) si le GetDocumentByKey ne trouve pas de doc, docNum is nothing et donc tu aura une erreur d'exécution sur le call docNum.replaceItemValue ...
2°) docNum pointe vers la dernière commande créée. Quand tu es dans le WebQueryOpen, tu es en train d'ouvrir le masque pour créer une nouvelle commande, elle n'est pas encore enregistrée. Et c'est pour cette commande qu'il faut renseigner le compteur.
set docContext = session.DocumentContext
Call docContext.ReplaceItemValue("NumDme", mNumDme)
3°) dans le WebQueryOpen, il ne faut surtout pas faire un save du doc courant.
Avatar de l’utilisateur
roubech
Modérateur
Modérateur
 
Message(s) : 4976
Inscrit(e) le : 01 Fév 2007 à 20:22
Localisation : Lille

Messagepar Michael DELIQUE » 21 Mars 2011 à 08:45

salut Roubech

tu devrait faire un tips a propos du WQO et du save !
Cordialement

Michael (SMS-Phobique)
----------------------------
"La théorie, c'est quand on sait tout et que rien ne fonctionne. La pratique, c'est quand tout fonctionne et que personne ne sait pourquoi."
Albert EINSTEIN
Avatar de l’utilisateur
Michael DELIQUE
Administrateur
Administrateur
 
Message(s) : 12183
Inscrit(e) le : 16 Déc 2004 à 10:36
Localisation : Paris/Cergy


Retour vers Développement

cron