الموضوع: Triggers in Dexterity
عرض مشاركة واحدة
قديم 29-Apr-2012, 04:18 AM   #7
humam
مشرف منتدى المطورين
افتراضي Trigger_RegisterFocus()Function

الصيغة النحوية للدلة هي كل التالي:
كود:
Trigger_RegisterFocus (anonymous (qualified_resource), focus_type,
attach_type, script processing_procedure {, tag})
بارامترات الدالة:

qualified_resource:

ويمثل احد انواع المصادر المختلفة في الدكسترتي وقد يكون نافذة او نموذج او حقل وهنا يجب ان نستخدم الاسم الصريح للمصدر وكما يلي:
كود:
 ‘Field1’ of window ‘Window1’ of form ‘Form1’.
 form ‘Form1’.
 window ‘Window1’ of form ‘Form1’.
 window ‘Scrollwin1’ of form ‘Form1’.
 menu ‘Menu1’ of form ‘Form1’.
command ‘Command Name’ of form ‘Form1’.
المقصود بالاسم الصريح للمصدر هو الاسم الكامل ضمن فضاء الاسماء Name Space وهذا المصطلح شائع في لغات البرمجة مثلا حقل الاسم Name Field ضمن نافذة Customer ضمن نموذج Customer عندما تعمل برمجيا من داخل النافذة Customer وعند استدعاء الحقل Name سوف تستخدم الاسم Name فقط ولكن اذا اردت استدعاء هذا الحقل ضمن شفرة اجراء عام عليك ذكر الاسم الصريح للحقل والذي يشمل اسم النافذة واسم النموذج واسم الحقل :Name of window Customer of Form Customer وهكذا مع باقي انواع المصادر المحتلفة والامثلة السابقة توضح كيفية كتابة الاسم الصريح لكل نوع من انواع المصادر.

focus_type:

وهو عبارة عن عدد صحيح او يمكن استخدام ثابت بدل العدد الصحيح وهذا افضل لان اسم الثابت سوف يساعدك على تذكر نوع هذا القادح بسرعة والثوابت هي:
كود:
TRIGGER_FOCUS_PRE 
TRIGGER_FOCUS_CHANGE 
TRIGGER_FOCUS_POST 
TRIGGER_FOCUS_PRINT 
TRIGGER_FOCUS_ACTIVATE 
TRIGGER_FOCUS_FILL 
TRIGGER_FOCUS_INSERT 
TRIGGER_FOCUS_DELETE
هذه الانواع تكون معتمدة على نوع المصدر الذي تسجل له القادح مثلا اذا كان المصدر هو Form عند ذلك يمكنك ان تسجل قادح من النوع TRIGGER_FOCUS_PRE او TRIGGER_FOCUS_POST فقط اما اذا كان المصدر هو Button filed عند ذلك يمكن تسجيل قادح من النوع TRIGGER_FOCUS_CHANGE فقط وهكذا اي لكل مصدر هناك انواع محددة من القادحات يمكن استخدامها معه للمزيد من التفاصيل راجع الشكل رقم واحد حيث يبين الانواع الممكن استخدامها مع كل مصدر.

attach_type:

وهذا البرامتر سوف يحدد متى سوف يتم تنفيذ الشفرة المرفقة بالقادح وهناك احتمالين الاولى يمكن ان تنفذ الشفرة الخاصة بك قبل تنفيذ شفرة الحدث الاصلية او يمكن ان تقوم بتنفيذ الشفرة الخاصة بك بعد تنفيذ شفرة الحدث الاصلية وهذا سوف يعتمد على ما تريد القيام به فعليا بواسطة استخدام القادح مثلا يمكن ان تنفذ الشفرة الخاصة بك قبل شفرة الحدث الاصلية للقيام بعملية Validation جديدة مقترحة من قبل العميل او يمكن تنفيذ الشفرة بعد الشفرة الاصلية في حال اردت ان تقوم بعملية التحقق من ان المستخدم قد قام بعملية حفظ record ولم يقم بحذفه وهنا ايضا يمكن استخدام احدى القيمتين التاليتين :
كود:
TRIGGER_BEFORE_ORIGINAL 
TRIGGER_AFTER_ORIGINAL
script processing_procedure:

هذا البارمتر سوف يتحوي على اسم الاجراء Procedure Name الذي سوف تقوم بكتابته لكي تتم عملية تنفيذه عند اطلاق القادح

Tag:

وهو برامتر اختياري سوف يعيد رقم صيحيح يمثل معرف ID لهذا القادح ويمكنك فيما بعد استخدام هذا ID اذا رغبت بتعطيل او تفعيل القادح برمجيا او الغاء عملية تسجيل القادح برمجيا.

القيمة المعاده

سوف تعيد هذه الدالة رقم صحيح يشير الى نجاح او فشل عملية التسجيل والقيم المعادة هي كما يلي :
كود:
SY_NOERR or 0: No error occurred.
SY_UNKNOWN or 1: An unknown error occurred and the trigger was not
registered.
SY_INVALID_SCRIPT or 2: The trigger processing script was either not found
Or had the wrong number of parameters. The trigger was not registered.
SY_INVALID_FOCUS or 3: The focus_type is not valid for the qualified_resource
.

مثال

المثال التالي يوضح كيفية تسجيل قادح للزر Save ضمن النافذة Customer Maintenance وتتم عملية اطلاق هذا القادح قبل تنفيذ الشفرة الاصلية للزر Save حيث سوف تتم بعدها عملية تنفيذ الشفرة الخاصة بك وهنا اسم هذه الشفرة هيه GP4Arab_Save والتي ضمن يمكن ان تكتب الشفرة التي سوف تستخدمها لحفظ بعض الحقول الجديدة التي قمت باضافتها للنافذة Customer ضمن جدول منفصل.

الشفرة واضحة وهي تتضمن استخدام الدالة Trigger_RegisterFocus لتسجيل هذا القادح ضمن Runtime Engine ونلاحظ كيفية استخدام بارامترات الدالة هنا البارمتر الاول وهو المصدر وفي هذه الحالة هو الزر Save ونلاحظ كيفية استخدام الاسم الصريح لهذا الزر البارمتر الثاني وهو نوع القادح وهنا كما ذكرنا يمكن استخدام النوع Change فقط مع Button Fields البارمتر الثالث ويمثل متى سوف يتم تنفيذ الشفرة الخاصة بنا وهنا اخترنا تنفيذ الشفرة قبل تنفيذ شفرة الزر Save الاصلية وهناك سبب وراء هذا الاختيار حيث اذا اخترت تنفيذ شفرتك بعد تنفيذ الشفرة الاصلية للزر Save سوف تواجه مشكلة وهي انه في نهاية الشفرة للزر Save سوف يتم تنفيذ عبارة restart window والتي سوف تؤدي الى مسح القيم من حقول النافذة وبتالي عندما يأتي دور شفرتك للتنفيذ سوف تجد كل الحقول فارغة! ولن يتم حفظ اي قيم ضمن الجدول الخاص بك لذا عليك في مثل هذا السناريو ان تقوم بعملية تنفيذ شفرتك قبل الشفرة الاصلية ولكن يجب ان لا تتضمن شفرتك العبارة restart window حيث سوف تقوم شفرة الجريت بلينز الاصلية بهذه الوضيفة. اخيرا البارمتر الاخير وهو اسم الشفرة الخاصة بك والتي سوف تتم عملية تنفيذها بمجرد انطلاق هذا القادح وفي النهاية توجد عبارة شرطية للتحقق من كون عملية التسجيل تمت بشكل سليم او لا.
كود:
local integer l_result;
l_result = Trigger_RegisterFocus(anonymous('Save Button' of window  RM_Customer_Maintenance of form RM_Customer_Maintenance), TRIGGER_FOCUS_CHANGE, TRIGGER_BEFORE_ORIGINAL, script GP4Arab_Save);
if l_result <> SY_NOERR then
warning "Trigger registration failed.";
end if;
__________________
GP Techno-Functional Consultant

آخر تعديل بواسطة humam ، 29-Apr-2008 الساعة 05:08 AM.
humam غير متواجد حالياً   رد مع اقتباس