Fonctions avancées dans le générateur de modèles hors ligne

Utilisez des fonctions SQL ou XSL avancées dans la mise en page de votre rapport pour insérer des champs d'attributs personnalisés, déterminés par votre propre logique.

Avant de commencer

Vous devriez déjà être familiarisé avec la création de vos propres rapports personnalisés. Cet article suppose que vous avez déjà créé une mise en page de rapport à l'aide du générateur de modèles hors ligne.

Nous allons vous fournir quelques exemples pour vous aider à démarrer. Vous trouverez d'autres formules dans le guide complet sur les fonctions BI Publisher.

Les formules sont définies à l'aide de la syntaxe XSL ou SQL. Vous ne pouvez pas utiliser à la fois une syntaxe XSL et SQL dans une seule instruction de condition.

Lire les les références suivantes :

Fonctions SQL et XSL

La syntaxe des fonctions SQL et XSL à utiliser dans les modèles RTF est la suivante :

Pour les fonctions SQL étendues : <?xdofx:expression?>
Pour les fonctions XSL étendues: <?xdoxslt:expression?>

Vous ne pouvez pas mélanger des instructions SQL avec des expressions XSL dans le même contexte. Par exemple, supposons que vous ayez deux attributs, FIRST_NAME et LAST_NAME que vous souhaitiez concaténer dans un champ de 30 caractères et ajouter le caractère "x" dans le champ :

Syntaxe incorrecte : <?xdofx:rpad(concat(FIRST_NAME,LAST_NAME),30, 'x')?>

Pourquoi ? Cette syntaxe commence comme une expression SQL, mais concat est une expression XSL.

Syntaxe correcte : <?xdofx:rpad(FIRST_NAME||LAST_NAME),30,'x')?>

Insérer un champ personnalisé

  1.  Cliquer avec la souris dans la cellule du tableau où vous voulez placer le champ personnalisé, puis cliquer sur Champ dans le panneau d'insertion. Insérer n'importe quel champ de cette liste (le champ inséré n'a pas d'importance puisque nous allons personnaliser son nom d'affichage et son calcul).
  1. Cliquer avec le bouton droit de la souris sur le champ de données que vous avez inséré et sélectionner BI Publisher > Propriétés. Donner à votre champ une nouvelle étiquette dans Texte à afficher.
  1. Cliquer sur l'onglet Avancé, et entrer votre formule dans le champ Code. (vous devrez supprimer tout texte déjà saisi dans ce champ).
  2. Cliquer sur OK. Votre champ sera inséré dans votre mise en page, où vous pourrez appliquer le formatage nécessaire.

Exemples

Les exemples ci-dessous, tant en XSL qu'en SQL, sont particulièrement utiles aux utilisateurs d'Aconex.

XSL

Différence entre deux dates

Calcule la différence entre deux dates dans la localisation donnée. Les dates doivent être au format "aaaa-mm-jj". Cette fonction ne prend en charge que le calendrier grégorien.
Note : le format est la valeur temporelle pour laquelle la différence doit être calculée. Les valeurs valides sont : y - pour l'année ; m - pour le mois ; w - pour la semaine ; d - pour le jour ; h - pour l'heure ; mi - pour la minute ; s - pour les secondes ; ms - pour les millisecondes.
Formule : <?xdoxslt:date_diff(‘format’, ‘YYYY-MM-DD’, ‘YYYY-MM-DD’, $_XDOLOCALE, $_XDOTIMEZONE)?>
Echantillon : <?xdoxslt:date_diff(‘m’, ‘2001-04-08’, ‘2000-02-01’, $_XDOLOCALE, $_XDOTIMEZONE)?>

Cet exemple affichera '-14' comme résultat.

 

Ajouter un nombre de jours à une date

Ajoute un nombre 'x' de jours au champ date_in  <?xdofx:date_in?>. Le résultat est rendu dans le même format de date que celui du champ "date_in". 
Formule : <?xdoxslt:ora_format_date_offset(date_field, ‘x’, '+')?>
Echantillon : <?xdoxslt:ora_format_date_offset(date_in,4,’+’)?>

 

Résultats conditionnels (choisir si ou non)

Affiche différents résultats lorsque diverses conditions sont remplies. Similaire aux instructions “switch/case/evaluate” dans d'autres langages de programmation.
Fomule : <?choose:?> <?when:expression?> <?otherwise?><?end otherwise?> <?end choose?>
Echantillon :  Identifier toutes les étapes retardées dans les workflows en cours qui nécessitent une action prioritaire. (si une étape de  workflow est retardée de plus d'une semaine, elle nécessite une action immédiate ; si elle est retardée de moins d'une semaine, elle nécessite une attention particulière).
<?choose:?>
<?when:workflow_status='Completed'?><?end when?>
<?when:workflow_status='Terminated'?><?end when?>
<?when:days_late>7?>Immediate action<?end when?>
<?when:days_late=0?>On Track<?end when?>
<?when:days_late<=7?>Attention<?end when?>
<?end choose?>
Résultat :
‘Immediate action’ (Action immédiate) s'affiche lorsque le champ days_late <?xdofx:days_late?> est supérieur à 7 jours.
‘Attention’ s'affiche lorsque le champ "days_late" <?xdofx:days_late?> est inférieur ou égal à 7.

 

 

SQL

Ajouter un nombre de jours à une date

Ajoute un nombre "x" de jours au champ date_in donné. <?xdofx:date_in?>. Formate également le résultat de la date au format DD-MM-YYYY.
Echantillon : <?format-date:xdoxslt:ora_format_date_offset(date_in,4,’+’);'DD-MM-YYYY'?>

 

Texte conditionnel utilisant l'instruction "if” (si)

Utiliser les instructions "if" pour personnaliser le texte de votre rapport. Par exemple, pour la phrase 'Le document est révisé', nous pouvons ajouter le mot 'not' en fonction de la valeur d'un champ nommé STATUS. (Statut)
Echantillon : Le document est  <?if@inlines:STATUS='Overdue'?>not<?end if?> reviewed.
Résultat: Si le STATUT est ‘En retard’ le texte sera le suivant ‘Le document n'est pas révisé’. Sinon, on lira ‘Le document est révisé’

 

Résultats conditionnels (if-then-else) (si-alors-sinon)

Uses an if-then-else condition to display a customized Status.  The Status displays as ‘Late’ if date_in is greater than revision_date, otherwise it displays ‘On Time’.  The field displays as ‘Not Started’ if date_in is NULL (empty).

Utilise une condition if-then-else pour afficher un statut personnalisé.  Le statut affiche 'Late' (En retard) si la date_in est supérieure à revision_date (date de révision), sinon il affiche 'On Time' (dans les délais).  Le champ affiche 'Not Started' (Pas encore commencé) si date_in est NULL (vide).


Echantillon : 
<?xdofx:If(date_in IS NOT NULL) then
if(date_in>revision_date)
then ‘Late’
else ‘On Time’
end if
else ‘Not Started’
end if?>

Vous trouverez d'autres formules dans le guide complet sur les fonctions BI Publisher.

Exemples de fichiers modèles avec logique personnalisée

Téléchargez nos modèles d'échantillons .RTF contenant des exemples de logique XSL/SQL. Les deux échantillons sont fournis pour approfondir l'apprentissage et pratiquer vos propres formules.

Comment utiliser les fichiers d'exemple :

  1. Lire les exemples ci-dessous et décider de celui que vous souhaitez essayer.
  2. Télécharger le(s) modèle(s) RTF.
  3. Définir un modèle de données de rapport en utilisant les domaines et les attributs spécifiés pour l'exemple choisi.
  4. Exporter le modèle de données en XML.
  5. Importer le fichier XML dans le modèle RTF.
  6. N'hésitez pas à modifier le modèle et à ajouter votre propre logique personnalisée.

 

Note

Nous avons choisi les Workflows pour ces exemples, mais vous pouvez sélectionner n'importe quel domaine disponible lorsque vous créez vos rapports. Une logique personnalisée peut également être appliquée aux rapports imprimables dans Coûts. Le processus de création et de conception de votre modèle RTF (ajout de composants tels que des tableaux et des graphiques et utilisation de formules) reste le même, mais la sélection du domaine principal sera spécifique aux enregistrements de Coûts (par exemple, Événement de modification).

 

Exemple 1. Rapport sur l'efficacité d'un workflow

Calculer l'efficacité des workflows initiés ou affectés à votre organisation.


Exemple RTF 1 - Rapport sur l'efficacité d'un workflow


Modèle de données

Domaine principal : Workflow.
Attributs : Date d'échéance originale, date d'échéance estimée, nom du workflow, N° du workflow, statut du workflow, date de début..



 

Logique des champs de calcul.

Nombre initial de jours de réalisation

Différence entre la date de début et la date d'échéance initiale.


	<?xdoxslt:date_diff(‘d',
	start_date,original_due_date,
	$_XDOLOCALE, $_XDOTIMEZONE)?>

Nombre de jours prévus pour la réalisation des travaux

Différence entre la date de début et la date d'échéance estimée


	<?xdoxslt:date_diff(‘d',
	start_date,estimated_due_date,
	$_XDOLOCALE, $_XDOTIMEZONE)?>

Nombre de Workflows

Décompte unique du nombre de workflows.


	<?for-each:workflow?>
	<?xdoxslt:set_variable($_XDOCTX,'c',xdoxslt:get_variable($_XDOCTX,'c')+ 1) ?>
	<?end for-each?>

<?xdoxslt:get_variable($_XDOCTX,'c') ?>

Efficacité

Si la date d'échéance estimée est égale ou antérieure à la date d'échéance initiale, alors l'efficacité du workflow est de 1. Sinon, l'efficacité est égale au Nombre initial de jours de réalisation divisé par le Nombre de jours prévus pour la réalisation des travaux.


	<?xdoxslt:ifelse((estimated_due_date < original_due_date),
	1.00,
	xdoxslt:div(1,(xdoxslt:div(xdoxslt:date_diff(‘d', start_date,estimated_due_date, $_XDOLOCALE,
	$_XDOTIMEZONE) , xdoxslt:date_diff(‘d', start_date,original_due_date, $_XDOLOCALE,
	$_XDOTIMEZONE)) ))
	)
	?>

Efficacité moyenne

Somme de l'efficacité divisée par le nombre de workflows


	<?for-each:workflow?>
	<?xdoxslt:set_variable($_XDOCTX,'w',xdoxslt:get_variable($_XDOCTX,'w')+
	xdoxslt:ifelse((estimated_due_date < original_due_date),
	1.00,
	xdoxslt:div(1,(xdoxslt:div(xdoxslt:date_diff(‘d', start_date,estimated_due_date, $_XDOLOCALE,
	$_XDOTIMEZONE) , xdoxslt:date_diff(‘d', start_date,original_due_date, $_XDOLOCALE,
	$_XDOTIMEZONE)) ))
	)
	)?>
	<?end for-each?>
	<?xdoxslt:round ( xdoxslt:get_variable($_XDOCTX,'w') div xdoxslt:get_variable($_XDOCTX,'c'),3) * 100 ?>

Exemple 2. Rapport sur l'état d'avancement du workflow

Calcule l'état d'avancement des documents de vos Workflows. Attribue une nouvelle date d'échéance aux documents joints dans les étapes du workflow..

Plus précisément :
1. Affiche le statut de révision calculé d'un document joint dans une étape de workflow. Le statut est "Dans les délais" ou "En retard".
2. Affiche la prochaine date d'échéance (calculée à l'aide d'une logique personnalisée) pour la révision d'un document donné, joint à l'étape d'un workflow.


RTF Exemple 2 - Rapport sur l'état d'avancement du workflow


Modèle de données:

Domaine principal : Étapes du workflow
Attributs du domaine principal : Date de début, Statut de l'étape, Nom du workflow, N° du workflow, N° du document, Affecté à l'Org. 
Domaine complémentaire : Documents du workflow
Attributs du domaine complémentaire : N° du document, Type, Révision, Discipline, Date de Révision, Date d'approbation



Champs de calcul :

Statut

Si la date de début est postérieure à la date de révision, alors le document reçoit le statut "En retard". Sinon, il est "Dans les délais".


	<?xdofx:
	If( date_in IS NOT NULL) then
	if (date_in > revision_date)
	then 'Late'
	else 'On Time'
	end if
	else ''
	end if?>

Prochaine date d'échéance

Ajoutez "N" jours à la date de début (N = quatre jours dans cet exemple).


	<?xdoxslt:ora_format_date_offset(date_in,'4', '+')?>

Quelle est la prochaine étape ?

Testez ces exemples de fichiers RTF et essayez de créer des champs de calcul plus complexes en utilisant votre propre logique.
Consultez les articles connexes pour plus d'aide.