Как можно создать связь 1 к 1.
Есть класс Server, хочу создать класс Motherboard.
Пробывал сделать связь между классами через два AttributeExternalKey
Класс где описан сервер писал
<field id="motherboard_id" xsi:type="AttributeExternalKey">
<sql>motherboard_id</sql>
<default_value/>
<is_null_allowed>true</is_null_allowed>
<on_target_delete>DEL_AUTO</on_target_delete>
<target_class>Motherboard</target_class>
<filter>SELECT Motherboard WHERE org_id = :this->org_id</filter>
<dependencies>
<attribute id="org_id" />
</dependencies>
</field>
Класс где описана материнская плата писал:
<field id="server_id" xsi:type="AttributeExternalKey">
<sql>server_id</sql>
<default_value/>
<is_null_allowed>true</is_null_allowed>
<on_target_delete>DEL_AUTO</on_target_delete>
<target_class>Server</target_class>
<filter>SELECT Server WHERE org_id = :this->org_id</filter>
<dependencies>
<attribute id="org_id" />
</dependencies>
</field>
Во время установки ошибка на 20%
Failed to process class 'Server', from '/var/www/html/datamodels/2.x/itop-config-mgmt': Field: 'motherboard_id', (type: AttributeExternalKey), missing (or empty) mandatory tag 'sql' under the tag 'field'
Berkut
11.Октябрь.2015 18:59:07
2
Я подозреваю что тут должно быть так:
<field id="motherboard_id" xsi:type="AttributeExternalKey" _delta="define">
1 лайк
Привет, Krasava, подскажи пожалуйста, как сделать связь между КЕ.
Например привязать отдельный класс HDD и класс персональный пк.
Привет Димас.
Я свой класс HDD привязывал к Server и к StorageSystem
Смотри мой код
<class id="HDD" _delta="define">
<parent>ConnectableCI</parent>
<properties>
<category>bizmodel,searchable</category>
<abstract>false</abstract>
<key_type>autoincrement</key_type>
<db_table>hdd</db_table>
<db_key_field>id</db_key_field>
<db_final_class_field/>
<naming>
<format>%1$s</format>
<attributes>
<attribute id="name"/>
</attributes>
</naming>
<display_template/>
<icon>images/hdd.png</icon>
<reconciliation>
<attributes>
<attribute id="name"/>
<attribute id="org_id"/>
<attribute id="organization_name"/>
</attributes>
</reconciliation>
</properties>
<methods/>
<fields>
<field id="server_id" xsi:type="AttributeExternalKey">
<sql>server_id</sql>
<default_value/>
<is_null_allowed>true</is_null_allowed>
<on_target_delete>DEL_AUTO</on_target_delete>
<target_class>Server</target_class>
<filter>SELECT Server WHERE org_id = :this->org_id</filter>
<dependencies>
<attribute id="org_id" />
</dependencies>
</field>
<field id="storagesystem_id" xsi:type="AttributeExternalKey">
<sql>storagesystem_id</sql>
<default_value/>
<is_null_allowed>true</is_null_allowed>
<on_target_delete>DEL_AUTO</on_target_delete>
<target_class>StorageSystem</target_class>
<filter>SELECT StorageSystem WHERE org_id = :this->org_id</filter>
<dependencies>
<attribute id="org_id" />
</dependencies>
</field>
</fields>
<presentation>
<details>
<items>
<item id="name">
<rank>10</rank>
</item>
<item id="org_id">
<rank>20</rank>
</item>
<item id="status">
<rank>30</rank>
</item>
<item id="business_criticity">
<rank>40</rank>
</item>
<item id="location_id">
<rank>50</rank>
</item>
<item id="brand_id">
<rank>60</rank>
</item>
<item id="model_id">
<rank>70</rank>
</item>
<item id="serialnumber">
<rank>80</rank>
</item>
<item id="asset_number">
<rank>90</rank>
</item>
<item id="move2production">
<rank>100</rank>
</item>
<item id="purchase_date">
<rank>110</rank>
</item>
<item id="end_of_warranty">
<rank>120</rank>
</item>
<item id="description">
<rank>130</rank>
</item>
<item id="server_id">
<rank>135</rank>
</item>
<item id="storagesystem_id">
<rank>137</rank>
</item>
<item id="contacts_list">
<rank>140</rank>
</item>
<item id="documents_list">
<rank>150</rank>
</item>
<item id="tickets_list">
<rank>160</rank>
</item>
<item id="providercontracts_list">
<rank>170</rank>
</item>
<item id="services_list">
<rank>180</rank>
</item>
</items>
</details>
</presentation>
</class>
StorageSystem
<class id="StorageSystem">
<fields>
<field id="hdd_list" xsi:type="AttributeLinkedSet" _delta="define">
<linked_class>HDD</linked_class>
<ext_key_to_me>storagesystem_id</ext_key_to_me>
</field>
</fields>
<presentation>
<details _delta="redefine">
<items>
<item id="contacts_list">
<rank>10</rank>
</item>
<item id="documents_list">
<rank>20</rank>
</item>
<item id="applicationsolution_list">
<rank>35</rank>
</item>
<item id="physicalinterface_list">
<rank>40</rank>
</item>
<item id="fiberinterfacelist_list">
<rank>50</rank>
</item>
<item id="networkdevice_list">
<rank>60</rank>
</item>
<item id="logicalvolume_list">
<rank>70</rank>
</item>
<item id="hdd_list">
<rank>75</rank>
</item>
<item id="san_list">
<rank>80</rank>
</item>
<item id="providercontracts_list">
<rank>90</rank>
</item>
<item id="services_list">
<rank>100</rank>
</item>
<item id="col:col1">
<rank>110</rank>
<items>
<item id="fieldset:Server:baseinfo">
<rank>10</rank>
<items>
<item id="name">
<rank>10</rank>
</item>
<item id="org_id">
<rank>20</rank>
</item>
<item id="status">
<rank>30</rank>
</item>
<item id="business_criticity">
<rank>40</rank>
</item>
<item id="location_id">
<rank>50</rank>
</item>
<item id="rack_id">
<rank>60</rank>
</item>
<item id="enclosure_id">
<rank>70</rank>
</item>
</items>
</item>
<item id="fieldset:Server:moreinfo">
<rank>20</rank>
<items>
<item id="brand_id">
<rank>10</rank>
</item>
<item id="model_id">
<rank>20</rank>
</item>
<item id="managementip">
<rank>25</rank>
</item>
<item id="nb_u">
<rank>30</rank>
</item>
<item id="serialnumber">
<rank>40</rank>
</item>
<item id="asset_number">
<rank>50</rank>
</item>
</items>
</item>
</items>
</item>
<item id="col:col2">
<rank>120</rank>
<items>
<item id="fieldset:Server:Date">
<rank>10</rank>
<items>
<item id="move2production">
<rank>10</rank>
</item>
<item id="purchase_date">
<rank>20</rank>
</item>
<item id="end_of_warranty">
<rank>30</rank>
</item>
</items>
</item>
<item id="fieldset:Server:power">
<rank>20</rank>
<items>
<item id="powerA_id">
<rank>10</rank>
</item>
<item id="powerB_id">
<rank>20</rank>
</item>
<item id="redundancy">
<rank>30</rank>
</item>
</items>
</item>
<item id="fieldset:Server:otherinfo">
<rank>30</rank>
<items>
<item id="description">
<rank>10</rank>
</item>
</items>
</item>
</items>
</item>
</items>
</details>
<search>
<items>
<item id="name">
<rank>10</rank>
</item>
<item id="org_id">
<rank>20</rank>
</item>
<item id="status">
<rank>30</rank>
</item>
<item id="business_criticity">
<rank>40</rank>
</item>
<item id="location_id">
<rank>50</rank>
</item>
<item id="brand_id">
<rank>60</rank>
</item>
<item id="model_id">
<rank>70</rank>
</item>
<item id="managementip">
<rank>75</rank>
</item>
<item id="serialnumber">
<rank>80</rank>
</item>
<item id="asset_number">
<rank>90</rank>
</item>
<item id="powerA_id">
<rank>100</rank>
</item>
<item id="powerB_id">
<rank>110</rank>
</item>
<item id="move2production">
<rank>120</rank>
</item>
<item id="purchase_date">
<rank>130</rank>
</item>
<item id="end_of_warranty">
<rank>140</rank>
</item>
</items>
</search>
<list>
<items>
<item id="org_id">
<rank>10</rank>
</item>
<item id="status">
<rank>20</rank>
</item>
<item id="business_criticity">
<rank>30</rank>
</item>
<item id="location_id">
<rank>40</rank>
</item>
<item id="brand_id">
<rank>50</rank>
</item>
<item id="model_id">
<rank>60</rank>
</item>
<item id="serialnumber">
<rank>70</rank>
</item>
</items>
</list>
</presentation>
<methods>
<method id="GetRelationQueries">
<comment>/**
* Placeholder for backward compatibility (iTop <= 2.1.0)
* in case an extension attempts to redefine this function...
*/</comment>
<static>true</static>
<access>public</access>
<type>Overload-DBObject</type>
<code><![CDATA[ public static function GetRelationQueries($sRelCode){return parent::GetRelationQueries($sRelCode);} ]]></code>
</method>
</methods>
<relations>
<relation id="impacts">
<neighbours>
<neighbour id="logicalvolume">
<attribute>logicalvolume_list</attribute>
</neighbour>
</neighbours>
</relation>
</relations>
</class>
1 лайк
Там где HDD обратить внимание на
<field id="storagesystem_id" xsi:type="AttributeExternalKey">
<sql>storagesystem_id</sql>
<default_value/>
<is_null_allowed>true</is_null_allowed>
<on_target_delete>DEL_AUTO</on_target_delete>
<target_class>StorageSystem</target_class>
<filter>SELECT StorageSystem WHERE org_id = :this->org_id</filter>
<dependencies>
<attribute id="org_id" />
</dependencies>
</field>
и
<item id="storagesystem_id">
<rank>137</rank>
</item>
А там где StorageSystem смотри
<field id="hdd_list" xsi:type="AttributeLinkedSet" _delta="define">
<linked_class>HDD</linked_class>
<ext_key_to_me>storagesystem_id</ext_key_to_me>
</field>
и
<item id="hdd_list">
<rank>75</rank>
</item>
Спасибо, в целом разобрался