N°7771 - Conditional impact + Contacts

This commit is contained in:
v-dumas
2026-03-06 10:35:32 +01:00
parent 9b15bbab75
commit f730eb5823
3 changed files with 203 additions and 76 deletions

View File

@@ -55,6 +55,23 @@
<on_target_delete>DEL_MANUAL</on_target_delete>
<tracking_level>all</tracking_level>
</field>
<field id="source_impact" xsi:type="AttributeEnum">
<sort_type>rank</sort_type>
<values>
<value id="yes">
<code>yes</code>
<rank>10</rank>
</value>
<value id="no">
<code>no</code>
<rank>20</rank>
</value>
</values>
<sql>source_impact</sql>
<default_value>yes</default_value>
<is_null_allowed>false</is_null_allowed>
<display_style>radio_horizontal</display_style>
</field>
<field id="destination_id" xsi:type="AttributeExternalKey">
<sql>destination_id</sql>
<filter/>
@@ -64,12 +81,29 @@
<on_target_delete>DEL_MANUAL</on_target_delete>
<tracking_level>all</tracking_level>
</field>
<field id="flowtype_id" xsi:type="AttributeExternalKey">
<sql>flowtype_id</sql>
<field id="destination_impact" xsi:type="AttributeEnum">
<sort_type>rank</sort_type>
<values>
<value id="yes">
<code>yes</code>
<rank>10</rank>
</value>
<value id="no">
<code>no</code>
<rank>20</rank>
</value>
</values>
<sql>destination_impact</sql>
<default_value>no</default_value>
<is_null_allowed>false</is_null_allowed>
<display_style>radio_horizontal</display_style>
</field>
<field id="dataflowtype_id" xsi:type="AttributeExternalKey">
<sql>dataflowtype_id</sql>
<filter/>
<dependencies/>
<is_null_allowed>true</is_null_allowed>
<target_class>FlowType</target_class>
<target_class>DataFlowType</target_class>
<on_target_delete>DEL_MANUAL</on_target_delete>
<tracking_level>all</tracking_level>
</field>
@@ -131,29 +165,33 @@
<field id="execution_frequency" xsi:type="AttributeEnum">
<sort_type>rank</sort_type>
<values>
<value id="real_time">
<code>real_time</code>
<value id="realtime">
<code>realtime</code>
<rank>10</rank>
</value>
<value id="ondemand">
<code>ondemand</code>
<rank>20</rank>
</value>
<value id="hourly">
<code>hourly</code>
<rank>20</rank>
<rank>30</rank>
</value>
<value id="daily">
<code>daily</code>
<rank>30</rank>
<rank>40</rank>
</value>
<value id="weekly">
<code>weekly</code>
<rank>40</rank>
<rank>50</rank>
</value>
<value id="monthly">
<code>monthly</code>
<rank>50</rank>
<rank>60</rank>
</value>
<value id="yearly">
<code>yearly</code>
<rank>60</rank>
<rank>70</rank>
</value>
</values>
<sql>execution_frequency</sql>
@@ -161,9 +199,17 @@
<is_null_allowed>false</is_null_allowed>
<display_style>list</display_style>
</field>
<field id="contacts_list" xsi:type="AttributeLinkedSetIndirect">
<linked_class>lnkContactToDataFlow</linked_class>
<ext_key_to_me>dataflow_id</ext_key_to_me>
<count_min>0</count_min>
<count_max>0</count_max>
<ext_key_to_remote>contact_id</ext_key_to_remote>
<duplicates/>
</field>
<field id="documents_list" xsi:type="AttributeLinkedSetIndirect">
<linked_class>lnkDocumentToFunctionalCI</linked_class>
<ext_key_to_me>functionalci_id</ext_key_to_me>
<linked_class>lnkDocumentToDataFlow</linked_class>
<ext_key_to_me>dataflow_id</ext_key_to_me>
<count_min>0</count_min>
<count_max>0</count_max>
<ext_key_to_remote>document_id</ext_key_to_remote>
@@ -183,7 +229,7 @@
<item id="destination_id">
<rank>30</rank>
</item>
<item id="flowtype_id">
<item id="dataflowtype_id">
<rank>40</rank>
</item>
<item id="business_criticity">
@@ -230,18 +276,24 @@
</item>
<item id="fieldset:DataFlow:moreinfo">
<items>
<item id="source_id">
<item id="source_id">
<rank>10</rank>
</item>
<item id="destination_id">
<item id="source_impact">
<rank>20</rank>
</item>
<item id="flowtype_id">
<item id="destination_id">
<rank>30</rank>
</item>
<item id="execution_frequency">
<item id="destination_impact">
<rank>40</rank>
</item>
<item id="dataflowtype_id">
<rank>50</rank>
</item>
<item id="execution_frequency">
<rank>60</rank>
</item>
</items>
<rank>20</rank>
</item>
@@ -261,6 +313,9 @@
</items>
<rank>20</rank>
</item>
<item id="contacts_list">
<rank>70</rank>
</item>
<item id="documents_list">
<rank>80</rank>
</item>
@@ -277,7 +332,7 @@
<item id="destination_id">
<rank>30</rank>
</item>
<item id="flowtype_id">
<item id="dataflowtype_id">
<rank>40</rank>
</item>
<item id="status">
@@ -297,18 +352,11 @@
</summary>
</presentation>
<relations>
<relation id="flow">
<neighbours>
<neighbour id="destination">
<attribute>destination_id</attribute>
<direction>both</direction>
</neighbour>
</neighbours>
</relation>
<relation id="impacts">
<neighbours>
<neighbour id="destination">
<attribute>destination_id</attribute>
<query_down><![CDATA[SELECT DataFlow WHERE destination_id = :this->id AND destination_impact = 'yes']]></query_down>
<query_up><![CDATA[SELECT FunctionalCI WHERE :this->destination_impact = 'yes' AND id = :this->destination_id]]></query_up>
<direction>both</direction>
</neighbour>
</neighbours>
@@ -400,6 +448,91 @@
</list>
</presentation>
</class>
<class id="lnkContactToDataFlow" _delta="define">
<parent>cmdbAbstractObject</parent>
<properties>
<is_link>1</is_link>
<category>bizmodel</category>
<abstract>false</abstract>
<key_type>autoincrement</key_type>
<db_table>lnkcontacttodataflow</db_table>
<db_key_field>id</db_key_field>
<db_final_class_field/>
<naming>
<attributes>
<attribute id="contact_id_friendlyname"/>
<attribute id="dataflow_id_friendlyname"/>
</attributes>
</naming>
<style>
<icon/>
</style>
<reconciliation>
<attributes>
<attribute id="dataflow_id"/>
<attribute id="contact_id"/>
</attributes>
</reconciliation>
<uniqueness_rules>
<rule id="no_duplicate">
<attributes>
<attribute id="contact_id"/>
<attribute id="dataflow_id"/>
</attributes>
<filter><![CDATA[]]></filter>
<disabled>false</disabled>
<is_blocking>true</is_blocking>
</rule>
</uniqueness_rules>
</properties>
<fields>
<field id="dataflow_id" xsi:type="AttributeExternalKey">
<sql>dataflow_id</sql>
<target_class>DataFlow</target_class>
<is_null_allowed>false</is_null_allowed>
<on_target_delete>DEL_AUTO</on_target_delete>
</field>
<field id="contact_id" xsi:type="AttributeExternalKey">
<sql>contact_id</sql>
<target_class>Contact</target_class>
<is_null_allowed>false</is_null_allowed>
<on_target_delete>DEL_AUTO</on_target_delete>
</field>
</fields>
<methods/>
<presentation>
<details>
<items>
<item id="contact_id">
<rank>10</rank>
</item>
<item id="dataflow_id">
<rank>20</rank>
</item>
</items>
</details>
<search>
<items>
<item id="dataflow_id">
<rank>10</rank>
</item>
<item id="contact_id">
<rank>20</rank>
</item>
</items>
</search>
<list>
<items>
<item id="dataflow_id">
<rank>10</rank>
</item>
<item id="contact_id">
<rank>20</rank>
</item>
</items>
</list>
</presentation>
</class>
<class id="DataFlowType" _delta="define">
<parent>Typology</parent>
<properties>
@@ -478,47 +611,16 @@
</dashlet>
</dashlets>
</cell>
<cell id="2">
<rank>2</rank>
<dashlets>
<dashlet id="DataFlow_Source" xsi:type="DashletObjectList">
<rank>0</rank>
<title>FunctionalCI:DataFlow:Source</title>
<query>SELECT FunctionalCI AS ci JOIN DataFlow AS df ON df.source_id = ci.id WHERE df.destination_id=:this->id</query>
<menu>true</menu>
</dashlet>
</dashlets>
</cell>
<cell id="3">
<rank>3</rank>
<dashlets>
<dashlet id="DataFlow_Destination" xsi:type="DashletObjectList">
<rank>0</rank>
<title>FunctionalCI:DataFlow:Destination</title>
<query>SELECT FunctionalCI AS ci JOIN DataFlow AS df ON df.destination_id = ci.id WHERE df.source_id=:this->id</query>
<menu>true</menu>
</dashlet>
</dashlets>
</cell>
</cells>
</definition>
</field>
</fields>
<relations>
<relation id="flow" _delta="define">
<neighbours>
<neighbour id="flow">
<query_down><![CDATA[SELECT DataFlow WHERE source_id = :this->id]]></query_down>
<query_up><![CDATA[SELECT FunctionalCI WHERE id = :this->source_id]]></query_up>
<direction>both</direction>
</neighbour>
</neighbours>
</relation>
<relation id="impacts">
<neighbours>
<neighbour id="flow" _delta="define">
<query_down><![CDATA[SELECT DataFlow WHERE source_id = :this->id]]></query_down>
<query_up><![CDATA[SELECT FunctionalCI WHERE id = :this->source_id]]></query_up>
<query_down><![CDATA[SELECT DataFlow WHERE source_id = :this->id AND source_impact = 'yes']]></query_down>
<query_up><![CDATA[SELECT FunctionalCI WHERE :this->source_impact = 'yes' AND id = :this->source_id]]></query_up>
<direction>both</direction>
</neighbour>
</neighbours>

View File

@@ -14,17 +14,11 @@ Dict::Add('EN US', 'English', 'English', [
'FunctionalCI:DataFlow:Title' => 'Data flows',
'FunctionalCI:DataFlow:Inbound' => 'Inbound flows',
'FunctionalCI:DataFlow:Outbound' => 'Outbound flows',
'FunctionalCI:DataFlow:Source' => 'Source CIs',
'FunctionalCI:DataFlow:Destination' => 'Destination CIs',
'DataFlow:baseinfo' => 'General information',
'DataFlow:otherinfo' => 'Other information',
'DataFlow:moreinfo' => 'Flow specifics',
'Relation:flow/Description' => 'Flow maps',
'Relation:flow/DownStream' => 'Sent flow...',
'Relation:flow/UpStream' => 'Received flow...',
'Class:DataFlow' => 'Flow',
'Class:DataFlow+' => 'For application flow for example',
'Class:DataFlow/Name' => '%1$s',
@@ -32,8 +26,20 @@ Dict::Add('EN US', 'English', 'English', [
'Class:DataFlow/Attribute:name_id+' => 'Data that are transferred',
'Class:DataFlow/Attribute:source_id' => 'Source',
'Class:DataFlow/Attribute:source_id+' => 'Source Ci of the flow',
'Class:DataFlow/Attribute:source_impact' => 'Source impact',
'Class:DataFlow/Attribute:source_impact+' => 'Does the source impact the flow ?',
'Class:DataFlow/Attribute:source_impact/Value:yes' => 'yes',
'Class:DataFlow/Attribute:source_impact/Value:yes+' => 'If the source falls down, the flow is impacted',
'Class:DataFlow/Attribute:source_impact/Value:no' => 'no',
'Class:DataFlow/Attribute:source_impact/Value:no+' => 'If the source falls down, the flow is not impacted',
'Class:DataFlow/Attribute:destination_id' => 'Destination',
'Class:DataFlow/Attribute:destination_id+' => 'Destination Ci for the flow',
'Class:DataFlow/Attribute:destination_impact' => 'Destination impact',
'Class:DataFlow/Attribute:destination_impact+' => 'Is the destination impacted by the flow ?',
'Class:DataFlow/Attribute:destination_impact/Value:yes' => 'yes',
'Class:DataFlow/Attribute:destination_impact/Value:yes+' => 'If the flow stops, the destination is impacted',
'Class:DataFlow/Attribute:destination_impact/Value:no' => 'no',
'Class:DataFlow/Attribute:destination_impact/Value:no+' => 'If the flow stops, the destination is not impacted',
'Class:DataFlow/Attribute:type_id' => 'Flow type',
'Class:DataFlow/Attribute:type_id+' => 'Typology of Flow.',
'Class:DataFlow/Attribute:description' => 'Description',
@@ -54,8 +60,10 @@ Dict::Add('EN US', 'English', 'English', [
'Class:DataFlow/Attribute:business_criticity/Value:medium+' => '',
'Class:DataFlow/Attribute:execution_frequency' => 'Execution frequency',
'Class:DataFlow/Attribute:execution_frequency+' => 'How often the data flow is executed',
'Class:DataFlow/Attribute:execution_frequency/Value:real_time' => 'real-time',
'Class:DataFlow/Attribute:execution_frequency/Value:real_time+' => '',
'Class:DataFlow/Attribute:execution_frequency/Value:realtime' => 'real-time',
'Class:DataFlow/Attribute:execution_frequency/Value:realtime+' => '',
'Class:DataFlow/Attribute:execution_frequency/Value:ondemand' => 'on demand',
'Class:DataFlow/Attribute:execution_frequency/Value:ondemand+' => 'on the fly, not scheduled',
'Class:DataFlow/Attribute:execution_frequency/Value:hourly' => 'hourly',
'Class:DataFlow/Attribute:execution_frequency/Value:hourly+' => '',
'Class:DataFlow/Attribute:execution_frequency/Value:daily' => 'daily',
@@ -66,6 +74,10 @@ Dict::Add('EN US', 'English', 'English', [
'Class:DataFlow/Attribute:execution_frequency/Value:monthly+' => '',
'Class:DataFlow/Attribute:execution_frequency/Value:yearly' => 'yearly',
'Class:DataFlow/Attribute:execution_frequency/Value:yearly+' => '',
'Class:DataFlow/Attribute:documents_list' => 'Documents',
'Class:DataFlow/Attribute:documents_list+' => 'Eg: technical specifications, runbooks, etc.',
'Class:DataFlow/Attribute:contacts_list' => 'Contacts',
'Class:DataFlow/Attribute:contacts_list+' => 'Eg: flow owner, technical support, etc.',
/*
'Class:DataFlow/Attribute:source_id_friendlyname' => 'source_id_friendlyname',

View File

@@ -14,17 +14,11 @@ Dict::Add('FR FR', 'French', 'Français', [
'FunctionalCI:DataFlow:Title' => 'Flux de données',
'FunctionalCI:DataFlow:Inbound' => 'Flux entrants',
'FunctionalCI:DataFlow:Outbound' => 'Flux sortants',
'FunctionalCI:DataFlow:Source' => 'CI sources',
'FunctionalCI:DataFlow:Destination' => 'CI destinataires',
'DataFlow:baseinfo' => 'Informations générales',
'DataFlow:otherinfo' => 'Autres informations',
'DataFlow:moreinfo' => 'Spécificités du flux',
'Relation:flow/Description' => 'Carte des flux de données',
'Relation:flow/DownStream' => 'Flux sortants...',
'Relation:flow/UpStream' => 'Flux reçus...',
'Class:DataFlow' => 'Flux de Données',
'Class:DataFlow+' => 'Modélise les données transférées entre instances d\'application',
'Class:DataFlow/Name' => '%1$s',
@@ -32,8 +26,20 @@ Dict::Add('FR FR', 'French', 'Français', [
'Class:DataFlow/Attribute:name_id+' => 'Type de données transferées',
'Class:DataFlow/Attribute:source_id' => 'Source',
'Class:DataFlow/Attribute:source_id+' => 'Instance d\application à la source du flux de données',
'Class:DataFlow/Attribute:source_impact' => 'Source impactante ?',
'Class:DataFlow/Attribute:source_impact+' => 'La source impacte-t-elle le flux de données ?',
'Class:DataFlow/Attribute:source_impact/Value:yes' => 'oui',
'Class:DataFlow/Attribute:source_impact/Value:yes+' => 'Si la source tombe en panne, le flux de données est impacté',
'Class:DataFlow/Attribute:source_impact/Value:no' => 'non',
'Class:DataFlow/Attribute:source_impact/Value:no+' => 'Si la source tombe en panne, le flux de données n\'est pas impacté',
'Class:DataFlow/Attribute:destination_id' => 'Destinataire',
'Class:DataFlow/Attribute:destination_id+' => 'Destinataire des données, à choisir parmi les instances d\'application',
'Class:DataFlow/Attribute:destination_impact' => 'Destinataire impacté ?',
'Class:DataFlow/Attribute:destination_impact+' => 'Le destinataire est-il impacté si le flux de données s\'arrête ?',
'Class:DataFlow/Attribute:destination_impact/Value:yes' => 'oui',
'Class:DataFlow/Attribute:destination_impact/Value:yes+' => 'Si le flux s\'arrête, le destinataire est impacté',
'Class:DataFlow/Attribute:destination_impact/Value:no' => 'non',
'Class:DataFlow/Attribute:destination_impact/Value:no+' => 'Si le flux s\'arrête, le destinataire n\'est pas impacté',
'Class:DataFlow/Attribute:type_id' => 'Type de flux',
'Class:DataFlow/Attribute:type_id+' => 'Typologie du flux',
'Class:DataFlow/Attribute:description' => 'Description',
@@ -54,8 +60,10 @@ Dict::Add('FR FR', 'French', 'Français', [
'Class:DataFlow/Attribute:business_criticity/Value:medium+' => '',
'Class:DataFlow/Attribute:execution_frequency' => 'Fréquence d\'exécution',
'Class:DataFlow/Attribute:execution_frequency+' => 'À quelle fréquence le transfert de données est-il exécuté',
'Class:DataFlow/Attribute:execution_frequency/Value:real_time' => 'temps réel',
'Class:DataFlow/Attribute:execution_frequency/Value:real_time+' => '',
'Class:DataFlow/Attribute:execution_frequency/Value:realtime' => 'temps réel',
'Class:DataFlow/Attribute:execution_frequency/Value:realtime+' => '',
'Class:DataFlow/Attribute:execution_frequency/Value:ondemand' => 'à la demande',
'Class:DataFlow/Attribute:execution_frequency/Value:ondemand+' => '',
'Class:DataFlow/Attribute:execution_frequency/Value:hourly' => 'horaire',
'Class:DataFlow/Attribute:execution_frequency/Value:hourly+' => '',
'Class:DataFlow/Attribute:execution_frequency/Value:daily' => 'journalière',
@@ -66,6 +74,11 @@ Dict::Add('FR FR', 'French', 'Français', [
'Class:DataFlow/Attribute:execution_frequency/Value:monthly+' => '',
'Class:DataFlow/Attribute:execution_frequency/Value:yearly' => 'annuelle',
'Class:DataFlow/Attribute:execution_frequency/Value:yearly+' => '',
'Class:DataFlow/Attribute:documents_list' => 'Documents',
'Class:DataFlow/Attribute:documents_list+' => 'Eg: technical specifications, runbooks, etc.',
'Class:DataFlow/Attribute:contacts_list' => 'Contacts',
'Class:DataFlow/Attribute:contacts_list+' => 'Eg: flow owner, technical support, etc.',
/*
'Class:DataFlow/Attribute:source_id_friendlyname' => 'source_id_friendlyname',
'Class:DataFlow/Attribute:source_id_friendlyname+' => 'Nom complet',