Решено.
Добавил вкладку не через xsi:type=“AttributeLinkedSet”, а через xsi:type=“AttributeLinkedSetIndirect” по аналогии с системными вкладками, описанными в /path/to/itop/datamodels/2.x/itop-config-mgmt/datamodel.itop-config-mgmt.xml, создав дополнительный класс lnkServerToVLAN.
вобщем разобрался я что мне требовалось сделать, все как и говорил выше abb-user работает, вот только почему никто подробности не пишет, вот думаю стоит тут это все описывать иль нет
Ну конечно стоит! Форум именно так и работает
Как тут выложить код как есть, форум его коверкает.
Выложить код либо скрином, либо с большими мучениями
Тоже по 10 раз редактировать приходилось)
Не понимаю, какие у вас мучения. Копи-пастим код в редактор, выделяем, жмём кнопку </>
!
<class id="Organization" _delta="define">
<parent>cmdbAbstractObject</parent>
<properties>
<comment><![CDATA[/**
* Persistent classes for a CMDB
*
* @copyright Copyright (C) 2010-2017 Combodo SARL
* @license http://opensource.org/licenses/AGPL-3.0
*/]]></comment>
<category>bizmodel,searchable,structure</category>
<abstract>false</abstract>
<key_type>autoincrement</key_type>
<db_table>organization</db_table>
<db_key_field>id</db_key_field>
<db_final_class_field/>
<naming>
<attributes>
<attribute id="name"/>
</attributes>
</naming>
<display_template/>
<icon>images/building.png</icon>
<reconciliation>
<attributes>
<attribute id="name"/>
<attribute id="code"/>
</attributes>
</reconciliation>
<obsolescence>
<condition><![CDATA[status = 'inactive']]></condition>
</obsolescence>
</properties>
<fields>
<field id="name" xsi:type="AttributeString">
<sql>name</sql>
<default_value/>
<is_null_allowed>false</is_null_allowed>
</field>
<field id="code" xsi:type="AttributeString">
<sql>code</sql>
<default_value/>
<is_null_allowed>true</is_null_allowed>
</field>
<field id="status" xsi:type="AttributeEnum">
<values>
<value id="active">active</value>
<value id="inactive">inactive</value>
</values>
<sql>status</sql>
<default_value>active</default_value>
<is_null_allowed>true</is_null_allowed>
<display_style>list</display_style>
</field>
<field id="parent_id" xsi:type="AttributeHierarchicalKey">
<sql>parent_id</sql>
<is_null_allowed>true</is_null_allowed>
<on_target_delete>DEL_MANUAL</on_target_delete>
</field>
<field id="parent_name" xsi:type="AttributeExternalField">
<extkey_attcode>parent_id</extkey_attcode>
<target_attcode>name</target_attcode>
</field>
<field id="overview" xsi:type="AttributeDashboard">
<is_user_editable>true</is_user_editable>
<definition>
<layout>DashboardLayoutTwoCols</layout>
<auto_reload>
<enabled>false</enabled>
<interval>300</interval>
</auto_reload>
<cells>
<cell id="0">
<rank>0</rank>
<dashlets>
<dashlet id="11" xsi:type="DashletHeaderDynamic">
<rank>0</rank>
<title>Organization:Overview:FunctionalCIs</title>
<icon>itop-config-mgmt/images/server.png</icon>
<subtitle>Organization:Overview:FunctionalCIs:subtitle</subtitle>
<query>SELECT FunctionalCI WHERE org_id=:this->id</query>
<group_by>finalclass</group_by>
<values>NetworkDevice,Server,ApplicationSolution</values>
</dashlet>
</dashlets>
</cell>
<cell id="2">
<rank>20</rank>
<dashlets>
<dashlet id="12" xsi:type="DashletObjectList">
<rank>0</rank>
<title>Organization:Overview:Users</title>
<query>SELECT Person AS p JOIN User AS u ON u.contactid=p.id WHERE p.org_id=:this->id</query>
<menu>true</menu>
</dashlet>
</dashlets>
</cell>
<cell id="9000">
<rank>5</rank>
<dashlets>
<dashlet id="0" xsi:type="DashletEmptyCell">
<rank>0</rank>
</dashlet>
</dashlets>
</cell>
</cells>
</definition>
</field>
</fields>
<methods/>
<presentation>
<details>
<items>
<item id="name">
<rank>10</rank>
</item>
<item id="code">
<rank>20</rank>
</item>
<item id="status">
<rank>30</rank>
</item>
<item id="parent_id">
<rank>40</rank>
</item>
<item id="overview">
<rank>50</rank>
</item>
</items>
</details>
<default_search>
<items>
<item id="name">
<rank>10</rank>
</item>
</items>
</default_search>
<search>
<items>
<item id="name">
<rank>10</rank>
</item>
<item id="code">
<rank>20</rank>
</item>
<item id="status">
<rank>30</rank>
</item>
<item id="parent_id">
<rank>40</rank>
</item>
</items>
</search>
<list>
<items>
<item id="code">
<rank>10</rank>
</item>
<item id="status">
<rank>20</rank>
</item>
<item id="parent_id">
<rank>30</rank>
</item>
</items>
</list>
</presentation>
</class>
Как изменить по умолчанию сортировку любого столбца КЕ?
По умолчанию сортировка по Названию, можно ли сделать по другому атрибуту?
Отвечаю, вначале класса есть такое:
<naming>
<attributes>
<attribute id="name"/>
</attributes>
</naming>
Вот именно <attribute id="name"/>
и отвечает за то что будет отображаться в первом столбце и сортироваться, вместо name можно написать любой другой атрибут.
Ответ не принимается))
Для сортировки есть специальный параметр order, который в документации следует сразу за naming!
Как редактировать матрицу разрешений в профиле пользователей?
Создал новый класс а он в разрешениях профиля: Configuration Manager стоит на Изменить - Нет. Где вообще эти разрешения хранятся?
Нашел, и оказывается все разрешения хранятся в …\datamodels\2.x\itop-profiles-itil\datamodel.itop-profiles-itil.xml
В файле прописывается, на какие группы классов стоит чтение , пакетное чтение, запись, пакетная запись, удаление и соответствующие им профили пользователей.
Все же я надеялся, что матрица разрешений редактируется из веб интерфейса, было бы куда более удобно.
Здравствуйте! я тоже впервые начал работать с iTop, есть такой вопрос, хочу доавить новое устройство, со связью с ПК, взял за тело другое похожее устройство, в xml-файле есть тэги:
<dashlet id="99" xsi:type="DashletBadge" _delta="define">
<rank>8</rank>
<class>headphone</class>
</dashlet>
Вот откуда взять id и rank?
вот полный текст xml-ки:
<constants>
</constants>
<classes>
<class id="headphone" _delta="define">
<parent>PhysicalDevice</parent>
<properties>
<category>bizmodel,searchable</category>
<abstract>false</abstract>
<key_type>autoincrement</key_type>
<db_table>headphone</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/headphone.png</icon>
<reconciliation>
<attributes>
<attribute id="name"/>
<attribute id="org_id"/>
<attribute id="organization_name"/>
</attributes>
</reconciliation>
</properties>
<fields>
<!--СПИСОК ПК-->
<field id="pc_list" xsi:type="AttributeLinkedSetIndirect" _delta="define">
<linked_class>lnkHeadPhoneToConnectableCI</linked_class>
<ext_key_to_me>HeadPhone_id</ext_key_to_me>
<count_min>0</count_min>
<count_max>0</count_max>
<ext_key_to_remote>connectibleci_id</ext_key_to_remote>
</field>
<!--СПИСОК ПК-->
<!--ТИП Гарнитуры-->
<field id="HeadPhoneType" xsi:type="AttributeEnum" _delta="define">
<values>
<value>Wireless</value>
<value>Wire</value>
</values>
<sql>HeadPhoneType</sql>
<default_value/>
<is_null_allowed>False</is_null_allowed>
<display_style>list</display_style>
</field>
<!--ТИП Гарнитуры-->
</fields>
<methods/>
<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="contacts_list">
<rank>140</rank>
</item>
<item id="documents_list">
<rank>150</rank>
</item>
<item id="providercontracts_list">
<rank>170</rank>
</item>
<item id="services_list">
<rank>180</rank>
</item>
<!--ПУБЛИКУЕМ PC_LIST-->
<item id="pc_list">
<rank>190</rank>
</item>
<!--ПУБЛИКУЕМ PC_LIST-->
</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="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>
</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>
</class>
<class id="Model">
<fields>
<field id="type" xsi:type="AttributeEnum">
<values>
<value id="headphone" _delta="define">headphone</value>
</values>
</field>
</fields>
</class>
<!--КЛАСС СВЯЗЬ HeadPhone С ПОДКЛЮЧАЕМЫМ КЕ-->
<class id="lnkHeadPhoneToConnectableCI" _delta="define">
<parent>cmdbAbstractObject</parent>
<properties>
<is_link>1</is_link>
<category>bizmodel</category>
<abstract>false</abstract>
<key_type>autoincrement</key_type>
<db_table>lnkHeadPhoneToConnectableCI</db_table>
<db_key_field>id</db_key_field>
<db_final_class_field/>
<naming>
<attributes>
<attribute id="connectibleci_id"/>
<attribute id="HeadPhone_id"/>
</attributes>
</naming>
<display_template/>
<icon/>
<reconciliation>
<attributes>
<attribute id="connectibleci_id"/>
<attribute id="HeadPhone_id"/>
</attributes>
</reconciliation>
</properties>
<fields>
<field id="connectibleci_id" xsi:type="AttributeExternalKey">
<sql>connectibleci_id</sql>
<target_class>ConnectableCI</target_class>
<is_null_allowed>false</is_null_allowed>
<on_target_delete>DEL_AUTO</on_target_delete>
</field>
<field id="HeadPhone_id" xsi:type="AttributeExternalKey">
<sql>HeadPhone_id</sql>
<target_class>headphone</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="connectibleci_id">
<rank>10</rank>
</item>
<item id="HeadPhone_id">
<rank>20</rank>
</item>
</items>
</details>
<search>
<items>
<item id="connectibleci_id">
<rank>10</rank>
</item>
<item id="HeadPhone_id">
<rank>20</rank>
</item>
</items>
</search>
<list>
<items>
<item id="connectibleci_id">
<rank>10</rank>
</item>
<item id="HeadPhone_id">
<rank>20</rank>
</item>
</items>
</list>
</presentation>
</class>
<!--КЛАСС СВЯЗЬ HeadPhone С ПОДКЛЮЧАЕМЫМ КЭ-->
</classes>
<menus>
<menu id="ConfigManagementOverview" xsi:type="DashboardMenuNode" _delta="must_exist">
<definition>
<cells>
<cell id="2" _delta="must_exist">
<dashlets>
<dashlet id="99" xsi:type="DashletBadge" _delta="define">
<rank>8</rank>
<class>headphone</class>
</dashlet>
</dashlets>
</cell>
</cells>
</definition>
</menu>
</menus>
<user_rights>
<groups>
</groups>
<profiles>
</profiles>
</user_rights>
</itop_design>
id придумать, чтобы не пересекался с существующими, rank задать, исходя из необходимого порядка дашлетов.
Пара замечаний, если позволите (косметика и не только):
Название классов в UpperCamelCase (кроме линков, там lowerCamelCase – lnkClassOneToClassTwo
).
Атрибут id в snake_case (это косметика).
Тут все значения в нижнем регистре нужно, именно так они лягут в БД, а каждый тег value должен содержать атрибут id: <value id="wireless">wireless</value>
Насколько я понимаю, проектируется связь ПК с наушниками. Уверены, что тут нужна именно связь “многие-ко-многим” вместо просто простой ссылки на конкретный ПК из наушников?
Цитата
Тут все значения в нижнем регистре нужно, именно так они лягут в БД, а каждый тег value должен содержать атрибут id:<value id="wireless">wireless</value>
Там ещё есть php-файлик с русской локацией. Я просто за основу взял устройство монитора.
Цитата
Насколько я понимаю, проектируется связь ПК с наушниками. Уверены, что тут нужна именно связь “многие-ко-многим” вместо просто простой ссылки на конкретный ПК из наушников?
Да, нужны связи все ко всем.
И ещё вопрос, и простите меня за мою лень.
Не могу понять, вот я создаю модуль наушников, которые должны иметь линк с модулем ПК(персональный компьютер). В модуле ПК я добавляю ещё один item к списку
<items>
...
</item>
<item id="HeadPhone_list">
<rank>66</rank>
</item>
</items>
Т.е. получается по сути, я меняю модуль ПК. При установке нового модуля наушников, что я должен делать с модулем ПК ?