Chapitre 6 Intégration d'un document Dynacase Document UIs dans une interface riche

Le but est ici de manipuler le document depuis une autre interface. Il est ainsi possible de présenter des documents dans une interface spécifique, ainsi que de les manipuler simplement, sans devoir injecter de code dans la famille manipulée.

6.1 Principe

Ce tutoriel est livré avec une interface minimaliste de gestion des contacts, accessible à l'adresse http://localhost:8080/?app=SIMPLE_LIST.

Cette application affiche en colonne de gauche tous les documents de la famille Contact.

Pour simplifier le déroulement de ce chapitre, l'application génère déjà des événements et en écoute d'autres, aussi l'objet de ce chapitre est-il uniquement de manipuler le document lui-même.

Application de gestion des contacts

Figure 13. Application de gestion des contacts

6.2 Mise en œuvre

6.2.1 Chargement d'un document

Lors du clic sur une fiche résumé, l'application déclenche un événement documentElementClicked sur la window. Nous allons écouter cet événement et afficher le document dans la zone .documentWrapper.

6.2.1.1 Récupération des sources

Les sources avant cette étape correspondent au tag step-50-00.

6.2.1.2 Code

Dans le fichier SIMPLE_LIST/Layout/custom.js, ajoutons un écouteur de l'événement documentElementClicked, qui charge le document demandé.

Créons également la méthode addDocumentListeners, déclenchée lors de l'initialisation du widget, et chargée d'attacher les écouteurs d'événements au widget. En particulier, cette méthode écoute l'événement ready du widget pour signaler à l'application que ce document est affiché.

var loadDocument = function loadDocument(fetchOptions)
    {
        //check if the widget has already been initialised
        if (_.isUndefined($documentWrapper.document("instance"))) {
            //if not, initialize it
            $documentWrapper.document(fetchOptions)
                //and attach listeners to the newly created widget
                .on("documentloaded", addDocumentListeners);
        } else {
            //if yes, reuse it
            $documentWrapper.document("fetchDocument", fetchOptions);
        }
    },
    addDocumentListeners = function addDocumentListeners()
    {
        // propagate that this document is opened each time it is reloaded
        $documentWrapper.document(
            "addEventListener",
            "ready",
            {
                "name": "ready.simple_list"
            },
            function simpleList_propagateReady(event, documentObject)
            {
                // refresh the currently selected document
                $window.trigger('documentOpened', $documentWrapper.document("getProperties"));
            }
        );
    };
 
$window.on('documentElementClicked', function onDocumentElementClicked(event, options)
{
    var fetchOptions = {
        "initid": options.initid,
        "viewId": "!defaultConsultation"
    };
    loadDocument(fetchOptions)
});

6.2.1.3 Déploiement

Les sources telles que déployées à cette étape correspondent au tag step-50-10.

Le déploiement se fait au moyen du developer toolkit (pour plus d'explications sur les outils de développement, se rendre sur leur documentation).

La commande est donc :

  • pour linux :

    php dynacase-devtool.phar deploy -u localhost -p 8080 -c dynacase -s path/to/sources --auto-release
  • pour windows :

    dynacase-devtool.bat deploy -u localhost -p 8080 -c dynacase -s path/to/sources --auto-release

6.2.1.4 Le résultat

Depuis l'application à l'adresse http://localhost:8080/?app=SIMPLE_LIST, un clic sur un document de la liste de gauche l'ouvre dans la zone de droite.

6.2.2 Écoute des modifications du document

Nous allons réagir à l'événement change du widget.

6.2.2.1 Récupération des sources

Les sources avant cette étape correspondent au tag step-50-10.

6.2.2.2 Code

Enrichissons la méthode addDocumentListeners du fichier SIMPLE_LIST/Layout/custom.js en écoutant l'événement change du widget pour signaler à l'application que ce document est modifié :

// propagate that this document has changed
$documentWrapper.document(
    "addEventListener",
    "change",
    {
        "name": "change.simple_list"
    },
    function simpleList_propagateChange(event, documentObject)
    {
        $window.trigger('documentChanged', documentObject);
    }
);

Ici, nous nous contentons de déclencher l'événement en charge de la mise à jour de l'application. Le comportement de l'application étant en dehors du scope de ce tutoriel, son contenu n'est pas présenté. Il est néanmoins accessible dans le code source dans le fichier SIMPLE_LIST/Layout/main.js.

6.2.2.3 Déploiement

Les sources telles que déployées à cette étape correspondent au tag step-50-20.

Le déploiement se fait au moyen du developer toolkit (pour plus d'explications sur les outils de développement, se rendre sur leur documentation).

La commande est donc :

  • pour linux :

    php dynacase-devtool.phar deploy -u localhost -p 8080 -c dynacase -s path/to/sources --auto-release
  • pour windows :

    dynacase-devtool.bat deploy -u localhost -p 8080 -c dynacase -s path/to/sources --auto-release

6.2.2.4 Le résultat

Depuis l'application à l'adresse http://localhost:8080/?app=SIMPLE_LIST, lors de la modification d'un document ouvert, le statut modifié (matérialisé par une astérisque jaune) est reporté dans la liste de gauche.

6.2.3 Écoute de la sauvegarde d'un document

Nous allons réagir à l'événement afterSave du widget.

6.2.3.1 Récupération des sources

Les sources avant cette étape correspondent au tag step-50-20.

6.2.3.2 Code

Enrichissons la méthode addDocumentListeners du fichier SIMPLE_LIST/Layout/custom.js en écoutant l'événement afterSave du widget pour signaler à l'application que ce document a été sauvegardé :

// propagate that this document has been saved
$documentWrapper.document(
    "addEventListener",
    "afterSave",
    {
        "name": "afterSave.simple_list"
    },
    function simpleList_propagateAfterSave(event, documentObject)
    {
        $window.trigger('documentSaved', documentObject);
    }
);

Ici, nous nous contentons de déclencher l'événement en charge de la mise à jour de l'application. Le comportement de l'application étant en dehors du scope de ce tutoriel, son contenu n'est pas présenté. Il est néanmoins accessible dans le code source dans le fichier SIMPLE_LIST/Layout/main.js.

6.2.3.3 Déploiement

Les sources telles que déployées à cette étape correspondent au tag step-50-30.

Le déploiement se fait au moyen du developer toolkit (pour plus d'explications sur les outils de développement, se rendre sur leur documentation).

La commande est donc :

  • pour linux :

    php dynacase-devtool.phar deploy -u localhost -p 8080 -c dynacase -s path/to/sources --auto-release
  • pour windows :

    dynacase-devtool.bat deploy -u localhost -p 8080 -c dynacase -s path/to/sources --auto-release

6.2.3.4 Le résultat

Depuis l'application à l'adresse http://localhost:8080/?app=SIMPLE_LIST, lors de la modification du nom ou du prénom d'un contact, le nouveau titre est reporté dans la liste de gauche après la sauvegarde du document.

6.2.4 Affichage de l'interface de création

Lors du clic sur le bouton Nouveau Contact, l'application déclenche un événement buttonCreateClicked. Écoutons cet événement et affichons l'interface de création dans la zone .documentWrapper.

6.2.4.1 Récupération des sources

Les sources avant cette étape correspondent au tag step-50-30.

6.2.4.2 Code

Dans le fichier SIMPLE_LIST/Layout/custom.js, ajoutons un écouteur de l'événement buttonCreateClicked, qui charge l'interface de création de la famille demandée :

$window.on('buttonCreateClicked', function onButtonCreateClicked(event, options)
{
    var fetchOptions = {
        "initid": options.famid,
        "viewId": "!defaultCreation"
    };
    loadDocument(fetchOptions);
});

6.2.4.3 Déploiement

Les sources telles que déployées à cette étape correspondent au tag step-50-40.

Le déploiement se fait au moyen du developer toolkit (pour plus d'explications sur les outils de développement, se rendre sur leur documentation).

La commande est donc :

  • pour linux :

    php dynacase-devtool.phar deploy -u localhost -p 8080 -c dynacase -s path/to/sources --auto-release
  • pour windows :

    dynacase-devtool.bat deploy -u localhost -p 8080 -c dynacase -s path/to/sources --auto-release

6.2.4.4 Le résultat

Depuis l'application à l'adresse http://localhost:8080/?app=SIMPLE_LIST, un clic sur le bouton Nouveau Contact ouvre l'interface de création.

6.2.5 Écoute de la création d'un document

Il n'existe pas d'événement spécifique à la création d'un document. Pour détecter une création, nous allons écouter l'événement afterSave du widget, et signaler une création à l'interface dans le cas où le document n'avait pas d'initid.

6.2.5.1 Récupération des sources

Les sources avant cette étape correspondent au tag step-50-40.

6.2.5.2 Code

Modifions l'écouteur de l'événement afterSave dans la méthode addDocumentListeners du fichier SIMPLE_LIST/Layout/custom.js :

// propagate that this document has been saved
$documentWrapper.document(
    "addEventListener",
    "afterSave",
    {
        "name": "afterSave.simple_list"
    },
    function simpleList_propagateAfterSave(event, currentDocumentObject, previousDocumentObject)
    {
        if(previousDocumentObject.initid === 0) {
            // if previous document had no initid, it is a creation
            $window.trigger('documentCreated', currentDocumentObject);
        } else {
            // otherwise, it is a simple save
            $window.trigger('documentSaved', currentDocumentObject);
        }
    }
);

6.2.5.3 Déploiement

Les sources telles que déployées à cette étape correspondent au tag step-50-50.

Le déploiement se fait au moyen du developer toolkit (pour plus d'explications sur les outils de développement, se rendre sur leur documentation).

La commande est donc :

  • pour linux :

    php dynacase-devtool.phar deploy -u localhost -p 8080 -c dynacase -s path/to/sources --auto-release
  • pour windows :

    dynacase-devtool.bat deploy -u localhost -p 8080 -c dynacase -s path/to/sources --auto-release

6.2.5.4 Le résultat

Depuis l'application à l'adresse http://localhost:8080/?app=SIMPLE_LIST, lors de la création d'un contact, le nouveau contact est ajouté à la liste de gauche.

6.2.6 Écoute de la suppression d'un document

Nous allons réagir à l'événement afterDelete du widget.

6.2.6.1 Récupération des sources

Les sources avant cette étape correspondent au tag step-50-50.

6.2.6.2 Code

Enrichissons la méthode addDocumentListeners du fichier SIMPLE_LIST/Layout/custom.js en écoutant l'événement afterDelete du widget pour signaler à l'application que ce document a été supprimé:

// propagate that this document has been deleted
$documentWrapper.document(
    "addEventListener",
    "afterDelete",
    {
        "name": "afterDelete.simple_list"
    },
    function simpleList_propagateAfterDelete(event, documentObject)
    {
        $window.trigger('documentDeleted', documentObject);
    }
);

Ici, nous nous contentons de déclencher l'événement en charge de la mise à jour de l'application. Le comportement de l'application étant en dehors du scope de ce tutoriel, son contenu n'est pas présenté. Il est néanmoins accessible dans le code source dans le fichier SIMPLE_LIST/Layout/main.js.

6.2.6.3 Déploiement

Les sources telles que déployées à cette étape correspondent au tag step-50-60.

Le déploiement se fait au moyen du developer toolkit (pour plus d'explications sur les outils de développement, se rendre sur leur documentation).

La commande est donc :

  • pour linux :

    php dynacase-devtool.phar deploy -u localhost -p 8080 -c dynacase -s path/to/sources --auto-release
  • pour windows :

    dynacase-devtool.bat deploy -u localhost -p 8080 -c dynacase -s path/to/sources --auto-release

6.2.6.4 Le résultat

Depuis l'application à l'adresse http://localhost:8080/?app=SIMPLE_LIST, lors de la suppression d'un contact, sa fiche est supprimée de la liste de gauche.

6.2.7 Écoute de la restauration d'un document

Nous allons réagir à l'événement afterRestore du widget.

6.2.7.1 Récupération des sources

Les sources avant cette étape correspondent au tag step-50-60.

6.2.7.2 Code

Enrichissons la méthode addDocumentListeners du fichier SIMPLE_LIST/Layout/custom.js en écoutant l'événement afterRestore du widget pour signaler à l'application que ce document a été restauré :

// propagate that this document has been restored
$documentWrapper.document(
    "addEventListener",
    "afterRestore",
    {
        "name": "afterRestore.simple_list"
    },
    function simpleList_propagateAfterRestore(event, documentObject)
    {
        $window.trigger('documentRestored', documentObject);
    }
)

Ici, nous nous contentons de déclencher l'événement en charge de la mise à jour de l'application. Le comportement de l'application étant en dehors du scope de ce tutoriel, son contenu n'est pas présenté. Il est néanmoins accessible dans le code source dans le fichier SIMPLE_LIST/Layout/main.js.

6.2.7.3 Déploiement

Les sources telles que déployées à cette étape correspondent au tag step-50-70.

Le déploiement se fait au moyen du developer toolkit (pour plus d'explications sur les outils de développement, se rendre sur leur documentation).

La commande est donc :

  • pour linux :

    php dynacase-devtool.phar deploy -u localhost -p 8080 -c dynacase -s path/to/sources --auto-release
  • pour windows :

    dynacase-devtool.bat deploy -u localhost -p 8080 -c dynacase -s path/to/sources --auto-release

6.2.7.4 Le résultat

Depuis l'application à l'adresse http://localhost:8080/?app=SIMPLE_LIST, immédiatement après la suppression d'un contact et que sa fiche ait été supprimée de la liste de gauche, il est possible de le restaurer. Sa fiche est alors ajoutée à nouveau à la liste de gauche.

6.3 Conclusion

Dans cette partie, vous avez appris à utiliser le widget de document.

Ce composant permet de simplement intégrer un ou plusieurs documents dans une interface complexe, en ayant une abstraction du fonctionnement interne du document. Il est piloté par des méthodes et émet des événements auxquels votre interface peut réagir.

×