Утверждение UserRequest

Добрый день.
Помогите начинающему.
Как послать Запрос на утверждение.
Поле Утверждающий заблокировано и в нем написано неопределенный
В меню Действие пункта На утверждение нет
В модели данных написано, что Status может принимать значение "Ожидание утверждения"
Заранее спасибо за ответ.

Добрый день, @iilitv, ещё актуально?
Какая версия модуля тикетов?
В модели данных есть вкладка с жизненным циклом объекта, там можно увидеть, из какого статуса в какой есть переход.

Спасибо. Разобрался.

Добрый день.
Столкнулся еще с одной проблемой.
Какой профиль, кроме администратора, может быть у лица, утверждающего Запрос (UserRequest) ?
Можно ли утверждать запрос через Портал ?
Столкнулся с тем, что если у лица, утверждающего Запрос, нет профиля админа, в меню Другие действия “Утвердить” и “Отклонить” не появляется.
Или я неправильно понимаю механизм утверждения Запроса?
Помогите пожалуйста.

@iilitv, какой профиль какие действия и с какими объектами может совершать, можно посмотреть в Инструментах админа -> Профили -> Профиль -> Матрица разрешений. Набор доступных действий может меняться в зависимости от вариантов установленных модулей.

Механизм утверждения позволяет агентам “спрашивать разрешения” выполнять запрос у руководителя. Например, пользователь запросил доступ в какую-то корпоративную систему, а порядок доступа туда никак не регламентирован. Утверждение через портал, насколько я помню, не предусмотрено.

Еще раз извините за беспокойство. Дело в том, что наш начальник считает что у него не должно быть прав Администратора. Все Профили я пересмотрел. Ни в одном не указано, что Запрос можно Утвердить. И только с правами Администратора это возможность появляется. В профиле Change Approver четко указано - Утвердить/Отклонить Изменения. А как быть с Запросом ?

Какой у вас хороший начальник) он абсолютно прав!
Давайте начнем со сбора информации о вашей версии iTop и установленных модулях.

iTop версия 2.2.0-2459 основан на 2015-09-22 18:18:47
Модель данных: 2.2.0
MySQL: 5.5.44-MariaDB
PHP: 5.4.16

External user authentication (2.2.0)
User authentication based on LDAP (2.2.0)
User authentication based on the local DB (2.2.0)
Send Ticket Log Updates by Email (1.0.0)
Tickets Attachments (2.2.0)
Configuration Management (CMDB) (2.2.0)
Datacenter Management (2.2.0)
End-user Devices Management (2.2.0)
Ticket Creation from Emails (Standard) (2.6.2)
Advanced Storage Management (2.2.0)
Virtualization Management (2.2.0)
Network Management (2.0.1)
Links between virtualization and storage (2.2.0)
Change Management ITIL (2.2.0)
Incident Management ITIL (2.2.0)
Known Errors Database (2.2.0)
Problem Management (2.2.0)
User request Management ITIL (2.2.0)
Service Management (2.2.0)
IP Management (2.0.2)
IPv6 Management (2.0.2)
iTop Storage Mgmt Adaptor (2.0.0)
iTop Virtualization Mgmt Adaptor (2.0.0)
iTop Config Mgmt Adaptor (2.0.1)

Я нашел вот эту доку https://wiki.openitop.org/doku.php?id=2_2_0:customization:add-profile-sample
Но не разобрался, где в модели данных искать имена “stimulus”

На всякий случай прилагаю модуль для создания профиля с правами на утверждение запроса

<?xml version="1.0" encoding="UTF-8"?>
<itop_design xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="1.0">
  <constants>
  </constants>
  <classes>
  </classes>
  <menus>
  </menus>
  <user_rights>
    <groups>
    </groups>
    <profiles>
      <profile id="50" _delta="define">
        <name>Request Approver</name>
        <description>Request Approver</description>
        <groups>
          <group id="class:UserRequest">
            <actions>
              <action id="ev_approve" xsi:type="stimulus">allow</action>
              <action id="ev_reject" xsi:type="stimulus">allow</action>
            </actions>
          </group>
        </groups>
      </profile>
    </profiles>
  </user_rights>
</itop_design>
1 лайк

@vladimir Подскажите как переопределить существующий модуль, мне нужно скрыть приоритет при создании запроса и изменить влияние по умолчанию на персону

Возможно ли сделать автоматическую смену статуса Запроса с “Новый” на “Ожидание утверждения”. Т.е. в подкатегории услуг ввести два поля: “Требует утверждения” и “Утверждающий”. И чтоб при создании Запроса он сразу отправлялся на утверждение если флаг “Требует утверждения” - истина.

Для объектов с жизненным циклом внутри тега <lifecycle> расписаны статусы и флаги полей <flags> для каждого статуса. Этими флагами (<read_only/>,<hidden/> и др.) задаётся поведение соответствующего поля в нужном статусе. Таким образом вам нужно для поля priority в статусе new установить флаг <hidden/>. Что касается влияния, то тут нужно переопределить <default_value> внутри <field id="impact">. Чтобы переопределить существующий элемент модели данных, используется _delta="redefine". Весь код класса тянуть не нужно, достаточно только переопределяемых элементов и их родителей. Ниже пример модели данных вашего модуля.

<class id="UserRequest">
  <fields>
    <field id="impact" xsi:type="AttributeEnum">
      <values>
        <value id="1">1</value>
        <value id="2">2</value>
        <value id="3">3</value>
      </values>
      <sql>impact</sql>
      <default_value _delta="redefine">3</default_value>
      <is_null_allowed>false</is_null_allowed>
      <display_style>list</display_style>
    </field>
  </fields>
  <lifecycle>
    <states>
      <state id="new">
        <flags>
          <attribute id="priority" _delta="redefine">
            <hidden/>
          </attribute>
        </flags>
      </state>
    </states>
  </lifecycle>
</class>

Но и этот пример избыточен. Содержимое тега field можно было бы сократить:

    ...
    <field id="impact" xsi:type="AttributeEnum">
      <default_value _delta="redefine">3</default_value>
    </field>
    ...
1 лайк

Да, это вполне реализуемо. Посмотрите в сторону метода OnInsert в модели данных UserRequest:

    <method id="OnInsert">
      <static>false</static>
      <access>protected</access>
      <type>Overload-DBObject</type>
      <code><![CDATA[
protected function OnInsert()
{
	$this->ComputeImpactedItems();
	$this->Set('last_update', time());
	$this->Set('start_date', time());
}]]></code>
    </method>

Он срабатывает при первом сохранении объекта и может в этот момент что-то для вас сделать. Например, добавьте новый метод WaitingForApproval, который будет отправлять запрос в статус “Ожидание утверждения”. Затем добавьте проверку флаг “Требует утверждения” и вызов нового метода в OnInsert если флаг TRUE.

Добрый день. У нашего начальства возник вопрос многоуровневого утверждения. Т.е. сначала утверждает начальник отдела, потом начальник департамента, потом СБ. Это вообще возможно сделать ???

Добрый день. Метод OnInsert не помог. Объект еще не создан. Использовал Метод AfterInsert.
Пока все получилось, даже 3-х уровневое утверждение (в ручном и в автомате).
Но, возникла масса вопросов.Где найти список Стандартных методов и список Стандартных событий, по которым они вызываются? Как в Доп. меню заблокировать некоторые пункты по условию? Например: если я описал, что данная подкат. услуг не требует утверждения - не нужно выводить в доп. меню “Ожидать утверждения”? Или, хотя-бы выводить сообщение, что не нужно делать это действие? Метод “SetApprover” из класса “UserRequest”- не помог. Я вообще не понял, когда он срабатывает.Как оперативно изменить список выводимых полей для редактирования, если другое поле изменилось? Например: поле имеет значение “Запрос” - список утверждающих появляется, поле имеет значение “Инцидент” - исчезает.

Только в коде приложения.

https://wiki.openitop.org/doku.php?id=2_2_0:customization:extensions_api
Через iPopupMenuExtension можно добавить кнопку, если нужно утверждение.

Переписать iTop. Набор полей определяется классом объекта, а их отображение - статусами этого объекта.

Большое спасибо Владимир. Только Вы в основном и отвечаете.Но я все равно не очень понимаю механизм. В КАКОЙ МОМЕНТ срабатывают методы.(например из userrequets - методы SetApprover и ComputeValue - это стандартные методы ?) Если имя метода начинается с Set, Get, Calc, On, After - это стандартные методы ? Как свой метод подключить к событию ? Точки останова нет. Как мне оперативно посмотреть, что происходит с iTop в какой то момент времени? Сработал метод или нет ? Можно ли что-то вывести на экран ? Echo не срабатывает. Заранее спасибо за терпение и понимание.

Итак, мы незаметно перешли от доработки iTop к разработке на PHP))

Что в вашем понимании “стандартные методы”? В моем - всё стандартное заканчивается на этой странице: http://www.combodo.com/documentation/api-ref-extensions/namespaces/global.html. Любые изменения iTop вне этих интерфейсов нужно делать с пониманием всего внутреннего устройства, которое даже при всем желании я не смогу описать на форуме.

Если хотите по-хорошему, ставьте PhpStorm или NetBeans, настраивайте xdebug, и будут вам точки останова и полное текущее состояние. Пару-тройку дней придется потратить на изучение самих инструментов, но оно того стоит!

Если хотите по-быстрому, то var_dump(), error_log() и Sublime Text вполне могут сгодиться. Используйте для вывода php_error.log, в веб-интерфейс часто не попадает вывод. И выставьте в php.ini настройки для development режима.

Подскажите, как решить задачу.
Необходимо в чтобы в списке “утверждающих” был список лиц, не только из одной организации.
т.е. оргструктура организации такая

Компания
-Руководство
-Отдел управления
-Отдел тех поддержки
-Отдел 1,2,3…

заявку может завести пользователь из “Отдел 1”, а запросить “Утверждение” необходимо у лица, который находится в организации “руководство”.