Fast Report - E-Mail Client (Batch) & E-Mail (Native): Difference between revisions
From eStream Software
Line 29: | Line 29: | ||
| | | | ||
<syntaxhighlight lang="delphi"> | <syntaxhighlight lang="delphi"> | ||
//var lSQL : String; | //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; | procedure GetEMailTpl; | ||
var D : TfrxDataSet; | var D : TfrxDataSet; | ||
Line 43: | Line 76: | ||
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) | //For E-Mail Client (Batch) | ||
procedure OnGetEmailSettings(EmailSettings: TStrings); | procedure OnGetEmailSettings(EmailSettings: TStrings); | ||
Line 55: | Line 108: | ||
if (vName <> '' ) and (vEmail <> '') then begin | if (vName <> '' ) and (vEmail <> '') then begin | ||
EmailSettings.Values['Recipients'] := vEmail; | EmailSettings.Values['Recipients'] := vEmail; | ||
EmailSettings.Values['Subject'] := <plEMailTpl."Subject">; | EmailSettings.Values['Subject'] := GetFldInfo(<plEMailTpl."Subject">); | ||
EmailSettings.Values['Body'] := RichTextToPlainText(<plEMailTpl."Body">); | EmailSettings.Values['Body'] := GetFldInfo(RichTextToPlainText(<plEMailTpl."Body">)); | ||
end; | end; | ||
//ID uses for display on progress dialog | //ID uses for display on progress dialog | ||
Line 76: | Line 129: | ||
case Info of | case Info of | ||
SQL_Email_Address: Result := vEmail; | SQL_Email_Address: Result := vEmail; | ||
SQL_Email_Subject: Result := <plEMailTpl."Subject">; | SQL_Email_Subject: Result := GetFldInfo(<plEMailTpl."Subject">); | ||
SQL_Email_Content: Result := RichTextToPlainText(<plEMailTpl."Body">); | SQL_Email_Content: Result := GetFldInfo(RichTextToPlainText(<plEMailTpl."Body">)); | ||
end; | end; | ||
end; | end; |
Revision as of 06:25, 18 April 2016
Introduction
By default we got 2 types of Export to E Mail for Fast Report
- E-Mail Client (Batch)
- E-Mail (Native)
E-Mail Client (Batch)
Pros
- Can use for Batch & Single Document E-Mail
- Sended E-Mail will had keep in the Client E-Mail
Cons
- Not easy to setup
E-Mail (Native)
Pros
- Easy to Setup
Cons
- No record is keeped for Sended E-Mail
- Only For Single Document E-Mail
Setting
Below is example using Sales Invoice
- 01. Click the Code Tab
- 02. Enter below Script at the First line
E-Mail Script 1 |
---|
//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;
|
- 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...