Page 1 sur 1

[RESOLU] Xpage:PB d'affichage d'image dans un repeat control

MessagePublié: 11 Juil 2012 à 15:35
par lebanner
Bonjour a tous,

Je continu mon apprentissage sur la version 8 de Lotus mais j'ai un petit souci que je n'arrive pas à résoudre.
J'ai une Xpage dans laquelle j'ai ajouté un contrôle repeat qui se base sur une vue Domino.
J'ai un masque qui comprend 3 champs : 1 champ "Nom", 1 champ "Photo" et 1 champ "Description". L'ensemble des documents enregistrés avec ce masque se trouve dans la vue en question.
Au niveau du contrôle repeat, je souhaite afficher l'image que j'ai inséré dans chaque document mais je n'y arrive pas. J'arrive à afficher dans mon contrôle le champ Nom et Description mais le champ "Photo" pose problème.

Voici une partie du code :
- la ressource
Code : Tout sélectionner
<xp:this.data>
      <xp:dominoView var="Support" viewName="NomDeLaVue"></xp:dominoView>
   </xp:this.data>

- le contrôle repeat :
Code : Tout sélectionner
<xp:repeat id="repeatSupport" rows="30" value="#{Support}" var="S">
   <xp:panel styleClass="friendsPanel">
         <xp:table style="width:175.0px">
               <xp:tr>
                  <xp:td style="text-align:center">
                  <xp:text escape="true" id="computedField2" value="#{S.Nom_Lotus}">
                  </xp:text>
                  </xp:td>
               </xp:tr>
               <xp:tr>
                  <xp:td>
                  '///////ICI MON IMAGE EN AUTOMATIQUE
                  </xp:td>
               </xp:tr>
               ..............................................................
            </xp:table>
         </xp:panel>
      </xp:repeat>


Je ne sais pas si je suis clair mais est ce que quelqu'un aurait-il une idée svp?

Merci d'avance
Cordialement

Re: Xpage:problème d'affichage d'image dans un repeat contro

MessagePublié: 11 Juil 2012 à 17:21
par lebanner
Je ne sais pas comment je peux récupérer la photo de façon automatique et l'afficher dans mon repeat control

Re: Xpage:problème d'affichage d'image dans un repeat contro

MessagePublié: 11 Juil 2012 à 20:37
par roubech
l'image est stockée en pièce jointe (attachment) ou coller (inline) dans un RichText ?
si PJ, voir pour stocker le nom de l'image lors de l'enregistrement et dans ton repeat tu pourra générer ton code img src= ...

Re: Xpage:problème d'affichage d'image dans un repeat contro

MessagePublié: 12 Juil 2012 à 07:07
par lebanner
Oui, l'image est stockée en pièce jointe dans le document.

Je pense que j'y suis presque, voici le code au niveau de mon image :
Code : Tout sélectionner
<xp:image id="image7" style="height:100px;width:100.0px">
            <xp:this.url>
            <![CDATA[#{javascript:"/" +
                  S.getUniversalID() + "/$FILE/" +
                  S.getColumnValue("NomDeMonChamp")}]]>
            </xp:this.url>
</xp:image>

Si je met le nom de l'image en dur à la place de S.getColumnValue("NomDeMonChamp"), l'image s'affiche dans la Xpage. Bon pour le moment, je n'y arrive pas mais j'avance

Cordialement

Re: Xpage:problème d'affichage d'image dans un repeat contro

MessagePublié: 12 Juil 2012 à 13:06
par roubech
s est de quel type ? NotesXspDocument ou NotesXspViewEntry ? ton champ est affiché contenant le nom du fichier est affiché dans la vue ?

Re: Xpage:problème d'affichage d'image dans un repeat contro

MessagePublié: 13 Juil 2012 à 10:14
par Fab2b
Salut,

Je me demande si le nom de colonne utilisé dans un S.getColumnValue n'est pas le nom programatique, celui que tu entre dans le dernier onglet des propriétés de la colonne....

Sinon, pour résoudre ton pb de récupération de nom de colonne, plutot que de boucler sur ta vue en directe passe au <xp:this.value> de ton repeater un vecteur contenant autant d'objet que tu as de lignes dans ta vue, et les objet sont de la forme :

obj.nom
obj.desc
obj.nomPhoto
obj.idDoc

tu fabrique ce vecteur en utilisant une fonction ssjs qui elle boucle sur les entrée de la vue (et pas les docs...) en utilisant un viewNavigator, ce que je n'ai pas fait dans l'ex que je te donne mais il faut !!! (pour les perf) :

Code : Tout sélectionner
 function sjsDashBoard_getMyAudits() {

   var listAudits = new java.util.Vector();
   var tempActors = new java.util.Vector();
   var viewAudit = database.getView("vwDash_AuditByActors");
   
   var naUser = session.createName(context.getUser().getDistinguishedName());
         
   var collEntry = viewAudit.getAllEntriesByKey(naUser.getCanonical(), false);
   
   //sjs_dashBoardDebug("--------------------------------Nb d'audit pour le usr courant : " + collEntry.getCount() + ", " + naUser.getCanonical())
   
   var e=collEntry.getFirstEntry();
   
   var i=0;
   while(e!=null && i <= 4 ){      
      
      var column:java.util.Vector = e.getColumnValues();      
      if( column != null  ) {   
                     
         var v = new Object();                  
         
         //Offices / Locations/ Contract
         tempActors=sjsTool_ConvertToVector(column.get(2));
         var tempStr = new String();
         for( var j=0; j<tempActors.size(); j++ ){
            if (tempActors[j]!=""){   
                if (tempStr !="" )
                   tempStr +=  ", "+ tempActors[j]  ;
                else
                   tempStr +=  tempActors[j]
             }                   
           }              
           v.office = tempStr;       
           //Location
           tempActors=sjsTool_ConvertToVector(column.get(3));
           tempStr = "";
         for( var j=0; j<tempActors.size(); j++ ){
            if (tempActors[j]!=""){   
                if (tempStr !="" )
                   tempStr +=  ", "+ tempActors[j]  ;
                else
                   tempStr +=  tempActors[j]
             }                   
           }   
           v.location = tempStr;
           //Contract
           tempActors=sjsTool_ConvertToVector(column.get(4));
           tempStr = "";
         for( var j=0; j<tempActors.size(); j++ ){
            if (tempActors[j]!=""){   
                if (tempStr !="" )
                   tempStr +=  ", "+ tempActors[j]  ;
                else
                   tempStr +=  tempActors[j]
             }                   
           }   
           v.contract = tempStr;
           //Referential
         v.type=column.get(5);
         //Status
         v.status= sjsTool_statusGetLabel("frmAudit", column.get(6));
         //Confirmed
         v.isconfirmed=((column.get(7)=="true")?true:false);
         //Start date         
         if (column.get(8) != null && column.get(8) != ""){
            var dt = session.createDateTime(column.get(8).toString());                     
            v.startDate = dt.toJavaDate();
         }
         //End date
         if (column.get(9) != null && column.get(9) != ""){
            var dt = session.createDateTime(column.get(9).toString());
            v.endDate=dt.toJavaDate();
         }
         //Lead auditor
         v.leadauditor=column.get(10);
         //Auditors
         tempActors=sjsTool_ConvertToVector(column.get(11));
         tempStr = "";
         for( var j=0; j<tempActors.size(); j++ ){
            if (tempActors[j]!=""){   
                if (tempStr !="" )
                   tempStr +=  ", "+ tempActors[j]  ;
                else
                   tempStr +=  tempActors[j];
             }                   
           }                  
           v.auditors = tempStr;
           //Lead auditee
         v.leadauditee=column.get(12);
         //Auditees
         tempActors=sjsTool_ConvertToVector(column.get(13));
         tempStr = "";
         for( var j=0; j<tempActors.size(); j++ ){
            if (tempActors[j]!=""){   
                if (tempStr !="" )
                   tempStr +=  ", "+ tempActors[j]  ;
                else
                   tempStr +=  tempActors[j];
             }                   
           }                  
           v.auditees = tempStr;
         v.id=column.get(14);
         v.number=column.get(15);
         //Overdue
         v.overdue=((column.get(16)=="true")?true:false);
         listAudits.add(v);   
         
         i++;   
      }
      
      
      e=collEntry.getNextEntry();
   }   
   if (e !=null )
      e.recycle();   
   
   return listAudits;
   
}


Ensuite ton repeater parcours ce vecteur et là tu utilise ta technique pour afficher la photo (qui aura le bon nom); même si je pense que tu ne doit pas être tres loin du résultat.

Pour l'affichage tu peux aussi utiliser cette technique, UL et LI avec un CSS :
http://www.timtripcony.com/blog.nsf/d6p ... TRY-7XD5P9


Fab.

Re: Xpage:problème d'affichage d'image dans un repeat contro

MessagePublié: 28 Août 2012 à 13:52
par lebanner
Bonjour a tous,

Le code que j'ai est OK sauf qu'au niveau du nom de champ, il faut mettre le nom de la colonne de la vue et tout est OK. Tout fonctionne.

Par contre, s'il s'agit d'une image qui est collée dans un rich text, comment fait-on pour récupérer le nom de l'image svp ?

Merci d'avance
Cordialement

Re: Xpage:problème d'affichage d'image dans un repeat contro

MessagePublié: 29 Août 2012 à 09:53
par lebanner
Bonjour a tous,

J'arrive à récupérer la photo qui a été copiée dans un champ richtext mais je n'arrive pas la redimensionner.
Est ce qu'il y aurait un moyen simple de le faire svp ?

Voici mon code pour récupérer l'image collée dans le richtext :
Code : Tout sélectionner
   <xp:this.data>
      <xp:dominoView var="view1" databaseName="Nomdelabase.nsf"
         viewName="Tous les utilisateurs">
      </xp:dominoView>
   </xp:this.data>

   <xp:repeat id="repeat1" rows="30" value="#{view1}" var ="view1">
      <xp:panel>
         <xp:this.data>
            <xp:dominoDocument var="Fiche"
               databaseName="Nomdelabase.nsf"
               documentId="#{javascript:view1.getNoteID()}" formName="Fiche"
               action="openDocument">
            </xp:dominoDocument>
         </xp:this.data>
         <xp:inputRichText id="inputRichText1"
            value="#{Fiche.UserExtPhoto}">
         </xp:inputRichText>
      </xp:panel>
   </xp:repeat>


Sans passer par un inputrichtext, je n'arrive pas à afficher la photo...

Merci d'avance
Cordialement

Re: Xpage:problème d'affichage d'image dans un repeat contro

MessagePublié: 03 Sep 2012 à 07:09
par lebanner
Bonjour a tous,

Le problème est résolu.
Je redimensionne les images via le CSS tout en gardant mon inputrichtext. C'est le seul moyen que j'ai trouvé...
Le Lotus génère automatiquement du HTML, j'ai repris les class générées et j'ai affecté des dimensions à toutes les images.

Cordialement