Lier un bouton et un formulaire dans documentLibrary

cancel
Showing results for 
Search instead for 
Did you mean: 
seksam
Active Member

Lier un bouton et un formulaire dans documentLibrary

Bonjour à tous  Smiley Happy ,
Je me permets d'écrire car j'ai un petit problème. je voudrais ajouter un bouton dans l'espace documentaire de mon site ALfresco share afin d'ouvrir un formulaire que j'ai préalablement construit.

Je me suis servi du tutoriel suivant pour travailler:
http://edlovesjava.blogspot.com/2008/12/extending-share-2-adding-new-content.html
.
J'ai créé mon formulaire et j'arrive à y accéder sans problème  en utilisant le lien suivant:
http://@serveur:8080/share/service/components/documentlibrary/create-content?htmlid
J'ai aussi créé mon bouton et je peux le visualiser sans souci dans le site au niveau de l'espace documentaire.
Cependant, lorsque je clique sur le nouveau bouton que je viens d'ajouter, rien ne se passe. Le plus surprenant c'est que dans mon fichier log je n'ai aucune erreur Smiley Surprised .

Je voulais juste préciser que je n'ai pas, comme indiqué dans le tutoriel, créé un nouveau projet, j'ai directement travailler dans:
WEB-INF/classes/alfresco/site-webscripts/org/alfresco/components/documentlibrary
pour la création des fichiers.

Voici les différentes méthodes javascript que j'ai testé:
la première est la même que celle du tutoriel:
onNewContent: function DLTB_onNewContent(e, p_obj)
{
var actionUrl = YAHOO.lang.substitute(Alfresco.constants.PROXY_URI + "slingshot/doclib/action/folder/site/{site}/{container}/{path}",
{
site: this.options.siteId,
container: this.options.containerId,
path: this.currentPath
});

var doSetupFormsValidation = function DLTB_oNF_doSetupFormsValidation(p_form)
{
// Validation
// Name: mandatory value
p_form.addValidation(this.id + "-createContent-name", Alfresco.forms.validation.mandatory, null, "keyup");
// Name: valid filename
p_form.addValidation(this.id + "-createContent-name", Alfresco.forms.validation.nodeName, null, "keyup");
p_form.setShowSubmitStateDynamically(true, false);
};

if (!this.modules.createContent)
{
this.modules.createContent = new Alfresco.module.SimpleDialog(this.id + "-createContent").setOptions(
{
width: "30em",
templateUrl: Alfresco.constants.URL_SERVICECONTEXT + "components/documentlibrary/create-content",
actionUrl: actionUrl,
doSetupFormsValidation:
{
   fn: doSetupFormsValidation,
   scope: this
},
firstFocus: this.id + "-createContent-name",
onSuccess:
{
   fn: function DLTB_onCreateContent_callback(response)
   {
      var file = response.json.results[0];
      YAHOO.Bubbling.fire("folderCreated",
      {
         name: file.name,
         parentPath: file.parentPath,fileCopied
         nodeRef: file.nodeRef
      });
      Alfresco.util.PopupManager.displayMessage(
      {
         text: this._msg("message.new-content.success", file.name)
      });
   },
   scope: this
}
});
}
else
{
this.modules.createContent.setOptions(
{
actionUrl: actionUrl,
clearForm: true
});
}
this.modules.createContent.show();
},

La seconde est juste l'adaptation de la fonction onNewFolder du toolbar.js du repertoire documentLibrary
  
/**
       * New Content  button click handler
       *
       * @method onNewContent
       * @param e {object} DomEvent
       * @param p_obj {object} Object passed back from addListener method
       */
       onNewContent: function DLTB_onNewContent(e, p_obj)
      {
         var destination =  var destination = this.doclistMetadata.parent.nodeRef;

         // Intercept before dialog show
         var doBeforeDialogShow = function DLTB_onNewContent_doBeforeDialogShow(p_form, p_dialog)
         {
            Dom.get(p_dialog.id + "-dialogTitle").innerHTML = this.msg("label.new-content.title");
            Dom.get(p_dialog.id + "-dialogHeader").innerHTML = this.msg("label.new-content.header");
         };

         var templateUrl = YAHOO.lang.substitute(Alfresco.constants.URL_SERVICECONTEXT + "components/form?itemKind={itemKind}&itemId={itemId}&destination={destination}&mode={mode}&submitType={submitType}&formId={formId}&showCancelButton=true",
         {
            itemKind: "type",
            itemId: "cm:content",
            destination: destination,
            mode: "create",
            submitType: "json",
            formId: "create-content"
         });

         // Using Forms Service, so always create new instance
         var createContent = new Alfresco.module.SimpleDialog(this.id + "-createContent");

         createContent.setOptions(
         {
            width: "33em",
            templateUrl: templateUrl,
            actionUrl: null,
            destroyOnHide: true,
            doBeforeDialogShow:
            {
               fn: doBeforeDialogShow,
               scope: this
            },
            onSuccess:
            {
               fn: function DLTB_onNewContent_success(response)
               {
                  var contentName = response.config.dataObj["prop_cm_name"];
                  YAHOO.Bubbling.fire("folderCreated",
                  {
                     name: contentName,
                     parentNodeRef: destination
                  });
                  Alfresco.util.PopupManager.displayMessage(
                  {
                     text: this.msg("message.new-content.success", contentName)
                  });
               },
               scope: this
            },
onFailure:
            {
               fn: function DLTB_onNewContent_failure(response)
               {
                  if (response)
                  {
                     var contentName = response.config.dataObj["prop_cm_name"];
                     Alfresco.util.PopupManager.displayMessage(
                     {
                        text: this.msg("message.new-content.failure", contentName)
                     });
                  }
                  else
                  {
                     Alfresco.util.PopupManager.displayMessage(
                     {
                        text: this.msg("message.failure")
                     });
                  }
               },
               scope: this
            }
         }).show();
      },

Je vous avoue que le javascript et moi cela fait deux, mais si j'avais une erreur, j'aurais peut-être  su comment procéder  Smiley Surprisedops: .
Avez vous une idée? Est ce que les fonctions java script que j'utilise sont correctes?  :?:  :?:
Merci d'avance.
Cordialement.
2 Replies
garnett
Member II

Re: Lier un bouton et un formulaire dans documentLibrary

Bonjour seksam,

ton sujet m'intéresse énormément, je suis moi-même en train d'essayer de créer un bouton dans l'interface alfresco afin qu'il génère un formulaire.

Le problème c'est que je ne suis pas vraiment développeur et je n'ai pas grand monde pour m'aider. As-tu finalement trouvé une solution de ton côté ?

Je te serai gré de m'épauler, au moins pour la méthode à utiliser pour créer un nouveau bouton dans le menu de l'espace documentaire d'Alfresco.

Cordialement.
seksam
Active Member

Re: Lier un bouton et un formulaire dans documentLibrary

bonjour,
Je n'ai pas encore trouvé la solution. Cependant, pour ajouter un bouton tu peux déjà regarder sur le lien suivant:
http://edlovesjava.blogspot.com/2008/12/extending-share-2-adding-new-content.html
Tu dois te focaliser sur "step 2 - Create a new toolbar for Document Library adding the 'New Content' button"

Cependant, comme il ne s'agit pas de la même structure de dossier que l'Alfresco de base, je vais te donner un peu de précision sur les dossiers afin que tu ailles plus vite:

En bref pour créer un bouton dans l'espace documentaire  tu dois :
1-faire des modifications du fichier  /org/alfresco/components/documentlibrary
-toobar.get.desc.xml  (je n'ai pas touché ce fichier )
-toolbar.get.head.ftl (je n'ai pas touché ce fichier)

-  tu dois modifier  modifier le fichier include/toolbar.lib.ftl (au lieu de toolbar.get.html.ftl. Tu constateras que toolbar.get.html.ftl inclut toolbar.lib.ftl)et ajouter des lignes qui ressemblent à:

         <div class="hideable toolbar-hidden DocListTree">
           <div class="new-content"><button id="${el}-newContent-button" name="newContent">${msg("button.new-content")}</button></div>
           <div class="separator hideable DocListTree"> </div>

- modifier le fichier toolbar.properties en conséquence (définir le button.new-content  et message.new-content)
A ce niveau normalement ton bouton devrait déjà se voir
3-  dans le repertoire  /share/components/documentlibrary/ (il y'a plusieurs repertoires components, pour t'aider tu complètes le javascript qui se trouve au même endroit que le fichier toolbar.css)
- tu ajoutes le javascript dans toolbar.js
- tu ajoutes le css dans toolbar.css
4-/org/alfresco/components/documentlibrary/images  tu dois t'assurer que les images définies dans le css existent bien.

Normalement, avec le tutoriel et mes quelques explications tu devrais déjà avoir un jolie bouton sur l'espace documentaire. Si tu as besoin de plus d'informations n'hésite pas. Et si tu trouves une solution pour le javascript fais moi signe.

PS: Ne redéfinis pas les fichiers de share, contentes toi juste d'ajouter ce dont tu as besoin. De plus pour voir afficher le bouton tu n'as pas besoin en premier lieu du javascript. Mais je te mets tous les répertoires au cas où.
Oublies pas de redémarrer le serveur quand tu auras fait des modifications.
La démarche expliquée concerne Alfresco Share (je dis cela car en te relisant, j'ai eu un doute)
Bonne soirée et bon courage