Fast Report - E-Mail Client (Batch) & E-Mail (Native)

From eStream Software

Introduction

By default we got 3 types of Export to E Mail for Fast Report

E-Mail Client

Pros
  • User still can change the E-Mail address, Subject & body (E-Mail Content) before Sent
  • Send E-Mail will keep in the Client E-Mail
  • Support HTML format
  • Can Attach more then 1 format
  • Can use without E-Mail Script
Cons
  • Not easy to setup
  • Only For Single Document E-Mail
  • Attachment only Support pdf, Excel & HTML format

E-Mail Client (Batch)

Pros
  • Can use for Batch & Single Document E-Mail
  • Send E-Mail will keep in the Client E-Mail
Cons
  • Not easy to setup
  • Only support pdf attachment
  • E-Mail Content only support plain text
  • User can't change the E-Mail address, Subject & body (E-Mail Content) before Sent
  • Must load the E-Mail Script

E-Mail (Native)

Pros
  • Easy to Setup
  • Support many attachment format
  • User still can change the E-Mail address, Subject & body (E-Mail Content) before Sent
  • Can use without E-Mail Script
Cons
  • No record is keeped for Sended E-Mail
  • Only For Single Document E-Mail
  • E-Mail Content only support plain text
  • Only support Single Attachment

Requirement

  • Fast Report
  • Client E-Mail (eg Mozilla Thunderbird) for E-Mail Client & E-Mail Client (Batch) Only
  • An E-Mail Account (eg GMail)
  • SQL Accounting Version 731 & above

Setting

Below is example using Sales Invoice

FR-EMail-01.jpg
01. Click the Code Tab
02. Enter below Script at the First line
E-Mail Script 1 (Last Script Update : 18 Apr 2016)
//const MaxInt = 2147483647;  
var lSQL : String;

function StringReplace(const S, OldPattern, NewPattern: string;
  iReplaceAll: boolean=true; iIgnoreCase :boolean=true): string;
var
  SearchStr, Patt, NewStr: string;
  Offset: Integer;
begin
// Usage StringReplace(<Main."DOB">,'/','')
  if iIgnoreCase then begin
    SearchStr := UpperCase(S);
    Patt := UpperCase(OldPattern);
  end else begin
    SearchStr := S;
    Patt := OldPattern;
  end;
  NewStr := S;
  Result := '';
  while SearchStr <> '' do begin
    Offset := Pos(Patt, SearchStr);
    if Offset = 0 then begin
      Result := Result + NewStr;
      Break;
    end;
    Result := Result + Copy(NewStr, 1, Offset - 1) + NewPattern;
    NewStr := Copy(NewStr, Offset + Length(OldPattern), MaxInt);
    if not iReplaceAll then begin
      Result := Result + NewStr;
      Break;
    end;
    SearchStr := Copy(SearchStr, Offset + Length(Patt), MaxInt);
  end;
end;  
  
procedure GetEMailTpl;
var D : TfrxDataSet;
begin
  D := Report.GetDataSet('plEMailTpl');
  D.First;
  While not D.Eof do begin
    if Trim(D.DisplayText('ReportName')) = Trim(Report.ReportOptions.Name) then
      Break;
    D.Next;
  end;
end;

function GetFldInfo(const AStr:String):String;    
var D : TfrxDataSet;  
    nStr : String;
    lSL : TStringList;
    i : integer;                                
begin
//  StringReplace(<Main."DOB">,'/','')    
  D := Report.GetDataSet('Main');
  nStr := AStr;  
  lSL := TStringList.Create;
  try
    D.GetFieldList(lSL);
    for i:=0 to lSL.Count -1 do
      nStr := StringReplace(nStr, ':'+lSL[i],D.DisplayText(lSL[i]));                                      
    Result := nStr;                                  
  finally
    lSL.Free;                
  end;            
end;          
  
//For E-Mail Client (Batch)
procedure OnGetEmailSettings(EmailSettings: TStrings);
var vEmail, vName: Variant;
begin
  GetEMailTpl;
  vEmail := Trim(<Document_CompanyBranch."Email">);
  if Trim(vEmail) = '' then
    vEmail := <plEMailTpl."AltEMail">;
  vName := Trim(<Main."CompanyName">);

  if (vName <> '' ) and (vEmail <> '') then begin
    EmailSettings.Values['Recipients'] := vEmail;
    EmailSettings.Values['Subject']    := GetFldInfo(<plEMailTpl."Subject">);
    EmailSettings.Values['Body']       := GetFldInfo(RichTextToPlainText(<plEMailTpl."Body">));
  end;
  //ID uses for display on progress dialog
  EmailSettings.Values['ID']        := vName;
end;

//For E-Mail (Native)
function SQL_Email_GetInfo(Info: Integer): string;
var vEmail, vName: Variant;
begin
  GetEMailTpl;
  Result := '';
  vEmail := Trim(<Document_CompanyBranch."Email">);
  if Trim(vEmail) = '' then
    vEmail := <plEMailTpl."AltEMail">;
  vName := Trim(<Main."CompanyName">);

  if (vName <> '' ) and (vEmail <> '') then begin
    case Info of
      SQL_Email_Address: Result := vEmail;
      SQL_Email_Subject: Result := GetFldInfo(<plEMailTpl."Subject">);
      SQL_Email_Content: Result := GetFldInfo(RichTextToPlainText(<plEMailTpl."Body">));
    end;
  end;
end;
FR-EMail-02.jpg
03. Scroll down look for procedure SetUp
04. Copy below script & paste it between the begin & end; in procedure SetUp
  SQL := 'SELECT B.Description As ReportName, B.Description2 As Subject, B.Description3 As Body, '+
         'B.Remark1 AltEMail FROM SL_QT A ' +
         'INNER JOIN SL_QTDTL B ON (A.Dockey=B.Dockey) ' +
         'WHERE A.DocNo=''EMAIL'' ';
  AddDataSet('plEMailTpl', ['ReportName', 'Subject', 'Body', 'AltEMail'])
  .GetDBData(SQL);
05. Click File | Save As... to save the file (eg Sales Invoice 7 (GST 2)-Email)
06. Click File | Exit to exit the report design
07. Click Design again in the report designer for the file just save on Steps 5 (eg Sales Invoice 7 (GST 2)-Email)
08. Click the Code Tab
09. Remove the // at the First line of the Script
10. Click File | Save to save the file
11. Click File | Exit to exit the report design

Quotation

Menu: Sales | Quotation...

SQL Accounting can E Mail by different Subject & E Mail Content by report name

FR-EMail-03.jpg
01. Create New Quotation with DocNo EMAIL & enter the Detail fields as following
Field Name Description
Description Fast Report Name
Description2 E-Mail Subject
Description3 (More Description) E-Mail Content/Body
Remark1 Alternative E-Mail if not Found

Template.Tips-01.jpg
  • User can use eg <Main.DocNo> (<Pipeline.FieldName>) to show variable data
(eg Document Number) in the E-Mail Subject & Body.
  • The Pipeline name & FieldName is from the Report Designer Pipeline name & Field Name

Steps

Below is example using Sales Invoice
Menu: Sales | Invoice...

01. Press F6
02. Select the Build-in/Customise Fast Report (eg Sales Invoice 7 (GST 2)-Email)
03. Click OK
FR-EMail-04.jpg
04. Click the Arrow for Export (2nd Button from Left)
FR-EMail-05.jpg
05. Select either 1 of other following from the list
  • Export to E-Mail Client
  • Export to E-Mail Client (Batch)
  • Export to E-Mail (Native)

See also