Re: [dev] dev Digest, Vol 44, Issue 6

Dear Martijn,
Thank you for your reply.
I'm currently spending some time at this.
It seems to me that a custom ticket event handler can't be used. Suppose I
have a field "Time To Intervention" and there needs to be a time based
escalation. Is it possible to do time based escalations on dynamic fields
using a custom ticket event handler ? I have to do some calculations and
look at the calendars.
That's why I thought using a generic agent to run every few minutes and
look at all open tickets should be the way to go. Maybe do it a bit smarter
by only looking at open tickets which fullfull some criteria such as not
escalating yet.
Thanks!,
With kind regards,
Roald
On Fri, Nov 28, 2014 at 1:00 PM,
Send dev mailing list submissions to dev@otrs.org
To subscribe or unsubscribe via the World Wide Web, visit http://lists.otrs.org/cgi-bin/listinfo/dev or, via email, send a message with subject or body 'help' to dev-request@otrs.org
You can reach the person managing the list at dev-owner@otrs.org
When replying, please edit your Subject line so it is more specific than "Re: Contents of dev digest..."
Today's Topics:
1. Re: developing custom SLA/Service escalations and notifications (Martin Gruner) 2. OTRS 5 development (Martin Gruner)
----------------------------------------------------------------------
Message: 1 Date: Thu, 27 Nov 2014 13:24:24 +0100 From: Martin Gruner
Subject: Re: [dev] developing custom SLA/Service escalations and notifications To: Development community of OTRS Message-ID: <547717F8.7000002@otrs.com> Content-Type: text/plain; charset=windows-1252 Hello Roald,
Am 26.11.14 um 17:29 schrieb Roald:
Hi,
I'm new to OTRS development.
Requirements in a nutshell: * set custom fields for SLA's * calculate whether a ticket escalates based on these custom fields (do some custom calculations) * send notifications to agents based on these escalations * there are also other requirements but most can be solved without development
Idea on how to approach this: * xml file in /opt/otrs/Kernel/Config/Files which uses SLAPreferences
<?xml version="1.0" encoding="utf-8" ?>
<ConfigItem Name="SLAPreferences###010-TTI" Required="0" Valid="1"> <Description Translatable="1">Time To Intervention.</Description> <Group>Ticket</Group> <SubGroup>Frontend::SLA::Preferences</SubGroup> <Setting> <Hash> <Item Key="Module">Kernel::Output::HTML::SLAPreferencesGeneric</Item> <Item Key="Label">label for dynamic field</Item> <Item Key="Desc">description.</Item> <Item Key="Block">Input</Item> <Item Key="PrefKey">dynamicfield</Item> </Hash> </Setting> </ConfigItem> ........ * write a custom module with a job that should be run by Generic Agent to do the rest. Maybe split it in two modules.
Questions: * Is my approach the most straightforward and suitable one ?
Sounds pretty straightforward. I think you might not need a GA job, but could do with a custom ticket event handler like Kernel::System::Ticket::Event::TicketEscalationIndex instead.
* How do I calculate using the calendars ? For example hours outside business hours don't count for one specific calendar. While there is also a 24/7 calendar.
I'd recommend to tailor the calendars just as you need. For 24/7 you can have a calendar that has everything marked, for the other one just define all non-business hours as business hours.
Regarding the question from your other mail: with the custom event handler you can also set a dynamic field.
Good luck!
Best regards, mg
-- Martin Gruner Senior Developer R&D
OTRS AG Bahnhofplatz 1a 94315 Straubing
T: +49 (0)6172 681988 0 F: +49 (0)9421 56818 18 I: www.otrs.com/
Gesch?ftssitz: Bad Homburg, Amtsgericht: Bad Homburg, HRB 10751, USt-Nr.: DE256610065 Aufsichtsratsvorsitzender: Burchard Steinbild, Vorstand: Andr? Mindermann (Vorsitzender), Christopher Kuhn, Sabine Riedel
Schlanker, schneller und flacher denn je - OTRS 4! Und f?r alle, die MEHR wollen: Entdecken Sie hier die OTRS Business Solution? mit mehr Business Features!
https://www.otrs.com/otrs-business-solution-fuer-besseren-kundenservice/?lan...
------------------------------
Message: 2 Date: Thu, 27 Nov 2014 15:03:27 +0100 From: Martin Gruner
Subject: [dev] OTRS 5 development To: Development community of OTRS Message-ID: <54772F2F.1020904@otrs.com> Content-Type: text/plain; charset=utf-8 Dear OTRS developers,
as you might have heard, OTRS 4 is now released and development for OTRS 5 will start soon.
Do you plan to make substantial contributions to it? If that is the case, I want to offer you to plan and coordinate this together, to make sure right from the planning period that your contributions can find their way into OTRS 5.
Please just let me know via reply on this list.
Thanks and best regards, Martin
-- Martin Gruner Senior Developer R&D
OTRS AG Bahnhofplatz 1a 94315 Straubing
T: +49 (0)6172 681988 0 F: +49 (0)9421 56818 18 I: www.otrs.com/
Gesch?ftssitz: Bad Homburg, Amtsgericht: Bad Homburg, HRB 10751, USt-Nr.: DE256610065 Aufsichtsratsvorsitzender: Burchard Steinbild, Vorstand: Andr? Mindermann (Vorsitzender), Christopher Kuhn, Sabine Riedel
Schlanker, schneller und flacher denn je - OTRS 4! Und f?r alle, die MEHR wollen: Entdecken Sie hier die OTRS Business Solution? mit mehr Business Features!
https://www.otrs.com/otrs-business-solution-fuer-besseren-kundenservice/?lan...
------------------------------
_______________________________________________ dev mailing list dev@otrs.org http://lists.otrs.org/cgi-bin/listinfo/dev
End of dev Digest, Vol 44, Issue 6 **********************************

In the netherlands Martijn is a common name but your name is Martin :)
On Fri, Dec 12, 2014 at 4:43 PM, Roald
Dear Martijn,
Thank you for your reply.
I'm currently spending some time at this.
It seems to me that a custom ticket event handler can't be used. Suppose I have a field "Time To Intervention" and there needs to be a time based escalation. Is it possible to do time based escalations on dynamic fields using a custom ticket event handler ? I have to do some calculations and look at the calendars.
That's why I thought using a generic agent to run every few minutes and look at all open tickets should be the way to go. Maybe do it a bit smarter by only looking at open tickets which fullfull some criteria such as not escalating yet.
Thanks!,
With kind regards, Roald
On Fri, Nov 28, 2014 at 1:00 PM,
wrote: Send dev mailing list submissions to dev@otrs.org
To subscribe or unsubscribe via the World Wide Web, visit http://lists.otrs.org/cgi-bin/listinfo/dev or, via email, send a message with subject or body 'help' to dev-request@otrs.org
You can reach the person managing the list at dev-owner@otrs.org
When replying, please edit your Subject line so it is more specific than "Re: Contents of dev digest..."
Today's Topics:
1. Re: developing custom SLA/Service escalations and notifications (Martin Gruner) 2. OTRS 5 development (Martin Gruner)
----------------------------------------------------------------------
Message: 1 Date: Thu, 27 Nov 2014 13:24:24 +0100 From: Martin Gruner
Subject: Re: [dev] developing custom SLA/Service escalations and notifications To: Development community of OTRS Message-ID: <547717F8.7000002@otrs.com> Content-Type: text/plain; charset=windows-1252 Hello Roald,
Am 26.11.14 um 17:29 schrieb Roald:
Hi,
I'm new to OTRS development.
Requirements in a nutshell: * set custom fields for SLA's * calculate whether a ticket escalates based on these custom fields (do some custom calculations) * send notifications to agents based on these escalations * there are also other requirements but most can be solved without development
Idea on how to approach this: * xml file in /opt/otrs/Kernel/Config/Files which uses SLAPreferences
<?xml version="1.0" encoding="utf-8" ?>
<ConfigItem Name="SLAPreferences###010-TTI" Required="0" Valid="1"> <Description Translatable="1">Time To Intervention.</Description> <Group>Ticket</Group> <SubGroup>Frontend::SLA::Preferences</SubGroup> <Setting> <Hash> <Item Key="Module">Kernel::Output::HTML::SLAPreferencesGeneric</Item> <Item Key="Label">label for dynamic field</Item> <Item Key="Desc">description.</Item> <Item Key="Block">Input</Item> <Item Key="PrefKey">dynamicfield</Item> </Hash> </Setting> </ConfigItem> ........ * write a custom module with a job that should be run by Generic Agent to do the rest. Maybe split it in two modules.
Questions: * Is my approach the most straightforward and suitable one ?
Sounds pretty straightforward. I think you might not need a GA job, but could do with a custom ticket event handler like Kernel::System::Ticket::Event::TicketEscalationIndex instead.
* How do I calculate using the calendars ? For example hours outside business hours don't count for one specific calendar. While there is also a 24/7 calendar.
I'd recommend to tailor the calendars just as you need. For 24/7 you can have a calendar that has everything marked, for the other one just define all non-business hours as business hours.
Regarding the question from your other mail: with the custom event handler you can also set a dynamic field.
Good luck!
Best regards, mg
-- Martin Gruner Senior Developer R&D
OTRS AG Bahnhofplatz 1a 94315 Straubing
T: +49 (0)6172 681988 0 F: +49 (0)9421 56818 18 I: www.otrs.com/
Gesch?ftssitz: Bad Homburg, Amtsgericht: Bad Homburg, HRB 10751, USt-Nr.: DE256610065 Aufsichtsratsvorsitzender: Burchard Steinbild, Vorstand: Andr? Mindermann (Vorsitzender), Christopher Kuhn, Sabine Riedel
Schlanker, schneller und flacher denn je - OTRS 4! Und f?r alle, die MEHR wollen: Entdecken Sie hier die OTRS Business Solution? mit mehr Business Features!
https://www.otrs.com/otrs-business-solution-fuer-besseren-kundenservice/?lan...
------------------------------
Message: 2 Date: Thu, 27 Nov 2014 15:03:27 +0100 From: Martin Gruner
Subject: [dev] OTRS 5 development To: Development community of OTRS Message-ID: <54772F2F.1020904@otrs.com> Content-Type: text/plain; charset=utf-8 Dear OTRS developers,
as you might have heard, OTRS 4 is now released and development for OTRS 5 will start soon.
Do you plan to make substantial contributions to it? If that is the case, I want to offer you to plan and coordinate this together, to make sure right from the planning period that your contributions can find their way into OTRS 5.
Please just let me know via reply on this list.
Thanks and best regards, Martin
-- Martin Gruner Senior Developer R&D
OTRS AG Bahnhofplatz 1a 94315 Straubing
T: +49 (0)6172 681988 0 F: +49 (0)9421 56818 18 I: www.otrs.com/
Gesch?ftssitz: Bad Homburg, Amtsgericht: Bad Homburg, HRB 10751, USt-Nr.: DE256610065 Aufsichtsratsvorsitzender: Burchard Steinbild, Vorstand: Andr? Mindermann (Vorsitzender), Christopher Kuhn, Sabine Riedel
Schlanker, schneller und flacher denn je - OTRS 4! Und f?r alle, die MEHR wollen: Entdecken Sie hier die OTRS Business Solution? mit mehr Business Features!
https://www.otrs.com/otrs-business-solution-fuer-besseren-kundenservice/?lan...
------------------------------
_______________________________________________ dev mailing list dev@otrs.org http://lists.otrs.org/cgi-bin/listinfo/dev
End of dev Digest, Vol 44, Issue 6 **********************************

Hi Roald, yes this is possible. OTRS also uses a ticket event handler to caclulate and store the escalation times for the tickets. This (target) time calculation only happens when there are changes to the tickets. The escalation notifications etc. are independent of that. Of course you can also use a GA job to do this if the delay is ok. Regards, mg Am 12.12.14 um 16:43 schrieb Roald:
Dear Martijn,
Thank you for your reply.
I'm currently spending some time at this.
It seems to me that a custom ticket event handler can't be used. Suppose I have a field "Time To Intervention" and there needs to be a time based escalation. Is it possible to do time based escalations on dynamic fields using a custom ticket event handler ? I have to do some calculations and look at the calendars.
That's why I thought using a generic agent to run every few minutes and look at all open tickets should be the way to go. Maybe do it a bit smarter by only looking at open tickets which fullfull some criteria such as not escalating yet.
Thanks!,
With kind regards, Roald
On Fri, Nov 28, 2014 at 1:00 PM,
mailto:dev-request@otrs.org> wrote: Send dev mailing list submissions to dev@otrs.org mailto:dev@otrs.org
To subscribe or unsubscribe via the World Wide Web, visit http://lists.otrs.org/cgi-bin/listinfo/dev or, via email, send a message with subject or body 'help' to dev-request@otrs.org mailto:dev-request@otrs.org
You can reach the person managing the list at dev-owner@otrs.org mailto:dev-owner@otrs.org
When replying, please edit your Subject line so it is more specific than "Re: Contents of dev digest..."
Today's Topics:
1. Re: developing custom SLA/Service escalations and notifications (Martin Gruner) 2. OTRS 5 development (Martin Gruner)
----------------------------------------------------------------------
Message: 1 Date: Thu, 27 Nov 2014 13:24:24 +0100 From: Martin Gruner
mailto:martin.gruner@otrs.com> Subject: Re: [dev] developing custom SLA/Service escalations and notifications To: Development community of OTRS mailto:dev@otrs.org> Message-ID: <547717F8.7000002@otrs.com mailto:547717F8.7000002@otrs.com> Content-Type: text/plain; charset=windows-1252 Hello Roald,
Am 26.11.14 um 17:29 schrieb Roald: > Hi, > > I'm new to OTRS development. > > Requirements in a nutshell: > * set custom fields for SLA's > * calculate whether a ticket escalates based on these custom fields (do > some custom calculations) > * send notifications to agents based on these escalations > * there are also other requirements but most can be solved without > development > > Idea on how to approach this: > * xml file in /opt/otrs/Kernel/Config/Files which uses SLAPreferences > > <?xml version="1.0" encoding="utf-8" ?> >
> <ConfigItem Name="SLAPreferences###010-TTI" Required="0" Valid="1"> > <Description Translatable="1">Time To Intervention.</Description> > <Group>Ticket</Group> > <SubGroup>Frontend::SLA::Preferences</SubGroup> > <Setting> > <Hash> > <Item > Key="Module">Kernel::Output::HTML::SLAPreferencesGeneric</Item> > <Item Key="Label">label for dynamic field</Item> > <Item Key="Desc">description.</Item> > <Item Key="Block">Input</Item> > <Item Key="PrefKey">dynamicfield</Item> > </Hash> > </Setting> > </ConfigItem> > ........ > > > * write a custom module with a job that should be run by Generic Agent > to do the rest. Maybe split it in two modules. > > Questions: > * Is my approach the most straightforward and suitable one ?Sounds pretty straightforward. I think you might not need a GA job, but could do with a custom ticket event handler like Kernel::System::Ticket::Event::TicketEscalationIndex instead.
> * How do I calculate using the calendars ? For example hours outside > business hours don't count for one specific calendar. While there is > also a 24/7 calendar.
I'd recommend to tailor the calendars just as you need. For 24/7 you can have a calendar that has everything marked, for the other one just define all non-business hours as business hours.
Regarding the question from your other mail: with the custom event handler you can also set a dynamic field.
Good luck!
Best regards, mg
-- Martin Gruner Senior Developer R&D
OTRS AG Bahnhofplatz 1a 94315 Straubing
T: +49 (0)6172 681988 0 F: +49 (0)9421 56818 18 I: www.otrs.com/ http://www.otrs.com/
Gesch?ftssitz: Bad Homburg, Amtsgericht: Bad Homburg, HRB 10751, USt-Nr.: DE256610065 Aufsichtsratsvorsitzender: Burchard Steinbild, Vorstand: Andr? Mindermann (Vorsitzender), Christopher Kuhn, Sabine Riedel
Schlanker, schneller und flacher denn je - OTRS 4! Und f?r alle, die MEHR wollen: Entdecken Sie hier die OTRS Business Solution? mit mehr Business Features! https://www.otrs.com/otrs-business-solution-fuer-besseren-kundenservice/?lan...
------------------------------
Message: 2 Date: Thu, 27 Nov 2014 15:03:27 +0100 From: Martin Gruner
mailto:martin.gruner@otrs.com> Subject: [dev] OTRS 5 development To: Development community of OTRS mailto:dev@otrs.org> Message-ID: <54772F2F.1020904@otrs.com mailto:54772F2F.1020904@otrs.com> Content-Type: text/plain; charset=utf-8 Dear OTRS developers,
as you might have heard, OTRS 4 is now released and development for OTRS 5 will start soon.
Do you plan to make substantial contributions to it? If that is the case, I want to offer you to plan and coordinate this together, to make sure right from the planning period that your contributions can find their way into OTRS 5.
Please just let me know via reply on this list.
Thanks and best regards, Martin
-- Martin Gruner Senior Developer R&D
OTRS AG Bahnhofplatz 1a 94315 Straubing
T: +49 (0)6172 681988 0 tel:%2B49%20%280%296172%20681988%200 F: +49 (0)9421 56818 18 tel:%2B49%20%280%299421%2056818%2018 I: www.otrs.com/ http://www.otrs.com/
Gesch?ftssitz: Bad Homburg, Amtsgericht: Bad Homburg, HRB 10751, USt-Nr.: DE256610065 Aufsichtsratsvorsitzender: Burchard Steinbild, Vorstand: Andr? Mindermann (Vorsitzender), Christopher Kuhn, Sabine Riedel
Schlanker, schneller und flacher denn je - OTRS 4! Und f?r alle, die MEHR wollen: Entdecken Sie hier die OTRS Business Solution? mit mehr Business Features! https://www.otrs.com/otrs-business-solution-fuer-besseren-kundenservice/?lan...
------------------------------
_______________________________________________ dev mailing list dev@otrs.org mailto:dev@otrs.org http://lists.otrs.org/cgi-bin/listinfo/dev
End of dev Digest, Vol 44, Issue 6 **********************************
_______________________________________________ OTRS mailing list: dev - Webpage: http://otrs.org/ Archive: http://lists.otrs.org/pipermail/dev To unsubscribe: http://lists.otrs.org/cgi-bin/listinfo/dev
-- Martin Gruner Senior Developer R&D OTRS AG Bahnhofplatz 1a 94315 Straubing T: +49 (0)6172 681988 0 F: +49 (0)9421 56818 18 I: www.otrs.com/ Geschäftssitz: Bad Homburg, Amtsgericht: Bad Homburg, HRB 10751, USt-Nr.: DE256610065 Aufsichtsratsvorsitzender: Burchard Steinbild, Vorstand: André Mindermann (Vorsitzender), Christopher Kuhn, Sabine Riedel Schlanker, schneller und flacher denn je - OTRS 4! Und für alle, die MEHR wollen: Entdecken Sie hier die OTRS Business Solution™ mit mehr Business Features! https://www.otrs.com/otrs-business-solution-fuer-besseren-kundenservice/?lan...

Dear Martin,
Thank you!
I'm currently trying to save new a new value into a Dynamic Field. To do
this I use ValueSet from the BackendObject. ValueSet needs a
DynamicFieldConfig. I'm trying to get this from the DynamicFieldGet method.
It's not working yet. Any idea why ?
This is how I created my BackendObject:
$Self->{BackendObject} = Kernel::System::DynamicField::Backend->new(
EncodeObject => $Param{TicketObject}->{EncodeObject},
MainObject => $Param{TicketObject}->{MainObject},
DBObject => $Param{TicketObject}->{DBObject},
TimeObject => $Param{TicketObject}->{TimeObject},
%Param,
);
This is how I try to update a Dynamic Field (not working) :
# get dynamic field config
my $DynamicField = $Self->{DynamicFieldObject}->DynamicFieldGet(
Name => "DynamicField_somename",
);
my $DynamicFieldConfig = $DynamicField->{Config};
$Self->{LogObject}->Log(
Priority=>'debug',
Message=> 'DynamicField ' . Dumper(\$DynamicField),
);
$Self->{LogObject}->Log(
Priority=>'debug',
Message=> 'DynamicFieldConfig ' . Dumper(\$DynamicFieldConfig),
);
my $Success = $Self->{BackendObject}->ValueSet(
DynamicFieldConfig => $DynamicFieldConfig,
ObjectID => $Param{Data}->{TicketID},
Value => [
{
$DestinationSystemTime,
},
],
UserID => $Param{UserID},
);
if ( !$Success ) {
$Self->{LogObject}->Log(
Priority => 'error',
Message =>
"Can not set value to current time for dynamic
field$DynamicFieldConfig->{Name}!"
);
}
# print updated DynamicField_somename
$Self->{LogObject}->Log(
Priority=>'debug',
Message => 'DynamicField_somename ' .
Dumper(\$Ticket{DynamicField_somename}),
);
On Tue, Dec 16, 2014 at 2:02 PM, Martin Gruner
Hi Roald,
yes this is possible. OTRS also uses a ticket event handler to caclulate and store the escalation times for the tickets. This (target) time calculation only happens when there are changes to the tickets. The escalation notifications etc. are independent of that. Of course you can also use a GA job to do this if the delay is ok.
Regards, mg
Am 12.12.14 um 16:43 schrieb Roald:
Dear Martijn,
Thank you for your reply.
I'm currently spending some time at this.
It seems to me that a custom ticket event handler can't be used. Suppose I have a field "Time To Intervention" and there needs to be a time based escalation. Is it possible to do time based escalations on dynamic fields using a custom ticket event handler ? I have to do some calculations and look at the calendars.
That's why I thought using a generic agent to run every few minutes and look at all open tickets should be the way to go. Maybe do it a bit smarter by only looking at open tickets which fullfull some criteria such as not escalating yet.
Thanks!,
With kind regards, Roald
On Fri, Nov 28, 2014 at 1:00 PM,
mailto:dev-request@otrs.org> wrote: Send dev mailing list submissions to dev@otrs.org mailto:dev@otrs.org
To subscribe or unsubscribe via the World Wide Web, visit http://lists.otrs.org/cgi-bin/listinfo/dev or, via email, send a message with subject or body 'help' to dev-request@otrs.org mailto:dev-request@otrs.org
You can reach the person managing the list at dev-owner@otrs.org mailto:dev-owner@otrs.org
When replying, please edit your Subject line so it is more specific than "Re: Contents of dev digest..."
Today's Topics:
1. Re: developing custom SLA/Service escalations and notifications (Martin Gruner) 2. OTRS 5 development (Martin Gruner)
----------------------------------------------------------------------
Message: 1 Date: Thu, 27 Nov 2014 13:24:24 +0100 From: Martin Gruner
mailto:martin.gruner@otrs.com> Subject: Re: [dev] developing custom SLA/Service escalations and notifications To: Development community of OTRS Message-ID: <547717F8.7000002@otrs.com mailto:547717F8.7000002@otrs.com> Content-Type: text/plain; charset=windows-1252
Hello Roald,
Am 26.11.14 um 17:29 schrieb Roald: > Hi, > > I'm new to OTRS development. > > Requirements in a nutshell: > * set custom fields for SLA's > * calculate whether a ticket escalates based on these custom
fields (do
> some custom calculations) > * send notifications to agents based on these escalations > * there are also other requirements but most can be solved without > development > > Idea on how to approach this: > * xml file in /opt/otrs/Kernel/Config/Files which uses
SLAPreferences
> > <?xml version="1.0" encoding="utf-8" ?> >
> Valid="1">
> <Description Translatable="1">Time To
Intervention.</Description>
> <Group>Ticket</Group> > <SubGroup>Frontend::SLA::Preferences</SubGroup> > <Setting> > <Hash> > <Item > Key="Module">Kernel::Output::HTML::SLAPreferencesGeneric</Item> > <Item Key="Label">label for dynamic field</Item> > <Item Key="Desc">description.</Item> > <Item Key="Block">Input</Item> > <Item Key="PrefKey">dynamicfield</Item> > </Hash> > </Setting> > </ConfigItem> > ........ > > > * write a custom module with a job that should be run by Generic
Agent
> to do the rest. Maybe split it in two modules. > > Questions: > * Is my approach the most straightforward and suitable one ?
Sounds pretty straightforward. I think you might not need a GA job,
but
could do with a custom ticket event handler like Kernel::System::Ticket::Event::TicketEscalationIndex instead.
> * How do I calculate using the calendars ? For example hours
outside
> business hours don't count for one specific calendar. While there
is
> also a 24/7 calendar.
I'd recommend to tailor the calendars just as you need. For 24/7 you
can
have a calendar that has everything marked, for the other one just define all non-business hours as business hours.
Regarding the question from your other mail: with the custom event handler you can also set a dynamic field.
Good luck!
Best regards, mg
-- Martin Gruner Senior Developer R&D
OTRS AG Bahnhofplatz 1a 94315 Straubing
T: +49 (0)6172 681988 0 F: +49 (0)9421 56818 18 I: www.otrs.com/ http://www.otrs.com/
Gesch?ftssitz: Bad Homburg, Amtsgericht: Bad Homburg, HRB 10751, USt-Nr.: DE256610065 Aufsichtsratsvorsitzender: Burchard Steinbild, Vorstand: Andr? Mindermann (Vorsitzender), Christopher Kuhn, Sabine Riedel
Schlanker, schneller und flacher denn je - OTRS 4! Und f?r alle, die MEHR wollen: Entdecken Sie hier die OTRS Business Solution? mit mehr Business Features!
https://www.otrs.com/otrs-business-solution-fuer-besseren-kundenservice/?lan...
------------------------------
Message: 2 Date: Thu, 27 Nov 2014 15:03:27 +0100 From: Martin Gruner
mailto:martin.gruner@otrs.com> Subject: [dev] OTRS 5 development To: Development community of OTRS Message-ID: <54772F2F.1020904@otrs.com mailto:54772F2F.1020904@otrs.com> Content-Type: text/plain; charset=utf-8
Dear OTRS developers,
as you might have heard, OTRS 4 is now released and development for
OTRS
5 will start soon.
Do you plan to make substantial contributions to it? If that is the case, I want to offer you to plan and coordinate this together, to
make
sure right from the planning period that your contributions can find their way into OTRS 5.
Please just let me know via reply on this list.
Thanks and best regards, Martin
-- Martin Gruner Senior Developer R&D
OTRS AG Bahnhofplatz 1a 94315 Straubing
T: +49 (0)6172 681988 0 tel:%2B49%20%280%296172%20681988%200 F: +49 (0)9421 56818 18 tel:%2B49%20%280%299421%2056818%2018 I: www.otrs.com/ http://www.otrs.com/
Gesch?ftssitz: Bad Homburg, Amtsgericht: Bad Homburg, HRB 10751, USt-Nr.: DE256610065 Aufsichtsratsvorsitzender: Burchard Steinbild, Vorstand: Andr? Mindermann (Vorsitzender), Christopher Kuhn, Sabine Riedel
Schlanker, schneller und flacher denn je - OTRS 4! Und f?r alle, die MEHR wollen: Entdecken Sie hier die OTRS Business Solution? mit mehr Business Features!
https://www.otrs.com/otrs-business-solution-fuer-besseren-kundenservice/?lan...
------------------------------
_______________________________________________ dev mailing list dev@otrs.org mailto:dev@otrs.org http://lists.otrs.org/cgi-bin/listinfo/dev
End of dev Digest, Vol 44, Issue 6 **********************************
_______________________________________________ OTRS mailing list: dev - Webpage: http://otrs.org/ Archive: http://lists.otrs.org/pipermail/dev To unsubscribe: http://lists.otrs.org/cgi-bin/listinfo/dev
-- Martin Gruner Senior Developer R&D
OTRS AG Bahnhofplatz 1a 94315 Straubing
T: +49 (0)6172 681988 0 F: +49 (0)9421 56818 18 I: www.otrs.com/
Geschäftssitz: Bad Homburg, Amtsgericht: Bad Homburg, HRB 10751, USt-Nr.: DE256610065 Aufsichtsratsvorsitzender: Burchard Steinbild, Vorstand: André Mindermann (Vorsitzender), Christopher Kuhn, Sabine Riedel
Schlanker, schneller und flacher denn je - OTRS 4! Und für alle, die MEHR wollen: Entdecken Sie hier die OTRS Business Solution™ mit mehr Business Features!
https://www.otrs.com/otrs-business-solution-fuer-besseren-kundenservice/?lan... _______________________________________________ OTRS mailing list: dev - Webpage: http://otrs.org/ Archive: http://lists.otrs.org/pipermail/dev To unsubscribe: http://lists.otrs.org/cgi-bin/listinfo/dev

relevant debug messages from otrs.log:
[Wed Dec 24 15:11:42
2014][Debug][Kernel::System::Ticket::Event::Escalation::Run][225]
@@Escalation.pm DynamicField $VAR1 = \{};
[Wed Dec 24 15:11:42
2014][Debug][Kernel::System::Ticket::Event::Escalation::Run][230]
@@Escalation.pm DynamicFieldConfig $VAR1 = \undef;
[Wed Dec 24 15:11:42
2014][Error][Kernel::System::DynamicField::Backend::ValueSet][447] Need
DynamicFieldConfig!
[Wed Dec 24 15:11:42
2014][Error][Kernel::System::Ticket::Event::Escalation::Run][246] Can not
set value for dynamic field!
apache2 errorlog :
root@otrs:/var/log/apache2# tail -f -n0 error.log
[Wed Dec 24 15:11:38 2014] Escalation.pm: Subroutine new redefined at
/opt/otrs//Kernel/System/Ticket/Event/Escalation.pm line 21.
[Wed Dec 24 15:11:38 2014] Escalation.pm: Subroutine Run redefined at
/opt/otrs//Kernel/System/Ticket/Event/Escalation.pm line 79.
[Wed Dec 24 15:11:42 2014] -e: Odd number of elements in anonymous hash at
/opt/otrs//Kernel/System/Ticket/Event/Escalation.pm line 235.
ERROR: OTRS-CGI-66 Perl: 5.18.2 OS: linux Time: Wed Dec 24 15:11:42 2014
Message: Need DynamicFieldConfig!
RemoteAddress: 192.168.2.1
RequestURI: /otrs/index.pl
Traceback (3448):
Module: Kernel::System::DynamicField::Backend::ValueSet (OTRS 3.3.x git)
Line: 447
Module: Kernel::System::Ticket::Event::Escalation::Run (OTRS 3.3.x git)
Line: 235
Module: Kernel::System::EventHandler::EventHandler (OTRS 3.3.x git)
Line: 255
Module: Kernel::System::Ticket::TicketSLASet (OTRS 3.3.x git) Line: 3008
Module: Kernel::Modules::AgentTicketActionCommon::Run (OTRS 3.3.x git)
Line: 598
Module: Kernel::System::Web::InterfaceAgent::Run (OTRS 3.3.x git) Line:
910
Module:
ModPerl::ROOT::ModPerl::Registry::opt_otrs_bin_cgi_2dbin_index_2epl::handler
(unknown version) Line: 41
Module: (eval) (v1.99) Line: 206
Module: ModPerl::RegistryCooker::run (v1.99) Line: 206
Module: ModPerl::RegistryCooker::default_handler (v1.99) Line: 172
Module: ModPerl::Registry::handler (v1.99) Line: 31
[Wed Dec 24 15:11:42 2014] -e: Use of uninitialized value in concatenation
(.) or string at /opt/otrs//Kernel/System/Ticket/Event/Escalation.pm line
247.
ERROR: OTRS-CGI-66 Perl: 5.18.2 OS: linux Time: Wed Dec 24 15:11:42 2014
Message: Can not set value for dynamic field!
RemoteAddress: 192.168.2.1
RequestURI: /otrs/index.pl
Traceback (3448):
Module: Kernel::System::Ticket::Event::Escalation::Run (OTRS 3.3.x git)
Line: 246
Module: Kernel::System::EventHandler::EventHandler (OTRS 3.3.x git)
Line: 255
Module: Kernel::System::Ticket::TicketSLASet (OTRS 3.3.x git) Line: 3008
Module: Kernel::Modules::AgentTicketActionCommon::Run (OTRS 3.3.x git)
Line: 598
Module: Kernel::System::Web::InterfaceAgent::Run (OTRS 3.3.x git) Line:
910
Module:
ModPerl::ROOT::ModPerl::Registry::opt_otrs_bin_cgi_2dbin_index_2epl::handler
(unknown version) Line: 41
Module: (eval) (v1.99) Line: 206
Module: ModPerl::RegistryCooker::run (v1.99) Line: 206
Module: ModPerl::RegistryCooker::default_handler (v1.99) Line: 172
Module: ModPerl::Registry::handler (v1.99) Line: 31
On Wed, Dec 24, 2014 at 3:00 PM, Roald
Dear Martin,
Thank you!
I'm currently trying to save new a new value into a Dynamic Field. To do this I use ValueSet from the BackendObject. ValueSet needs a DynamicFieldConfig. I'm trying to get this from the DynamicFieldGet method.
It's not working yet. Any idea why ?
This is how I created my BackendObject:
$Self->{BackendObject} = Kernel::System::DynamicField::Backend->new( EncodeObject => $Param{TicketObject}->{EncodeObject}, MainObject => $Param{TicketObject}->{MainObject}, DBObject => $Param{TicketObject}->{DBObject}, TimeObject => $Param{TicketObject}->{TimeObject}, %Param, );
This is how I try to update a Dynamic Field (not working) :
# get dynamic field config my $DynamicField = $Self->{DynamicFieldObject}->DynamicFieldGet( Name => "DynamicField_somename", ); my $DynamicFieldConfig = $DynamicField->{Config};
$Self->{LogObject}->Log( Priority=>'debug', Message=> 'DynamicField ' . Dumper(\$DynamicField), );
$Self->{LogObject}->Log( Priority=>'debug', Message=> 'DynamicFieldConfig ' . Dumper(\$DynamicFieldConfig), );
my $Success = $Self->{BackendObject}->ValueSet( DynamicFieldConfig => $DynamicFieldConfig, ObjectID => $Param{Data}->{TicketID}, Value => [ { $DestinationSystemTime, }, ], UserID => $Param{UserID}, ); if ( !$Success ) { $Self->{LogObject}->Log( Priority => 'error', Message => "Can not set value to current time for dynamic field$DynamicFieldConfig->{Name}!" ); }
# print updated DynamicField_somename $Self->{LogObject}->Log( Priority=>'debug', Message => 'DynamicField_somename ' . Dumper(\$Ticket{DynamicField_somename}), );
On Tue, Dec 16, 2014 at 2:02 PM, Martin Gruner
wrote: Hi Roald,
yes this is possible. OTRS also uses a ticket event handler to caclulate and store the escalation times for the tickets. This (target) time calculation only happens when there are changes to the tickets. The escalation notifications etc. are independent of that. Of course you can also use a GA job to do this if the delay is ok.
Regards, mg
Am 12.12.14 um 16:43 schrieb Roald:
Dear Martijn,
Thank you for your reply.
I'm currently spending some time at this.
It seems to me that a custom ticket event handler can't be used. Suppose I have a field "Time To Intervention" and there needs to be a time based escalation. Is it possible to do time based escalations on dynamic fields using a custom ticket event handler ? I have to do some calculations and look at the calendars.
That's why I thought using a generic agent to run every few minutes and look at all open tickets should be the way to go. Maybe do it a bit smarter by only looking at open tickets which fullfull some criteria such as not escalating yet.
Thanks!,
With kind regards, Roald
On Fri, Nov 28, 2014 at 1:00 PM,
mailto:dev-request@otrs.org> wrote: Send dev mailing list submissions to dev@otrs.org mailto:dev@otrs.org
To subscribe or unsubscribe via the World Wide Web, visit http://lists.otrs.org/cgi-bin/listinfo/dev or, via email, send a message with subject or body 'help' to dev-request@otrs.org mailto:dev-request@otrs.org
You can reach the person managing the list at dev-owner@otrs.org mailto:dev-owner@otrs.org
When replying, please edit your Subject line so it is more specific than "Re: Contents of dev digest..."
Today's Topics:
1. Re: developing custom SLA/Service escalations and notifications (Martin Gruner) 2. OTRS 5 development (Martin Gruner)
----------------------------------------------------------------------
Message: 1 Date: Thu, 27 Nov 2014 13:24:24 +0100 From: Martin Gruner
mailto:martin.gruner@otrs.com> Subject: Re: [dev] developing custom SLA/Service escalations and notifications To: Development community of OTRS dev@otrs.org>>
Message-ID: <547717F8.7000002@otrs.com mailto:547717F8.7000002@otrs.com> Content-Type: text/plain; charset=windows-1252
Hello Roald,
Am 26.11.14 um 17:29 schrieb Roald: > Hi, > > I'm new to OTRS development. > > Requirements in a nutshell: > * set custom fields for SLA's > * calculate whether a ticket escalates based on these custom
fields (do
> some custom calculations) > * send notifications to agents based on these escalations > * there are also other requirements but most can be solved without > development > > Idea on how to approach this: > * xml file in /opt/otrs/Kernel/Config/Files which uses
SLAPreferences
> > <?xml version="1.0" encoding="utf-8" ?> >
> Valid="1">
> <Description Translatable="1">Time To
Intervention.</Description>
> <Group>Ticket</Group> > <SubGroup>Frontend::SLA::Preferences</SubGroup> > <Setting> > <Hash> > <Item > Key="Module">Kernel::Output::HTML::SLAPreferencesGeneric</Item> > <Item Key="Label">label for dynamic field</Item> > <Item Key="Desc">description.</Item> > <Item Key="Block">Input</Item> > <Item Key="PrefKey">dynamicfield</Item> > </Hash> > </Setting> > </ConfigItem> > ........ > > > * write a custom module with a job that should be run by Generic
Agent
> to do the rest. Maybe split it in two modules. > > Questions: > * Is my approach the most straightforward and suitable one ?
Sounds pretty straightforward. I think you might not need a GA job,
but
could do with a custom ticket event handler like Kernel::System::Ticket::Event::TicketEscalationIndex instead.
> * How do I calculate using the calendars ? For example hours
outside
> business hours don't count for one specific calendar. While there
is
> also a 24/7 calendar.
I'd recommend to tailor the calendars just as you need. For 24/7
you can
have a calendar that has everything marked, for the other one just define all non-business hours as business hours.
Regarding the question from your other mail: with the custom event handler you can also set a dynamic field.
Good luck!
Best regards, mg
-- Martin Gruner Senior Developer R&D
OTRS AG Bahnhofplatz 1a 94315 Straubing
T: +49 (0)6172 681988 0 F: +49 (0)9421 56818 18 I: www.otrs.com/ http://www.otrs.com/
Gesch?ftssitz: Bad Homburg, Amtsgericht: Bad Homburg, HRB 10751, USt-Nr.: DE256610065 Aufsichtsratsvorsitzender: Burchard Steinbild, Vorstand: Andr? Mindermann (Vorsitzender), Christopher Kuhn, Sabine Riedel
Schlanker, schneller und flacher denn je - OTRS 4! Und f?r alle, die MEHR wollen: Entdecken Sie hier die OTRS Business Solution? mit mehr Business Features!
https://www.otrs.com/otrs-business-solution-fuer-besseren-kundenservice/?lan...
------------------------------
Message: 2 Date: Thu, 27 Nov 2014 15:03:27 +0100 From: Martin Gruner
mailto:martin.gruner@otrs.com> Subject: [dev] OTRS 5 development To: Development community of OTRS dev@otrs.org>>
Message-ID: <54772F2F.1020904@otrs.com mailto:54772F2F.1020904@otrs.com> Content-Type: text/plain; charset=utf-8
Dear OTRS developers,
as you might have heard, OTRS 4 is now released and development for
OTRS
5 will start soon.
Do you plan to make substantial contributions to it? If that is the case, I want to offer you to plan and coordinate this together, to
make
sure right from the planning period that your contributions can find their way into OTRS 5.
Please just let me know via reply on this list.
Thanks and best regards, Martin
-- Martin Gruner Senior Developer R&D
OTRS AG Bahnhofplatz 1a 94315 Straubing
T: +49 (0)6172 681988 0 tel:%2B49%20%280%296172%20681988%200 F: +49 (0)9421 56818 18 tel:%2B49%20%280%299421%2056818%2018 I: www.otrs.com/ http://www.otrs.com/
Gesch?ftssitz: Bad Homburg, Amtsgericht: Bad Homburg, HRB 10751, USt-Nr.: DE256610065 Aufsichtsratsvorsitzender: Burchard Steinbild, Vorstand: Andr? Mindermann (Vorsitzender), Christopher Kuhn, Sabine Riedel
Schlanker, schneller und flacher denn je - OTRS 4! Und f?r alle, die MEHR wollen: Entdecken Sie hier die OTRS Business Solution? mit mehr Business Features!
https://www.otrs.com/otrs-business-solution-fuer-besseren-kundenservice/?lan...
------------------------------
_______________________________________________ dev mailing list dev@otrs.org mailto:dev@otrs.org http://lists.otrs.org/cgi-bin/listinfo/dev
End of dev Digest, Vol 44, Issue 6 **********************************
_______________________________________________ OTRS mailing list: dev - Webpage: http://otrs.org/ Archive: http://lists.otrs.org/pipermail/dev To unsubscribe: http://lists.otrs.org/cgi-bin/listinfo/dev
-- Martin Gruner Senior Developer R&D
OTRS AG Bahnhofplatz 1a 94315 Straubing
T: +49 (0)6172 681988 0 F: +49 (0)9421 56818 18 I: www.otrs.com/
Geschäftssitz: Bad Homburg, Amtsgericht: Bad Homburg, HRB 10751, USt-Nr.: DE256610065 Aufsichtsratsvorsitzender: Burchard Steinbild, Vorstand: André Mindermann (Vorsitzender), Christopher Kuhn, Sabine Riedel
Schlanker, schneller und flacher denn je - OTRS 4! Und für alle, die MEHR wollen: Entdecken Sie hier die OTRS Business Solution™ mit mehr Business Features!
https://www.otrs.com/otrs-business-solution-fuer-besseren-kundenservice/?lan... _______________________________________________ OTRS mailing list: dev - Webpage: http://otrs.org/ Archive: http://lists.otrs.org/pipermail/dev To unsubscribe: http://lists.otrs.org/cgi-bin/listinfo/dev

I get my DynamicFieldObject like this:
for (qw(ConfigObject DynamicFieldObject TicketObject LogObject
UserObject CustomerUserObject TimeObject SLAObject))
{
$Self->{$_} = $Param{$_} || die "Got no $_!";
}
But for some reason I can't seem to retrieve the DynamicField and
corresponding DynamicFieldConfig using DynamicFieldGet.
On Wed, Dec 24, 2014 at 3:16 PM, Roald
relevant debug messages from otrs.log:
[Wed Dec 24 15:11:42 2014][Debug][Kernel::System::Ticket::Event::Escalation::Run][225] @@Escalation.pm DynamicField $VAR1 = \{};
[Wed Dec 24 15:11:42 2014][Debug][Kernel::System::Ticket::Event::Escalation::Run][230] @@Escalation.pm DynamicFieldConfig $VAR1 = \undef;
[Wed Dec 24 15:11:42 2014][Error][Kernel::System::DynamicField::Backend::ValueSet][447] Need DynamicFieldConfig! [Wed Dec 24 15:11:42 2014][Error][Kernel::System::Ticket::Event::Escalation::Run][246] Can not set value for dynamic field!
apache2 errorlog :
root@otrs:/var/log/apache2# tail -f -n0 error.log [Wed Dec 24 15:11:38 2014] Escalation.pm: Subroutine new redefined at /opt/otrs//Kernel/System/Ticket/Event/Escalation.pm line 21. [Wed Dec 24 15:11:38 2014] Escalation.pm: Subroutine Run redefined at /opt/otrs//Kernel/System/Ticket/Event/Escalation.pm line 79. [Wed Dec 24 15:11:42 2014] -e: Odd number of elements in anonymous hash at /opt/otrs//Kernel/System/Ticket/Event/Escalation.pm line 235. ERROR: OTRS-CGI-66 Perl: 5.18.2 OS: linux Time: Wed Dec 24 15:11:42 2014
Message: Need DynamicFieldConfig!
RemoteAddress: 192.168.2.1 RequestURI: /otrs/index.pl
Traceback (3448): Module: Kernel::System::DynamicField::Backend::ValueSet (OTRS 3.3.x git) Line: 447 Module: Kernel::System::Ticket::Event::Escalation::Run (OTRS 3.3.x git) Line: 235 Module: Kernel::System::EventHandler::EventHandler (OTRS 3.3.x git) Line: 255 Module: Kernel::System::Ticket::TicketSLASet (OTRS 3.3.x git) Line: 3008 Module: Kernel::Modules::AgentTicketActionCommon::Run (OTRS 3.3.x git) Line: 598 Module: Kernel::System::Web::InterfaceAgent::Run (OTRS 3.3.x git) Line: 910 Module: ModPerl::ROOT::ModPerl::Registry::opt_otrs_bin_cgi_2dbin_index_2epl::handler (unknown version) Line: 41 Module: (eval) (v1.99) Line: 206 Module: ModPerl::RegistryCooker::run (v1.99) Line: 206 Module: ModPerl::RegistryCooker::default_handler (v1.99) Line: 172 Module: ModPerl::Registry::handler (v1.99) Line: 31
[Wed Dec 24 15:11:42 2014] -e: Use of uninitialized value in concatenation (.) or string at /opt/otrs//Kernel/System/Ticket/Event/Escalation.pm line 247. ERROR: OTRS-CGI-66 Perl: 5.18.2 OS: linux Time: Wed Dec 24 15:11:42 2014
Message: Can not set value for dynamic field!
RemoteAddress: 192.168.2.1 RequestURI: /otrs/index.pl
Traceback (3448): Module: Kernel::System::Ticket::Event::Escalation::Run (OTRS 3.3.x git) Line: 246 Module: Kernel::System::EventHandler::EventHandler (OTRS 3.3.x git) Line: 255 Module: Kernel::System::Ticket::TicketSLASet (OTRS 3.3.x git) Line: 3008 Module: Kernel::Modules::AgentTicketActionCommon::Run (OTRS 3.3.x git) Line: 598 Module: Kernel::System::Web::InterfaceAgent::Run (OTRS 3.3.x git) Line: 910 Module: ModPerl::ROOT::ModPerl::Registry::opt_otrs_bin_cgi_2dbin_index_2epl::handler (unknown version) Line: 41 Module: (eval) (v1.99) Line: 206 Module: ModPerl::RegistryCooker::run (v1.99) Line: 206 Module: ModPerl::RegistryCooker::default_handler (v1.99) Line: 172 Module: ModPerl::Registry::handler (v1.99) Line: 31
On Wed, Dec 24, 2014 at 3:00 PM, Roald
wrote: Dear Martin,
Thank you!
I'm currently trying to save new a new value into a Dynamic Field. To do this I use ValueSet from the BackendObject. ValueSet needs a DynamicFieldConfig. I'm trying to get this from the DynamicFieldGet method.
It's not working yet. Any idea why ?
This is how I created my BackendObject:
$Self->{BackendObject} = Kernel::System::DynamicField::Backend->new( EncodeObject => $Param{TicketObject}->{EncodeObject}, MainObject => $Param{TicketObject}->{MainObject}, DBObject => $Param{TicketObject}->{DBObject}, TimeObject => $Param{TicketObject}->{TimeObject}, %Param, );
This is how I try to update a Dynamic Field (not working) :
# get dynamic field config my $DynamicField = $Self->{DynamicFieldObject}->DynamicFieldGet( Name => "DynamicField_somename", ); my $DynamicFieldConfig = $DynamicField->{Config};
$Self->{LogObject}->Log( Priority=>'debug', Message=> 'DynamicField ' . Dumper(\$DynamicField), );
$Self->{LogObject}->Log( Priority=>'debug', Message=> 'DynamicFieldConfig ' . Dumper(\$DynamicFieldConfig), );
my $Success = $Self->{BackendObject}->ValueSet( DynamicFieldConfig => $DynamicFieldConfig, ObjectID => $Param{Data}->{TicketID}, Value => [ { $DestinationSystemTime, }, ], UserID => $Param{UserID}, ); if ( !$Success ) { $Self->{LogObject}->Log( Priority => 'error', Message => "Can not set value to current time for dynamic field$DynamicFieldConfig->{Name}!" ); }
# print updated DynamicField_somename $Self->{LogObject}->Log( Priority=>'debug', Message => 'DynamicField_somename ' . Dumper(\$Ticket{DynamicField_somename}), );
On Tue, Dec 16, 2014 at 2:02 PM, Martin Gruner
wrote: Hi Roald,
yes this is possible. OTRS also uses a ticket event handler to caclulate and store the escalation times for the tickets. This (target) time calculation only happens when there are changes to the tickets. The escalation notifications etc. are independent of that. Of course you can also use a GA job to do this if the delay is ok.
Regards, mg
Am 12.12.14 um 16:43 schrieb Roald:
Dear Martijn,
Thank you for your reply.
I'm currently spending some time at this.
It seems to me that a custom ticket event handler can't be used. Suppose I have a field "Time To Intervention" and there needs to be a time based escalation. Is it possible to do time based escalations on dynamic fields using a custom ticket event handler ? I have to do some calculations and look at the calendars.
That's why I thought using a generic agent to run every few minutes and look at all open tickets should be the way to go. Maybe do it a bit smarter by only looking at open tickets which fullfull some criteria such as not escalating yet.
Thanks!,
With kind regards, Roald
On Fri, Nov 28, 2014 at 1:00 PM,
mailto:dev-request@otrs.org> wrote: Send dev mailing list submissions to dev@otrs.org mailto:dev@otrs.org
To subscribe or unsubscribe via the World Wide Web, visit http://lists.otrs.org/cgi-bin/listinfo/dev or, via email, send a message with subject or body 'help' to dev-request@otrs.org mailto:dev-request@otrs.org
You can reach the person managing the list at dev-owner@otrs.org mailto:dev-owner@otrs.org
When replying, please edit your Subject line so it is more specific than "Re: Contents of dev digest..."
Today's Topics:
1. Re: developing custom SLA/Service escalations and notifications (Martin Gruner) 2. OTRS 5 development (Martin Gruner)
----------------------------------------------------------------------
Message: 1 Date: Thu, 27 Nov 2014 13:24:24 +0100 From: Martin Gruner
mailto:martin.gruner@otrs.com> Subject: Re: [dev] developing custom SLA/Service escalations and notifications To: Development community of OTRS dev@otrs.org>>
Message-ID: <547717F8.7000002@otrs.com mailto:547717F8.7000002@otrs.com> Content-Type: text/plain; charset=windows-1252
Hello Roald,
Am 26.11.14 um 17:29 schrieb Roald: > Hi, > > I'm new to OTRS development. > > Requirements in a nutshell: > * set custom fields for SLA's > * calculate whether a ticket escalates based on these custom
fields (do
> some custom calculations) > * send notifications to agents based on these escalations > * there are also other requirements but most can be solved
without
> development > > Idea on how to approach this: > * xml file in /opt/otrs/Kernel/Config/Files which uses
SLAPreferences
> > <?xml version="1.0" encoding="utf-8" ?> >
> Valid="1">
> <Description Translatable="1">Time To
Intervention.</Description>
> <Group>Ticket</Group> > <SubGroup>Frontend::SLA::Preferences</SubGroup> > <Setting> > <Hash> > <Item > Key="Module">Kernel::Output::HTML::SLAPreferencesGeneric</Item> > <Item Key="Label">label for dynamic field</Item> > <Item Key="Desc">description.</Item> > <Item Key="Block">Input</Item> > <Item Key="PrefKey">dynamicfield</Item> > </Hash> > </Setting> > </ConfigItem> > ........ > > > * write a custom module with a job that should be run by Generic
Agent
> to do the rest. Maybe split it in two modules. > > Questions: > * Is my approach the most straightforward and suitable one ?
Sounds pretty straightforward. I think you might not need a GA
job, but
could do with a custom ticket event handler like Kernel::System::Ticket::Event::TicketEscalationIndex instead.
> * How do I calculate using the calendars ? For example hours
outside
> business hours don't count for one specific calendar. While
there is
> also a 24/7 calendar.
I'd recommend to tailor the calendars just as you need. For 24/7
you can
have a calendar that has everything marked, for the other one just define all non-business hours as business hours.
Regarding the question from your other mail: with the custom event handler you can also set a dynamic field.
Good luck!
Best regards, mg
-- Martin Gruner Senior Developer R&D
OTRS AG Bahnhofplatz 1a 94315 Straubing
T: +49 (0)6172 681988 0 F: +49 (0)9421 56818 18 I: www.otrs.com/ http://www.otrs.com/
Gesch?ftssitz: Bad Homburg, Amtsgericht: Bad Homburg, HRB 10751, USt-Nr.: DE256610065 Aufsichtsratsvorsitzender: Burchard Steinbild, Vorstand: Andr? Mindermann (Vorsitzender), Christopher Kuhn, Sabine Riedel
Schlanker, schneller und flacher denn je - OTRS 4! Und f?r alle,
die
MEHR wollen: Entdecken Sie hier die OTRS Business Solution? mit
mehr
Business Features!
https://www.otrs.com/otrs-business-solution-fuer-besseren-kundenservice/?lan...
------------------------------
Message: 2 Date: Thu, 27 Nov 2014 15:03:27 +0100 From: Martin Gruner
mailto:martin.gruner@otrs.com> Subject: [dev] OTRS 5 development To: Development community of OTRS dev@otrs.org>>
Message-ID: <54772F2F.1020904@otrs.com mailto:54772F2F.1020904@otrs.com> Content-Type: text/plain; charset=utf-8
Dear OTRS developers,
as you might have heard, OTRS 4 is now released and development
for OTRS
5 will start soon.
Do you plan to make substantial contributions to it? If that is the case, I want to offer you to plan and coordinate this together, to
make
sure right from the planning period that your contributions can
find
their way into OTRS 5.
Please just let me know via reply on this list.
Thanks and best regards, Martin
-- Martin Gruner Senior Developer R&D
OTRS AG Bahnhofplatz 1a 94315 Straubing
T: +49 (0)6172 681988 0 tel:%2B49%20%280%296172%20681988%200 F: +49 (0)9421 56818 18 tel:%2B49%20%280%299421%2056818%2018 I: www.otrs.com/ http://www.otrs.com/
Gesch?ftssitz: Bad Homburg, Amtsgericht: Bad Homburg, HRB 10751, USt-Nr.: DE256610065 Aufsichtsratsvorsitzender: Burchard Steinbild, Vorstand: Andr? Mindermann (Vorsitzender), Christopher Kuhn, Sabine Riedel
Schlanker, schneller und flacher denn je - OTRS 4! Und f?r alle,
die
MEHR wollen: Entdecken Sie hier die OTRS Business Solution? mit
mehr
Business Features!
https://www.otrs.com/otrs-business-solution-fuer-besseren-kundenservice/?lan...
------------------------------
_______________________________________________ dev mailing list dev@otrs.org mailto:dev@otrs.org http://lists.otrs.org/cgi-bin/listinfo/dev
End of dev Digest, Vol 44, Issue 6 **********************************
_______________________________________________ OTRS mailing list: dev - Webpage: http://otrs.org/ Archive: http://lists.otrs.org/pipermail/dev To unsubscribe: http://lists.otrs.org/cgi-bin/listinfo/dev
-- Martin Gruner Senior Developer R&D
OTRS AG Bahnhofplatz 1a 94315 Straubing
T: +49 (0)6172 681988 0 F: +49 (0)9421 56818 18 I: www.otrs.com/
Geschäftssitz: Bad Homburg, Amtsgericht: Bad Homburg, HRB 10751, USt-Nr.: DE256610065 Aufsichtsratsvorsitzender: Burchard Steinbild, Vorstand: André Mindermann (Vorsitzender), Christopher Kuhn, Sabine Riedel
Schlanker, schneller und flacher denn je - OTRS 4! Und für alle, die MEHR wollen: Entdecken Sie hier die OTRS Business Solution™ mit mehr Business Features!
https://www.otrs.com/otrs-business-solution-fuer-besseren-kundenservice/?lan... _______________________________________________ OTRS mailing list: dev - Webpage: http://otrs.org/ Archive: http://lists.otrs.org/pipermail/dev To unsubscribe: http://lists.otrs.org/cgi-bin/listinfo/dev

I made some progress. I used DynamicFieldListGet to figure out I had to
drop "DynamicField_" from the fieldname.
ValueSet still doesn't work.
# get dynamic field config
my $DynamicField = $Self->{DynamicFieldObject}->DynamicFieldGet(
Name => "somename",
);
$Self->{LogObject}->Log(
Priority=>'debug',
Message=> '!!@@Escalation.pm DynamicField ' .
Dumper(\$DynamicField),
);
my $Success = $Self->{BackendObject}->ValueSet(
DynamicFieldConfig => $DynamicField,
ObjectID => $Param{Data}->{TicketID},
Value => [
{
$DestinationSystemTime,
},
],
UserID => $Param{UserID},
);
if ( !$Success ) {
$Self->{LogObject}->Log(
Priority => 'error',
Message =>
"Can not set value for dynamic field $DynamicField->{Name}!"
);
}
debug messages otrs.log:
[Wed Dec 24 15:54:13
2014][Debug][Kernel::System::Ticket::Event::Escalation::Run][233]
!!@@Escalation.pm DynamicField $VAR1 = \{
'FieldType' => 'DateTime',
'ID' => '7',
'ValidID' => '1',
'FieldOrder' => '7',
'InternalField' => '0',
'Label' => 'some label',
'CreateTime' => '2014-12-22 16:17:25',
'Name' => 'somename',
'ChangeTime' => '2014-12-22 16:17:25',
'ObjectType' => 'Ticket',
'Config' => {
'YearsInFuture' => '5',
'YearsInPast' => '5',
'Link' => '',
'DefaultValue' => '0',
'YearsPeriod' => '0'
}
};
[Wed Dec 24 15:54:13
2014][Error][Kernel::System::DynamicField::Backend::ValueSet][512] Could
not update field somename for Ticket ID 5 !
[Wed Dec 24 15:54:13
2014][Error][Kernel::System::Ticket::Event::Escalation::Run][254] Can not
set value for dynamic field somename!
error.log apache:
[Wed Dec 24 15:54:13 2014] -e: Odd number of elements in anonymous hash at
/opt/otrs//Kernel/System/Ticket/Event/Escalation.pm line 243.
ERROR: OTRS-CGI-66 Perl: 5.18.2 OS: linux Time: Wed Dec 24 15:54:13 2014
Message: Could not update field somename for Ticket ID 5 !
RemoteAddress: 192.168.2.1
RequestURI: /otrs/index.pl
Traceback (3992):
Module: Kernel::System::DynamicField::Backend::ValueSet (OTRS 3.3.x git)
Line: 512
Module: Kernel::System::Ticket::Event::Escalation::Run (OTRS 3.3.x git)
Line: 243
Module: Kernel::System::EventHandler::EventHandler (OTRS 3.3.x git)
Line: 255
Module: Kernel::System::Ticket::TicketSLASet (OTRS 3.3.x git) Line: 3008
Module: Kernel::Modules::AgentTicketActionCommon::Run (OTRS 3.3.x git)
Line: 598
Module: Kernel::System::Web::InterfaceAgent::Run (OTRS 3.3.x git) Line:
910
Module:
ModPerl::ROOT::ModPerl::Registry::opt_otrs_bin_cgi_2dbin_index_2epl::handler
(unknown version) Line: 41
Module: (eval) (v1.99) Line: 206
Module: ModPerl::RegistryCooker::run (v1.99) Line: 206
Module: ModPerl::RegistryCooker::default_handler (v1.99) Line: 172
Module: ModPerl::Registry::handler (v1.99) Line: 31
ERROR: OTRS-CGI-66 Perl: 5.18.2 OS: linux Time: Wed Dec 24 15:54:13 2014
Message: Can not set value for dynamic field somename!
RemoteAddress: 192.168.2.1
RequestURI: /otrs/index.pl
Traceback (3992):
Module: Kernel::System::Ticket::Event::Escalation::Run (OTRS 3.3.x git)
Line: 254
Module: Kernel::System::EventHandler::EventHandler (OTRS 3.3.x git)
Line: 255
Module: Kernel::System::Ticket::TicketSLASet (OTRS 3.3.x git) Line: 3008
Module: Kernel::Modules::AgentTicketActionCommon::Run (OTRS 3.3.x git)
Line: 598
Module: Kernel::System::Web::InterfaceAgent::Run (OTRS 3.3.x git) Line:
910
Module:
ModPerl::ROOT::ModPerl::Registry::opt_otrs_bin_cgi_2dbin_index_2epl::handler
(unknown version) Line: 41
Module: (eval) (v1.99) Line: 206
Module: ModPerl::RegistryCooker::run (v1.99) Line: 206
Module: ModPerl::RegistryCooker::default_handler (v1.99) Line: 172
Module: ModPerl::Registry::handler (v1.99) Line: 31
[Wed Dec 24 15:54:13 2014] Escalation.pm: Subroutine new redefined at
/opt/otrs//Kernel/System/Ticket/Event/Escalation.pm line 21.
[Wed Dec 24 15:54:14 2014] Escalation.pm: Subroutine Run redefined at
/opt/otrs//Kernel/System/Ticket/Event/Escalation.pm line 79.
On Wed, Dec 24, 2014 at 3:18 PM, Roald
I get my DynamicFieldObject like this: for (qw(ConfigObject DynamicFieldObject TicketObject LogObject UserObject CustomerUserObject TimeObject SLAObject)) { $Self->{$_} = $Param{$_} || die "Got no $_!"; }
But for some reason I can't seem to retrieve the DynamicField and corresponding DynamicFieldConfig using DynamicFieldGet.
On Wed, Dec 24, 2014 at 3:16 PM, Roald
wrote: relevant debug messages from otrs.log:
[Wed Dec 24 15:11:42 2014][Debug][Kernel::System::Ticket::Event::Escalation::Run][225] @@Escalation.pm DynamicField $VAR1 = \{};
[Wed Dec 24 15:11:42 2014][Debug][Kernel::System::Ticket::Event::Escalation::Run][230] @@Escalation.pm DynamicFieldConfig $VAR1 = \undef;
[Wed Dec 24 15:11:42 2014][Error][Kernel::System::DynamicField::Backend::ValueSet][447] Need DynamicFieldConfig! [Wed Dec 24 15:11:42 2014][Error][Kernel::System::Ticket::Event::Escalation::Run][246] Can not set value for dynamic field!
apache2 errorlog :
root@otrs:/var/log/apache2# tail -f -n0 error.log [Wed Dec 24 15:11:38 2014] Escalation.pm: Subroutine new redefined at /opt/otrs//Kernel/System/Ticket/Event/Escalation.pm line 21. [Wed Dec 24 15:11:38 2014] Escalation.pm: Subroutine Run redefined at /opt/otrs//Kernel/System/Ticket/Event/Escalation.pm line 79. [Wed Dec 24 15:11:42 2014] -e: Odd number of elements in anonymous hash at /opt/otrs//Kernel/System/Ticket/Event/Escalation.pm line 235. ERROR: OTRS-CGI-66 Perl: 5.18.2 OS: linux Time: Wed Dec 24 15:11:42 2014
Message: Need DynamicFieldConfig!
RemoteAddress: 192.168.2.1 RequestURI: /otrs/index.pl
Traceback (3448): Module: Kernel::System::DynamicField::Backend::ValueSet (OTRS 3.3.x git) Line: 447 Module: Kernel::System::Ticket::Event::Escalation::Run (OTRS 3.3.x git) Line: 235 Module: Kernel::System::EventHandler::EventHandler (OTRS 3.3.x git) Line: 255 Module: Kernel::System::Ticket::TicketSLASet (OTRS 3.3.x git) Line: 3008 Module: Kernel::Modules::AgentTicketActionCommon::Run (OTRS 3.3.x git) Line: 598 Module: Kernel::System::Web::InterfaceAgent::Run (OTRS 3.3.x git) Line: 910 Module: ModPerl::ROOT::ModPerl::Registry::opt_otrs_bin_cgi_2dbin_index_2epl::handler (unknown version) Line: 41 Module: (eval) (v1.99) Line: 206 Module: ModPerl::RegistryCooker::run (v1.99) Line: 206 Module: ModPerl::RegistryCooker::default_handler (v1.99) Line: 172 Module: ModPerl::Registry::handler (v1.99) Line: 31
[Wed Dec 24 15:11:42 2014] -e: Use of uninitialized value in concatenation (.) or string at /opt/otrs//Kernel/System/Ticket/Event/Escalation.pm line 247. ERROR: OTRS-CGI-66 Perl: 5.18.2 OS: linux Time: Wed Dec 24 15:11:42 2014
Message: Can not set value for dynamic field!
RemoteAddress: 192.168.2.1 RequestURI: /otrs/index.pl
Traceback (3448): Module: Kernel::System::Ticket::Event::Escalation::Run (OTRS 3.3.x git) Line: 246 Module: Kernel::System::EventHandler::EventHandler (OTRS 3.3.x git) Line: 255 Module: Kernel::System::Ticket::TicketSLASet (OTRS 3.3.x git) Line: 3008 Module: Kernel::Modules::AgentTicketActionCommon::Run (OTRS 3.3.x git) Line: 598 Module: Kernel::System::Web::InterfaceAgent::Run (OTRS 3.3.x git) Line: 910 Module: ModPerl::ROOT::ModPerl::Registry::opt_otrs_bin_cgi_2dbin_index_2epl::handler (unknown version) Line: 41 Module: (eval) (v1.99) Line: 206 Module: ModPerl::RegistryCooker::run (v1.99) Line: 206 Module: ModPerl::RegistryCooker::default_handler (v1.99) Line: 172 Module: ModPerl::Registry::handler (v1.99) Line: 31
On Wed, Dec 24, 2014 at 3:00 PM, Roald
wrote: Dear Martin,
Thank you!
I'm currently trying to save new a new value into a Dynamic Field. To do this I use ValueSet from the BackendObject. ValueSet needs a DynamicFieldConfig. I'm trying to get this from the DynamicFieldGet method.
It's not working yet. Any idea why ?
This is how I created my BackendObject:
$Self->{BackendObject} = Kernel::System::DynamicField::Backend->new( EncodeObject => $Param{TicketObject}->{EncodeObject}, MainObject => $Param{TicketObject}->{MainObject}, DBObject => $Param{TicketObject}->{DBObject}, TimeObject => $Param{TicketObject}->{TimeObject}, %Param, );
This is how I try to update a Dynamic Field (not working) :
# get dynamic field config my $DynamicField = $Self->{DynamicFieldObject}->DynamicFieldGet( Name => "DynamicField_somename", ); my $DynamicFieldConfig = $DynamicField->{Config};
$Self->{LogObject}->Log( Priority=>'debug', Message=> 'DynamicField ' . Dumper(\$DynamicField), );
$Self->{LogObject}->Log( Priority=>'debug', Message=> 'DynamicFieldConfig ' . Dumper(\$DynamicFieldConfig), );
my $Success = $Self->{BackendObject}->ValueSet( DynamicFieldConfig => $DynamicFieldConfig, ObjectID => $Param{Data}->{TicketID}, Value => [ { $DestinationSystemTime, }, ], UserID => $Param{UserID}, ); if ( !$Success ) { $Self->{LogObject}->Log( Priority => 'error', Message => "Can not set value to current time for dynamic field$DynamicFieldConfig->{Name}!" ); }
# print updated DynamicField_somename $Self->{LogObject}->Log( Priority=>'debug', Message => 'DynamicField_somename ' . Dumper(\$Ticket{DynamicField_somename}), );
On Tue, Dec 16, 2014 at 2:02 PM, Martin Gruner
wrote: Hi Roald,
yes this is possible. OTRS also uses a ticket event handler to caclulate and store the escalation times for the tickets. This (target) time calculation only happens when there are changes to the tickets. The escalation notifications etc. are independent of that. Of course you can also use a GA job to do this if the delay is ok.
Regards, mg
Am 12.12.14 um 16:43 schrieb Roald:
Dear Martijn,
Thank you for your reply.
I'm currently spending some time at this.
It seems to me that a custom ticket event handler can't be used. Suppose I have a field "Time To Intervention" and there needs to be a time based escalation. Is it possible to do time based escalations on dynamic fields using a custom ticket event handler ? I have to do some calculations and look at the calendars.
That's why I thought using a generic agent to run every few minutes and look at all open tickets should be the way to go. Maybe do it a bit smarter by only looking at open tickets which fullfull some criteria such as not escalating yet.
Thanks!,
With kind regards, Roald
On Fri, Nov 28, 2014 at 1:00 PM,
mailto:dev-request@otrs.org> wrote: Send dev mailing list submissions to dev@otrs.org mailto:dev@otrs.org
To subscribe or unsubscribe via the World Wide Web, visit http://lists.otrs.org/cgi-bin/listinfo/dev or, via email, send a message with subject or body 'help' to dev-request@otrs.org mailto:dev-request@otrs.org
You can reach the person managing the list at dev-owner@otrs.org mailto:dev-owner@otrs.org
When replying, please edit your Subject line so it is more specific than "Re: Contents of dev digest..."
Today's Topics:
1. Re: developing custom SLA/Service escalations and notifications (Martin Gruner) 2. OTRS 5 development (Martin Gruner)
----------------------------------------------------------------------
Message: 1 Date: Thu, 27 Nov 2014 13:24:24 +0100 From: Martin Gruner
mailto:martin.gruner@otrs.com> Subject: Re: [dev] developing custom SLA/Service escalations and notifications To: Development community of OTRS dev@otrs.org>>
Message-ID: <547717F8.7000002@otrs.com mailto:547717F8.7000002@otrs.com> Content-Type: text/plain; charset=windows-1252
Hello Roald,
Am 26.11.14 um 17:29 schrieb Roald: > Hi, > > I'm new to OTRS development. > > Requirements in a nutshell: > * set custom fields for SLA's > * calculate whether a ticket escalates based on these custom
fields (do
> some custom calculations) > * send notifications to agents based on these escalations > * there are also other requirements but most can be solved
without
> development > > Idea on how to approach this: > * xml file in /opt/otrs/Kernel/Config/Files which uses
SLAPreferences
> > <?xml version="1.0" encoding="utf-8" ?> >
> Valid="1">
> <Description Translatable="1">Time To
Intervention.</Description>
> <Group>Ticket</Group> > <SubGroup>Frontend::SLA::Preferences</SubGroup> > <Setting> > <Hash> > <Item > Key="Module">Kernel::Output::HTML::SLAPreferencesGeneric</Item> > <Item Key="Label">label for dynamic field</Item> > <Item Key="Desc">description.</Item> > <Item Key="Block">Input</Item> > <Item Key="PrefKey">dynamicfield</Item> > </Hash> > </Setting> > </ConfigItem> > ........ > > > * write a custom module with a job that should be run by
Generic Agent
> to do the rest. Maybe split it in two modules. > > Questions: > * Is my approach the most straightforward and suitable one ?
Sounds pretty straightforward. I think you might not need a GA
job, but
could do with a custom ticket event handler like Kernel::System::Ticket::Event::TicketEscalationIndex instead.
> * How do I calculate using the calendars ? For example hours
outside
> business hours don't count for one specific calendar. While
there is
> also a 24/7 calendar.
I'd recommend to tailor the calendars just as you need. For 24/7
you can
have a calendar that has everything marked, for the other one just define all non-business hours as business hours.
Regarding the question from your other mail: with the custom event handler you can also set a dynamic field.
Good luck!
Best regards, mg
-- Martin Gruner Senior Developer R&D
OTRS AG Bahnhofplatz 1a 94315 Straubing
T: +49 (0)6172 681988 0 F: +49 (0)9421 56818 18 I: www.otrs.com/ http://www.otrs.com/
Gesch?ftssitz: Bad Homburg, Amtsgericht: Bad Homburg, HRB 10751, USt-Nr.: DE256610065 Aufsichtsratsvorsitzender: Burchard Steinbild, Vorstand: Andr? Mindermann (Vorsitzender), Christopher Kuhn, Sabine Riedel
Schlanker, schneller und flacher denn je - OTRS 4! Und f?r alle,
die
MEHR wollen: Entdecken Sie hier die OTRS Business Solution? mit
mehr
Business Features!
https://www.otrs.com/otrs-business-solution-fuer-besseren-kundenservice/?lan...
------------------------------
Message: 2 Date: Thu, 27 Nov 2014 15:03:27 +0100 From: Martin Gruner
mailto:martin.gruner@otrs.com> Subject: [dev] OTRS 5 development To: Development community of OTRS dev@otrs.org>>
Message-ID: <54772F2F.1020904@otrs.com mailto:54772F2F.1020904@otrs.com> Content-Type: text/plain; charset=utf-8
Dear OTRS developers,
as you might have heard, OTRS 4 is now released and development
for OTRS
5 will start soon.
Do you plan to make substantial contributions to it? If that is
the
case, I want to offer you to plan and coordinate this together,
to make
sure right from the planning period that your contributions can
find
their way into OTRS 5.
Please just let me know via reply on this list.
Thanks and best regards, Martin
-- Martin Gruner Senior Developer R&D
OTRS AG Bahnhofplatz 1a 94315 Straubing
T: +49 (0)6172 681988 0 tel:%2B49%20%280%296172%20681988%200 F: +49 (0)9421 56818 18 tel:%2B49%20%280%299421%2056818%2018 I: www.otrs.com/ http://www.otrs.com/
Gesch?ftssitz: Bad Homburg, Amtsgericht: Bad Homburg, HRB 10751, USt-Nr.: DE256610065 Aufsichtsratsvorsitzender: Burchard Steinbild, Vorstand: Andr? Mindermann (Vorsitzender), Christopher Kuhn, Sabine Riedel
Schlanker, schneller und flacher denn je - OTRS 4! Und f?r alle,
die
MEHR wollen: Entdecken Sie hier die OTRS Business Solution? mit
mehr
Business Features!
https://www.otrs.com/otrs-business-solution-fuer-besseren-kundenservice/?lan...
------------------------------
_______________________________________________ dev mailing list dev@otrs.org mailto:dev@otrs.org http://lists.otrs.org/cgi-bin/listinfo/dev
End of dev Digest, Vol 44, Issue 6 **********************************
_______________________________________________ OTRS mailing list: dev - Webpage: http://otrs.org/ Archive: http://lists.otrs.org/pipermail/dev To unsubscribe: http://lists.otrs.org/cgi-bin/listinfo/dev
-- Martin Gruner Senior Developer R&D
OTRS AG Bahnhofplatz 1a 94315 Straubing
T: +49 (0)6172 681988 0 F: +49 (0)9421 56818 18 I: www.otrs.com/
Geschäftssitz: Bad Homburg, Amtsgericht: Bad Homburg, HRB 10751, USt-Nr.: DE256610065 Aufsichtsratsvorsitzender: Burchard Steinbild, Vorstand: André Mindermann (Vorsitzender), Christopher Kuhn, Sabine Riedel
Schlanker, schneller und flacher denn je - OTRS 4! Und für alle, die MEHR wollen: Entdecken Sie hier die OTRS Business Solution™ mit mehr Business Features!
https://www.otrs.com/otrs-business-solution-fuer-besseren-kundenservice/?lan... _______________________________________________ OTRS mailing list: dev - Webpage: http://otrs.org/ Archive: http://lists.otrs.org/pipermail/dev To unsubscribe: http://lists.otrs.org/cgi-bin/listinfo/dev

I made some progress. I want to set the value of the DynamicField to
$DestinationSystemTime. I'm using ValueSet from DynamicFieldValueObject.
The value of the dynamic field is not changed by ValueSe but I'm getting no
more errors.
The value of the DynamicField should be changed to '2014-12-22 17:06:39'
but remains at '\'2014-12-04 16:54:00'.
# get dynamic field config
my $DynamicField = $Self->{DynamicFieldObject}->DynamicFieldGet(
Name => "TTRS",
);
my $Success = $Self->{DynamicFieldValueObject}->ValueSet(
FieldID => $DynamicField->{ID},
ObjectID => $Param{Data}->{TicketID},
Value => [
{
ValueDateTime => $DestinationSystemTime,
},
],
UserID => $Param{UserID},
);
if ( !$Success ) {
$Self->{LogObject}->Log(
Priority => 'error',
Message =>
"Can not set value for dynamic field $DynamicField->{Name}!"
);
}
debug log:
[Wed Dec 24 17:05:47
2014][Debug][Kernel::System::Ticket::Event::ICTRoomEscalation::Run][228]
@@Escalation.pm DestinationTime $VAR1 = \1419264399;
[Wed Dec 24 17:05:47
2014][Debug][Kernel::System::Ticket::Event::ICTRoomEscalation::Run][232]
@@Escalation.pm DestinationSystemTime $VAR1 = \'2014-12-22 17:06:39';
[Wed Dec 24 17:05:47
2014][Debug][Kernel::System::Ticket::Event::ICTRoomEscalation::Run][283]
@@Escalation.pm DynamicField_somename after update $VAR1 = \'2014-12-04
16:54:00';
[Wed Dec 24 17:05:47
2014][Debug][Kernel::System::Ticket::Event::ICTRoomEscalation::Run][288]
!!@@Escalation.pm FieldID $VAR1 = \'7';
[Wed Dec 24 17:05:47
2014][Debug][Kernel::System::Ticket::Event::ICTRoomEscalation::Run][292]
!!@@Escalation.pm ObjectID $VAR1 = \'5';
[Wed Dec 24 17:05:47
2014][Debug][Kernel::System::Ticket::Event::ICTRoomEscalation::Run][296]
!!@@Escalation.pm UserID $VAR1 = \2;
On Wed, Dec 24, 2014 at 4:06 PM, Roald
I made some progress. I used DynamicFieldListGet to figure out I had to drop "DynamicField_" from the fieldname.
ValueSet still doesn't work.
# get dynamic field config my $DynamicField = $Self->{DynamicFieldObject}->DynamicFieldGet( Name => "somename", );
$Self->{LogObject}->Log( Priority=>'debug', Message=> '!!@@Escalation.pm DynamicField ' . Dumper(\$DynamicField), );
my $Success = $Self->{BackendObject}->ValueSet( DynamicFieldConfig => $DynamicField, ObjectID => $Param{Data}->{TicketID}, Value => [ { $DestinationSystemTime, }, ], UserID => $Param{UserID}, ); if ( !$Success ) { $Self->{LogObject}->Log( Priority => 'error', Message => "Can not set value for dynamic field $DynamicField->{Name}!" ); }
debug messages otrs.log:
[Wed Dec 24 15:54:13 2014][Debug][Kernel::System::Ticket::Event::Escalation::Run][233] !!@@Escalation.pm DynamicField $VAR1 = \{ 'FieldType' => 'DateTime', 'ID' => '7', 'ValidID' => '1', 'FieldOrder' => '7', 'InternalField' => '0', 'Label' => 'some label', 'CreateTime' => '2014-12-22 16:17:25', 'Name' => 'somename', 'ChangeTime' => '2014-12-22 16:17:25', 'ObjectType' => 'Ticket', 'Config' => { 'YearsInFuture' => '5', 'YearsInPast' => '5', 'Link' => '', 'DefaultValue' => '0', 'YearsPeriod' => '0' } };
[Wed Dec 24 15:54:13 2014][Error][Kernel::System::DynamicField::Backend::ValueSet][512] Could not update field somename for Ticket ID 5 ! [Wed Dec 24 15:54:13 2014][Error][Kernel::System::Ticket::Event::Escalation::Run][254] Can not set value for dynamic field somename!
error.log apache:
[Wed Dec 24 15:54:13 2014] -e: Odd number of elements in anonymous hash at /opt/otrs//Kernel/System/Ticket/Event/Escalation.pm line 243. ERROR: OTRS-CGI-66 Perl: 5.18.2 OS: linux Time: Wed Dec 24 15:54:13 2014
Message: Could not update field somename for Ticket ID 5 !
RemoteAddress: 192.168.2.1 RequestURI: /otrs/index.pl
Traceback (3992): Module: Kernel::System::DynamicField::Backend::ValueSet (OTRS 3.3.x git) Line: 512 Module: Kernel::System::Ticket::Event::Escalation::Run (OTRS 3.3.x git) Line: 243 Module: Kernel::System::EventHandler::EventHandler (OTRS 3.3.x git) Line: 255 Module: Kernel::System::Ticket::TicketSLASet (OTRS 3.3.x git) Line: 3008 Module: Kernel::Modules::AgentTicketActionCommon::Run (OTRS 3.3.x git) Line: 598 Module: Kernel::System::Web::InterfaceAgent::Run (OTRS 3.3.x git) Line: 910 Module: ModPerl::ROOT::ModPerl::Registry::opt_otrs_bin_cgi_2dbin_index_2epl::handler (unknown version) Line: 41 Module: (eval) (v1.99) Line: 206 Module: ModPerl::RegistryCooker::run (v1.99) Line: 206 Module: ModPerl::RegistryCooker::default_handler (v1.99) Line: 172 Module: ModPerl::Registry::handler (v1.99) Line: 31
ERROR: OTRS-CGI-66 Perl: 5.18.2 OS: linux Time: Wed Dec 24 15:54:13 2014
Message: Can not set value for dynamic field somename!
RemoteAddress: 192.168.2.1 RequestURI: /otrs/index.pl
Traceback (3992): Module: Kernel::System::Ticket::Event::Escalation::Run (OTRS 3.3.x git) Line: 254 Module: Kernel::System::EventHandler::EventHandler (OTRS 3.3.x git) Line: 255 Module: Kernel::System::Ticket::TicketSLASet (OTRS 3.3.x git) Line: 3008 Module: Kernel::Modules::AgentTicketActionCommon::Run (OTRS 3.3.x git) Line: 598 Module: Kernel::System::Web::InterfaceAgent::Run (OTRS 3.3.x git) Line: 910 Module: ModPerl::ROOT::ModPerl::Registry::opt_otrs_bin_cgi_2dbin_index_2epl::handler (unknown version) Line: 41 Module: (eval) (v1.99) Line: 206 Module: ModPerl::RegistryCooker::run (v1.99) Line: 206 Module: ModPerl::RegistryCooker::default_handler (v1.99) Line: 172 Module: ModPerl::Registry::handler (v1.99) Line: 31
[Wed Dec 24 15:54:13 2014] Escalation.pm: Subroutine new redefined at /opt/otrs//Kernel/System/Ticket/Event/Escalation.pm line 21. [Wed Dec 24 15:54:14 2014] Escalation.pm: Subroutine Run redefined at /opt/otrs//Kernel/System/Ticket/Event/Escalation.pm line 79.
On Wed, Dec 24, 2014 at 3:18 PM, Roald
wrote: I get my DynamicFieldObject like this: for (qw(ConfigObject DynamicFieldObject TicketObject LogObject UserObject CustomerUserObject TimeObject SLAObject)) { $Self->{$_} = $Param{$_} || die "Got no $_!"; }
But for some reason I can't seem to retrieve the DynamicField and corresponding DynamicFieldConfig using DynamicFieldGet.
On Wed, Dec 24, 2014 at 3:16 PM, Roald
wrote: relevant debug messages from otrs.log:
[Wed Dec 24 15:11:42 2014][Debug][Kernel::System::Ticket::Event::Escalation::Run][225] @@Escalation.pm DynamicField $VAR1 = \{};
[Wed Dec 24 15:11:42 2014][Debug][Kernel::System::Ticket::Event::Escalation::Run][230] @@Escalation.pm DynamicFieldConfig $VAR1 = \undef;
[Wed Dec 24 15:11:42 2014][Error][Kernel::System::DynamicField::Backend::ValueSet][447] Need DynamicFieldConfig! [Wed Dec 24 15:11:42 2014][Error][Kernel::System::Ticket::Event::Escalation::Run][246] Can not set value for dynamic field!
apache2 errorlog :
root@otrs:/var/log/apache2# tail -f -n0 error.log [Wed Dec 24 15:11:38 2014] Escalation.pm: Subroutine new redefined at /opt/otrs//Kernel/System/Ticket/Event/Escalation.pm line 21. [Wed Dec 24 15:11:38 2014] Escalation.pm: Subroutine Run redefined at /opt/otrs//Kernel/System/Ticket/Event/Escalation.pm line 79. [Wed Dec 24 15:11:42 2014] -e: Odd number of elements in anonymous hash at /opt/otrs//Kernel/System/Ticket/Event/Escalation.pm line 235. ERROR: OTRS-CGI-66 Perl: 5.18.2 OS: linux Time: Wed Dec 24 15:11:42 2014
Message: Need DynamicFieldConfig!
RemoteAddress: 192.168.2.1 RequestURI: /otrs/index.pl
Traceback (3448): Module: Kernel::System::DynamicField::Backend::ValueSet (OTRS 3.3.x git) Line: 447 Module: Kernel::System::Ticket::Event::Escalation::Run (OTRS 3.3.x git) Line: 235 Module: Kernel::System::EventHandler::EventHandler (OTRS 3.3.x git) Line: 255 Module: Kernel::System::Ticket::TicketSLASet (OTRS 3.3.x git) Line: 3008 Module: Kernel::Modules::AgentTicketActionCommon::Run (OTRS 3.3.x git) Line: 598 Module: Kernel::System::Web::InterfaceAgent::Run (OTRS 3.3.x git) Line: 910 Module: ModPerl::ROOT::ModPerl::Registry::opt_otrs_bin_cgi_2dbin_index_2epl::handler (unknown version) Line: 41 Module: (eval) (v1.99) Line: 206 Module: ModPerl::RegistryCooker::run (v1.99) Line: 206 Module: ModPerl::RegistryCooker::default_handler (v1.99) Line: 172 Module: ModPerl::Registry::handler (v1.99) Line: 31
[Wed Dec 24 15:11:42 2014] -e: Use of uninitialized value in concatenation (.) or string at /opt/otrs//Kernel/System/Ticket/Event/Escalation.pm line 247. ERROR: OTRS-CGI-66 Perl: 5.18.2 OS: linux Time: Wed Dec 24 15:11:42 2014
Message: Can not set value for dynamic field!
RemoteAddress: 192.168.2.1 RequestURI: /otrs/index.pl
Traceback (3448): Module: Kernel::System::Ticket::Event::Escalation::Run (OTRS 3.3.x git) Line: 246 Module: Kernel::System::EventHandler::EventHandler (OTRS 3.3.x git) Line: 255 Module: Kernel::System::Ticket::TicketSLASet (OTRS 3.3.x git) Line: 3008 Module: Kernel::Modules::AgentTicketActionCommon::Run (OTRS 3.3.x git) Line: 598 Module: Kernel::System::Web::InterfaceAgent::Run (OTRS 3.3.x git) Line: 910 Module: ModPerl::ROOT::ModPerl::Registry::opt_otrs_bin_cgi_2dbin_index_2epl::handler (unknown version) Line: 41 Module: (eval) (v1.99) Line: 206 Module: ModPerl::RegistryCooker::run (v1.99) Line: 206 Module: ModPerl::RegistryCooker::default_handler (v1.99) Line: 172 Module: ModPerl::Registry::handler (v1.99) Line: 31
On Wed, Dec 24, 2014 at 3:00 PM, Roald
wrote: Dear Martin,
Thank you!
I'm currently trying to save new a new value into a Dynamic Field. To do this I use ValueSet from the BackendObject. ValueSet needs a DynamicFieldConfig. I'm trying to get this from the DynamicFieldGet method.
It's not working yet. Any idea why ?
This is how I created my BackendObject:
$Self->{BackendObject} = Kernel::System::DynamicField::Backend->new( EncodeObject => $Param{TicketObject}->{EncodeObject}, MainObject => $Param{TicketObject}->{MainObject}, DBObject => $Param{TicketObject}->{DBObject}, TimeObject => $Param{TicketObject}->{TimeObject}, %Param, );
This is how I try to update a Dynamic Field (not working) :
# get dynamic field config my $DynamicField = $Self->{DynamicFieldObject}->DynamicFieldGet( Name => "DynamicField_somename", ); my $DynamicFieldConfig = $DynamicField->{Config};
$Self->{LogObject}->Log( Priority=>'debug', Message=> 'DynamicField ' . Dumper(\$DynamicField), );
$Self->{LogObject}->Log( Priority=>'debug', Message=> 'DynamicFieldConfig ' . Dumper(\$DynamicFieldConfig), );
my $Success = $Self->{BackendObject}->ValueSet( DynamicFieldConfig => $DynamicFieldConfig, ObjectID => $Param{Data}->{TicketID}, Value => [ { $DestinationSystemTime, }, ], UserID => $Param{UserID}, ); if ( !$Success ) { $Self->{LogObject}->Log( Priority => 'error', Message => "Can not set value to current time for dynamic field$DynamicFieldConfig->{Name}!" ); }
# print updated DynamicField_somename $Self->{LogObject}->Log( Priority=>'debug', Message => 'DynamicField_somename ' . Dumper(\$Ticket{DynamicField_somename}), );
On Tue, Dec 16, 2014 at 2:02 PM, Martin Gruner
wrote: Hi Roald,
yes this is possible. OTRS also uses a ticket event handler to caclulate and store the escalation times for the tickets. This (target) time calculation only happens when there are changes to the tickets. The escalation notifications etc. are independent of that. Of course you can also use a GA job to do this if the delay is ok.
Regards, mg
Am 12.12.14 um 16:43 schrieb Roald:
Dear Martijn,
Thank you for your reply.
I'm currently spending some time at this.
It seems to me that a custom ticket event handler can't be used. Suppose I have a field "Time To Intervention" and there needs to be a time based escalation. Is it possible to do time based escalations on dynamic fields using a custom ticket event handler ? I have to do some calculations and look at the calendars.
That's why I thought using a generic agent to run every few minutes and look at all open tickets should be the way to go. Maybe do it a bit smarter by only looking at open tickets which fullfull some criteria such as not escalating yet.
Thanks!,
With kind regards, Roald
On Fri, Nov 28, 2014 at 1:00 PM,
mailto:dev-request@otrs.org> wrote: Send dev mailing list submissions to dev@otrs.org mailto:dev@otrs.org
To subscribe or unsubscribe via the World Wide Web, visit http://lists.otrs.org/cgi-bin/listinfo/dev or, via email, send a message with subject or body 'help' to dev-request@otrs.org mailto:dev-request@otrs.org
You can reach the person managing the list at dev-owner@otrs.org mailto:dev-owner@otrs.org
When replying, please edit your Subject line so it is more specific than "Re: Contents of dev digest..."
Today's Topics:
1. Re: developing custom SLA/Service escalations and notifications (Martin Gruner) 2. OTRS 5 development (Martin Gruner)
----------------------------------------------------------------------
Message: 1 Date: Thu, 27 Nov 2014 13:24:24 +0100 From: Martin Gruner
mailto:martin.gruner@otrs.com> Subject: Re: [dev] developing custom SLA/Service escalations and notifications To: Development community of OTRS dev@otrs.org>>
Message-ID: <547717F8.7000002@otrs.com mailto:547717F8.7000002@otrs.com> Content-Type: text/plain; charset=windows-1252
Hello Roald,
Am 26.11.14 um 17:29 schrieb Roald: > Hi, > > I'm new to OTRS development. > > Requirements in a nutshell: > * set custom fields for SLA's > * calculate whether a ticket escalates based on these custom
fields (do
> some custom calculations) > * send notifications to agents based on these escalations > * there are also other requirements but most can be solved
without
> development > > Idea on how to approach this: > * xml file in /opt/otrs/Kernel/Config/Files which uses
SLAPreferences
> > <?xml version="1.0" encoding="utf-8" ?> >
> Valid="1">
> <Description Translatable="1">Time To
Intervention.</Description>
> <Group>Ticket</Group> > <SubGroup>Frontend::SLA::Preferences</SubGroup> > <Setting> > <Hash> > <Item > Key="Module">Kernel::Output::HTML::SLAPreferencesGeneric</Item> > <Item Key="Label">label for dynamic
field</Item>
> <Item Key="Desc">description.</Item> > <Item Key="Block">Input</Item> > <Item Key="PrefKey">dynamicfield</Item> > </Hash> > </Setting> > </ConfigItem> > ........ > > > * write a custom module with a job that should be run by
Generic Agent
> to do the rest. Maybe split it in two modules. > > Questions: > * Is my approach the most straightforward and suitable one ?
Sounds pretty straightforward. I think you might not need a GA
job, but
could do with a custom ticket event handler like Kernel::System::Ticket::Event::TicketEscalationIndex instead.
> * How do I calculate using the calendars ? For example hours
outside
> business hours don't count for one specific calendar. While
there is
> also a 24/7 calendar.
I'd recommend to tailor the calendars just as you need. For 24/7
you can
have a calendar that has everything marked, for the other one
just
define all non-business hours as business hours.
Regarding the question from your other mail: with the custom
event
handler you can also set a dynamic field.
Good luck!
Best regards, mg
-- Martin Gruner Senior Developer R&D
OTRS AG Bahnhofplatz 1a 94315 Straubing
T: +49 (0)6172 681988 0 F: +49 (0)9421 56818 18 I: www.otrs.com/ http://www.otrs.com/
Gesch?ftssitz: Bad Homburg, Amtsgericht: Bad Homburg, HRB 10751, USt-Nr.: DE256610065 Aufsichtsratsvorsitzender: Burchard Steinbild, Vorstand: Andr? Mindermann (Vorsitzender), Christopher Kuhn, Sabine Riedel
Schlanker, schneller und flacher denn je - OTRS 4! Und f?r alle,
die
MEHR wollen: Entdecken Sie hier die OTRS Business Solution? mit
mehr
Business Features!
https://www.otrs.com/otrs-business-solution-fuer-besseren-kundenservice/?lan...
------------------------------
Message: 2 Date: Thu, 27 Nov 2014 15:03:27 +0100 From: Martin Gruner
mailto:martin.gruner@otrs.com> Subject: [dev] OTRS 5 development To: Development community of OTRS dev@otrs.org>>
Message-ID: <54772F2F.1020904@otrs.com mailto:54772F2F.1020904@otrs.com> Content-Type: text/plain; charset=utf-8
Dear OTRS developers,
as you might have heard, OTRS 4 is now released and development
for OTRS
5 will start soon.
Do you plan to make substantial contributions to it? If that is
the
case, I want to offer you to plan and coordinate this together,
to make
sure right from the planning period that your contributions can
find
their way into OTRS 5.
Please just let me know via reply on this list.
Thanks and best regards, Martin
-- Martin Gruner Senior Developer R&D
OTRS AG Bahnhofplatz 1a 94315 Straubing
T: +49 (0)6172 681988 0 tel:%2B49%20%280%296172%20681988%200 F: +49 (0)9421 56818 18 tel:%2B49%20%280%299421%2056818%2018 I: www.otrs.com/ http://www.otrs.com/
Gesch?ftssitz: Bad Homburg, Amtsgericht: Bad Homburg, HRB 10751, USt-Nr.: DE256610065 Aufsichtsratsvorsitzender: Burchard Steinbild, Vorstand: Andr? Mindermann (Vorsitzender), Christopher Kuhn, Sabine Riedel
Schlanker, schneller und flacher denn je - OTRS 4! Und f?r alle,
die
MEHR wollen: Entdecken Sie hier die OTRS Business Solution? mit
mehr
Business Features!
https://www.otrs.com/otrs-business-solution-fuer-besseren-kundenservice/?lan...
------------------------------
_______________________________________________ dev mailing list dev@otrs.org mailto:dev@otrs.org http://lists.otrs.org/cgi-bin/listinfo/dev
End of dev Digest, Vol 44, Issue 6 **********************************
_______________________________________________ OTRS mailing list: dev - Webpage: http://otrs.org/ Archive: http://lists.otrs.org/pipermail/dev To unsubscribe: http://lists.otrs.org/cgi-bin/listinfo/dev
-- Martin Gruner Senior Developer R&D
OTRS AG Bahnhofplatz 1a 94315 Straubing
T: +49 (0)6172 681988 0 F: +49 (0)9421 56818 18 I: www.otrs.com/
Geschäftssitz: Bad Homburg, Amtsgericht: Bad Homburg, HRB 10751, USt-Nr.: DE256610065 Aufsichtsratsvorsitzender: Burchard Steinbild, Vorstand: André Mindermann (Vorsitzender), Christopher Kuhn, Sabine Riedel
Schlanker, schneller und flacher denn je - OTRS 4! Und für alle, die MEHR wollen: Entdecken Sie hier die OTRS Business Solution™ mit mehr Business Features!
https://www.otrs.com/otrs-business-solution-fuer-besseren-kundenservice/?lan... _______________________________________________ OTRS mailing list: dev - Webpage: http://otrs.org/ Archive: http://lists.otrs.org/pipermail/dev To unsubscribe: http://lists.otrs.org/cgi-bin/listinfo/dev

It seems like I'm setting some value. ValueGet returns the updated value.
But printing $Ticket{DynamicField_somename doesn't return the updated value.
my $DynamicFieldValue = $Self->{DynamicFieldValueObject}->ValueGet(
FieldID => $DynamicField->{ID},
ObjectID => $Param{Data}->{TicketID},
);
$Self->{LogObject}->Log(
Priority=>'debug',
Message=> '@@Escalation.pm DynamicField_somename after update ' .
Dumper(\$Ticket{DynamicField_somename}),
);
$Self->{LogObject}->Log(
Priority=>'debug',
Message=> '!!@@Escalation.pm ValueGet ' .
Dumper(\$DynamicFieldValue),
);
[Wed Dec 24 18:07:41
2014][Debug][Kernel::System::Ticket::Event::ICTRoomEscalation::Run][283]
@@Escalation.pm DynamicField_TTRS after update $VAR1 = \'2014-12-04
16:54:00';
[Wed Dec 24 18:07:41
2014][Debug][Kernel::System::Ticket::Event::ICTRoomEscalation::Run][306]
!!@@Escalation.pm ValueGet $VAR1 = \[
{
'ValueText' => undef,
'ValueInt' => undef,
'ID' => '17',
'ValueDateTime' => '2014-12-22 17:06:39'
}
];
On Wed, Dec 24, 2014 at 5:16 PM, Roald
I made some progress. I want to set the value of the DynamicField to $DestinationSystemTime. I'm using ValueSet from DynamicFieldValueObject. The value of the dynamic field is not changed by ValueSe but I'm getting no more errors.
The value of the DynamicField should be changed to '2014-12-22 17:06:39' but remains at '\'2014-12-04 16:54:00'.
# get dynamic field config my $DynamicField = $Self->{DynamicFieldObject}->DynamicFieldGet( Name => "TTRS", );
my $Success = $Self->{DynamicFieldValueObject}->ValueSet( FieldID => $DynamicField->{ID}, ObjectID => $Param{Data}->{TicketID}, Value => [ { ValueDateTime => $DestinationSystemTime, }, ], UserID => $Param{UserID}, ); if ( !$Success ) { $Self->{LogObject}->Log( Priority => 'error', Message => "Can not set value for dynamic field $DynamicField->{Name}!" ); }
debug log: [Wed Dec 24 17:05:47 2014][Debug][Kernel::System::Ticket::Event::ICTRoomEscalation::Run][228] @@Escalation.pm DestinationTime $VAR1 = \1419264399;
[Wed Dec 24 17:05:47 2014][Debug][Kernel::System::Ticket::Event::ICTRoomEscalation::Run][232] @@Escalation.pm DestinationSystemTime $VAR1 = \'2014-12-22 17:06:39';
[Wed Dec 24 17:05:47 2014][Debug][Kernel::System::Ticket::Event::ICTRoomEscalation::Run][283] @@Escalation.pm DynamicField_somename after update $VAR1 = \'2014-12-04 16:54:00';
[Wed Dec 24 17:05:47 2014][Debug][Kernel::System::Ticket::Event::ICTRoomEscalation::Run][288] !!@@Escalation.pm FieldID $VAR1 = \'7';
[Wed Dec 24 17:05:47 2014][Debug][Kernel::System::Ticket::Event::ICTRoomEscalation::Run][292] !!@@Escalation.pm ObjectID $VAR1 = \'5';
[Wed Dec 24 17:05:47 2014][Debug][Kernel::System::Ticket::Event::ICTRoomEscalation::Run][296] !!@@Escalation.pm UserID $VAR1 = \2;
On Wed, Dec 24, 2014 at 4:06 PM, Roald
wrote: I made some progress. I used DynamicFieldListGet to figure out I had to drop "DynamicField_" from the fieldname.
ValueSet still doesn't work.
# get dynamic field config my $DynamicField = $Self->{DynamicFieldObject}->DynamicFieldGet( Name => "somename", );
$Self->{LogObject}->Log( Priority=>'debug', Message=> '!!@@Escalation.pm DynamicField ' . Dumper(\$DynamicField), );
my $Success = $Self->{BackendObject}->ValueSet( DynamicFieldConfig => $DynamicField, ObjectID => $Param{Data}->{TicketID}, Value => [ { $DestinationSystemTime, }, ], UserID => $Param{UserID}, ); if ( !$Success ) { $Self->{LogObject}->Log( Priority => 'error', Message => "Can not set value for dynamic field $DynamicField->{Name}!" ); }
debug messages otrs.log:
[Wed Dec 24 15:54:13 2014][Debug][Kernel::System::Ticket::Event::Escalation::Run][233] !!@@Escalation.pm DynamicField $VAR1 = \{ 'FieldType' => 'DateTime', 'ID' => '7', 'ValidID' => '1', 'FieldOrder' => '7', 'InternalField' => '0', 'Label' => 'some label', 'CreateTime' => '2014-12-22 16:17:25', 'Name' => 'somename', 'ChangeTime' => '2014-12-22 16:17:25', 'ObjectType' => 'Ticket', 'Config' => { 'YearsInFuture' => '5', 'YearsInPast' => '5', 'Link' => '', 'DefaultValue' => '0', 'YearsPeriod' => '0' } };
[Wed Dec 24 15:54:13 2014][Error][Kernel::System::DynamicField::Backend::ValueSet][512] Could not update field somename for Ticket ID 5 ! [Wed Dec 24 15:54:13 2014][Error][Kernel::System::Ticket::Event::Escalation::Run][254] Can not set value for dynamic field somename!
error.log apache:
[Wed Dec 24 15:54:13 2014] -e: Odd number of elements in anonymous hash at /opt/otrs//Kernel/System/Ticket/Event/Escalation.pm line 243. ERROR: OTRS-CGI-66 Perl: 5.18.2 OS: linux Time: Wed Dec 24 15:54:13 2014
Message: Could not update field somename for Ticket ID 5 !
RemoteAddress: 192.168.2.1 RequestURI: /otrs/index.pl
Traceback (3992): Module: Kernel::System::DynamicField::Backend::ValueSet (OTRS 3.3.x git) Line: 512 Module: Kernel::System::Ticket::Event::Escalation::Run (OTRS 3.3.x git) Line: 243 Module: Kernel::System::EventHandler::EventHandler (OTRS 3.3.x git) Line: 255 Module: Kernel::System::Ticket::TicketSLASet (OTRS 3.3.x git) Line: 3008 Module: Kernel::Modules::AgentTicketActionCommon::Run (OTRS 3.3.x git) Line: 598 Module: Kernel::System::Web::InterfaceAgent::Run (OTRS 3.3.x git) Line: 910 Module: ModPerl::ROOT::ModPerl::Registry::opt_otrs_bin_cgi_2dbin_index_2epl::handler (unknown version) Line: 41 Module: (eval) (v1.99) Line: 206 Module: ModPerl::RegistryCooker::run (v1.99) Line: 206 Module: ModPerl::RegistryCooker::default_handler (v1.99) Line: 172 Module: ModPerl::Registry::handler (v1.99) Line: 31
ERROR: OTRS-CGI-66 Perl: 5.18.2 OS: linux Time: Wed Dec 24 15:54:13 2014
Message: Can not set value for dynamic field somename!
RemoteAddress: 192.168.2.1 RequestURI: /otrs/index.pl
Traceback (3992): Module: Kernel::System::Ticket::Event::Escalation::Run (OTRS 3.3.x git) Line: 254 Module: Kernel::System::EventHandler::EventHandler (OTRS 3.3.x git) Line: 255 Module: Kernel::System::Ticket::TicketSLASet (OTRS 3.3.x git) Line: 3008 Module: Kernel::Modules::AgentTicketActionCommon::Run (OTRS 3.3.x git) Line: 598 Module: Kernel::System::Web::InterfaceAgent::Run (OTRS 3.3.x git) Line: 910 Module: ModPerl::ROOT::ModPerl::Registry::opt_otrs_bin_cgi_2dbin_index_2epl::handler (unknown version) Line: 41 Module: (eval) (v1.99) Line: 206 Module: ModPerl::RegistryCooker::run (v1.99) Line: 206 Module: ModPerl::RegistryCooker::default_handler (v1.99) Line: 172 Module: ModPerl::Registry::handler (v1.99) Line: 31
[Wed Dec 24 15:54:13 2014] Escalation.pm: Subroutine new redefined at /opt/otrs//Kernel/System/Ticket/Event/Escalation.pm line 21. [Wed Dec 24 15:54:14 2014] Escalation.pm: Subroutine Run redefined at /opt/otrs//Kernel/System/Ticket/Event/Escalation.pm line 79.
On Wed, Dec 24, 2014 at 3:18 PM, Roald
wrote: I get my DynamicFieldObject like this: for (qw(ConfigObject DynamicFieldObject TicketObject LogObject UserObject CustomerUserObject TimeObject SLAObject)) { $Self->{$_} = $Param{$_} || die "Got no $_!"; }
But for some reason I can't seem to retrieve the DynamicField and corresponding DynamicFieldConfig using DynamicFieldGet.
On Wed, Dec 24, 2014 at 3:16 PM, Roald
wrote: relevant debug messages from otrs.log:
[Wed Dec 24 15:11:42 2014][Debug][Kernel::System::Ticket::Event::Escalation::Run][225] @@Escalation.pm DynamicField $VAR1 = \{};
[Wed Dec 24 15:11:42 2014][Debug][Kernel::System::Ticket::Event::Escalation::Run][230] @@Escalation.pm DynamicFieldConfig $VAR1 = \undef;
[Wed Dec 24 15:11:42 2014][Error][Kernel::System::DynamicField::Backend::ValueSet][447] Need DynamicFieldConfig! [Wed Dec 24 15:11:42 2014][Error][Kernel::System::Ticket::Event::Escalation::Run][246] Can not set value for dynamic field!
apache2 errorlog :
root@otrs:/var/log/apache2# tail -f -n0 error.log [Wed Dec 24 15:11:38 2014] Escalation.pm: Subroutine new redefined at /opt/otrs//Kernel/System/Ticket/Event/Escalation.pm line 21. [Wed Dec 24 15:11:38 2014] Escalation.pm: Subroutine Run redefined at /opt/otrs//Kernel/System/Ticket/Event/Escalation.pm line 79. [Wed Dec 24 15:11:42 2014] -e: Odd number of elements in anonymous hash at /opt/otrs//Kernel/System/Ticket/Event/Escalation.pm line 235. ERROR: OTRS-CGI-66 Perl: 5.18.2 OS: linux Time: Wed Dec 24 15:11:42 2014
Message: Need DynamicFieldConfig!
RemoteAddress: 192.168.2.1 RequestURI: /otrs/index.pl
Traceback (3448): Module: Kernel::System::DynamicField::Backend::ValueSet (OTRS 3.3.x git) Line: 447 Module: Kernel::System::Ticket::Event::Escalation::Run (OTRS 3.3.x git) Line: 235 Module: Kernel::System::EventHandler::EventHandler (OTRS 3.3.x git) Line: 255 Module: Kernel::System::Ticket::TicketSLASet (OTRS 3.3.x git) Line: 3008 Module: Kernel::Modules::AgentTicketActionCommon::Run (OTRS 3.3.x git) Line: 598 Module: Kernel::System::Web::InterfaceAgent::Run (OTRS 3.3.x git) Line: 910 Module: ModPerl::ROOT::ModPerl::Registry::opt_otrs_bin_cgi_2dbin_index_2epl::handler (unknown version) Line: 41 Module: (eval) (v1.99) Line: 206 Module: ModPerl::RegistryCooker::run (v1.99) Line: 206 Module: ModPerl::RegistryCooker::default_handler (v1.99) Line: 172 Module: ModPerl::Registry::handler (v1.99) Line: 31
[Wed Dec 24 15:11:42 2014] -e: Use of uninitialized value in concatenation (.) or string at /opt/otrs//Kernel/System/Ticket/Event/Escalation.pm line 247. ERROR: OTRS-CGI-66 Perl: 5.18.2 OS: linux Time: Wed Dec 24 15:11:42 2014
Message: Can not set value for dynamic field!
RemoteAddress: 192.168.2.1 RequestURI: /otrs/index.pl
Traceback (3448): Module: Kernel::System::Ticket::Event::Escalation::Run (OTRS 3.3.x git) Line: 246 Module: Kernel::System::EventHandler::EventHandler (OTRS 3.3.x git) Line: 255 Module: Kernel::System::Ticket::TicketSLASet (OTRS 3.3.x git) Line: 3008 Module: Kernel::Modules::AgentTicketActionCommon::Run (OTRS 3.3.x git) Line: 598 Module: Kernel::System::Web::InterfaceAgent::Run (OTRS 3.3.x git) Line: 910 Module: ModPerl::ROOT::ModPerl::Registry::opt_otrs_bin_cgi_2dbin_index_2epl::handler (unknown version) Line: 41 Module: (eval) (v1.99) Line: 206 Module: ModPerl::RegistryCooker::run (v1.99) Line: 206 Module: ModPerl::RegistryCooker::default_handler (v1.99) Line: 172 Module: ModPerl::Registry::handler (v1.99) Line: 31
On Wed, Dec 24, 2014 at 3:00 PM, Roald
wrote: Dear Martin,
Thank you!
I'm currently trying to save new a new value into a Dynamic Field. To do this I use ValueSet from the BackendObject. ValueSet needs a DynamicFieldConfig. I'm trying to get this from the DynamicFieldGet method.
It's not working yet. Any idea why ?
This is how I created my BackendObject:
$Self->{BackendObject} = Kernel::System::DynamicField::Backend->new( EncodeObject => $Param{TicketObject}->{EncodeObject}, MainObject => $Param{TicketObject}->{MainObject}, DBObject => $Param{TicketObject}->{DBObject}, TimeObject => $Param{TicketObject}->{TimeObject}, %Param, );
This is how I try to update a Dynamic Field (not working) :
# get dynamic field config my $DynamicField = $Self->{DynamicFieldObject}->DynamicFieldGet( Name => "DynamicField_somename", ); my $DynamicFieldConfig = $DynamicField->{Config};
$Self->{LogObject}->Log( Priority=>'debug', Message=> 'DynamicField ' . Dumper(\$DynamicField), );
$Self->{LogObject}->Log( Priority=>'debug', Message=> 'DynamicFieldConfig ' . Dumper(\$DynamicFieldConfig), );
my $Success = $Self->{BackendObject}->ValueSet( DynamicFieldConfig => $DynamicFieldConfig, ObjectID => $Param{Data}->{TicketID}, Value => [ { $DestinationSystemTime, }, ], UserID => $Param{UserID}, ); if ( !$Success ) { $Self->{LogObject}->Log( Priority => 'error', Message => "Can not set value to current time for dynamic field$DynamicFieldConfig->{Name}!" ); }
# print updated DynamicField_somename $Self->{LogObject}->Log( Priority=>'debug', Message => 'DynamicField_somename ' . Dumper(\$Ticket{DynamicField_somename}), );
On Tue, Dec 16, 2014 at 2:02 PM, Martin Gruner
wrote:
Hi Roald,
yes this is possible. OTRS also uses a ticket event handler to caclulate and store the escalation times for the tickets. This (target) time calculation only happens when there are changes to the tickets. The escalation notifications etc. are independent of that. Of course you can also use a GA job to do this if the delay is ok.
Regards, mg
Am 12.12.14 um 16:43 schrieb Roald: > Dear Martijn, > > Thank you for your reply. > > I'm currently spending some time at this. > > It seems to me that a custom ticket event handler can't be used. > Suppose I have a field "Time To Intervention" and there needs to be a > time based escalation. Is it possible to do time based escalations on > dynamic fields using a custom ticket event handler ? I have to do some > calculations and look at the calendars. > > That's why I thought using a generic agent to run every few minutes and > look at all open tickets should be the way to go. Maybe do it a bit > smarter by only looking at open tickets which fullfull some criteria > such as not escalating yet. > > Thanks!, > > With kind regards, > Roald > > > > > > > > > On Fri, Nov 28, 2014 at 1:00 PM,
mailto:dev-request@otrs.org> wrote: > > Send dev mailing list submissions to > dev@otrs.org mailto:dev@otrs.org > > To subscribe or unsubscribe via the World Wide Web, visit > http://lists.otrs.org/cgi-bin/listinfo/dev > or, via email, send a message with subject or body 'help' to > dev-request@otrs.org mailto:dev-request@otrs.org > > You can reach the person managing the list at > dev-owner@otrs.org mailto:dev-owner@otrs.org > > When replying, please edit your Subject line so it is more specific > than "Re: Contents of dev digest..." > > > Today's Topics: > > 1. Re: developing custom SLA/Service escalations and > notifications (Martin Gruner) > 2. OTRS 5 development (Martin Gruner) > > > ---------------------------------------------------------------------- > > Message: 1 > Date: Thu, 27 Nov 2014 13:24:24 +0100 > From: Martin Gruner mailto:martin.gruner@otrs.com> > Subject: Re: [dev] developing custom SLA/Service escalations and > notifications > To: Development community of OTRS > > Message-ID: <547717F8.7000002@otrs.com > mailto:547717F8.7000002@otrs.com> > Content-Type: text/plain; charset=windows-1252 > > Hello Roald, > > Am 26.11.14 um 17:29 schrieb Roald: > > Hi, > > > > I'm new to OTRS development. > > > > Requirements in a nutshell: > > * set custom fields for SLA's > > * calculate whether a ticket escalates based on these custom fields (do > > some custom calculations) > > * send notifications to agents based on these escalations > > * there are also other requirements but most can be solved without > > development > > > > Idea on how to approach this: > > * xml file in /opt/otrs/Kernel/Config/Files which uses SLAPreferences > > > > <?xml version="1.0" encoding="utf-8" ?> > > > > <ConfigItem Name="SLAPreferences###010-TTI" Required="0" Valid="1"> > > <Description Translatable="1">Time To Intervention.</Description> > > <Group>Ticket</Group> > > <SubGroup>Frontend::SLA::Preferences</SubGroup> > > <Setting> > > <Hash> > > <Item > > Key="Module">Kernel::Output::HTML::SLAPreferencesGeneric</Item> > > <Item Key="Label">label for dynamic field</Item> > > <Item Key="Desc">description.</Item> > > <Item Key="Block">Input</Item> > > <Item Key="PrefKey">dynamicfield</Item> > > </Hash> > > </Setting> > > </ConfigItem> > > ........ > > > > > > * write a custom module with a job that should be run by Generic Agent > > to do the rest. Maybe split it in two modules. > > > > Questions: > > * Is my approach the most straightforward and suitable one ? > > Sounds pretty straightforward. I think you might not need a GA job, but > could do with a custom ticket event handler like > Kernel::System::Ticket::Event::TicketEscalationIndex instead. > > > * How do I calculate using the calendars ? For example hours outside > > business hours don't count for one specific calendar. While there is > > also a 24/7 calendar. > > I'd recommend to tailor the calendars just as you need. For 24/7 you can > have a calendar that has everything marked, for the other one just > define all non-business hours as business hours. > > Regarding the question from your other mail: with the custom event > handler you can also set a dynamic field. > > Good luck! > > Best regards, mg > > -- > Martin Gruner > Senior Developer R&D > > OTRS AG > Bahnhofplatz 1a > 94315 Straubing > > T: +49 (0)6172 681988 0 > F: +49 (0)9421 56818 18 > I: www.otrs.com/ http://www.otrs.com/ > > Gesch?ftssitz: Bad Homburg, Amtsgericht: Bad Homburg, HRB 10751, > USt-Nr.: DE256610065 > Aufsichtsratsvorsitzender: Burchard Steinbild, Vorstand: Andr? > Mindermann (Vorsitzender), Christopher Kuhn, Sabine Riedel > > Schlanker, schneller und flacher denn je - OTRS 4! Und f?r alle, die > MEHR wollen: Entdecken Sie hier die OTRS Business Solution? mit mehr > Business Features! > https://www.otrs.com/otrs-business-solution-fuer-besseren-kundenservice/?lan... > > > ------------------------------ > > Message: 2 > Date: Thu, 27 Nov 2014 15:03:27 +0100 > From: Martin Grunermailto:martin.gruner@otrs.com> > Subject: [dev] OTRS 5 development > To: Development community of OTRS > > Message-ID: <54772F2F.1020904@otrs.com > mailto:54772F2F.1020904@otrs.com> > Content-Type: text/plain; charset=utf-8 > > Dear OTRS developers, > > as you might have heard, OTRS 4 is now released and development for OTRS > 5 will start soon. > > Do you plan to make substantial contributions to it? If that is the > case, I want to offer you to plan and coordinate this together, to make > sure right from the planning period that your contributions can find > their way into OTRS 5. > > Please just let me know via reply on this list. > > Thanks and best regards, Martin > > -- > Martin Gruner > Senior Developer R&D > > OTRS AG > Bahnhofplatz 1a > 94315 Straubing > > T: +49 (0)6172 681988 0 tel:%2B49%20%280%296172%20681988%200 > F: +49 (0)9421 56818 18 tel:%2B49%20%280%299421%2056818%2018 > I: www.otrs.com/ http://www.otrs.com/ > > Gesch?ftssitz: Bad Homburg, Amtsgericht: Bad Homburg, HRB 10751, > USt-Nr.: DE256610065 > Aufsichtsratsvorsitzender: Burchard Steinbild, Vorstand: Andr? > Mindermann (Vorsitzender), Christopher Kuhn, Sabine Riedel > > Schlanker, schneller und flacher denn je - OTRS 4! Und f?r alle, die > MEHR wollen: Entdecken Sie hier die OTRS Business Solution? mit mehr > Business Features! > https://www.otrs.com/otrs-business-solution-fuer-besseren-kundenservice/?lan... > > > ------------------------------ > > _______________________________________________ > dev mailing list > dev@otrs.org mailto:dev@otrs.org > http://lists.otrs.org/cgi-bin/listinfo/dev > > > End of dev Digest, Vol 44, Issue 6 > ********************************** > > > > _______________________________________________ > OTRS mailing list: dev - Webpage: http://otrs.org/ > Archive: http://lists.otrs.org/pipermail/dev > To unsubscribe: http://lists.otrs.org/cgi-bin/listinfo/dev > -- Martin Gruner Senior Developer R&D
OTRS AG Bahnhofplatz 1a 94315 Straubing
T: +49 (0)6172 681988 0 F: +49 (0)9421 56818 18 I: www.otrs.com/
Geschäftssitz: Bad Homburg, Amtsgericht: Bad Homburg, HRB 10751, USt-Nr.: DE256610065 Aufsichtsratsvorsitzender: Burchard Steinbild, Vorstand: André Mindermann (Vorsitzender), Christopher Kuhn, Sabine Riedel
Schlanker, schneller und flacher denn je - OTRS 4! Und für alle, die MEHR wollen: Entdecken Sie hier die OTRS Business Solution™ mit mehr Business Features!
https://www.otrs.com/otrs-business-solution-fuer-besseren-kundenservice/?lan... _______________________________________________ OTRS mailing list: dev - Webpage: http://otrs.org/ Archive: http://lists.otrs.org/pipermail/dev To unsubscribe: http://lists.otrs.org/cgi-bin/listinfo/dev

So DynamicField_somename doesn't get updated but ValueSet updates something
and ValueGet shows the updated value.
Relevant debug messages:
[Wed Dec 24 18:47:28
2014][Debug][Kernel::System::Ticket::Event::ICTRoomEscalation::Run][237]
@@Escalation.pm DestinationSystemTime $VAR1 = \'2014-12-22 17:06:39';
[Wed Dec 24 18:47:28
2014][Debug][Kernel::System::Ticket::Event::ICTRoomEscalation::Run][288]
@@Escalation.pm DynamicField_somename after update $VAR1 = \'2014-12-04
16:54:00';
[Wed Dec 24 18:47:28
2014][Debug][Kernel::System::Ticket::Event::ICTRoomEscalation::Run][293]
!!@@Escalation.pm FieldID $VAR1 = \'7';
[Wed Dec 24 18:47:28
2014][Debug][Kernel::System::Ticket::Event::ICTRoomEscalation::Run][297]
!!@@Escalation.pm ObjectID $VAR1 = \'5';
[Wed Dec 24 18:47:28
2014][Debug][Kernel::System::Ticket::Event::ICTRoomEscalation::Run][301]
!!@@Escalation.pm UserID $VAR1 = \2;
[Wed Dec 24 18:47:28
2014][Debug][Kernel::System::Ticket::Event::ICTRoomEscalation::Run][311]
!!@@Escalation.pm ValueGet $VAR1 = \[
{
'ValueDateTime' => '2014-12-22 17:06:39',
'ID' => '21',
'ValueInt' => undef,
'ValueText' => undef
}
];
Relevant code from sub new:
for (qw(ConfigObject DynamicFieldObject TicketObject LogObject
UserObject CustomerUserObject TimeObject SLAObject))
{
$Self->{$_} = $Param{$_} || die "Got no $_!";
}
$Self->{BackendObject} = Kernel::System::DynamicField::Backend->new(
EncodeObject => $Param{TicketObject}->{EncodeObject},
MainObject => $Param{TicketObject}->{MainObject},
DBObject => $Param{TicketObject}->{DBObject},
TimeObject => $Param{TicketObject}->{TimeObject},
%Param,
);
$Self->{DynamicFieldValueObject} =
Kernel::System::DynamicFieldValue->new(
ConfigObject => $Param{TicketObject}->{ConfigObject},
EncodeObject => $Param{TicketObject}->{EncodeObject},
LogObject => $Param{TicketObject}->{LogObject},
MainObject => $Param{TicketObject}->{MainObject},
DBObject => $Param{TicketObject}->{DBObject},
);
Relevant code from sub run:
# get dynamic field config
my $DynamicField = $Self->{DynamicFieldObject}->DynamicFieldGet(
Name => "somename",
);
my $Success = $Self->{DynamicFieldValueObject}->ValueSet(
#DynamicFieldConfig => $DynamicField,
FieldID => $DynamicField->{ID},
ObjectID => $Param{Data}->{TicketID},
Value => [
{
ValueDateTime => $DestinationSystemTime,
},
],
UserID => $Param{UserID},
);
if ( !$Success ) {
$Self->{LogObject}->Log(
Priority => 'error',
Message =>
"Can not set value for dynamic field $DynamicField->{Name}!"
);
}
# print updated DynamicField_somename
$Self->{LogObject}->Log(
Priority=>'debug',
Message=> '@@Escalation.pm DynamicField_somename after update ' .
Dumper(\$Ticket{DynamicField_somename}),
);
$Self->{LogObject}->Log(
Priority=>'debug',
Message=> '!!@@Escalation.pm FieldID ' .
Dumper(\$DynamicField->{ID}),
);
$Self->{LogObject}->Log(
Priority=>'debug',
Message=> '!!@@Escalation.pm ObjectID ' .
Dumper(\$Param{Data}->{TicketID}),
);
$Self->{LogObject}->Log(
Priority=>'debug',
Message=> '!!@@Escalation.pm UserID ' . Dumper(\$Param{UserID}),
);
my $DynamicFieldValue = $Self->{DynamicFieldValueObject}->ValueGet(
FieldID => $DynamicField->{ID},
ObjectID => $Param{Data}->{TicketID},
);
$Self->{LogObject}->Log(
Priority=>'debug',
Message=> '!!@@Escalation.pm ValueGet ' .
Dumper(\$DynamicFieldValue),
);
On Wed, Dec 24, 2014 at 6:13 PM, Roald
It seems like I'm setting some value. ValueGet returns the updated value. But printing $Ticket{DynamicField_somename doesn't return the updated value.
my $DynamicFieldValue = $Self->{DynamicFieldValueObject}->ValueGet( FieldID => $DynamicField->{ID}, ObjectID => $Param{Data}->{TicketID}, ); $Self->{LogObject}->Log( Priority=>'debug', Message=> '@@Escalation.pm DynamicField_somename after update ' . Dumper(\$Ticket{DynamicField_somename}), );
$Self->{LogObject}->Log( Priority=>'debug', Message=> '!!@@Escalation.pm ValueGet ' . Dumper(\$DynamicFieldValue), );
[Wed Dec 24 18:07:41 2014][Debug][Kernel::System::Ticket::Event::ICTRoomEscalation::Run][283] @@Escalation.pm DynamicField_TTRS after update $VAR1 = \'2014-12-04 16:54:00';
[Wed Dec 24 18:07:41 2014][Debug][Kernel::System::Ticket::Event::ICTRoomEscalation::Run][306] !!@@Escalation.pm ValueGet $VAR1 = \[ { 'ValueText' => undef, 'ValueInt' => undef, 'ID' => '17', 'ValueDateTime' => '2014-12-22 17:06:39' } ];
On Wed, Dec 24, 2014 at 5:16 PM, Roald
wrote: I made some progress. I want to set the value of the DynamicField to $DestinationSystemTime. I'm using ValueSet from DynamicFieldValueObject. The value of the dynamic field is not changed by ValueSe but I'm getting no more errors.
The value of the DynamicField should be changed to '2014-12-22 17:06:39' but remains at '\'2014-12-04 16:54:00'.
# get dynamic field config my $DynamicField = $Self->{DynamicFieldObject}->DynamicFieldGet( Name => "TTRS", );
my $Success = $Self->{DynamicFieldValueObject}->ValueSet( FieldID => $DynamicField->{ID}, ObjectID => $Param{Data}->{TicketID}, Value => [ { ValueDateTime => $DestinationSystemTime, }, ], UserID => $Param{UserID}, ); if ( !$Success ) { $Self->{LogObject}->Log( Priority => 'error', Message => "Can not set value for dynamic field $DynamicField->{Name}!" ); }
debug log: [Wed Dec 24 17:05:47 2014][Debug][Kernel::System::Ticket::Event::ICTRoomEscalation::Run][228] @@Escalation.pm DestinationTime $VAR1 = \1419264399;
[Wed Dec 24 17:05:47 2014][Debug][Kernel::System::Ticket::Event::ICTRoomEscalation::Run][232] @@Escalation.pm DestinationSystemTime $VAR1 = \'2014-12-22 17:06:39';
[Wed Dec 24 17:05:47 2014][Debug][Kernel::System::Ticket::Event::ICTRoomEscalation::Run][283] @@Escalation.pm DynamicField_somename after update $VAR1 = \'2014-12-04 16:54:00';
[Wed Dec 24 17:05:47 2014][Debug][Kernel::System::Ticket::Event::ICTRoomEscalation::Run][288] !!@@Escalation.pm FieldID $VAR1 = \'7';
[Wed Dec 24 17:05:47 2014][Debug][Kernel::System::Ticket::Event::ICTRoomEscalation::Run][292] !!@@Escalation.pm ObjectID $VAR1 = \'5';
[Wed Dec 24 17:05:47 2014][Debug][Kernel::System::Ticket::Event::ICTRoomEscalation::Run][296] !!@@Escalation.pm UserID $VAR1 = \2;
On Wed, Dec 24, 2014 at 4:06 PM, Roald
wrote: I made some progress. I used DynamicFieldListGet to figure out I had to drop "DynamicField_" from the fieldname.
ValueSet still doesn't work.
# get dynamic field config my $DynamicField = $Self->{DynamicFieldObject}->DynamicFieldGet( Name => "somename", );
$Self->{LogObject}->Log( Priority=>'debug', Message=> '!!@@Escalation.pm DynamicField ' . Dumper(\$DynamicField), );
my $Success = $Self->{BackendObject}->ValueSet( DynamicFieldConfig => $DynamicField, ObjectID => $Param{Data}->{TicketID}, Value => [ { $DestinationSystemTime, }, ], UserID => $Param{UserID}, ); if ( !$Success ) { $Self->{LogObject}->Log( Priority => 'error', Message => "Can not set value for dynamic field $DynamicField->{Name}!" ); }
debug messages otrs.log:
[Wed Dec 24 15:54:13 2014][Debug][Kernel::System::Ticket::Event::Escalation::Run][233] !!@@Escalation.pm DynamicField $VAR1 = \{ 'FieldType' => 'DateTime', 'ID' => '7', 'ValidID' => '1', 'FieldOrder' => '7', 'InternalField' => '0', 'Label' => 'some label', 'CreateTime' => '2014-12-22 16:17:25', 'Name' => 'somename', 'ChangeTime' => '2014-12-22 16:17:25', 'ObjectType' => 'Ticket', 'Config' => { 'YearsInFuture' => '5', 'YearsInPast' => '5', 'Link' => '', 'DefaultValue' => '0', 'YearsPeriod' => '0' } };
[Wed Dec 24 15:54:13 2014][Error][Kernel::System::DynamicField::Backend::ValueSet][512] Could not update field somename for Ticket ID 5 ! [Wed Dec 24 15:54:13 2014][Error][Kernel::System::Ticket::Event::Escalation::Run][254] Can not set value for dynamic field somename!
error.log apache:
[Wed Dec 24 15:54:13 2014] -e: Odd number of elements in anonymous hash at /opt/otrs//Kernel/System/Ticket/Event/Escalation.pm line 243. ERROR: OTRS-CGI-66 Perl: 5.18.2 OS: linux Time: Wed Dec 24 15:54:13 2014
Message: Could not update field somename for Ticket ID 5 !
RemoteAddress: 192.168.2.1 RequestURI: /otrs/index.pl
Traceback (3992): Module: Kernel::System::DynamicField::Backend::ValueSet (OTRS 3.3.x git) Line: 512 Module: Kernel::System::Ticket::Event::Escalation::Run (OTRS 3.3.x git) Line: 243 Module: Kernel::System::EventHandler::EventHandler (OTRS 3.3.x git) Line: 255 Module: Kernel::System::Ticket::TicketSLASet (OTRS 3.3.x git) Line: 3008 Module: Kernel::Modules::AgentTicketActionCommon::Run (OTRS 3.3.x git) Line: 598 Module: Kernel::System::Web::InterfaceAgent::Run (OTRS 3.3.x git) Line: 910 Module: ModPerl::ROOT::ModPerl::Registry::opt_otrs_bin_cgi_2dbin_index_2epl::handler (unknown version) Line: 41 Module: (eval) (v1.99) Line: 206 Module: ModPerl::RegistryCooker::run (v1.99) Line: 206 Module: ModPerl::RegistryCooker::default_handler (v1.99) Line: 172 Module: ModPerl::Registry::handler (v1.99) Line: 31
ERROR: OTRS-CGI-66 Perl: 5.18.2 OS: linux Time: Wed Dec 24 15:54:13 2014
Message: Can not set value for dynamic field somename!
RemoteAddress: 192.168.2.1 RequestURI: /otrs/index.pl
Traceback (3992): Module: Kernel::System::Ticket::Event::Escalation::Run (OTRS 3.3.x git) Line: 254 Module: Kernel::System::EventHandler::EventHandler (OTRS 3.3.x git) Line: 255 Module: Kernel::System::Ticket::TicketSLASet (OTRS 3.3.x git) Line: 3008 Module: Kernel::Modules::AgentTicketActionCommon::Run (OTRS 3.3.x git) Line: 598 Module: Kernel::System::Web::InterfaceAgent::Run (OTRS 3.3.x git) Line: 910 Module: ModPerl::ROOT::ModPerl::Registry::opt_otrs_bin_cgi_2dbin_index_2epl::handler (unknown version) Line: 41 Module: (eval) (v1.99) Line: 206 Module: ModPerl::RegistryCooker::run (v1.99) Line: 206 Module: ModPerl::RegistryCooker::default_handler (v1.99) Line: 172 Module: ModPerl::Registry::handler (v1.99) Line: 31
[Wed Dec 24 15:54:13 2014] Escalation.pm: Subroutine new redefined at /opt/otrs//Kernel/System/Ticket/Event/Escalation.pm line 21. [Wed Dec 24 15:54:14 2014] Escalation.pm: Subroutine Run redefined at /opt/otrs//Kernel/System/Ticket/Event/Escalation.pm line 79.
On Wed, Dec 24, 2014 at 3:18 PM, Roald
wrote: I get my DynamicFieldObject like this: for (qw(ConfigObject DynamicFieldObject TicketObject LogObject UserObject CustomerUserObject TimeObject SLAObject)) { $Self->{$_} = $Param{$_} || die "Got no $_!"; }
But for some reason I can't seem to retrieve the DynamicField and corresponding DynamicFieldConfig using DynamicFieldGet.
On Wed, Dec 24, 2014 at 3:16 PM, Roald
wrote: relevant debug messages from otrs.log:
[Wed Dec 24 15:11:42 2014][Debug][Kernel::System::Ticket::Event::Escalation::Run][225] @@Escalation.pm DynamicField $VAR1 = \{};
[Wed Dec 24 15:11:42 2014][Debug][Kernel::System::Ticket::Event::Escalation::Run][230] @@Escalation.pm DynamicFieldConfig $VAR1 = \undef;
[Wed Dec 24 15:11:42 2014][Error][Kernel::System::DynamicField::Backend::ValueSet][447] Need DynamicFieldConfig! [Wed Dec 24 15:11:42 2014][Error][Kernel::System::Ticket::Event::Escalation::Run][246] Can not set value for dynamic field!
apache2 errorlog :
root@otrs:/var/log/apache2# tail -f -n0 error.log [Wed Dec 24 15:11:38 2014] Escalation.pm: Subroutine new redefined at /opt/otrs//Kernel/System/Ticket/Event/Escalation.pm line 21. [Wed Dec 24 15:11:38 2014] Escalation.pm: Subroutine Run redefined at /opt/otrs//Kernel/System/Ticket/Event/Escalation.pm line 79. [Wed Dec 24 15:11:42 2014] -e: Odd number of elements in anonymous hash at /opt/otrs//Kernel/System/Ticket/Event/Escalation.pm line 235. ERROR: OTRS-CGI-66 Perl: 5.18.2 OS: linux Time: Wed Dec 24 15:11:42 2014
Message: Need DynamicFieldConfig!
RemoteAddress: 192.168.2.1 RequestURI: /otrs/index.pl
Traceback (3448): Module: Kernel::System::DynamicField::Backend::ValueSet (OTRS 3.3.x git) Line: 447 Module: Kernel::System::Ticket::Event::Escalation::Run (OTRS 3.3.x git) Line: 235 Module: Kernel::System::EventHandler::EventHandler (OTRS 3.3.x git) Line: 255 Module: Kernel::System::Ticket::TicketSLASet (OTRS 3.3.x git) Line: 3008 Module: Kernel::Modules::AgentTicketActionCommon::Run (OTRS 3.3.x git) Line: 598 Module: Kernel::System::Web::InterfaceAgent::Run (OTRS 3.3.x git) Line: 910 Module: ModPerl::ROOT::ModPerl::Registry::opt_otrs_bin_cgi_2dbin_index_2epl::handler (unknown version) Line: 41 Module: (eval) (v1.99) Line: 206 Module: ModPerl::RegistryCooker::run (v1.99) Line: 206 Module: ModPerl::RegistryCooker::default_handler (v1.99) Line: 172 Module: ModPerl::Registry::handler (v1.99) Line: 31
[Wed Dec 24 15:11:42 2014] -e: Use of uninitialized value in concatenation (.) or string at /opt/otrs//Kernel/System/Ticket/Event/Escalation.pm line 247. ERROR: OTRS-CGI-66 Perl: 5.18.2 OS: linux Time: Wed Dec 24 15:11:42 2014
Message: Can not set value for dynamic field!
RemoteAddress: 192.168.2.1 RequestURI: /otrs/index.pl
Traceback (3448): Module: Kernel::System::Ticket::Event::Escalation::Run (OTRS 3.3.x git) Line: 246 Module: Kernel::System::EventHandler::EventHandler (OTRS 3.3.x git) Line: 255 Module: Kernel::System::Ticket::TicketSLASet (OTRS 3.3.x git) Line: 3008 Module: Kernel::Modules::AgentTicketActionCommon::Run (OTRS 3.3.x git) Line: 598 Module: Kernel::System::Web::InterfaceAgent::Run (OTRS 3.3.x git) Line: 910 Module: ModPerl::ROOT::ModPerl::Registry::opt_otrs_bin_cgi_2dbin_index_2epl::handler (unknown version) Line: 41 Module: (eval) (v1.99) Line: 206 Module: ModPerl::RegistryCooker::run (v1.99) Line: 206 Module: ModPerl::RegistryCooker::default_handler (v1.99) Line: 172 Module: ModPerl::Registry::handler (v1.99) Line: 31
On Wed, Dec 24, 2014 at 3:00 PM, Roald
wrote: Dear Martin,
Thank you!
I'm currently trying to save new a new value into a Dynamic Field. To do this I use ValueSet from the BackendObject. ValueSet needs a DynamicFieldConfig. I'm trying to get this from the DynamicFieldGet method.
It's not working yet. Any idea why ?
This is how I created my BackendObject:
$Self->{BackendObject} = Kernel::System::DynamicField::Backend->new( EncodeObject => $Param{TicketObject}->{EncodeObject}, MainObject => $Param{TicketObject}->{MainObject}, DBObject => $Param{TicketObject}->{DBObject}, TimeObject => $Param{TicketObject}->{TimeObject}, %Param, );
This is how I try to update a Dynamic Field (not working) :
# get dynamic field config my $DynamicField = $Self->{DynamicFieldObject}->DynamicFieldGet( Name => "DynamicField_somename", ); my $DynamicFieldConfig = $DynamicField->{Config};
$Self->{LogObject}->Log( Priority=>'debug', Message=> 'DynamicField ' . Dumper(\$DynamicField), );
$Self->{LogObject}->Log( Priority=>'debug', Message=> 'DynamicFieldConfig ' . Dumper(\$DynamicFieldConfig), );
my $Success = $Self->{BackendObject}->ValueSet( DynamicFieldConfig => $DynamicFieldConfig, ObjectID => $Param{Data}->{TicketID}, Value => [ { $DestinationSystemTime, }, ], UserID => $Param{UserID}, ); if ( !$Success ) { $Self->{LogObject}->Log( Priority => 'error', Message => "Can not set value to current time for dynamic field$DynamicFieldConfig->{Name}!" ); }
# print updated DynamicField_somename $Self->{LogObject}->Log( Priority=>'debug', Message => 'DynamicField_somename ' . Dumper(\$Ticket{DynamicField_somename}), );
On Tue, Dec 16, 2014 at 2:02 PM, Martin Gruner < martin.gruner@otrs.com> wrote:
> Hi Roald, > > yes this is possible. OTRS also uses a ticket event handler to > caclulate > and store the escalation times for the tickets. This (target) time > calculation only happens when there are changes to the tickets. The > escalation notifications etc. are independent of that. > Of course you can also use a GA job to do this if the delay is ok. > > Regards, mg > > Am 12.12.14 um 16:43 schrieb Roald: > > Dear Martijn, > > > > Thank you for your reply. > > > > I'm currently spending some time at this. > > > > It seems to me that a custom ticket event handler can't be used. > > Suppose I have a field "Time To Intervention" and there needs to > be a > > time based escalation. Is it possible to do time based escalations > on > > dynamic fields using a custom ticket event handler ? I have to do > some > > calculations and look at the calendars. > > > > That's why I thought using a generic agent to run every few > minutes and > > look at all open tickets should be the way to go. Maybe do it a bit > > smarter by only looking at open tickets which fullfull some > criteria > > such as not escalating yet. > > > > Thanks!, > > > > With kind regards, > > Roald > > > > > > > > > > > > > > > > > > On Fri, Nov 28, 2014 at 1:00 PM,
> mailto:dev-request@otrs.org> wrote: > > > > Send dev mailing list submissions to > > dev@otrs.org mailto:dev@otrs.org > > > > To subscribe or unsubscribe via the World Wide Web, visit > > http://lists.otrs.org/cgi-bin/listinfo/dev > > or, via email, send a message with subject or body 'help' to > > dev-request@otrs.org mailto:dev-request@otrs.org > > > > You can reach the person managing the list at > > dev-owner@otrs.org mailto:dev-owner@otrs.org > > > > When replying, please edit your Subject line so it is more > specific > > than "Re: Contents of dev digest..." > > > > > > Today's Topics: > > > > 1. Re: developing custom SLA/Service escalations and > > notifications (Martin Gruner) > > 2. OTRS 5 development (Martin Gruner) > > > > > > > ---------------------------------------------------------------------- > > > > Message: 1 > > Date: Thu, 27 Nov 2014 13:24:24 +0100 > > From: Martin Gruner > mailto:martin.gruner@otrs.com> > > Subject: Re: [dev] developing custom SLA/Service escalations > and > > notifications > > To: Development community of OTRS dev@otrs.org>> > > Message-ID: <547717F8.7000002@otrs.com > > mailto:547717F8.7000002@otrs.com> > > Content-Type: text/plain; charset=windows-1252 > > > > Hello Roald, > > > > Am 26.11.14 um 17:29 schrieb Roald: > > > Hi, > > > > > > I'm new to OTRS development. > > > > > > Requirements in a nutshell: > > > * set custom fields for SLA's > > > * calculate whether a ticket escalates based on these custom > fields (do > > > some custom calculations) > > > * send notifications to agents based on these escalations > > > * there are also other requirements but most can be solved > without > > > development > > > > > > Idea on how to approach this: > > > * xml file in /opt/otrs/Kernel/Config/Files which uses > SLAPreferences > > > > > > <?xml version="1.0" encoding="utf-8" ?> > > > > > > <ConfigItem Name="SLAPreferences###010-TTI" Required="0" > Valid="1"> > > > <Description Translatable="1">Time To > Intervention.</Description> > > > <Group>Ticket</Group> > > > <SubGroup>Frontend::SLA::Preferences</SubGroup> > > > <Setting> > > > <Hash> > > > <Item > > > > Key="Module">Kernel::Output::HTML::SLAPreferencesGeneric</Item> > > > <Item Key="Label">label for dynamic > field</Item> > > > <Item Key="Desc">description.</Item> > > > <Item Key="Block">Input</Item> > > > <Item Key="PrefKey">dynamicfield</Item> > > > </Hash> > > > </Setting> > > > </ConfigItem> > > > ........ > > > > > > > > > * write a custom module with a job that should be run by > Generic Agent > > > to do the rest. Maybe split it in two modules. > > > > > > Questions: > > > * Is my approach the most straightforward and suitable one ? > > > > Sounds pretty straightforward. I think you might not need a GA > job, but > > could do with a custom ticket event handler like > > Kernel::System::Ticket::Event::TicketEscalationIndex instead. > > > > > * How do I calculate using the calendars ? For example hours > outside > > > business hours don't count for one specific calendar. While > there is > > > also a 24/7 calendar. > > > > I'd recommend to tailor the calendars just as you need. For > 24/7 you can > > have a calendar that has everything marked, for the other one > just > > define all non-business hours as business hours. > > > > Regarding the question from your other mail: with the custom > event > > handler you can also set a dynamic field. > > > > Good luck! > > > > Best regards, mg > > > > -- > > Martin Gruner > > Senior Developer R&D > > > > OTRS AG > > Bahnhofplatz 1a > > 94315 Straubing > > > > T: +49 (0)6172 681988 0 > > F: +49 (0)9421 56818 18 > > I: www.otrs.com/ http://www.otrs.com/ > > > > Gesch?ftssitz: Bad Homburg, Amtsgericht: Bad Homburg, HRB > 10751, > > USt-Nr.: DE256610065 > > Aufsichtsratsvorsitzender: Burchard Steinbild, Vorstand: Andr? > > Mindermann (Vorsitzender), Christopher Kuhn, Sabine Riedel > > > > Schlanker, schneller und flacher denn je - OTRS 4! Und f?r > alle, die > > MEHR wollen: Entdecken Sie hier die OTRS Business Solution? > mit mehr > > Business Features! > > > https://www.otrs.com/otrs-business-solution-fuer-besseren-kundenservice/?lan... > > > > > > ------------------------------ > > > > Message: 2 > > Date: Thu, 27 Nov 2014 15:03:27 +0100 > > From: Martin Gruner> mailto:martin.gruner@otrs.com> > > Subject: [dev] OTRS 5 development > > To: Development community of OTRS dev@otrs.org>> > > Message-ID: <54772F2F.1020904@otrs.com > > mailto:54772F2F.1020904@otrs.com> > > Content-Type: text/plain; charset=utf-8 > > > > Dear OTRS developers, > > > > as you might have heard, OTRS 4 is now released and > development for OTRS > > 5 will start soon. > > > > Do you plan to make substantial contributions to it? If that > is the > > case, I want to offer you to plan and coordinate this > together, to make > > sure right from the planning period that your contributions > can find > > their way into OTRS 5. > > > > Please just let me know via reply on this list. > > > > Thanks and best regards, Martin > > > > -- > > Martin Gruner > > Senior Developer R&D > > > > OTRS AG > > Bahnhofplatz 1a > > 94315 Straubing > > > > T: +49 (0)6172 681988 0 tel:%2B49%20%280%296172%20681988%200 > > F: +49 (0)9421 56818 18 tel:%2B49%20%280%299421%2056818%2018 > > I: www.otrs.com/ http://www.otrs.com/ > > > > Gesch?ftssitz: Bad Homburg, Amtsgericht: Bad Homburg, HRB > 10751, > > USt-Nr.: DE256610065 > > Aufsichtsratsvorsitzender: Burchard Steinbild, Vorstand: Andr? > > Mindermann (Vorsitzender), Christopher Kuhn, Sabine Riedel > > > > Schlanker, schneller und flacher denn je - OTRS 4! Und f?r > alle, die > > MEHR wollen: Entdecken Sie hier die OTRS Business Solution? > mit mehr > > Business Features! > > > https://www.otrs.com/otrs-business-solution-fuer-besseren-kundenservice/?lan... > > > > > > ------------------------------ > > > > _______________________________________________ > > dev mailing list > > dev@otrs.org mailto:dev@otrs.org > > http://lists.otrs.org/cgi-bin/listinfo/dev > > > > > > End of dev Digest, Vol 44, Issue 6 > > ********************************** > > > > > > > > _______________________________________________ > > OTRS mailing list: dev - Webpage: http://otrs.org/ > > Archive: http://lists.otrs.org/pipermail/dev > > To unsubscribe: http://lists.otrs.org/cgi-bin/listinfo/dev > > > > -- > Martin Gruner > Senior Developer R&D > > OTRS AG > Bahnhofplatz 1a > 94315 Straubing > > T: +49 (0)6172 681988 0 > F: +49 (0)9421 56818 18 > I: www.otrs.com/ > > Geschäftssitz: Bad Homburg, Amtsgericht: Bad Homburg, HRB 10751, > USt-Nr.: DE256610065 > Aufsichtsratsvorsitzender: Burchard Steinbild, Vorstand: André > Mindermann (Vorsitzender), Christopher Kuhn, Sabine Riedel > > Schlanker, schneller und flacher denn je - OTRS 4! Und für alle, die > MEHR wollen: Entdecken Sie hier die OTRS Business Solution™ mit mehr > Business Features! > > https://www.otrs.com/otrs-business-solution-fuer-besseren-kundenservice/?lan... > _______________________________________________ > OTRS mailing list: dev - Webpage: http://otrs.org/ > Archive: http://lists.otrs.org/pipermail/dev > To unsubscribe: http://lists.otrs.org/cgi-bin/listinfo/dev >
participants (2)
-
Martin Gruner
-
Roald