Howdy, Stranger!

It looks like you're new here. If you want to get involved, click one of these buttons!

Studi Kasus, Prioritas Eksekusi vs Hirarki TfsScript.Parent (FastReport - FastScript)

edited September 19 in Delphi Programming

Penggunakan TfsScript.Parent mirip dengan uses <something> dan di setiap instance Buffer Script-nya di perbolehkan di definisikan nama procedure/function yang sama.

Fitur tsb membuat kita bisa mendesain fleksibilitas-nya dgn melakukan override procedure/function di atas-nya.
Maksud-nya, saya buat script standard-nya sbg hirarki/prioritas eksekusi terendah sd tertinggi (jika ada kebutuhan customer yg spesifik).
Sehingga saya tidak perlu copas code yg sama lalu merubah yg dibutuhkan. Jadi dgn hirarki prioritas ini saya berharap bs meng-override procedure/function yg dibutuhkan saja.

Yang menjadi pertanyaan, apakah hirarki tsb menentukan prioritas ? ternyata belum tentu. Yg menentukan prioritas pertama kali adalah jika procedure pemanggilnya berada dalam satu instance, walaupun secara hirarki dia posisi tengah, bahkan semua procedure/function yg ada dlm instance posisi terakhir akan di abaikan.

Berikut dibawah hasil percobaan-nya. Dengan contoh 3 instance TfsScript, sbb:

fsGlobalScript* -> fsStdScript -> fsUdfScript -> fsExecScript

*fsGlobalScript adalah internal dari FastScript (Fast-Report)

Penggunaan-nya di Delphi sbb:

// in delphi
fsStdScript.Parent  := fsGlobalScript;
fsUdfScript.Parent  := fsStdScript;
fsExecScript.Parent := fsUdfScript;

Jika di dalam masing-2 script kita definisikan

// in scripting buffer fStdScript
procedure DoSameName;
begin
   ShowMessage('fStdScript');
end;

begin end.
// in scripting buffer fUdfScript
procedure DoSameName;
begin
   ShowMessage('fUdfScript');
end;

begin end.
// in scripting buffer fExecScript
procedure DoSameName;
begin
   ShowMessage('fExecScript');
end;

procedure DoDiffName;
begin
   ShowMessage('fExecScript Too');
end;

procedure OnCaller(AIndex: integer)
begin
   case AIndex of
      0: DoSameName;
      1: DoDiffName; 
   end
end;

begin 
   OnCaller(0);
end.

Contoh di atas output-nya: fExecScript, dimana prioritas dalam satu instance buffer
Jika fExecScript.DoSameName di hapus maka output-nya: fUdfScript, begitu dan seterus-nya.

Jika procedure OnCaller di letakkan di dlm fUdfScript maka output-nya: fUdfScript

Saat ini saya hanya mencoba kedalaman hirarki parent maksimal 4 instance saja.


Semoga bermanfaat.
Hanny W

Sign In or Register to comment.