Attacher un document à une tâche via une recherche

01/03/2018

Introduction

Cet article décrit comment attacher un document à une tâche au travers d’une action ouvrant un formulaire de recherche. En effet, par défaut, les documents pouvant être attachés à une tâche ne peuvent provenir que du poste local.

Prérequis :

  • Notion de Javascript
  • Formulaire de recherche
  • Tâche existante dont l’une des pièces jointes peut être modifiée

Place au script !

Commençons par ouvrir la console Javascript de Google Chrome.

Ensuite copier/coller le script ci-dessous dans votre console et ouvrez une tâche.

var cardAPI = JSAPI.get().getCardAPI();
cardAPI.registerForAttachment(function(card, task, definition, component){
	addCustomActionOnCard(card, definition);
});

function addCustomActionOnCard(card, definition){
	var actionAPI = JSAPI.get().getActionFactoryAPI();
	var action = actionAPI.buildIcon("customAction", "fa-search", function(actionPresenter){
		openSearchTemplate(card, definition.getId());
    });   
    card.getActions().add(action);
}

function openSearchTemplate(card, attachmentId){
	JSAPI.get().getPopupAPI().openSearch("DOCUMENT","DefaultSearch" , function(component){
			attachToTask(attachmentId, component);
		} 
	);
}

function attachToTask(attachmentId, component){
	var event = new AddTaskAttachmentEvent(attachmentId, component);
	JSAPI.get().getLastComponentFormAPI().fireEvent(event);
}

Nous pouvons constater, qu’au niveau de la pièce jointe, un icône de recherche est apparu. Cliquez dessus et le formulaire de recherche spécifié (ici DefaultSearch) s’ouvre dans une popup. Effectuez votre recherche et sélectionnez un document.

Pour aller plus loin…

Ce type d’action, permettant l’ajout d’un composant existant en tant que pièce jointe d’une tâche, peut nécessiter une gestion plus fine des actions natives ajoutées par Flower.

  • Commmençons par ajouter la fonction suivante nous permettant d’activer ou de désactiver les actions en fonction du composant attaché :

    function updateActionsForAttachment(actions, attachment){
    	var attachmentIsValid = attachment != undefined;
    	actions.get("customAction").setEnabled(!attachmentIsValid);
    	actions.get("upload-attached").setEnabled(!attachmentIsValid);
    	actions.get("delete-attached").setEnabled(attachmentIsValid);
    }
    
  • Modifions la fonction openSearchTemplate afin de mettre à jour les actions après la sélection d’un résultat de recherche en ajoutant l’appel suivant :

    updateActionsForAttachment(card.getActions(), component);
    
  • Modifions l’abonnement à l’ajout de la carte pour réagir aux modifications effectuées au travers des actions natives en appelant la fonction suivante :

    function bindOnAttachmentChange(card){
    	card.registerForChange(function(attachment){
    		updateActionsForAttachment(card.getActions(), attachment);		
    	});
    }
    

Consultez la documentation pour plus de précisions :