Страница 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, то решения, пока, так и нет.
Если возьметесь довести до ума, будет здорово. Думаю, многие будут благодарны.
Re: Время решения заявки задать агентом
Добавлено: 14 авг 2013, 11:01
freeddos
В моей версии в планировщике задач, появилось мое динамическое поле в фильтре заявок.
НО! там можно выбрать только диапазон "между", что естественно не подходит, потому что я не могу задать диапазон.
следовательно нужно как то сделать графу "за последние", как например для граф, создана, или ожидание.
Я создал поле с параметром типа "Data/Time".
Re: Время решения заявки задать агентом
Добавлено: 14 авг 2013, 11:08
alexus
Нужен кастом для создания события эскалации для динамического поля. По умолчанию таких свойств у дин. полей типа Дата и Время нет.
Re: Время решения заявки задать агентом
Добавлено: 14 авг 2013, 20:32
yuri0001
alexus писал(а):Нужен кастом для создания события эскалации для динамического поля. По умолчанию таких свойств у дин. полей типа Дата и Время нет.
Коллеге, автору темы. Я уже писал выше, почитайте тему по ссылке. Там есть описание метода доработки, надо только реализовать схему. Настройками - не решается задача.
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. Что они возвращают в программе, думаю, при знании языка, труда не составит- присвойте значение и выведите на экран/печать. Соответственно, при сравнении с системными датами нужно приводить к единому виду. (Это мнение давно не программиста).
Re: Время решения заявки задать агентом
Добавлено: 23 авг 2013, 15:00
freeddos
так а что ранее писалось про
что это за тип?
или нужно использовать 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
Очень радостно, что у Вас заработало
Однако, идея была понятна и ранее.
Если Вас не затруднит, коллега, сочините тему для Howtos, с текстом изменений/дополнений в GenericAgent.pm, ну и, аналогично Вашему описанию в этой теме, с изложением методики по полочкам. Надеюсь, это выполнимо?