Lorsque vous créez des vues à l'aide de l'assistant de définition de vue, vous pouvez ajouter à une vue des champs calculés à partir d'expressions SQL. Ces champs sont appelés des champs virtuels, car ARCHIBUS les calcule à la demande à partir de données de la base de données, mais les calculs n'y sont pas stockés. L'ajout de champs virtuels à des vues se révèle utile lorsque vous avez besoin, par exemple, dans le cadre de l'établissement de rapports, de statistiques qui ne soient pas stockées dans la base de données. Par exemple, il se peut qu'un responsable immobilier ou qu'un gestionnaire de patrimoine ait besoin d'établir un rapport sur le coût de patrimoine par effectif ou sur la différence entre la surface spécifiée d'une pièce pour un standard de pièce et sa surface réelle. Ces données sont facilement accessibles lorsque vous créez une vue qui inclut ces calculs.
Le fait d'utiliser l'assistant de définition de vue pour ajouter ces statistiques à une vue simplifie le processus de définition de la vue et d'écriture de la requête SQL.
Cette rubrique contient des informations fondamentales sur l'ajout de champs virtuels. Concernant la procédure proprement dite d'ajout de champs virtuels, reportez-vous à la rubrique Définir les caractéristiques de vue.
Cette rubrique comprend les sections suivantes :
Vous pouvez ajouter des champs virtuels dans les cas suivants :
Les formulaires d'édition et les vues d'analyse de vue ne peuvent pas comporter de champs virtuels. Pour ces modèles de rapport, seul le panneau d'exploration peut inclure un champ virtuel.
Vous pouvez entrer une requête SQL sous forme d'« extrait » qui représente le calcul du champ virtuel. Le programme complète l'instruction SQL pour la source de données en englobant l'extrait dans un wrapper qui injecte l'extrait SQL dans la section fields de l'instruction SELECT.
Cet extrait peut utiliser n'importe quelle instruction SQL qui répond aux critères suivants :
Reportez-vous à la rubrique Ajouter des champs virtuels pour connaître la procédure d'ajout d'un champ virtuel à une vue.
Les exemples suivants sont des extraits SQL que vous pouvez entrer pour créer des champs virtuels. Les exemples incluent le wrapper inséré par ARCHIBUS pour englober l'extrait entré. Si vous le préférez, vous pouvez entrer le wrapper avec l'extrait SQL, mais vous n'êtes pas obligé de le faire.
Par exemple, si vous avez une source de données dans la table Bâtiments (bl), vous pouvez utiliser un champ virtuel pour calculer la surface des murs extérieurs. Vous pouvez entrer cet extrait :
(bl.area_gross_ext - bl.area_gross_int)
L'assistant de définition de vue ajoutera la section <field /> suivante à la vue :
<field table="bl" name="fci" dataType="number" decimals="2">
<sql dialect="generic">
(bl.area_gross_ext - bl.area_gross_int)
</sql>
</field>
Dans une source de données de la table Pièces (rm) avec comme table de standards relative la table Standards de pièces (rmstd), vous pouvez aussi entrer un extrait SQL de champ virtuel tel que celui ci-dessous afin d'obtenir la différence entre la surface standard et la surface réelle :
(rm.area - rmstd.area )
L'assistant de définition de vue ajoutera la section <field /> suivante à la vue :
<field table="bl" name="fci" dataType="number" decimals="2">
<sql dialect="generic">
(rm.area - rmstd.area )
</sql>
</field>
Il est souvent utile de résumer les données de chaque ligne dans une vue. Dans une source de données affichant les entrées de la table Bâtiments (bl), supposons que vous souhaitiez afficher tous les coûts d'exploitation associés à chaque bâtiment. Pour ce faire, vous additionnez tous les coûts d'exploitation de la table Coûts (cost_tran) et vous affichez cette valeur dans chaque ligne. Vous pouvez pour cela utiliser un extrait SQL tel que celui-ci :
(SELECT SUM( amount_expense ) FROM cost_tran, cost_cat WHERE cost_tran.cost_cat_id = cost_cat.cost_cat_id AND cost_tran.bl_id = bl.bl_id AND cost_cat.cost_type = 'OPERATING EXP.' )
L'assistant de définition de vue ajoutera la section <field /> suivante à la vue :
<field table="bl" name="operating_costs" dataType="number" decimals="2">
<sql dialect="generic">
(SELECT SUM( amount_expense ) FROM cost_tran, cost_cat WHERE cost_tran.cost_cat_id = cost_cat.cost_cat_id AND cost_tran.bl_id = bl.bl_id AND cost_cat.cost_type = 'OPERATING EXP.' )
</sql>
</field>
Dans un rapport type, il peut être nécessaire d'afficher un champ et un deuxième champ qui dépend de la valeur du premier. Vous pouvez pour cela utiliser des conditions. Par exemple, supposons que vous souhaitiez afficher la surface totale des locaux entrée à partir de l'outil de CAO (su.area_usable) dans l'hypothèse où la surface mesurée des locaux serait disponible, et la surface totale estimée manuellement (su.area_manual) au cas où la surface mesurée ne serait pas disponible. Pour ce faire, utilisez un extrait tel que celui ci-dessous :
(SELECT SUM(CASE WHEN su.area_usable = 0 THEN su.area_manual ELSE su.area_usable END) FROM su WHERE su.bl_id = bl.bl_id)
L'assistant de définition de vue ajoutera la section <field /> suivante à la vue :
<field table="bl" name="area_estimated" dataType="number" decimals="0">
<sql dialect="generic">
(SELECT SUM(CASE WHEN su.area_usable = 0 THEN su.area_manual ELSE su.area_usable END) FROM su WHERE su.bl_id = bl.bl_id)
</sql>
</field>
Il existe plusieurs façons de tester et de dépanner votre extrait SQL.
Si vous créez des champs virtuels avec des requêtes complexes et si Web Central est chargé localement sur l'ordinateur ou un serveur intermédiaire, vous souhaiterez peut-être travailler en mode débogage.
Pour activer le mode débogage, fixez la propriété debug=true dans le fichier de propriétés \web-inf\config\debug.properties, puis redémarrez le serveur d'applications.
Travailler en mode débogage présente les avantages suivants :