Время решения заявки задать агентом

Обсуждение вопросов и решений

Модератор: ykolesnikov

freeddos
OTRS Новобранец
Сообщения: 50
Зарегистрирован: 24 июл 2013, 08:34

Время решения заявки задать агентом

Сообщение freeddos » 14 авг 2013, 08:16

Здравствуйте.
Заявки создаются агентами через Заявки->Новая телефонная заявка.
Каким образом сделать так чтобы агент который ее создает ставил время выполнения заявки?
Тоесть сегодня он завел заявку и ее нужно выполнить(по его мнению) за 2 дня, завел заявку и через 2 дня если заявка не закрыта пришло уведомление, типо АЛАРМ! нужно закрывать или чтото делать.
А в следующий раз он заводит заявку и он считает что ее нужно решить через 1 день. и все по той же схеме напоминания.
Как реализовать это?

PS время решения я так же видел в настройках очереди, но это не подходит т.к. на каждую заявку в очереди может быть разное решение.
Ubuntu 12.04, OTRX 3.2.9, MySQL

ykolesnikov
OTRS Гуру
Сообщения: 3119
Зарегистрирован: 24 дек 2010, 09:27
Откуда: Череповец
Благодарил (а): 4 раза
Поблагодарили: 5 раз
Контактная информация:

Re: Время решения заявки задать агентом

Сообщение ykolesnikov » 14 авг 2013, 08:51

Есть стандартное динамическое поле, не помню как в оригинале, я его переназвал DueDate - выполнить к дате. В него можно заносить желаемую дату выполнения. Проблема в том, что по наступлению этой даты, т.е по значению этого поля нет события для настройки уведомления.
Я поднимал эту тему в - viewtopic.php?f=2&t=1062, там даже изложен подход к реализации. Но поскольку я сам не программист в Perl, то решения, пока, так и нет.
Если возьметесь довести до ума, будет здорово. Думаю, многие будут благодарны. :oops:
С уважением Юрий Колесников
OTRS 5.0.22, ITSM 5.0.22
OpenSuse 13.2, MariaDB 10.0.22
OTRS 5.0.22, ITSM 5.0.22 тестовая

freeddos
OTRS Новобранец
Сообщения: 50
Зарегистрирован: 24 июл 2013, 08:34

Re: Время решения заявки задать агентом

Сообщение freeddos » 14 авг 2013, 11:01

В моей версии в планировщике задач, появилось мое динамическое поле в фильтре заявок.
НО! там можно выбрать только диапазон "между", что естественно не подходит, потому что я не могу задать диапазон.
следовательно нужно как то сделать графу "за последние", как например для граф, создана, или ожидание.
Я создал поле с параметром типа "Data/Time".
Ubuntu 12.04, OTRX 3.2.9, MySQL

alexus
OTRS Гуру
Сообщения: 4984
Зарегистрирован: 20 сен 2010, 18:17
Откуда: Москва
Благодарил (а): 63 раза
Поблагодарили: 59 раз

Re: Время решения заявки задать агентом

Сообщение alexus » 14 авг 2013, 11:08

Нужен кастом для создания события эскалации для динамического поля. По умолчанию таких свойств у дин. полей типа Дата и Время нет.
С уважением,
Алексей Юсов

Prod: OTRS ITSM 5.0.14 on CentOS 7 x64 Linux with MySQL 5.7

Radiant System OTRS Intergrator RU
Группа OTRS Community в Teleram
Хотите внедрить OTRS? Спросите меня как!

yuri0001
OTRS Бывалый
Сообщения: 492
Зарегистрирован: 11 фев 2011, 20:25
Откуда: Череповец

Re: Время решения заявки задать агентом

Сообщение yuri0001 » 14 авг 2013, 20:32

alexus писал(а):Нужен кастом для создания события эскалации для динамического поля. По умолчанию таких свойств у дин. полей типа Дата и Время нет.
Коллеге, автору темы. Я уже писал выше, почитайте тему по ссылке. Там есть описание метода доработки, надо только реализовать схему. Настройками - не решается задача. :oops:
С уважением
Ю. Колесников
OTRS 3.3.1, ITSM 3.3.1, SUSE 12, MySQL5

alexus
OTRS Гуру
Сообщения: 4984
Зарегистрирован: 20 сен 2010, 18:17
Откуда: Москва
Благодарил (а): 63 раза
Поблагодарили: 59 раз

Re: Время решения заявки задать агентом

Сообщение alexus » 14 авг 2013, 20:36

Кто готов проспонсировать разработку?
С уважением,
Алексей Юсов

Prod: OTRS ITSM 5.0.14 on CentOS 7 x64 Linux with MySQL 5.7

Radiant System OTRS Intergrator RU
Группа OTRS Community в Teleram
Хотите внедрить OTRS? Спросите меня как!

freeddos
OTRS Новобранец
Сообщения: 50
Зарегистрирован: 24 июл 2013, 08:34

Re: Время решения заявки задать агентом

Сообщение freeddos » 16 авг 2013, 14:07

Я разбираюсь модулем GenericAgent.pm, как по ссылке написано.
Идея понятна.
Но вот как можно дебажить этот pm, например там вычисляется разница во времени, поэтому вопрос как например эту переменную записать в файл чтобы посмотреть что вообще туда пишется.

PS и так же как посмотреть LogObject->Log, т.к. Просматривается этот объект где находится ошибка что время не соответствует, как просмотреть что в этот Лог падает.
Ubuntu 12.04, OTRX 3.2.9, MySQL

freeddos
OTRS Новобранец
Сообщения: 50
Зарегистрирован: 24 июл 2013, 08:34

Re: Время решения заявки задать агентом

Сообщение freeddos » 16 авг 2013, 16:18

В общем что получается.
1. добавил в GenericAgent.pm блок который обрабатывает разницу в датах и блок который должен менять значение у дополнительного динамического поля.
2. Блок даты, тоесть изменения даты работает нормально(как было в примере по ссылке, даты вычислить не может значит пишет в лог ошибку). До этого блока обрабатывает нормально, тоесть в логах появляются записи об нужных ошибках, для каждого динамического поля.
3. Когда блок пишет в лог очередное сообщение, в это время проверяем имя динамического поля, если оно соответствует моему дополниительному тогда заходим в блок смены параметра.
4. Блок смены значения.

Код: Выделить всё

 $Success = $Self->{BackendObject}->ValueSet(
                DynamicFieldConfig => $DynamicFieldConfig,
                ObjectID           => $Param{TicketID},
                Value              => 'Тут вставляю мой параметр текстовый',
                UserID             => 1,
);
5. Потом когда все отрабатывает, в заявке(Предворительно динамическое поле которое изменяется я сделал видимым в заявке) и значение не меняется.

Каким образом можно поменять значение через perl у моего динамического поля.
Ubuntu 12.04, OTRX 3.2.9, MySQL

freeddos
OTRS Новобранец
Сообщения: 50
Зарегистрирован: 24 июл 2013, 08:34

Re: Время решения заявки задать агентом

Сообщение freeddos » 16 авг 2013, 17:04

Код: Выделить всё

my $Ticket = "($Param{TicketNumber}/$Param{TicketID})";

         my %TicketData = $Self->{TicketObject}->TicketGet(
         TicketID => $_,
         DynamicFields => 1,
   );
   my $DueDate = 1;
   if($TicketData{DynamicField_TicketFreeTime6}){
       $DueDate   = $Self->{TimeObject}->TimeStamp2SystemTime(
        String => $TicketData{DynamicField_TicketFreeTime6},
    );
     
    }
   my $CurrentDate = $Self->{TimeObject}->SystemTime();

    my $Diff    = $DueDate - $CurrentDate;
Вот проблема в чем оказывается, не правельно из динамического поля высчитывается дата, В подписи версия, как устанавливается дата в моей версии какой параметр она имеет, чтобы ее выципить из объекта.
Чтобы в дальнейшем расчитать разницу.
Тоесть в кусок

Код: Выделить всё

if($TicketData{DynamicField_TicketFreeTime6})
не заходит, т.к. видимо такого параметра нет, ноя его задаю в заявке(Динамическое поде Date/Time), Какое оно имеет имя чтобы его оттуда взять.
Ubuntu 12.04, OTRX 3.2.9, MySQL

freeddos
OTRS Новобранец
Сообщения: 50
Зарегистрирован: 24 июл 2013, 08:34

Re: Время решения заявки задать агентом

Сообщение freeddos » 22 авг 2013, 08:39

Пока проблему решить не удалось, т.к. остается непонятки с типом данных которые устанавливается в динамическом поле.
Если кто знает какой нужно тип данных подставлять напишите, как бы только в этом получается проблема.
Спасибо.
Ubuntu 12.04, OTRX 3.2.9, MySQL

yuri0001
OTRS Бывалый
Сообщения: 492
Зарегистрирован: 11 фев 2011, 20:25
Откуда: Череповец

Re: Время решения заявки задать агентом

Сообщение yuri0001 » 22 авг 2013, 16:45

Исходя из задачи, т. е. - оповещение о наступлении установленной даты/времени исполнения заявки - и использования для этого динамических полей, варианта два - у дин. полей таких типов полей всего два - Date и Date/Time. Что они возвращают в программе, думаю, при знании языка, труда не составит- присвойте значение и выведите на экран/печать. Соответственно, при сравнении с системными датами нужно приводить к единому виду. (Это мнение давно не программиста). :oops:
С уважением
Ю. Колесников
OTRS 3.3.1, ITSM 3.3.1, SUSE 12, MySQL5

freeddos
OTRS Новобранец
Сообщения: 50
Зарегистрирован: 24 июл 2013, 08:34

Re: Время решения заявки задать агентом

Сообщение freeddos » 23 авг 2013, 15:00

так а что ранее писалось про

Код: Выделить всё

DynamicField_TicketFreeTime6
что это за тип?
или нужно использовать DynamicField_Date/Time ?
Ubuntu 12.04, OTRX 3.2.9, MySQL

yuri0001
OTRS Бывалый
Сообщения: 492
Зарегистрирован: 11 фев 2011, 20:25
Откуда: Череповец

Re: Время решения заявки задать агентом

Сообщение yuri0001 » 23 авг 2013, 15:52

Я так понимаю - нужно просто зайти в описание этого поля и посмотреть его тип. Просто это поле изначально настроено на это понятие - Due Date - выполнить к дате. Я пока не встречал, чтобы оно где - то использовалось в стандартном функционале и ITSM, но ничто не мешает создать и свое поле и использовать для этой цели. Суть изложенной идеи и метода решения не меняется.
С уважением
Ю. Колесников
OTRS 3.3.1, ITSM 3.3.1, SUSE 12, MySQL5

freeddos
OTRS Новобранец
Сообщения: 50
Зарегистрирован: 24 июл 2013, 08:34

Re: Время решения заявки задать агентом

Сообщение freeddos » 23 авг 2013, 17:03

Так, в общем получилась эта часть.
В итоге получается что переменная называется "DynamicField_*Name*", гду *Name* - это имя динамического поля, и пихаем ее в переменную, и все нормально(не нужны теперь получается FreeTime или FreeText), ну это для версии 3.2.9.
Получается что у меня есть две переменных, одна с текущей датой другая с датой динамического поля, я делаю разницу их, и если переменная отрицательная то тогда меняем значение поля(данное действие, изменение значения, производиться с любой опирацией планировщика).
Поэтому нужно создать еще одно задание которое бы чтото меняла в заявке, чтобы на это реагировало Уведомление событий.
Теперь следующая беда: как сделать уведомления.
1) Сделать свое собственное событие, так чтобы после смены типа скрытого динамического поля это событие срабатывало в уведомлении.
2) Сделать как то через планировщик задач, но сделать отправку через пользовательский модуль, на прямую командой sendmail(тогда как вставить e-mail нужного агента).
3) Создать новое состояние, так чтобы когда заявка находится в этом состоянии то тогда АЛЕС! Уведомлятор на него сработает(Тогда как скрыть это состояние, тоесть не дать его устанавливать агентам)
3) Ваши предложения.
Ubuntu 12.04, OTRX 3.2.9, MySQL

yuri0001
OTRS Бывалый
Сообщения: 492
Зарегистрирован: 11 фев 2011, 20:25
Откуда: Череповец

Re: Время решения заявки задать агентом

Сообщение yuri0001 » 23 авг 2013, 18:08

Событие - TicketDynamicFieldUpdate_Имя поля. Здесь должно быть имя динамического поля (скрытого, в рабочем варианте), значение которого Вы будете менять при достижении установленной даты. Поэтому никакого нового события изобретать не надо, это стандартное событие в Вашей системе и присутствует для имеющихся динамических полей, в т. ч. и пользовательских.
С уважением
Ю. Колесников
OTRS 3.3.1, ITSM 3.3.1, SUSE 12, MySQL5

alexus
OTRS Гуру
Сообщения: 4984
Зарегистрирован: 20 сен 2010, 18:17
Откуда: Москва
Благодарил (а): 63 раза
Поблагодарили: 59 раз

Re: Время решения заявки задать агентом

Сообщение alexus » 23 авг 2013, 22:38

Если использовать стандартную системную функцию по обновлению значения динамического поля, то уведомление на событие, о котором говорил Юрий, сработает железно.
С уважением,
Алексей Юсов

Prod: OTRS ITSM 5.0.14 on CentOS 7 x64 Linux with MySQL 5.7

Radiant System OTRS Intergrator RU
Группа OTRS Community в Teleram
Хотите внедрить OTRS? Спросите меня как!

freeddos
OTRS Новобранец
Сообщения: 50
Зарегистрирован: 24 июл 2013, 08:34

Re: Время решения заявки задать агентом

Сообщение freeddos » 26 авг 2013, 08:09

Спасибо.
Да действительно такие события есть. Я их сразу не заметил.
Ну вот и отлично буду пробовать.
Ubuntu 12.04, OTRX 3.2.9, MySQL

freeddos
OTRS Новобранец
Сообщения: 50
Зарегистрирован: 24 июл 2013, 08:34

Re: Время решения заявки задать агентом

Сообщение freeddos » 26 авг 2013, 10:08

А если динамическое поле меняется из скрипта из GenericAgent.pm, событие TicketDynamicFieldUpdate_Имя поля разве сработает.
В общем у меня не срабатывает, то есть поле скриптом сменилось, а событие так и не сработало...
В чем может быть подвох?
Ubuntu 12.04, OTRX 3.2.9, MySQL

alexus
OTRS Гуру
Сообщения: 4984
Зарегистрирован: 20 сен 2010, 18:17
Откуда: Москва
Благодарил (а): 63 раза
Поблагодарили: 59 раз

Re: Время решения заявки задать агентом

Сообщение alexus » 26 авг 2013, 12:10

Подвох может быть в чем угодно. НО не видя кода, трудно что-либо сказать.
С уважением,
Алексей Юсов

Prod: OTRS ITSM 5.0.14 on CentOS 7 x64 Linux with MySQL 5.7

Radiant System OTRS Intergrator RU
Группа OTRS Community в Teleram
Хотите внедрить OTRS? Спросите меня как!

freeddos
OTRS Новобранец
Сообщения: 50
Зарегистрирован: 24 июл 2013, 08:34

Re: Время решения заявки задать агентом

Сообщение freeddos » 26 авг 2013, 12:18

Вот код:

Код: Выделить всё

my $Ticket = "($Param{TicketNumber}/$Param{TicketID})";

         my %TicketData = $Self->{TicketObject}->TicketGet(
         TicketID => $_,
         DynamicFields => 3, # тут номер моего динамического поля...
   );

$Success = $Self->{BackendObject}->ValueSet(
                DynamicFieldConfig => $DynamicFieldConfig,
                ObjectID           => $Param{TicketID},
                Value              => 'Тут вставляю мой параметр текстовый', 
                UserID             => 1,
);
В интерфейсе видно что динамическое полу меняется, раньше было пустое а после срабатывания планировщика, там становиться нужное мне значение.
Но всеравно уведомление не срабатывает.

PS изменение значения динамического поля, является его обновлением? и уведомление сработает на это событие... так вопрос на засыпку...
Ubuntu 12.04, OTRX 3.2.9, MySQL

alexus
OTRS Гуру
Сообщения: 4984
Зарегистрирован: 20 сен 2010, 18:17
Откуда: Москва
Благодарил (а): 63 раза
Поблагодарили: 59 раз

Re: Время решения заявки задать агентом

Сообщение alexus » 26 авг 2013, 15:42

Код: Выделить всё

=item ValueSet()

sets a dynamic field value. This is represented by one or more rows in the dynamic_field_value
table, each storing one text, date and int field. Please see how they will be returned by
L<ValueGet()>.

    my $Success = $DynamicFieldValueObject->ValueSet(
        FieldID  => $FieldID,                 # ID of the dynamic field
        ObjectID => $ObjectID,                # ID of the current object that the field
                                              #   must be linked to, e. g. TicketID
        Value    => [
            {
                ValueText          => 'some text',            # optional, one of these fields must be provided
                ValueDateTime      => '1977-12-12 12:00:00',  # optional
                ValueInt           => 123,                    # optional
            },
            ...
        ],
        UserID   => $UserID,
    );

=cut
Файл с описанием функции имеет загадочное наименование - DynamicFieldValue.pm
С уважением,
Алексей Юсов

Prod: OTRS ITSM 5.0.14 on CentOS 7 x64 Linux with MySQL 5.7

Radiant System OTRS Intergrator RU
Группа OTRS Community в Teleram
Хотите внедрить OTRS? Спросите меня как!

yuri0001
OTRS Бывалый
Сообщения: 492
Зарегистрирован: 11 фев 2011, 20:25
Откуда: Череповец

Re: Время решения заявки задать агентом

Сообщение yuri0001 » 04 сен 2013, 16:33

Ну и как? Что-нибудь получилось, наконец? Или "Караул устал"? :)
С уважением
Ю. Колесников
OTRS 3.3.1, ITSM 3.3.1, SUSE 12, MySQL5

freeddos
OTRS Новобранец
Сообщения: 50
Зарегистрирован: 24 июл 2013, 08:34

Re: Время решения заявки задать агентом

Сообщение freeddos » 12 сен 2013, 12:05

Нет, пока решить не удалось, всеравно уведомление не срабатывает на изменение поля из GeneralAgent.pm.
Хотя поле нормально изменяется из этого модуля, по достижению нужных мне результатов.
А вот оповещение на почту сделать как? Событие изменения динамического поля не срабатывает, видимо нужно еще чтото гдето подправить/добавить чтобы срабатывало.
Кто знает что, как работает механизм отслеживания срабатывания событий пишите.
Спасибо всем за помощь.
Ubuntu 12.04, OTRX 3.2.9, MySQL

freeddos
OTRS Новобранец
Сообщения: 50
Зарегистрирован: 24 июл 2013, 08:34

Re: Время решения заявки задать агентом

Сообщение freeddos » 12 сен 2013, 12:39

Протестировав систему еще раз получается что все работает.
в общем хот мысли понятен из всего вышеперечисленного.
Загвоздка была на самом деле в одинарных ковычках. Тоесть в файле GenericAgent.pm прискаевать значение(текстовое) нужно через простые одинарные кавычки(например 'text' ).
В итоге изменение динамического поля(событие) срабатывает, и уведомление улетает на почту агенту.
План действий:
1) создали 2 динамических поля. 1 поле которое устанавливается с датой(выполнить до какого то срока), 2 будет само проверяемое и изменяемое значение(тоесть мы его будем менять при достижении нужной даты)
2) настраиваем видимость поля даты в заявках( у меня это просто в телефонной заявке новой Ticket::Frontend::AgentTicketPhone###DynamicField).
3) Так теперь дописываем нужные куски кода в GenericAgent.pm( тоесть при достижении отрицательного значения в разнице текущей даты и заданой "выполнить до", будем менять значените текстового динамического поля, не забываем про одинарные ковычки)
4) Устанавливаем планировщик, на пустое срабатывание(если у вас никаких планировщиков нет), если какие то другие планировщики есть, то код в GenericAgent будет срабатывать вместе с любым планировщиком, тем самым если достигнута разница в датах, то все отлично.
5) Делаем новое уведомление, и настраиваем его на обновление Вашего текстового динамического поля, на отправку почты.
6) В общем то и все.
Ubuntu 12.04, OTRX 3.2.9, MySQL

yuri0001
OTRS Бывалый
Сообщения: 492
Зарегистрирован: 11 фев 2011, 20:25
Откуда: Череповец

Re: Время решения заявки задать агентом

Сообщение yuri0001 » 12 сен 2013, 13:21

Очень радостно, что у Вас заработало :D
Однако, идея была понятна и ранее.
Если Вас не затруднит, коллега, сочините тему для Howtos, с текстом изменений/дополнений в GenericAgent.pm, ну и, аналогично Вашему описанию в этой теме, с изложением методики по полочкам. Надеюсь, это выполнимо? :oops:
С уважением
Ю. Колесников
OTRS 3.3.1, ITSM 3.3.1, SUSE 12, MySQL5

Ответить