# Création d'un classeur dynamique

Un classeur dynamique est défini par une entrée spéciale dans le texte supplémentaire. Ce texte doit se trouver tout au début du champs et il ne doit pas y avoir d'autre texte. Pour que la définition ne puisse pas être modifiée par erreur, le classeur devrait absolument être à la disposition des administrateurs pour écriture, pour les autres un accès de lecture est suffisant. Cette limitation vous permet d'empêcher que des sous-entrées soient créées manuellement; celles-ci ne seraient pas affichées le cas échéant et donc "disparaitraient".

Exemple de statement pour un classeur dynamique

# !+[commande]

La commande !+ remplace le SQL-Statement SELECT * FROM pour le tableau de la base de données dbo.objekte. Après la commande !+ , vous pouvez déterminer la partie WHERE de la demande.

Exemple de statement SQL avec la commande '!+'

Lors de la formulation de votre clause WHERE, faites attention à effectuer une restriction aux types d'objet souhaités (si celle-ci n'est pas déjà définie par la restriction de la recherche) et à exclure les entrées supprimées (toutes les entrées avec un objstatus inégal à 0). Nous vous recommandons d'exclure les entrées supprimées, donc, toutes les entrées dont objstatus n'est pas égal à 0.

# Requête sur plusieurs tableaux

En plus du tableau d'objets, vous pouvez placer d'autres tableaux dans la demande. Pour ceci, vous devez entrer d'autres tableaux avec une virgule.

# Exemple 1

Dans notre exemple, la demande est limitée au masque EMail (ici objmask = 2). Seuls les documents contenant un nom précis dans le champ De (ELOOUTL1) sont recherchés (ici Sorglos).

!+ , objkeys WHERE objid = parentid
AND objmask = 2
AND (okeyname LIKE 'ELOOUTL1' AND okeydata LIKE '%sorglos')

# Exemple 2

L'exemple suivant effectue une demande dans laquelle il s'agit d'effectuer un tri en fonction de deux lignes différentes. Pour cette raison, le tableau objkeys doit être enregistré deux fois.

!+ , objkeys ok1, objkeys ok2 WHERE
objid=ok1.parentid AND objid=ok2.parentid AND
ok1.okeyno=0 AND ok2.okeyno=1 AND
objtype=254 AND objmask=5 AND
ok1.okeydata LIKE 'p1%'
ORDER BY ok2.okeydata, ok1.okeydata

Explication des différents lignes :

Le tableau objkeys est enregistré deux fois sous les noms ok1 et ok2. Attention à la virgule. Sans virgule, vous créez une erreur de syntaxe au niveau SQL, le registre cible reste alors vide.

Le tableau de la base de données de base objets est relié par le biais de la clé univalente objid avec les deux tableaux.

Il ne s'agit pas d'examiner des champs quelconques, mais deux champs précis (les numéros de ligne interne 0 et 1 correspondent au premier et au second champ).

Il s'agit de trouver des documents du type de masque 5, commençant par la valeur p1 dans le premier champ.

Les documents sont alors triés en fonction de la seconde ligne. Toutes les entrées identiques sont triées après la première ligne.

Remarque

L'exemple recherche un champ quelconque, dont le contenu commence par p1, cela signifie qu'un résultat existe même si p1 se trouve dans une ligne invisible. L'utilisateur ne trouve pas de champ correspondant. Dans un système productif, le champ doit être nommé concrètement.

Remarque

La partie objid=parentid est absolument nécessaire. Celle-ci relie le tableau de la base de donnée avec le tableau des champs. Si vous l'oubliez, vous recevrez un gigantesque tableau de résultats avec des entrées insensées.

# !?[commande]

Vous devez entrer une RegisteredFunction après la commande !?. RegisteredFunction doit donner une Collection aux IDs ou aux GUIDs qui correspondent à une entrée d'archive. La documentation Elargissement de fonction avec des fonctions enregistrées (opens new window) explique ce qu'est une RegisteredFunction.

Un exemple de registre dynamique :

!?RF_getSordIdsForDynamicWhere

Un fichier de script peut ressembler à ceci :

function RF_getSordIdsForDynamicWhere(ec, args)
{
        log.info("RF_getSordIdsForDynamicWhere(");
        var sord = args[0];
        log.info("sord=" + sord);
        var folderId = parseInt(args[1]);
        log.info("folderId=" + folderId);
        var db = new Packages.de.elo.ix.jscript.DBConnection();
        var ret = db.query("select objectid from relation where parentid=? order by objectid desc", folderId);
        log.info(")RF_getSordIdsForDynamicWhere" + ret);
        return ret;
}

# !=[commande]

Vous pouvez transmettre une recherche enregistrée à la commande !=. Le classeur ne devrait pas être créé manuellement, mais seulement de manière automatisée. Via le client Java ELO, vous pouvez créer un classeur dynamique après une recherche, en passant par Ruban > Recherche > Résultat > Classeur dynamique.

Pour créer un classeur dynamique dans votre propre application ELOix, vous devez tout d'abord effectuer une recherche. Le texte correspondant se trouve dans le champ FindResult.dynamicFolder, qui est mis à disposition par le biais de l'interface ELOix.

Exemple :

FindResult fr = ixConnection.ix().findFirstSords();
ixConnection.ix().findClose(fr.getSearchId());
Sord sord = ixConnection.ix().checkoutSord();
sord.setDesc(fr.getDynamicFolder());
ixConnection.ix().checkinSord(sord,);

# Commandes anciennes

Les commandes !! et !* sont anciennes et ne sont plus supportées par les versions actuelles d'ELO.

Dernière mise à jour: 12 août 2024 à 12:49