Страница 1 из 2

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

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

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

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

Добавлено: 14 авг 2013, 08:51
ykolesnikov
Есть стандартное динамическое поле, не помню как в оригинале, я его переназвал DueDate - выполнить к дате. В него можно заносить желаемую дату выполнения. Проблема в том, что по наступлению этой даты, т.е по значению этого поля нет события для настройки уведомления.
Я поднимал эту тему в - viewtopic.php?f=2&t=1062, там даже изложен подход к реализации. Но поскольку я сам не программист в Perl, то решения, пока, так и нет.
Если возьметесь довести до ума, будет здорово. Думаю, многие будут благодарны. :oops:

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

Добавлено: 14 авг 2013, 11:01
freeddos
В моей версии в планировщике задач, появилось мое динамическое поле в фильтре заявок.
НО! там можно выбрать только диапазон "между", что естественно не подходит, потому что я не могу задать диапазон.
следовательно нужно как то сделать графу "за последние", как например для граф, создана, или ожидание.
Я создал поле с параметром типа "Data/Time".

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

Добавлено: 14 авг 2013, 11:08
alexus
Нужен кастом для создания события эскалации для динамического поля. По умолчанию таких свойств у дин. полей типа Дата и Время нет.

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

Добавлено: 14 авг 2013, 20:32
yuri0001
alexus писал(а):Нужен кастом для создания события эскалации для динамического поля. По умолчанию таких свойств у дин. полей типа Дата и Время нет.
Коллеге, автору темы. Я уже писал выше, почитайте тему по ссылке. Там есть описание метода доработки, надо только реализовать схему. Настройками - не решается задача. :oops:

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

Добавлено: 14 авг 2013, 20:36
alexus
Кто готов проспонсировать разработку?

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

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

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

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

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

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

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

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

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

Добавлено: 16 авг 2013, 17:04
freeddos

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

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), Какое оно имеет имя чтобы его оттуда взять.

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

Добавлено: 22 авг 2013, 08:39
freeddos
Пока проблему решить не удалось, т.к. остается непонятки с типом данных которые устанавливается в динамическом поле.
Если кто знает какой нужно тип данных подставлять напишите, как бы только в этом получается проблема.
Спасибо.

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

Добавлено: 22 авг 2013, 16:45
yuri0001
Исходя из задачи, т. е. - оповещение о наступлении установленной даты/времени исполнения заявки - и использования для этого динамических полей, варианта два - у дин. полей таких типов полей всего два - Date и Date/Time. Что они возвращают в программе, думаю, при знании языка, труда не составит- присвойте значение и выведите на экран/печать. Соответственно, при сравнении с системными датами нужно приводить к единому виду. (Это мнение давно не программиста). :oops:

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

Добавлено: 23 авг 2013, 15:00
freeddos
так а что ранее писалось про

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

DynamicField_TicketFreeTime6
что это за тип?
или нужно использовать DynamicField_Date/Time ?

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

Добавлено: 23 авг 2013, 15:52
yuri0001
Я так понимаю - нужно просто зайти в описание этого поля и посмотреть его тип. Просто это поле изначально настроено на это понятие - Due Date - выполнить к дате. Я пока не встречал, чтобы оно где - то использовалось в стандартном функционале и ITSM, но ничто не мешает создать и свое поле и использовать для этой цели. Суть изложенной идеи и метода решения не меняется.

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

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

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

Добавлено: 23 авг 2013, 18:08
yuri0001
Событие - TicketDynamicFieldUpdate_Имя поля. Здесь должно быть имя динамического поля (скрытого, в рабочем варианте), значение которого Вы будете менять при достижении установленной даты. Поэтому никакого нового события изобретать не надо, это стандартное событие в Вашей системе и присутствует для имеющихся динамических полей, в т. ч. и пользовательских.

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

Добавлено: 23 авг 2013, 22:38
alexus
Если использовать стандартную системную функцию по обновлению значения динамического поля, то уведомление на событие, о котором говорил Юрий, сработает железно.

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

Добавлено: 26 авг 2013, 08:09
freeddos
Спасибо.
Да действительно такие события есть. Я их сразу не заметил.
Ну вот и отлично буду пробовать.

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

Добавлено: 26 авг 2013, 10:08
freeddos
А если динамическое поле меняется из скрипта из GenericAgent.pm, событие TicketDynamicFieldUpdate_Имя поля разве сработает.
В общем у меня не срабатывает, то есть поле скриптом сменилось, а событие так и не сработало...
В чем может быть подвох?

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

Добавлено: 26 авг 2013, 12:10
alexus
Подвох может быть в чем угодно. НО не видя кода, трудно что-либо сказать.

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

Добавлено: 26 авг 2013, 12:18
freeddos
Вот код:

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

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 изменение значения динамического поля, является его обновлением? и уведомление сработает на это событие... так вопрос на засыпку...

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

Добавлено: 26 авг 2013, 15:42
alexus

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

=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

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

Добавлено: 04 сен 2013, 16:33
yuri0001
Ну и как? Что-нибудь получилось, наконец? Или "Караул устал"? :)

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

Добавлено: 12 сен 2013, 12:05
freeddos
Нет, пока решить не удалось, всеравно уведомление не срабатывает на изменение поля из GeneralAgent.pm.
Хотя поле нормально изменяется из этого модуля, по достижению нужных мне результатов.
А вот оповещение на почту сделать как? Событие изменения динамического поля не срабатывает, видимо нужно еще чтото гдето подправить/добавить чтобы срабатывало.
Кто знает что, как работает механизм отслеживания срабатывания событий пишите.
Спасибо всем за помощь.

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

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

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

Добавлено: 12 сен 2013, 13:21
yuri0001
Очень радостно, что у Вас заработало :D
Однако, идея была понятна и ранее.
Если Вас не затруднит, коллега, сочините тему для Howtos, с текстом изменений/дополнений в GenericAgent.pm, ну и, аналогично Вашему описанию в этой теме, с изложением методики по полочкам. Надеюсь, это выполнимо? :oops: