<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://rt-wiki.bestpractical.com/index.php?action=history&amp;feed=atom&amp;title=SpreadsheetDisplayedFields</id>
	<title>SpreadsheetDisplayedFields - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://rt-wiki.bestpractical.com/index.php?action=history&amp;feed=atom&amp;title=SpreadsheetDisplayedFields"/>
	<link rel="alternate" type="text/html" href="https://rt-wiki.bestpractical.com/index.php?title=SpreadsheetDisplayedFields&amp;action=history"/>
	<updated>2026-08-21T20:15:35Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.41.1</generator>
	<entry>
		<id>https://rt-wiki.bestpractical.com/index.php?title=SpreadsheetDisplayedFields&amp;diff=3704&amp;oldid=prev</id>
		<title>Admin: 4 revisions imported</title>
		<link rel="alternate" type="text/html" href="https://rt-wiki.bestpractical.com/index.php?title=SpreadsheetDisplayedFields&amp;diff=3704&amp;oldid=prev"/>
		<updated>2016-04-06T20:37:47Z</updated>

		<summary type="html">&lt;p&gt;4 revisions imported&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;= Spreadsheet Export - Displayed Fields =&lt;br /&gt;
&lt;br /&gt;
Posted by Stephen Turner, MIT on Friday, June 10, 2005.&lt;br /&gt;
&lt;br /&gt;
This mod allows a spreadsheet download of the fields displayed on the search results screen. The core RT spreadsheet download includes all ticket fields, irrespective of the fields shown on the screen.&lt;br /&gt;
&lt;br /&gt;
There was a bug in an earlier version of this contrib. On our Linux RT installations, it worked fine. On Solaris, however, a string of end-of-line characters appeared in the spreadsheet before the real content. This meant you had to scroll down to see the content. See the two possible fixes below:&lt;br /&gt;
&lt;br /&gt;
-- I tracked this down in 3.2 to a series of superfluous newlines in [[ColumnMap]]. Remove &amp;#039;&amp;#039;&amp;#039;all&amp;#039;&amp;#039;&amp;#039; blank lines in the file and the blank lines in the spreadsheet should disappear. (nick.humphries at pipex net)&lt;br /&gt;
&lt;br /&gt;
-- Thanks Nick! I found something in this code that also fixes the problem. The m-&amp;amp;gt;comp() calls write their output to the output stream, and we aren&amp;#039;t interested in the output here; we&amp;#039;re only interested in the return values. So I added this argument to each comp() call:&lt;br /&gt;
&lt;br /&gt;
 { store =&amp;amp;gt; \$mason_output }&lt;br /&gt;
&lt;br /&gt;
This causes the output to be stored in the $mason_output variable and not to be written to the output stream. (Steve Turner)&lt;br /&gt;
&lt;br /&gt;
In summary, the changes are:&lt;br /&gt;
&lt;br /&gt;
* A new Mason component to format the results (/Search/[[ScreenResults]].tsv).&lt;br /&gt;
* Modification of /Elements/[[ScrubHTML]] to allow all HTML to be removed from a string.&lt;br /&gt;
* Modification of /Search/Results.html to add a link to the new download.&lt;br /&gt;
&lt;br /&gt;
The diffs below are based on RT 3.4.2 versions.&lt;br /&gt;
&lt;br /&gt;
=== /Search/ScreenResults.tsv (new component) ===&lt;br /&gt;
&lt;br /&gt;
====Version 3.4.x====&lt;br /&gt;
&lt;br /&gt;
This component uses the same data-retrieval mechanism as the search results process.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;%INIT&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
   my $Tickets = RT::Tickets-&amp;gt;new($session{&amp;#039;CurrentUser&amp;#039;});&lt;br /&gt;
   $Tickets-&amp;gt;FromSQL($ARGS{&amp;#039;Query&amp;#039;});&lt;br /&gt;
   &lt;br /&gt;
   $Format ||= $RT::DefaultSearchResultFormat;&lt;br /&gt;
   # Scrub the html of the format string to remove any potential nasties.&lt;br /&gt;
   $Format = $m-&amp;gt;comp(&amp;#039;/Elements/ScrubHTML&amp;#039;, Content =&amp;gt; $Format, DenyAll =&amp;gt; 1);&lt;br /&gt;
   my (@Format) = $m-&amp;gt;comp(&amp;#039;/Elements/CollectionAsTable/ParseFormat&amp;#039;, Format =&amp;gt; $Format);&lt;br /&gt;
   &lt;br /&gt;
   $r-&amp;gt;content_type(&amp;#039;application/vnd.ms-excel&amp;#039;);&lt;br /&gt;
   &lt;br /&gt;
   my @rows=();&lt;br /&gt;
   my @header=();&lt;br /&gt;
   my @cols=();&lt;br /&gt;
   &lt;br /&gt;
   # used to store m-&amp;gt;comp output - prevents the output from being&lt;br /&gt;
   # written to the output stream. That&amp;#039;s because we are not interested in the&lt;br /&gt;
   # output for these comp() calls, we are interested in the return value.&lt;br /&gt;
   my $mason_output;&lt;br /&gt;
   &lt;br /&gt;
   foreach my $column (@Format) {&lt;br /&gt;
       next if $column-&amp;gt;{title} eq &amp;#039;NEWLINE&amp;#039;;&lt;br /&gt;
   &lt;br /&gt;
       # Extract the column names from the Format array&lt;br /&gt;
       foreach my $subcol ( @{ $column-&amp;gt;{output} } ) {&lt;br /&gt;
           if ( $subcol =~ /^__(.*?)__$/o ) {&lt;br /&gt;
               my $col = $1;&lt;br /&gt;
               push (@cols, $col);&lt;br /&gt;
           }&lt;br /&gt;
       }&lt;br /&gt;
   &lt;br /&gt;
       # Determine the column titles&lt;br /&gt;
       my $title = $column-&amp;gt;{title};&lt;br /&gt;
       $title =~ s/^__(.*)__$/$1/o;&lt;br /&gt;
       my $ret = undef;&lt;br /&gt;
       $ret =&lt;br /&gt;
           $m-&amp;gt;comp( { store =&amp;gt; \$mason_output },&lt;br /&gt;
                           &amp;#039;/Elements/RT__Ticket/ColumnMap&amp;#039;,&lt;br /&gt;
                           Name =&amp;gt; $title,&lt;br /&gt;
                           Attr =&amp;gt; &amp;#039;title&amp;#039;&lt;br /&gt;
                           )&lt;br /&gt;
            ;&lt;br /&gt;
       $title = $ret ? $ret : $title;&lt;br /&gt;
       push @header, $title;&lt;br /&gt;
   }&lt;br /&gt;
   &lt;br /&gt;
   while ( my $Ticket = $Tickets-&amp;gt;Next()) {&lt;br /&gt;
       my $row;&lt;br /&gt;
       foreach my $column (@cols) {&lt;br /&gt;
           my $value = $m-&amp;gt;comp({ store =&amp;gt; \$mason_output },&lt;br /&gt;
                                &amp;#039;/Elements/RT__Ticket/ColumnMap&amp;#039;,&lt;br /&gt;
                                Name =&amp;gt; $column, Attr =&amp;gt; &amp;#039;value&amp;#039;);&lt;br /&gt;
           if ( $value &amp;amp;&amp;amp; ref($value)) {&lt;br /&gt;
               my @x = &amp;amp;{ $value }( $Ticket, 0 );&lt;br /&gt;
               my $i=0;&lt;br /&gt;
               $row-&amp;gt;{ $column } = &amp;quot;&amp;quot;;&lt;br /&gt;
               foreach my $x (@x) {&lt;br /&gt;
                   $row-&amp;gt;{ $column } .= &amp;quot;, &amp;quot; if $i &amp;gt; 0; # separating multivalues&lt;br /&gt;
                   if (ref ($x)) {&lt;br /&gt;
                       $row-&amp;gt;{ $column } .= $$x;&lt;br /&gt;
                   } else {&lt;br /&gt;
                       $row-&amp;gt;{ $column } .= $x;&lt;br /&gt;
                   }&lt;br /&gt;
                   $i++;&lt;br /&gt;
               }&lt;br /&gt;
           } else {&lt;br /&gt;
               $row-&amp;gt;{ $column } =  $value ;&lt;br /&gt;
           }&lt;br /&gt;
           $row-&amp;gt;{ $column } =~ s/, &amp;lt;br&amp;gt;//g;    # ColumnMap adds &amp;lt;br&amp;gt; tags, which we don&amp;#039;t want&lt;br /&gt;
       }&lt;br /&gt;
       push @rows, $row;&lt;br /&gt;
   }&lt;br /&gt;
   &lt;br /&gt;
   $m-&amp;gt;out(join(&amp;quot;\t&amp;quot;, @header));&lt;br /&gt;
   $m-&amp;gt;out(&amp;quot;\n&amp;quot;);&lt;br /&gt;
   &lt;br /&gt;
   foreach my $row (@rows) {&lt;br /&gt;
           my @row;&lt;br /&gt;
           foreach my $col(@cols) {&lt;br /&gt;
                   push @row, $row-&amp;gt;{&amp;quot;$col&amp;quot;};&lt;br /&gt;
           }&lt;br /&gt;
           $m-&amp;gt;out(join(&amp;quot;\t&amp;quot;,@row));&lt;br /&gt;
           $m-&amp;gt;out(&amp;quot;\n&amp;quot;);&lt;br /&gt;
   }&lt;br /&gt;
   &lt;br /&gt;
   $m-&amp;gt;abort();&lt;br /&gt;
   &amp;lt;/%INIT&amp;gt;&lt;br /&gt;
   &amp;lt;%ARGS&amp;gt;&lt;br /&gt;
   $Query =&amp;gt; undef&lt;br /&gt;
   $Format =&amp;gt; undef&lt;br /&gt;
   $HideResults =&amp;gt; 0&lt;br /&gt;
   $Rows =&amp;gt; 50&lt;br /&gt;
   $Page =&amp;gt; 1&lt;br /&gt;
   $OrderBy =&amp;gt; &amp;#039;id&amp;#039;&lt;br /&gt;
   $Order =&amp;gt; &amp;#039;ASC&amp;#039;&lt;br /&gt;
   &amp;lt;/%ARGS&amp;gt;&lt;br /&gt;
   &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Version 3.8.x ====&lt;br /&gt;
&lt;br /&gt;
This is adapted from the core &amp;lt;code&amp;gt;Search/Results.tsv&amp;lt;/code&amp;gt;, but instead of using the hard-coded set of fields, it uses the logic from the previous version of ScreenResults.tsv to parse the header format. The header and value formatting has been modified to use &amp;lt;code&amp;gt;ProcessColumnMapValue()&amp;lt;/code&amp;gt; to take advantage of the column mapping already defined in RT.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
 %# BEGIN BPS TAGGED BLOCK {{{&lt;br /&gt;
 %# &lt;br /&gt;
 %# COPYRIGHT:&lt;br /&gt;
 %# &lt;br /&gt;
 %# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC&lt;br /&gt;
 %#                                          &amp;lt;jesse@bestpractical.com&amp;gt;&lt;br /&gt;
 %# &lt;br /&gt;
 %# (Except where explicitly superseded by other copyright notices)&lt;br /&gt;
 %# &lt;br /&gt;
 %# &lt;br /&gt;
 %# LICENSE:&lt;br /&gt;
 %# &lt;br /&gt;
 %# This work is made available to you under the terms of Version 2 of&lt;br /&gt;
 %# the GNU General Public License. A copy of that license should have&lt;br /&gt;
 %# been provided with this software, but in any event can be snarfed&lt;br /&gt;
 %# from www.gnu.org.&lt;br /&gt;
 %# &lt;br /&gt;
 %# This work is distributed in the hope that it will be useful, but&lt;br /&gt;
 %# WITHOUT ANY WARRANTY; without even the implied warranty of&lt;br /&gt;
 %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU&lt;br /&gt;
 %# General Public License for more details.&lt;br /&gt;
 %# &lt;br /&gt;
 %# You should have received a copy of the GNU General Public License&lt;br /&gt;
 %# along with this program; if not, write to the Free Software&lt;br /&gt;
 %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA&lt;br /&gt;
 %# 02110-1301 or visit their web page on the internet at&lt;br /&gt;
 %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.&lt;br /&gt;
 %# &lt;br /&gt;
 %# &lt;br /&gt;
 %# CONTRIBUTION SUBMISSION POLICY:&lt;br /&gt;
 %# &lt;br /&gt;
 %# (The following paragraph is not intended to limit the rights granted&lt;br /&gt;
 %# to you to modify and distribute this software under the terms of&lt;br /&gt;
 %# the GNU General Public License and is only of importance to you if&lt;br /&gt;
 %# you choose to contribute your changes and enhancements to the&lt;br /&gt;
 %# community by submitting them to Best Practical Solutions, LLC.)&lt;br /&gt;
 %# &lt;br /&gt;
 %# By intentionally submitting any modifications, corrections or&lt;br /&gt;
 %# derivatives to this work, or any other work intended for use with&lt;br /&gt;
 %# Request Tracker, to Best Practical Solutions, LLC, you confirm that&lt;br /&gt;
 %# you are the copyright holder for those contributions and you grant&lt;br /&gt;
 %# Best Practical Solutions,  LLC a nonexclusive, worldwide, irrevocable,&lt;br /&gt;
 %# royalty-free, perpetual, license to use, copy, create derivative&lt;br /&gt;
 %# works based on those contributions, and sublicense and distribute&lt;br /&gt;
 %# those contributions and any derivatives thereof.&lt;br /&gt;
 %# &lt;br /&gt;
 %# END BPS TAGGED BLOCK }}}&lt;br /&gt;
 &amp;lt;%ARGS&amp;gt;&lt;br /&gt;
 $Format =&amp;gt; undef&lt;br /&gt;
 $Query =&amp;gt; &amp;#039;&amp;#039;&lt;br /&gt;
 $OrderBy =&amp;gt; &amp;#039;id&amp;#039;&lt;br /&gt;
 $Order =&amp;gt; &amp;#039;ASC&amp;#039;&lt;br /&gt;
 &amp;lt;/%ARGS&amp;gt;&lt;br /&gt;
 &amp;lt;%INIT&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 my $Tickets = RT::Tickets-&amp;gt;new( $session{&amp;#039;CurrentUser&amp;#039;} );&lt;br /&gt;
 $Tickets-&amp;gt;FromSQL( $Query );&lt;br /&gt;
 if ( $OrderBy =~ /\|/ ) {&lt;br /&gt;
     # Multiple Sorts&lt;br /&gt;
     my @OrderBy = split /\|/, $OrderBy;&lt;br /&gt;
     my @Order   = split /\|/, $Order;&lt;br /&gt;
     $Tickets-&amp;gt;OrderByCols(&lt;br /&gt;
         map { { FIELD =&amp;gt; $OrderBy[$_], ORDER =&amp;gt; $Order[$_] } }&lt;br /&gt;
         ( 0 .. $#OrderBy )&lt;br /&gt;
     );&lt;br /&gt;
 }&lt;br /&gt;
 else {&lt;br /&gt;
     $Tickets-&amp;gt;OrderBy( FIELD =&amp;gt; $OrderBy, ORDER =&amp;gt; $Order );&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 # Use the user&amp;#039;s displayed fields&lt;br /&gt;
 $Format ||= RT-&amp;gt;Config-&amp;gt;Get(&amp;#039;DefaultSearchResultFormat&amp;#039;);&lt;br /&gt;
 # Scrube the html of the format string to remove any potential nasties.&lt;br /&gt;
 $Format = $m-&amp;gt;comp(&amp;#039;/Elements/ScrubHTML&amp;#039;, Content =&amp;gt; $Format, DenyAll =&amp;gt; 1);&lt;br /&gt;
 my (@Format) = $m-&amp;gt;comp(&amp;#039;/Elements/CollectionAsTable/ParseFormat&amp;#039;, Format =&amp;gt; $Format);&lt;br /&gt;
 &lt;br /&gt;
 my @attrs = qw(&lt;br /&gt;
     id QueueObj-&amp;gt;Name Subject Status&lt;br /&gt;
     TimeEstimated TimeWorked TimeLeft&lt;br /&gt;
     Priority FinalPriority&lt;br /&gt;
     OwnerObj-&amp;gt;Name &lt;br /&gt;
     Requestors-&amp;gt;MemberEmailAddressesAsString&lt;br /&gt;
     Cc-&amp;gt;MemberEmailAddressesAsString&lt;br /&gt;
     AdminCc-&amp;gt;MemberEmailAddressesAsString&lt;br /&gt;
     DueObj-&amp;gt;ISO ToldObj-&amp;gt;ISO CreatedObj-&amp;gt;ISO&lt;br /&gt;
     ResolvedObj-&amp;gt;ISO LastUpdatedObj-&amp;gt;ISO&lt;br /&gt;
 );&lt;br /&gt;
 &lt;br /&gt;
 # HEADER: Map the fields from Format to proper column names&lt;br /&gt;
 &lt;br /&gt;
 my @header = ();&lt;br /&gt;
 my @cols = ();&lt;br /&gt;
 foreach my $column (@Format)&lt;br /&gt;
 {&lt;br /&gt;
 	next if (!defined ($column-&amp;gt;{&amp;quot;attribute&amp;quot;}) || !$column-&amp;gt;{&amp;quot;attribute&amp;quot;});&lt;br /&gt;
 	next if ($column-&amp;gt;{&amp;quot;title&amp;quot;} &amp;amp;&amp;amp; $column-&amp;gt;{&amp;quot;title&amp;quot;} eq &amp;quot;NEWLINE&amp;quot;);&lt;br /&gt;
 &lt;br /&gt;
 	# Extract the column names from the Format array&lt;br /&gt;
 	my $ret = $m-&amp;gt;comp (&lt;br /&gt;
 		&amp;quot;/Elements/ColumnMap&amp;quot;,&lt;br /&gt;
 		Class =&amp;gt; &amp;quot;RT__Ticket&amp;quot;,&lt;br /&gt;
 		Name  =&amp;gt; $column-&amp;gt;{&amp;quot;attribute&amp;quot;},&lt;br /&gt;
 		Attr  =&amp;gt; &amp;quot;title&amp;quot;,&lt;br /&gt;
 	);&lt;br /&gt;
 &lt;br /&gt;
 	my $colname = ProcessColumnMapValue ($ret, Arguments =&amp;gt; [ $column-&amp;gt;{&amp;quot;title&amp;quot;} ] );&lt;br /&gt;
 	push (@header, $colname);&lt;br /&gt;
 &lt;br /&gt;
 	$ret = $m-&amp;gt;comp (&lt;br /&gt;
 		&amp;quot;/Elements/ColumnMap&amp;quot;,&lt;br /&gt;
 		Class =&amp;gt; &amp;quot;RT__Ticket&amp;quot;,&lt;br /&gt;
 		Name =&amp;gt; $column-&amp;gt;{&amp;quot;attribute&amp;quot;},&lt;br /&gt;
 		Attr =&amp;gt; &amp;quot;value&amp;quot;,&lt;br /&gt;
 	);&lt;br /&gt;
 	push (@cols, $ret);&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 $r-&amp;gt;content_type(&amp;#039;application/vnd.ms-excel&amp;#039;);&lt;br /&gt;
 {&lt;br /&gt;
     $m-&amp;gt;out(join(&amp;quot;\t&amp;quot;, @header));&lt;br /&gt;
     $m-&amp;gt;out(&amp;quot;\n&amp;quot;);&lt;br /&gt;
     $m-&amp;gt;flush_buffer;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 my $i = 0;&lt;br /&gt;
 while ( my $Ticket = $Tickets-&amp;gt;Next()) {&lt;br /&gt;
     my @row;&lt;br /&gt;
     foreach my $attr (@cols) {&lt;br /&gt;
 	push @row, ProcessColumnMapValue ($attr, Arguments =&amp;gt; [ $Ticket, 0 ], Escape =&amp;gt; 0);&lt;br /&gt;
     }&lt;br /&gt;
 &lt;br /&gt;
     # remove tabs from all field values, they screw up the tsv&lt;br /&gt;
     for (@row) {&lt;br /&gt;
         $_ = &amp;#039;&amp;#039; unless defined;&lt;br /&gt;
         $_ =~ s/(?:\n|\r)//g;&lt;br /&gt;
         $_ =~ s{\t}{    }g;&lt;br /&gt;
     }&lt;br /&gt;
 &lt;br /&gt;
     $m-&amp;gt;out(join(&amp;quot;\t&amp;quot;,@row));&lt;br /&gt;
     $m-&amp;gt;out(&amp;quot;\n&amp;quot;);&lt;br /&gt;
 &lt;br /&gt;
     unless (++$i%10) {&lt;br /&gt;
         $i = 0;&lt;br /&gt;
         $m-&amp;gt;flush_buffer;&lt;br /&gt;
     }&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 $m-&amp;gt;abort();&lt;br /&gt;
 &amp;lt;/%INIT&amp;gt;&lt;br /&gt;
  &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Elements/ScrubHTML (modified) ===&lt;br /&gt;
&lt;br /&gt;
Minor modification - diff -u output:&lt;br /&gt;
&lt;br /&gt;
 --- share/html/Elements/ScrubHTML       Tue Feb  1 09:20:40 2005&lt;br /&gt;
 +++ local/html/Elements/ScrubHTML   Fri Jun 10 15:50:27 2005&lt;br /&gt;
 @@ -62,10 +62,12 @@&lt;br /&gt;
 &lt;br /&gt;
  $scrubber-&amp;amp;gt;deny(qw[*]);&lt;br /&gt;
  $scrubber-&amp;amp;gt;allow(&lt;br /&gt;
 -    qw[A B U P BR I HR BR SMALL EM FONT SPAN DIV UL OL LI DL DT DD]);&lt;br /&gt;
 +    qw[A B U P BR I HR BR SMALL EM FONT SPAN DIV UL OL LI DL DT DD])&lt;br /&gt;
 +       unless $DenyAll;&lt;br /&gt;
  $scrubber-&amp;amp;gt;comment(0);&lt;br /&gt;
  return ( $scrubber-&amp;amp;gt;scrub($Content) );&lt;br /&gt;
  &amp;amp;lt;/%init&amp;amp;gt;&lt;br /&gt;
  &amp;amp;lt;%args&amp;amp;gt;&lt;br /&gt;
  $Content =&amp;amp;gt; undef&lt;br /&gt;
 +$DenyAll =&amp;amp;gt; undef&lt;br /&gt;
  &amp;amp;lt;/%args&amp;amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== /Search/Results.html ===&lt;br /&gt;
&lt;br /&gt;
Minor modification - diff -u output:&lt;br /&gt;
&lt;br /&gt;
 --- share/html/Search/Results.html     Tue Feb  1 09:20:40 2005&lt;br /&gt;
 +++ local/htmlSearch/Results.html        Fri Jun 10 16:00:38 2005&lt;br /&gt;
 @@ -79,7 +79,8 @@&lt;br /&gt;
  &amp;amp;lt;div align=right&amp;amp;gt;&lt;br /&gt;
  &amp;amp;lt;a href=&amp;quot;&amp;amp;lt;%$RT::WebPath%&amp;amp;gt;/Search/Bulk.html&amp;amp;lt;%$QueryString%&amp;amp;gt;&amp;quot;&amp;amp;gt;&amp;amp;lt;&amp;amp;amp;|/l&amp;amp;amp;&amp;amp;gt;Update multiple tickets&amp;amp;lt;/&amp;amp;amp;&amp;amp;gt;&amp;amp;lt;/a&amp;amp;gt;&amp;amp;lt;br&amp;amp;gt;&lt;br /&gt;
  &amp;amp;lt;a href=&amp;quot;&amp;amp;lt;%$RT::WebPath%&amp;amp;gt;/Search/Results.html&amp;amp;lt;%$QueryString%&amp;amp;gt;&amp;quot;&amp;amp;gt;&amp;amp;lt;&amp;amp;amp;|/l&amp;amp;amp;&amp;amp;gt;Bookmarkable link&amp;amp;lt;/&amp;amp;amp;&amp;amp;gt;&amp;amp;lt;/a&amp;amp;gt;&amp;amp;lt;br&amp;amp;gt;&lt;br /&gt;
 -&amp;amp;lt;a href=&amp;quot;&amp;amp;lt;%$RT::WebPath%&amp;amp;gt;/Search/Results.tsv&amp;amp;lt;%$QueryString%&amp;amp;gt;&amp;quot;&amp;amp;gt;&amp;amp;lt;&amp;amp;amp;|/l&amp;amp;amp;&amp;amp;gt;spreadsheet&amp;amp;lt;/&amp;amp;amp;&amp;amp;gt;&amp;amp;lt;/a&amp;amp;gt; |&lt;br /&gt;
 +&amp;amp;lt;a href=&amp;quot;&amp;amp;lt;%$RT::WebPath%&amp;amp;gt;/Search/Results.tsv&amp;amp;lt;%$QueryString%&amp;amp;gt;&amp;quot;&amp;amp;gt;&amp;amp;lt;&amp;amp;amp;|/l&amp;amp;amp;&amp;amp;gt;spreadsheet (all ticket fields)&amp;amp;lt;/&amp;amp;amp;&amp;amp;gt;&amp;amp;lt;/a&amp;amp;gt; |&lt;br /&gt;
 +&amp;amp;lt;a href=&amp;quot;&amp;amp;lt;%$RT::WebPath%&amp;amp;gt;/Search/ScreenResults.tsv&amp;amp;lt;%$QueryString%&amp;amp;gt;&amp;quot;&amp;amp;gt;&amp;amp;lt;&amp;amp;amp;|/l&amp;amp;amp;&amp;amp;gt;spreadsheet (displayed ticket fields)&amp;amp;lt;/&amp;amp;amp;&amp;amp;gt;&amp;amp;lt;/a&amp;amp;gt; |&lt;br /&gt;
  &amp;amp;lt;a href=&amp;quot;&amp;amp;lt;%$RT::WebPath%&amp;amp;gt;/Search/Results.rdf&amp;amp;lt;%$QueryString%&amp;amp;gt;&amp;quot;&amp;amp;gt;&amp;amp;lt;&amp;amp;amp;|/l&amp;amp;amp;&amp;amp;gt;RSS&amp;amp;lt;/&amp;amp;amp;&amp;amp;gt;&amp;amp;lt;/a&amp;amp;gt; |&lt;br /&gt;
  &amp;amp;lt;a href=&amp;quot;&amp;amp;lt;%$RT::WebPath%&amp;amp;gt;/Tools/Offline.html&amp;amp;lt;%$QueryString%&amp;amp;gt;&amp;quot;&amp;amp;gt;&amp;amp;lt;&amp;amp;amp;|/l&amp;amp;amp;&amp;amp;gt;Work offline&amp;amp;lt;/&amp;amp;amp;&amp;amp;gt;&amp;amp;lt;/a&amp;amp;gt;&amp;amp;lt;br&amp;amp;gt;&lt;br /&gt;
  &amp;amp;lt;&amp;amp;amp; /Elements/Callback, _CallbackName =&amp;amp;gt; &amp;#039;SearchActions&amp;#039;, QueryString =&amp;amp;gt; $QueryString&amp;amp;amp;&amp;amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note: The default [[ColumnMap]] entries for date/time should be changed to ISO and not [[AsString]] for Excel to parse them correctly.&lt;br /&gt;
&lt;br /&gt;
== User Notes ==&lt;br /&gt;
&lt;br /&gt;
* Updated to work with v3.8.x by GinoLedesma&lt;br /&gt;
* This seems to indicate that it works well on 3.4.4 also: [[DuncanShannon]] 12/19/2005&lt;br /&gt;
&lt;br /&gt;
http://archives.free.net.ph/message/20051019.135851.95ff58c9.en.html&lt;br /&gt;
&lt;br /&gt;
* This seems to work fine on 3.4.5 as well.&lt;br /&gt;
* This only partially works on 3.6.x. The columns come out, but not in the correct order and the Scrub routines aren&amp;#039;t working.&lt;br /&gt;
&lt;br /&gt;
* Got it working with the following diff:&lt;br /&gt;
&lt;br /&gt;
 --- ScreenResults.tsv.orig	Wed Jul 11 17:30:53 2007&lt;br /&gt;
 +++ ScreenResults.tsv	Wed Jul 11 17:29:57 2007&lt;br /&gt;
 @@ -67,7 +67,8 @@&lt;br /&gt;
          } else {&lt;br /&gt;
              $row-&amp;amp;gt;{ $column } =  $value ;&lt;br /&gt;
          }&lt;br /&gt;
 -        $row-&amp;amp;gt;{ $column } =~ s/, &amp;amp;lt;br&amp;amp;gt;//g;    # ColumnMap adds &amp;amp;lt;br&amp;amp;gt; tags, which we don&amp;#039;t want&lt;br /&gt;
 +        $row-&amp;amp;gt;{ $column } =~ s/, &amp;amp;lt;br \/&amp;amp;gt;//g;    # ColumnMap adds &amp;amp;lt;br /&amp;amp;gt; tags, which we don&amp;#039;t want&lt;br /&gt;
 +        $row-&amp;amp;gt;{ $column } =~ s/&amp;amp;lt;em&amp;amp;gt;, (pending other Collection), &amp;amp;lt;\/em&amp;amp;gt;//g;&lt;br /&gt;
      }&lt;br /&gt;
      push @rows, $row;&lt;br /&gt;
  }&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
</feed>