iTop ITSM & CMDB по-русски

Статусы и новые поля

Доброе утро, подскажите.
Необходимо добавить новые статусы ко всем КЕ.
Статусы типа Утилизирован, В ремонте, Выдан, и тд.
Так же интересует, как добавить во всем Ке поля типа Дата списания.
Требуется именно что бы можно было выбирать дату а не пустое поле как в инструкции на вики.

Со статусами разобрался.
Вот мой код добавляющий статусы во все Ке из PhysicalDevice

<?xml version="1.0" encoding="UTF-8"?>
 <itop_design xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="1.0">
  <classes>
<class id="PhysicalDevice">
       <fields>
    <field id="serialnumber" xsi:type="AttributeString">
      <sql>serialnumber</sql>
      <default_value/>
      <is_null_allowed>true</is_null_allowed>
    </field>
    <field id="location_id" xsi:type="AttributeExternalKey">
      <filter><![CDATA[SELECT l FROM Organization AS child JOIN Organization AS root ON child.parent_id BELOW root.id JOIN Location AS l ON l.org_id=root.id WHERE child.id= :this->org_id]]></filter>
      <dependencies>
        <attribute id="org_id"/>
      </dependencies>
      <sql>location_id</sql>
      <target_class>Location</target_class>
      <is_null_allowed>true</is_null_allowed>
      <on_target_delete>DEL_MANUAL</on_target_delete>
      <allow_target_creation>false</allow_target_creation>
    </field>
    <field id="location_name" xsi:type="AttributeExternalField">
      <extkey_attcode>location_id</extkey_attcode>
      <target_attcode>name</target_attcode>
    </field>
    <field id="status" xsi:type="AttributeEnum">
      <values>
        <value id="production">production</value>
        <value id="implementation">implementation</value>
        <value id="stock">stock</value>
        <value id="obsolete">obsolete</value>
      </values>
      <sql>status</sql>
      <default_value>production</default_value>
      <is_null_allowed>true</is_null_allowed>
      <display_style>list</display_style>
    </field>
    <field id="brand_id" xsi:type="AttributeExternalKey">
      <sql>brand_id</sql>
      <target_class>Brand</target_class>
      <is_null_allowed>true</is_null_allowed>
      <on_target_delete>DEL_MANUAL</on_target_delete>
    </field>
    <field id="brand_name" xsi:type="AttributeExternalField">
      <extkey_attcode>brand_id</extkey_attcode>
      <target_attcode>name</target_attcode>
        </field>
        <field id="model_id" xsi:type="AttributeExternalKey">
      <filter><![CDATA[SELECT Model WHERE brand_id=:this->brand_id AND type=:this->finalclass]]></filter>
      <dependencies>
        <attribute id="brand_id"/>
      </dependencies>
      <sql>model_id</sql>
      <target_class>Model</target_class>
      <is_null_allowed>true</is_null_allowed>
      <on_target_delete>DEL_MANUAL</on_target_delete>
    </field>
    <field id="model_name" xsi:type="AttributeExternalField">
      <extkey_attcode>model_id</extkey_attcode>
      <target_attcode>name</target_attcode>
    </field>
    <field id="asset_number" xsi:type="AttributeString">
      <sql>asset_number</sql>
      <default_value/>
      <is_null_allowed>true</is_null_allowed>
    </field>
    <field id="purchase_date" xsi:type="AttributeDate">
      <sql>purchase_date</sql>
      <default_value/>
      <is_null_allowed>true</is_null_allowed>
    </field>
    <field id="end_of_warranty" xsi:type="AttributeDate">
      <sql>end_of_warranty</sql>
      <default_value/>
      <is_null_allowed>true</is_null_allowed>
    </field>
	<field id="status" xsi:type="AttributeEnum" _delta="redefine">
    <values>
<value>Deommissioned</value>
 <value>Delete</value>
  <value>Deployed</value>
    <value>Disposed</value>
      <value>In Inventory</value>
      <value>In Transit</value>
      <value>Ordered</value>
<value>Reserved</value>
 <value>Return to IT</value>
  </values>
   <sql>status</sql>
   <default_value></default_value>
    <is_null_allowed>false</is_null_allowed>
  </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="endwork">
          <rank>125</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>
      </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>
<item id="endwork">
          <rank>125</rank>
   </item>
      </items>
    </search>
    <list>
      <items>
        <item id="finalclass">
          <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>
      </items>
    </list>
  </presentation>
</class>
     </classes>
      <menus>
         </menus>
     <user_rights>
      <groups>
      </groups>
      </user_rights>
      </itop_design>

Добавлял в код

 <field id="endwork" xsi:type="AttributeDate" _delta="define">
            <sql>endwork</sql>
      <default_value/>
      <is_null_allowed>true</is_null_allowed>
    </field>

Но поля с выбором даты не появилось

В <presentation> новое поле добавили? Если endwork добавили в PhysicalDevice, то вывод в presentation нужно добавлять во всех дочерних реальных классах.

Кода столько не нужно. Достаточно указать переопределяемые элементы и родителей. См. пример.

В value не хватает id:

<field id="status" xsi:type="AttributeEnum">
  <values>
    <value id="production">production</value>
    <value id="implementation">implementation</value>
    <value id="stock">stock</value>
    <value id="obsolete">obsolete</value>
  </values>
  <sql>status</sql>
  <default_value>production</default_value>
  <is_null_allowed>true</is_null_allowed>
  <display_style>list</display_style>
</field>

А первоначальное объявление status нужно убрать.

мм если я правильно понял то мой код должен быть таким

    <?xml version="1.0" encoding="UTF-8"?>
 <itop_design xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="1.0">
  <classes>
<class id="PhysicalDevice">
   <fields>
<field id="status" xsi:type="AttributeEnum" _delta="redefine">
    <values>
<value id="Deommissioned">Deommissioned</value>
 <value id="Delete">Delete</value>
  <value id="Deployed">Deployed</value>
    <value id="Disposed">Disposed</value>
      <value id="In Inventory">In Inventory</value>
      <value id="In Transit">In Transit</value>
      <value id="Ordered">Ordered</value>
<value id="Reserved">Reserved</value>
 <value id="Return to IT">Return to IT</value>
  </values>
   <sql>status</sql>
   <default_value>production</default_value>
     <is_null_allowed>true</is_null_allowed>
     <display_style>list</display_style>
        </field>
      </fields>
      </class>
  </classes>
  <menus>
  </menus>
  <user_rights>
    <groups>
    </groups>
    <profiles>
    </profiles>
  </user_rights>
</itop_design>

Почти. Теги user_rights и menus тоже можно убрать. В default_value нужно указать что-то из ваших новых значений. И рекомендую все статусы и соответствующие id перевести в нижний регистр и пробелы заменить подчеркиваниями, а красоту наводить потом в файлах переводов.

Хотел бы на этом моменте поточнее)
Как именно и в каких файлах менять.
Если можно с примером.

И если можно, подскажите, как можно массово вставить или применить ко всем ке

 </item>
	<item id="endwork">
      <rank>125</rank>
        </item>

Я такого способа не знаю. Мне очень помогает нормальный редактор кода.
Если у ваших дочерних классов вывод совпадает с родительским (что само по себе странно), то presentation в дочерних можно не повторять. Такое может быть если дочерние классы имею одинаковый состав полей, но разные методы.

По поводу переводов. Зайдите в папку datamodels/itop-config-mgmt. Там есть файлы переводов, название этих файлов начинается с обозначения языка, например, en.itop-config… Внутри найдете ассоциативный массив, ключи которого соответствуют системным названиям полей, а значения – человеческим. Ваша задача – сделать аналогичный файл для вашего модуля. Можно сделать несколько для разных языков.

И еще. После добавления любого нового файла в установленный ранее модуль нужно снова прогнать установку через setup, чтобы файлы скопировались в рабочую директорию и записались в конфиг-файл. Тулкит этого не сделает!

Понял спасибо, как закончу закину модули на форум.

А какой используете?.
Я использую встроеный редактор в winscp, но он не очень удобный.

Подскажите, необходимо сделать так что бы в этой вкладке можно было добавлять любое физическое Ке.
Я скопировал код (Прикладное решение) для примера.

<field id="physicaldevice_list" xsi:type="AttributeLinkedSetIndirect" _delta="define">
           <linked_class>lnkApplicationSolutionToFunctionalCI</linked_class>
          <ext_key_to_me>functionalci_id</ext_key_to_me>
          <count_min>0</count_min>
          <count_max>0</count_max>
          <ext_key_to_remote>applicationsolution_id</ext_key_to_remote>
          <duplicates/>
        </field>

Мне Sublime Text нравится.

Там же, где вы взяли код примера, посмотрите, как объявлен класс lnkApplicationSolutionToFunctionalCI. Это класс-ссылка для создания связи “многие-ко-многим” между классами ApplicationSolution и FunctionalCI. Вам нужно сделать аналогично, но с обоих сторон будут PhysicalDevice.
Хотя смысл этого мне не совсем понятен. Если вам нужно отобразить связь по сети, для этого есть отдельный набор КЕ.

не совсем вас понял.

<field id="physicaldevice_list" xsi:type="AttributeLinkedSetIndirect" _delta="define">
       <linked_class>PhysicalDeviceToPhysicalDevice</linked_class>
      <ext_key_to_me>functionalci</ext_key_to_me>
      <count_min>0</count_min>
      <count_max>0</count_max>
      <ext_key_to_remote>applicationsolution_id</ext_key_to_remote>
      <duplicates/>
    </field>
Но так не будет работать.

С переводом все получилось, спасибо!.

Хмм как понять по сети?. И что за отдельный набор КЕ

Мне надо добавлять к КЕ “Персональный компьютер” любое физическое устройство.

В этом же должен быть какой-то смысл? Вы же не ради самого добавления хотите его добавить. Под связью по сети я имел ввиду отображение структуры ip-сети вашей организации. Отдельный набор КЕ - специальные КЕ типа VLAN, Сетевой интрефейс, Сетевое устройство и др.

Нужно сделать класс <class id="lnkPhysicalDeviceToPhysicalDevice">, в котором сделать два поля <field id="device_1_id" xsi:type="AttributeExternalKey"> и <field id="device_2_id" xsi:type="AttributeExternalKey">. Дальше в поле <field id="physicaldevice_list" xsi:type="AttributeLinkedSetIndirect"> device_1_id указать в ext_key_to_me, а device_2_id в ext_key_to_remote.

Поставьте Sublime Text, откройте им папку datamodels, нажмите ctrl+shift+f и найдите объявление класса lnkApplicationSolutionToFunctionalCI.