Как можно отредактировать системные КЕ?

Решено.
Добавил вкладку не через xsi:type=“AttributeLinkedSet”, а через xsi:type=“AttributeLinkedSetIndirect” по аналогии с системными вкладками, описанными в /path/to/itop/datamodels/2.x/itop-config-mgmt/datamodel.itop-config-mgmt.xml, создав дополнительный класс lnkServerToVLAN.

вобщем разобрался я что мне требовалось сделать, все как и говорил выше abb-user работает, вот только почему никто подробности не пишет, вот думаю стоит тут это все описывать иль нет

1 лайк

Ну конечно стоит! Форум именно так и работает :slight_smile:

Как тут выложить код как есть, форум его коверкает.

Выложить код либо скрином, либо с большими мучениями :slight_smile:
Тоже по 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-&gt;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-&gt;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>

Т.е. получается по сути, я меняю модуль ПК. При установке нового модуля наушников, что я должен делать с модулем ПК ?