diff --git a/Kernel/Modules/AgentTicketProcess.pm b/Kernel/Modules/AgentTicketProcess.pm index 367676503..5b41e64e4 100644 --- a/Kernel/Modules/AgentTicketProcess.pm +++ b/Kernel/Modules/AgentTicketProcess.pm @@ -442,6 +442,30 @@ sub Run { } if ( $Self->{Subaction} eq 'DisplayActivityDialog' && $ProcessEntityID ) { + # initial rendering - pre-fill dynamic fields with ticket values + my %Ticket; + if ($TicketID) { + my %Ticket = $TicketObject->TicketGet( + TicketID => $TicketID, + UserID => $Self->{UserID}, + DynamicFields => 1, + ); + } + + DYNAMICFIELD: + for my $DynamicFieldConfig ( values $Self->{DynamicField}->%* ) { + next DYNAMICFIELD unless IsHashRefWithData($DynamicFieldConfig); + + # This overwrites the values that might have been taken from the web request. + # Note that there shouldn't be any values from the web request, + # because submits, successful and unsuccessful have been handled already above. + if ( ( $DynamicFieldConfig->{ObjectType} eq 'Ticket' ) && $TicketID ) { + + # Value is stored in the database from Ticket. + $GetParam->{DynamicField}{ 'DynamicField_' . $DynamicFieldConfig->{Name} } = $Ticket{ 'DynamicField_' . $DynamicFieldConfig->{Name} }; + } + } + return $Self->_OutputActivityDialog( %Param, ProcessEntityID => $ProcessEntityID, @@ -1867,7 +1891,7 @@ sub _OutputActivityDialog { CustomerUser => $Param{GetParam}{CustomerUserID} || '', GetParam => $Param{GetParam}, Autoselect => $Autoselect, - ACLPreselection => $ACLPreselection // '', + ACLPreselection => $ACLPreselection, LoopProtection => \$LoopProtection, ); diff --git a/Kernel/Modules/CustomerTicketProcess.pm b/Kernel/Modules/CustomerTicketProcess.pm index 99e2fc553..a45bf508d 100644 --- a/Kernel/Modules/CustomerTicketProcess.pm +++ b/Kernel/Modules/CustomerTicketProcess.pm @@ -189,6 +189,34 @@ sub Run { } elsif ( $Self->{Subaction} eq 'DisplayActivityDialog' && $ProcessEntityID ) { + # Get values for Ticket fields and use default value for Article fields, if given (this + # screen generates a new article, then article fields will be always default value or + # empty at the beginning). + my %Ticket; + if ($TicketID) { + %Ticket = $Kernel::OM->Get('Kernel::System::Ticket')->TicketGet( + TicketID => $TicketID, + UserID => $Kernel::OM->Get('Kernel::Config')->Get('CustomerPanelUserID'), + DynamicFields => 1, + ); + } + + DYNAMICFIELD: + for my $DynamicFieldConfig ( values $Self->{DynamicField}->%* ) { + next DYNAMICFIELD if !IsHashRefWithData($DynamicFieldConfig); + + # strip dynamic field name from process suffix + if ( $DynamicFieldConfig->{Name} =~ /(?[A-Za-z0-9-]+)_/ ) { + my $DFName = $+{DFName}; + + if ( ( $DynamicFieldConfig->{ObjectType} eq 'Ticket' ) && $TicketID ) { + + # Value is stored in the database from Ticket. + $GetParam->{DynamicField}{ 'DynamicField_' . $DFName } = $Ticket{ 'DynamicField_' . $DFName }; + } + } + } + return $Self->_OutputActivityDialog( %Param, ProcessEntityID => $ProcessEntityID,