Доброе утро, подскажите.
Необходимо добавить новые статусы ко всем КЕ.
Статусы типа Утилизирован, В ремонте, Выдан, и тд.
Так же интересует, как добавить во всем Ке поля типа Дата списания.
Требуется именно что бы можно было выбирать дату а не пустое поле как в инструкции на вики.
Со статусами разобрался.
Вот мой код добавляющий статусы во все Ке из 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.