55
66namespace System. Agents;
77
8+ using System. IO;
9+ using System. Utilities;
10+
811codeunit 4308 "Agent Message Impl."
912{
1013 Access = Internal ;
@@ -13,6 +16,7 @@ codeunit 4308 "Agent Message Impl."
1316
1417 var
1518 GlobalIgnoreAttachment: Boolean ;
19+ AttachmentsFilenameLbl: Label ' attachments_task%1_msg%2.zip' , Comment = ' Filename format for downloading multiple attachments as a zip file. %1 = Task ID, %2 = Message ID' ;
1620
1721 procedure GetText( var AgentTaskMessage: Record "Agent Task Message") : Text
1822 var
@@ -94,15 +98,47 @@ codeunit 4308 "Agent Message Impl."
9498 procedure DownloadAttachments( var AgentTaskMessage: Record "Agent Task Message")
9599 var
96100 AgentTaskMessageAttachment: Record "Agent Task Message Attachment";
101+ AgentTaskFile: Record "Agent Task File";
102+ DataCompression: Codeunit "Data Compression";
103+ TempBlob: Codeunit "Temp Blob";
104+ AgentTaskImpl: Codeunit "Agent Task Impl.";
105+ FileInStream: InStream ;
106+ ZipOutStream: OutStream ;
107+ ZipInStream: InStream ;
108+ FileName: Text ;
109+ AttachmentCount: Integer ;
110+ DownloadDialogTitleLbl: Label ' Download Email Attachment' ;
97111 begin
98112 AgentTaskMessageAttachment. SetRange( "Task ID", AgentTaskMessage. "Task ID") ;
99113 AgentTaskMessageAttachment. SetRange( "Message ID", AgentTaskMessage. ID) ;
100114 if not AgentTaskMessageAttachment. FindSet() then
101115 exit ;
102116
103- repeat
117+ // Count attachments
118+ AttachmentCount := AgentTaskMessageAttachment. Count () ;
119+
120+ // If single file, download directly
121+ if AttachmentCount = 1 then begin
104122 ShowOrDownloadAttachment( AgentTaskMessageAttachment. "Task ID", AgentTaskMessageAttachment. "File ID", true) ;
123+ exit ;
124+ end ;
125+
126+ // If multiple files, create a zip
127+ DataCompression. CreateZipArchive() ;
128+ repeat
129+ if AgentTaskFile. Get( AgentTaskMessageAttachment. "Task ID", AgentTaskMessageAttachment. "File ID") then begin
130+ AgentTaskFile. CalcFields( Content) ;
131+ AgentTaskFile. Content. CreateInStream( FileInStream, AgentTaskImpl. GetDefaultEncoding()) ;
132+ DataCompression. AddEntry( FileInStream, AgentTaskFile. "File Name") ;
133+ end ;
105134 until AgentTaskMessageAttachment. Next() = 0 ;
135+
136+ TempBlob. CreateOutStream( ZipOutStream) ;
137+ DataCompression. SaveZipArchive( ZipOutStream) ;
138+ DataCompression. CloseZipArchive() ;
139+ TempBlob. CreateInStream( ZipInStream) ;
140+ FileName := StrSubstNo( AttachmentsFilenameLbl, Format( AgentTaskMessage. "Task ID") , Format( AgentTaskMessage. ID)) ;
141+ File . DownloadFromStream( ZipInStream, DownloadDialogTitleLbl, ' ' , ' ' , FileName) ;
106142 end ;
107143
108144 procedure ShowOrDownloadAttachment( TaskID: BigInteger ; FileID: BigInteger ; ForceDownloadAttachment: Boolean )
0 commit comments