# Удаление неиспользуемых типов КЕ

**URL:** <https://community.itop-itsm.ru/t/udalenie-neispolzuemyh-tipov-ke/54>\
**Category:** Кастомизация\
**Created:** [10.Декабрь.2014 13:21:47 UTC](https://community.itop-itsm.ru/t/udalenie-neispolzuemyh-tipov-ke/54 "2014-12-10T13:21:47Z")\
**Posts on this page:** 18\
**Page:** 1

<div class="post-metadata">

**Author:** ![vladimir](https://community.itop-itsm.ru/user_avatar/community.itop-itsm.ru/vladimir/32/687_2.png) [@vladimir](https://community.itop-itsm.ru/u/vladimir)\
**Post date:** [10.Декабрь.2014 13:21:48 UTC](https://community.itop-itsm.ru/t/udalenie-neispolzuemyh-tipov-ke/54/1 "2014-12-10T13:21:48Z")

</div>

Продолжение обсуждения из [Изменение полей описания тикета](https://community.itop-itsm.ru/t/izmenenie-polej-opisaniya-tiketa/46/5):

> [@Изменение полей описания тикета](https://community.itop-itsm.ru/t/izmenenie-polej-opisaniya-tiketa/46/5):
>
> Спасибо. С созданием полей и элементов я разобрался… а удаление не нужных? Например категорически не нужен такой раздел КЕ как “Телефон”, “Мобильный телефон” и т.д. Существует такая возможность?
> 
> К сожалению, в офф. документации описаны только методы создания/добавления чего бы то ни было. А вот удаление не описано. Или я таки не там читал?

> [@Изменение полей описания тикета](https://community.itop-itsm.ru/t/izmenenie-polej-opisaniya-tiketa/46/6):
>
> Просто делаешь \_delta=“delete” на нужной ноде.
> 
> [XML Data Model Reference [iTop Documentation]](https://wiki.openitop.org/doku.php?id=2_1_0:customization:xml_reference#principlesdelete) - Delete this node. This node should not have child nodes (no contents)

> [@Изменение полей описания тикета](https://community.itop-itsm.ru/t/izmenenie-polej-opisaniya-tiketa/46/7):
>
> “Нода”= constant id, field id и тд ? Или я не верно понял?

---

<div class="post-metadata">

**Author:** ![vladimir](https://community.itop-itsm.ru/user_avatar/community.itop-itsm.ru/vladimir/32/687_2.png) [@vladimir](https://community.itop-itsm.ru/u/vladimir)\
**Post date:** [10.Декабрь.2014 13:25:09 UTC](https://community.itop-itsm.ru/t/udalenie-neispolzuemyh-tipov-ke/54/2 "2014-12-10T13:25:09Z")

</div>

@alex4561  
Нода в данном контексте - узел XML структуры.  
Например, чтобы удалить класс UserRequest, нужно в `datamodel.my-module.xml` внутри `<classes>` указать:

```
<class id="UserRequest" _delta="delete">
</class>

```

Аналогично с другими классами КЕ.

---

<div class="post-metadata">

**Author:** ![alex4561](https://community.itop-itsm.ru/letter_avatar_proxy/v4/letter/a/8797f3/32.png) [@alex4561](https://community.itop-itsm.ru/u/alex4561)\
**Post date:** [12.Декабрь.2014 06:56:32 UTC](https://community.itop-itsm.ru/t/udalenie-neispolzuemyh-tipov-ke/54/3 "2014-12-12T06:56:32Z")

</div>

Спасибо. Я так и подумал, но решил уточнить сей вопрос=)

---

<div class="post-metadata">

**Author:** ![alex4561](https://community.itop-itsm.ru/letter_avatar_proxy/v4/letter/a/8797f3/32.png) [@alex4561](https://community.itop-itsm.ru/u/alex4561)\
**Post date:** [12.Декабрь.2014 11:56:17 UTC](https://community.itop-itsm.ru/t/udalenie-neispolzuemyh-tipov-ke/54/4 "2014-12-12T11:56:17Z")

</div>

ToolKit при запуске дает вот такое сообщение. Что за каталог он пытается создать?Все перерыл… система CentOS 7

Error: Failed to create directory ‘’, please check the rights of the web server

---

<div class="post-metadata">

**Author:** ![harry\_stempher](https://community.itop-itsm.ru/letter_avatar_proxy/v4/letter/h/f1d935/32.png) [@harry\_stempher](https://community.itop-itsm.ru/u/harry_stempher)\
**Post date:** [12.Декабрь.2014 11:58:38 UTC](https://community.itop-itsm.ru/t/udalenie-neispolzuemyh-tipov-ke/54/5 "2014-12-12T11:58:38Z")

</div>

проверь права на корневую папку itop, он в ней создаст несколько папок и в conf

---

<div class="post-metadata">

**Author:** ![igsao10](https://community.itop-itsm.ru/user_avatar/community.itop-itsm.ru/igsao10/32/102_2.png) [@igsao10](https://community.itop-itsm.ru/u/igsao10)\
**Post date:** [24.Февраль.2015 10:57:26 UTC](https://community.itop-itsm.ru/t/udalenie-neispolzuemyh-tipov-ke/54/6 "2015-02-24T10:57:26Z")

</div>

Привет.  
Что-то у меня не получается удалить класс Phone, Выставил \_delta=“delete”

```
<class id="Phone" _delta="delete">
      <parent>TelephonyCI</parent>
      <properties>
        <category>bizmodel,searchable</category>
        <abstract>false</abstract>
        <key_type>autoincrement</key_type>
        <db_table>phone</db_table>
        <db_key_field>id</db_key_field>
        <db_final_class_field/>

```

в toolkit выдается ошибка загрузки модуля

```
Dumping target doc - looking for 'Phone'

An error occured while processing the PHP files of the data model:

Error loading module "itop-endusers-devices": could not find node for class(id:Phone) - Loaded modules: authent-external,authent-local,itop-attachments,itop-bridge-virtualization-storage,itop-config-mgmt,itop-datacenter-mgmt,itop-endusers-devices

Check the PHP files describing the data model before running the toolkit again !
    <naming>

```

Где еще нужно, что то сделать? мне нужно удалить типы принтер, планшет, телефон, моб.тел.  
Подскажите пожалуйста

---

<div class="post-metadata">

**Author:** ![vladimir](https://community.itop-itsm.ru/user_avatar/community.itop-itsm.ru/vladimir/32/687_2.png) [@vladimir](https://community.itop-itsm.ru/u/vladimir)\
**Post date:** [24.Февраль.2015 11:59:17 UTC](https://community.itop-itsm.ru/t/udalenie-neispolzuemyh-tipov-ke/54/7 "2015-02-24T11:59:17Z")

</div>

В каком файле выставлен `<class id="Phone" _delta="delete">`?  
Полагаю, что в _itop/datamodels/2.x/itop-endusers-devices/datamodel.itop-enduser-devices.xml_.  
Если внимательно посмотрите сообщение №2, то увидите, что удалять классы нужно в _datamodel.my-module.xml_. То есть сначала нужно создать свой модуль, а затем в него добавить:

```
<class id="Phone" _delta="delete">
</class>

```

Логика такая: сначала iTop собирает стандартную модель данных из _itop/datamodels/2.x/_, а затем применяет к ней изменения из _itop/extensions/_. Сейчас же вы просите iTop удалить класс, который он ещё не создал, и он на это вполне законно ругается.

Тема про собственные модули тут.

---

<div class="post-metadata">

**Author:** ![DenRassk](https://community.itop-itsm.ru/user_avatar/community.itop-itsm.ru/denrassk/32/7_2.png) [@DenRassk](https://community.itop-itsm.ru/u/DenRassk)\
**Post date:** [23.Март.2015 14:19:08 UTC](https://community.itop-itsm.ru/t/udalenie-neispolzuemyh-tipov-ke/54/8 "2015-03-23T14:19:08Z")

</div>

Я правильно понимаю, что интерфейса для управления Типами KE (создание, удаление, изменение) нет?  
По аналогии как Организациями, Контактами и надо всё делать вручную?

---

<div class="post-metadata">

**Author:** ![vladimir](https://community.itop-itsm.ru/user_avatar/community.itop-itsm.ru/vladimir/32/687_2.png) [@vladimir](https://community.itop-itsm.ru/u/vladimir)\
**Post date:** [24.Март.2015 18:31:49 UTC](https://community.itop-itsm.ru/t/udalenie-neispolzuemyh-tipov-ke/54/9 "2015-03-24T18:31:49Z")

</div>

@DenRassk изменения модели данных (новые типы КЕ, связи, удаление и добавление полей) делаются через собственные модули. Добавление и удаление контактов не является изменением модели данных.  
Вот тема по модулям: [Собственные модули](https://community.itop-itsm.ru/t/sobstvennye-moduli/63)

---

<div class="post-metadata">

**Author:** ![DenRassk](https://community.itop-itsm.ru/user_avatar/community.itop-itsm.ru/denrassk/32/7_2.png) [@DenRassk](https://community.itop-itsm.ru/u/DenRassk)\
**Post date:** [30.Март.2015 16:56:26 UTC](https://community.itop-itsm.ru/t/udalenie-neispolzuemyh-tipov-ke/54/10 "2015-03-30T16:56:26Z")

</div>

Решил удалить класс IP-телефон.  
С помощью формы на странице [https://wiki.openitop.org/doku.php?id=2\_1\_0:customization:start#creating\_a\_module](https://wiki.openitop.org/doku.php?id=2_1_0:customization:start#creating_a_module) создал модуль "Delet\_KE"  
По пути c:\inetpub\wwwroot\datamodels\2.x\itop-endusers-devices\ нашёл файл datamodel.itop-enduser-devices.xml и в нём описание класса IPPhone, скопировал его целиком в файл c:\inetpub\wwwroot\extensions\delet\_ke\datamodel.delet\_ke.xml в секцию .  
Пробежался ToolKitом, проблем нет, проапгрейдил им же модель - в общем всё нормально.  
Снял галку “только для чтения” с файла c:\inetpub\wwwroot\conf\production\config-itop.php и запустил [http://itop/setup](http://itop/setup) … в самом конце добрался до своего модуля, выбрал его? нажал Install и … словил ошибку “Error loading module “Delet\_KE”: could not find node for class(id:IPPhone) - Loaded modules: Delet\_KE”.  
Что за "node " он не может найти в классе IPPhone?

---

<div class="post-metadata">

**Author:** ![igsao10](https://community.itop-itsm.ru/user_avatar/community.itop-itsm.ru/igsao10/32/102_2.png) [@igsao10](https://community.itop-itsm.ru/u/igsao10)\
**Post date:** [31.Март.2015 03:12:01 UTC](https://community.itop-itsm.ru/t/udalenie-neispolzuemyh-tipov-ke/54/11 "2015-03-31T03:12:01Z")

</div>

Привет. У меня сначала была такая же ошибка, дело в том, что сначало надо создать свой модуль, Vladimir уже писал

> vladimir  
> 24 фев

> В каком файле выставлен ?  
> Полагаю, что в itop/datamodels/2.x/itop-endusers-devices/datamodel.itop-enduser-devices.xml.  
> Если внимательно посмотрите сообщение №2, то увидите, что удалять классы нужно в datamodel.my-module.xml. То есть сначала нужно создать свой модуль, а затем в него добавить:

> 

> Логика такая: сначала iTop собирает стандартную модель данных из itop/datamodels/2.x/, а затем применяет к ней изменения из itop/extensions/. Сейчас же вы просите iTop удалить класс, который он ещё не создал, и он на это вполне законно ругается.

---

<div class="post-metadata">

**Author:** ![vladimir](https://community.itop-itsm.ru/user_avatar/community.itop-itsm.ru/vladimir/32/687_2.png) [@vladimir](https://community.itop-itsm.ru/u/vladimir)\
**Post date:** [31.Март.2015 07:37:16 UTC](https://community.itop-itsm.ru/t/udalenie-neispolzuemyh-tipov-ke/54/12 "2015-03-31T07:37:16Z")

</div>

Во-первых, сначала устанавливаем пустой модуль через itop/setup, потом начинаем в нем что-то править. До этого твоего модуля нет в конфигурации iTop, toolkit его не видит, следовательно и изменения в нем не применяет.

Во-вторых, чтобы удалить ноду (узел XML структуры, class, field, properties и т.д.), не нужно копировать всё её содержимое в свой модуль. Достаточно указать сам узел, id и delta.

```
<class id="IPPhone" _delta="delete">
</class>

```

По class и id iTop однозначно определит, что ему нужно удалить.

Ещё раз, чтобы что-то удалить, модель данных модуля должна содержать такой код:

```
<?xml version="1.0" encoding="UTF-8"?>
<itop_design xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="1.0">
  <classes>
    <class id="IPPhone" _delta="delete">
    </class>
  </classes>
<menus>
</menus>
</itop_design>

```

Естественно, модель данных iTop к моменту удаления должна содержать удаляемый класс. В данном случае должен быть установлен модуль End User Devices. Кроме этого, в разделе `dependencies` твоего модуля нужно указать зависимости `itop-config-mgmt/2.0.0,itop-endusers-devices/2.0.0`. Это даст iTop’у понять, что твой модуль нужно собирать после указанных зависимостей.

---

<div class="post-metadata">

**Author:** ![DenRassk](https://community.itop-itsm.ru/user_avatar/community.itop-itsm.ru/denrassk/32/7_2.png) [@DenRassk](https://community.itop-itsm.ru/u/DenRassk)\
**Post date:** [31.Март.2015 09:55:46 UTC](https://community.itop-itsm.ru/t/udalenie-neispolzuemyh-tipov-ke/54/13 "2015-03-31T09:55:46Z")

</div>

igsao10   
Я прочитал сообщение № 2 и все действия провожу в созданном мною новом модуле datamodel.delet\_ke.xml, который лежт по пути :\inetpub\wwwroot\extensions\delet\_ke\ (о чём собственно и написал в своём сообщении).

**vladimir**  
Я ведь хочу удалить уже имеющийся в iTop класс IPPhone… что значит его ещё нет в iTop? Если можно - пошагово - с самого начала что и как делать.  
Большое спасибо

---

<div class="post-metadata">

**Author:** ![vladimir](https://community.itop-itsm.ru/user_avatar/community.itop-itsm.ru/vladimir/32/687_2.png) [@vladimir](https://community.itop-itsm.ru/u/vladimir)\
**Post date:** [31.Март.2015 10:32:48 UTC](https://community.itop-itsm.ru/t/udalenie-neispolzuemyh-tipov-ke/54/14 "2015-03-31T10:32:48Z")

</div>

> [@DenRassk](#):
>
> Я прочитал сообщение № 2

> [@DenRassk](#):
>
> что значит его ещё нет в iTop?

Противоречишь сам себе))  
Ещё раз.

1. Есть стандартная модель данных модуля в itop\datamodels.
2. Есть модель данных твоего модуля в itop\extensions.
3. А есть рабочая модель данных в itop\env-production.

Рабочая модель получается путем применения твоей модели к стандартной. Происходит это именно в таком порядке. Для того, чтобы этот порядок соблюдался, в своем модуле нужно указать, от каких стандартных моделей он зависит. Если ты хочешь сделать `_delta="delete"` на какой-то ноде, то эта нода должна быть предварительно создана через `_delta="define"`, а происходит это создание в стандартной модели (обычно).

Пошагово:

1. создаем пустой модуль, в dependencies указываем `itop-config-mgmt/2.0.0,itop-endusers-devices/2.0.0`;
2. устанавливаем модуль через setup;
3. вставляем в datamodel.some-module.xml код из сообщения 12 этой темы;
4. патчим через toolkit.

---

<div class="post-metadata">

**Author:** ![DenRassk](https://community.itop-itsm.ru/user_avatar/community.itop-itsm.ru/denrassk/32/7_2.png) [@DenRassk](https://community.itop-itsm.ru/u/DenRassk)\
**Post date:** [31.Март.2015 18:27:02 UTC](https://community.itop-itsm.ru/t/udalenie-neispolzuemyh-tipov-ke/54/15 "2015-03-31T18:27:02Z")

</div>

Описываю процедуру удаления ненужного типа КЕ шаг-шагом:

1. создаём (генерим) пустой модуль на странице [https://wiki.openitop.org/doku.php?id=2\_1\_0:customization:start#creating\_a\_module](https://wiki.openitop.org/doku.php?id=2_1_0:customization:start#creating_a_module) (у меня он называется “Delet\_KE”)

2. Распаковываем архив полученный в п.1 в папку c:\inetpub\wwwroot\extensions\

3. В раздел dependencies файла module.delet\_ke.php всталяем, между скобок и в одинарных апострафах, текст _‘itop-config-mgmt/2.0.0,itop-endusers-devices/2.0.0’_

4. Запускаем [http://itop/setup](http://itop/setup) и нажимаем Далее пока не увидим свой модуль и ставим на нём галку тем самым устанавливаем модуль свой модуль “Delet\_KE”

5. В файле файл datamodel.itop-enduser-devices.xml (лежит в папке c:\inetpub\wwwroot\datamodels\2.x\itop-endusers-devices\ ) находим описание не нужного мне типа КЕ - IPPone, выделяем и копируем из него код:

и вставляем его в мой файл datamodel.delet\_ke.xml (лежит в папке c:\inetpub\wwwroot\extensions\delet\_ke\ ) между , после чего меняем define на delete и в конце дописываем`</class>`.  
Должно получиться:

```
 <classes> <class id="IPPhone" _delta="delete"> </class> </classes>

```

1. Запускаем [http://itop/toolkit](http://itop/toolkit) , переходим на вторую страницу iTop update и нажимаем Refresh + Update iTop Code
2. УРА! У меня больше нет IP-телефона!

Есть три вопроса:

1. Я правильно понимаю, что я могу вписать сразу все не нужные мне типы КЕ последовательно указав их между classes?
2. Где хранятся IDшники остальных типов КЕ (у меня в файле их только 8, а в iTop показывает 30)?
3. Можно ли при создании новых типов брать как шаблон имеющиеся?

---

<div class="post-metadata">

**Author:** ![vladimir](https://community.itop-itsm.ru/user_avatar/community.itop-itsm.ru/vladimir/32/687_2.png) [@vladimir](https://community.itop-itsm.ru/u/vladimir)\
**Post date:** [02.Апрель.2015 13:11:25 UTC](https://community.itop-itsm.ru/t/udalenie-neispolzuemyh-tipov-ke/54/16 "2015-04-02T13:11:25Z")

</div>

Ответы на вопросы:

1. Да.
2. В [моделях данных остальных модулей](https://wiki.openitop.org/doku.php?id=2_1_0:datamodel:start).
3. Да.

---

<div class="post-metadata">

**Author:** ![DenRassk](https://community.itop-itsm.ru/user_avatar/community.itop-itsm.ru/denrassk/32/7_2.png) [@DenRassk](https://community.itop-itsm.ru/u/DenRassk)\
**Post date:** [03.Апрель.2015 18:43:19 UTC](https://community.itop-itsm.ru/t/udalenie-neispolzuemyh-tipov-ke/54/18 "2015-04-03T18:43:19Z")

</div>

Владимир, спасибо за ответы.  
Перед тем как удалять устройства, решил свести их в табличку вида:  
Название типа КЕ (из меню) - class\_id (из модуля)  
и… опять у меня затык…  
 ![](https://community.itop-itsm.ru/uploads/default/14/8ee2fcbb747a8ae6.JPG)  
(IP-телефона нет, так как мы его удалили выше парой сообщений).  
Делал очень просто - выписал все class\_id из всех datamodel.itop-ИМЯ\_МОДУЛЯ-mgmt.xml и пошёл смотреть перевод в соответствующем ru.dict.itop-ИМЯ\_МОДУЛЯ-mgmt.php  
Вспоткнулся на первом же datamodel.itop-enduser-devices.xml … у него нет перевода… то есть он не должен попадать в список так как в списке типов КЕ нет ни одного на английском языке.  
Однако я ведь удалил из списка IP-телефон - IPPhone и он был в списке на русском языке… а нашёл я его в ru.dict.itop-config-mgmt.php… особенности руссификации или так и должно быть?  
Дальше был class\_id=TelephonyCI, перевод которого в ru.dict.itop-config-mgmt.php звучит как “Телефон **ия** ” … блин, но такого нет в списке (см. выше)  
И как оказалось позже таких class\_id, которых нет в списке типов КЕ показываемом в iTop достаточно много.

Собственно вопрос - _где определяется какие типы КЕ попадают в этот список?_  
Зачем мне это надо? Да вот думаю, что вместо удаления ненужных типов КЕ можно их просто прятать (не показывать в меню типов КЕ) и всё.  
Можно так сделать?

Пока отвечают… пишу дальше… в datamodel.itop-config-mgmt.xml отыскал секцию ` <field id="type" xsi:type="AttributeEnum"> <values> <value id="NetworkDevice">NetworkDevice</value> <value id="Server">Server</value> <value id="SANSwitch">SANSwitch</value> <value id="StorageSystem">StorageSystem</value> <value id="Rack">Rack</value> <value id="Enclosure">Enclosure</value> <value id="PC">PC</value> <value id="Tablet">Tablet</value> <value id="Phone">Phone</value> <value id="MobilePhone">MobilePhone</value> <value id="Printer">Printer</value> <value id="DiskArray">DiskArray</value> <value id="NAS">NAS</value> <value id="TapeLibrary">TapeLibrary</value> <value id="IPPhone">IPPhone</value> <value id="Peripheral">Peripheral</value> <value id="PowerSource">PowerSource</value> <value id="PDU">PDU</value> </values>`  
и всё в ней хорошо, да только не все типы КЕ присутствуют ☹  
“Будем искать дальше” (Цитата из фильма “Бриллиантовая рука” 😉 )

---

<div class="post-metadata">

**Author:** ![vladimir](https://community.itop-itsm.ru/user_avatar/community.itop-itsm.ru/vladimir/32/687_2.png) [@vladimir](https://community.itop-itsm.ru/u/vladimir)\
**Post date:** [03.Апрель.2015 21:22:34 UTC](https://community.itop-itsm.ru/t/udalenie-neispolzuemyh-tipov-ke/54/19 "2015-04-03T21:22:34Z")

</div>

Зачем так сложно? Таблицы, классы, переводы… голову сломаешь. Идешь в _Инструменты админа → Модель данных_, и вот перед тобой все классы и их id.

> [@DenRassk](#):
>
> Вспоткнулся на первом же datamodel.itop-enduser-devices.xml … у него нет перевода…

Если обратишь внимание, файл английского языка тоже пустой.

> [@DenRassk](#):
>
> то есть он не должен попадать в список так как в списке типов КЕ нет ни одного на английском языке.

Язык не при чем. У любой сущности в системе есть системное название (id), которое при отображении просто заменяется на значение из словаря нужного языка.

> [@DenRassk](#):
>
> И как оказалось позже таких class\_id, которых нет в списке типов КЕ показываемом в iTop достаточно много.
> 
> Собственно вопрос - где определяется какие типы КЕ попадают в этот список?

Классы бывают [_абстрактные_](https://ru.wikipedia.org/wiki/%D0%90%D0%B1%D1%81%D1%82%D1%80%D0%B0%D0%BA%D1%82%D0%BD%D1%8B%D0%B9_%D0%BA%D0%BB%D0%B0%D1%81%D1%81) (нужны для передачи свойств дочерним классам) и _реальные_ (нужны для создание объектов). Если эта картинка - выпадающий список при создании нового объекта, то тут только реальные классы.

> [@DenRassk](#):
>
> Зачем мне это надо? Да вот думаю, что вместо удаления ненужных типов КЕ можно их просто прятать (не показывать в меню типов КЕ) и всё.Можно так сделать?

Нельзя. Можно просто не обращать на них внимания, делать вид, будто их не существует. Это будет самое верное решение (на мой взгляд, конечно). Добавлять новые единицы обычно требуется не так часто, чтобы уделять такое внимание созданию специального удаляющего модуля. Лучше настрой дашборды так, чтобы там были только нужные КЕ, а затем сделай эти настройки дашборда [настройками по умолчанию.](https://community.itop-itsm.ru/t/kak-primenit-otredaktirovannyj-dashbord-dlya-vseh-i-navsegda/119/2)

> [@DenRassk](#):
>
> в datamodel.itop-config-mgmt.xml отыскал секцию \<field id=“type” xsi:type=“AttributeEnum”\>

Отыскал ты её о в объявлении класса Модель. Не трогай ничего) Всех типов КЕ там и и не должно быть, а только те, у которых есть поле выбора модели.
