مدونة منذر اسامة

العودة   منتديات جريت بلينز العربية Great Plains For Arab > منتدى مطوري جريت بلينز > مواضيع المطورين الأخرى

مواضيع المطورين الأخرى مواضيع المطورين التي لا تنتمي الى أي من التصنيفات السابقة
مثل لغة الديكستريتي (Dexterity) والأدوات التطويرية الأخرى (eConnect , Integration Maneger ,VS2005 for GP...etc.)

إضافة رد
 
أدوات الموضوع انواع عرض الموضوع
قديم 16-Mar-2012, 12:12 AM   #1
humam
مشرف منتدى المطورين
افتراضي Triggers in Dexterity

ان القادحات Triggers هي عبارة عن وظائفية Functionality تسمح لتطبيق معين بالاستجابة لاحداث Events في Dictionaries اخرى.
لكي تكون Trigger يجب ان تقوم بتسجيلها Register ضمن Runtime engine ان عملية التسجيل سوف تحتوي على جزئين اساسيين الاول يمثل الحدث الذي سوف يؤدي الى اطلاق هذا القادح والجزء الثاني سوف يمثل الشفرة البرمجية التي سوف يتم تنفيذها عند اطلاق القادح وتسمى هذه الشفرة البرمجية ب Trigger Processing Procedure في الغالب سوف تحتوي هذه الشفرة البرمجية على القيام بعمليات حفظ او حذف third party record او تستخدم لفتح نموذج Form معين الى اخره من الامكانات المتاحة.
__________________
GP Techno-Functional Consultant
humam غير متواجد حالياً   رد مع اقتباس
قديم 16-Mar-2012, 12:22 AM   #2
humam
مشرف منتدى المطورين
افتراضي فوائد استخدام القادحات Triggers

ان استخدام Triggers في اغلب الاحيان سوف يكون امر اجباري وليس اختياري حيث كما ذكرنا في موضوع تعلم الدكسترتي ان المشاريع التي يمكن تطويرها بواسطة الدكسترتي مقسمة الى نوعين هما Stand Alone Application و Integrating Application بالنسبة الى النوع الثاني وهو الذي يهمنا ضمن سلسلة دروس تعلم الدكسترتي وفي هذا النوع تنقسم المشاريع الى قسمين هما Vertical Enhancement والذي يتضمن اضفة وظائفية جديدة لبرنامج الجريت بلينز عبر اضافة نماذج جديدة او تقارير جديدة لخزن المعلومات الاضافية والنوع الثاني من المشاريع هو Customizations والذي يتضمن القيام بعمليات التعديل على نوافذ الجريت بلينز الاصلية والتي تتضمن اضافة وظائفية جديدة او تعديل طريقة عمل النافذة حسب رغبة العميل وهذا النوع من المشاريع يتعبر اصعب من حيث التنفيذ من النوع الاول والسبب هو ان المطور سوف لن يكون قادر على اضافة الشفرة المطلوبة بشكل مباشر للكائنات او النوافذ حيث ان اضافة الكود بشكل مباشر سوف يؤدي الى ازالة الكود الموضوعة من قبل المايكروسوفت وبتالي سوف يؤدي الى حصول خلل في عمل النافذة لذا لكي نقوم بهذا النوع من التعديلات على نوافذ الجريت بلينز سوف يكون من الضروري استخدام القادحات لتنفيذ الشفرة التي سوف تعدل عمل النافذة او سوف تؤدي الى اضافة وظائف جديدة للنافذة. هناك امكانات مختلفة لعمل القادحات حيث بالامكان اطلاق القادح قبل الشفرة الاصلية وممكن ايضا اطلاق القادح بعد الشفرة الاصلية لكي يكون الكلام واضح سوف نأخذ المثال التالي يمكن تسجيل قادح لزر الحفظ في نافذة Customer Maintenance ويمكن اطلاق القادح عندما يضغط المستخدم على زر الحفظ ولكن سوف يتم تنفيذ الشفرة البرمجية المرفقة بالقادح والمسماة Trigger Processing Procedure قبل تنفيذ الشفرة البرمجية الخاصة بالزر حفظ طبعا هذه الحالة تكون مفيدة اذا اردت القيام بعملية تحقق جديدة تتلائم مع التعديلات التي تقوم بها ويمكن ايضا تسجيل القادح لكي يعمل بعد تنفيذ الشفرة البرمجية لزر الحفظ وهنا يمكن ان تستخدم هذه الطريقة لحفظ المعلومات الاضافية الى الجداول الجديدة التي تقوم باضافتها. طبعا هنا العديد من الامكانات الاخرى والتي سوف تختلف اعتمادا على نوع القادح المستخدم لذا سوف تكون الفقرة التالية من الموضوع هي انواع القوادح Triggers
__________________
GP Techno-Functional Consultant
humam غير متواجد حالياً   رد مع اقتباس
قديم 16-Mar-2012, 02:25 PM   #3
Tarek
عضو جديد
 
تاريخ التسجيل: Aug 2007
المشاركات: 22
من مواضيعي  
افتراضي

عفوا اخى الحبيب قبل الدخول فى انواع القادحات، هل نفهم مما سبق انه فقط فى حالة عمل تعديلات فى الشفرة الاصلية نستخدم القادحات؟ ولكن ماذا نفعل اذا كنا نريد التعديل فى حقول الشاشات الاصلية من حيث الحجم مثلا، ارجوا التوضيح،
ولا اعرف كيف اعبر لك عن امتنانى لسرعة تلبيتك لاقتراحتى الذى اتمنى ان اجد حتى نصفه من باقى الاعضاء مع كامل تقديرنا لمشاغلهم ومسئولياتهم ولكن اعتقد ان جميعا لدينا هدف نريد تحقيقه من هذا المنتدى،
ومع خالص الدعاء والتقدير...
Tarek غير متواجد حالياً   رد مع اقتباس
قديم 18-Mar-2012, 08:25 PM   #4
humam
مشرف منتدى المطورين
افتراضي

اقتباس:
المشاركة الأصلية كتبت بواسطة Tarek مشاهدة المشاركة
عفوا اخى الحبيب قبل الدخول فى انواع القادحات، هل نفهم مما سبق انه فقط فى حالة عمل تعديلات فى الشفرة الاصلية نستخدم القادحات؟ ولكن ماذا نفعل اذا كنا نريد التعديل فى حقول الشاشات الاصلية من حيث الحجم مثلا، ارجوا التوضيح،
ولا اعرف كيف اعبر لك عن امتنانى لسرعة تلبيتك لاقتراحتى الذى اتمنى ان اجد حتى نصفه من باقى الاعضاء مع كامل تقديرنا لمشاغلهم ومسئولياتهم ولكن اعتقد ان جميعا لدينا هدف نريد تحقيقه من هذا المنتدى،
ومع خالص الدعاء والتقدير...
اهلا بك اخي العزيز طارق
بالنسبة لتعديل حقول الشاشات الاصلية فهذا يعتبر من المحضورات في تعديل نوافذ الجريت بلينز لان تعديل حجم البيانات في الشاشة يجب ان يرافقه تعديل حجم البيانات في جداول الجريت بلينز التي تتعامل مع هذا الحقل وهذا الامر محضور حسب وثائق الدكسترتي ولكن يمكن ان اقترح عليك حل اخر للقيام بعملية زياده حجم حقل معين يمكنك اضافة حقل جديد الى النافذة مع استخدام الحجم المطلوب وثم خزن البيانات في جدول اضافي يمتلك نفس المفتاح الاساسي للجدول الاصلي ومن ثم استراجاع البيانات من هذا الجدول الاضافي وعرضها بالتماثل مع بيانات الجريت بلينز طبعا يمكنك اخفاء الحقل الاصلي من الخصائص.
__________________
GP Techno-Functional Consultant
humam غير متواجد حالياً   رد مع اقتباس
قديم 18-Mar-2012, 08:26 PM   #5
humam
مشرف منتدى المطورين
افتراضي انواع القادحات Triggers

هناك خمس انواع مختلفة من القادحات توفرها الدكسترتي وهي كما يلي:

Form triggers:

عندما تقوم بتسجيل From Trigger فان هذا سوف يؤدي الى اضافة فقرة جديدة الى القائمة الفرعية Additional التابعة للقائمة Extra وبذلك سوف تكون قادر على فتح Form من هذه القائمة او عند طريق استخدام Shortcut حيث يمكن استخدام التركيبة Ctrl+1 لفتح هذا النموذج تستخدم هذه الطريقة عندما تريد اضافة نموذج يحتوي على معلومات اضافية غير موجوده في نماذج الجريت بلينز الاصلية.




Focus Trigger:

وهو احد اكثر الانواع استخداما ويطلق هذا القادح اعتمادا على Focus Events وهو ينقسم الى عده انواع:
Form focus triggers
Window focus triggers
Scroll window focus triggers
Field focus triggers
Menu focus triggers
Command focus triggers

في هذا النوع من القادحات سوف تكون قادر على اضافة الشفرة البرمجية المطلوبة لمختلف انواع الاحداث التي تدعمها الدكسترتي مثلا في حالة Form يمكن تسجيل قادحات للاحداث Open Form , Close Form بالنسبة لل Window يمكن تسجيل قادحات لل Activate window, close window, pre window وهكذا بالنسبة لباقي الانواع الاخرى. كيف يتم اطلاق هذا القادح مثلا يمكن ان تسجل قادح لزر Save في اي نافذة من نوافذ الجريت بلينز وهنا يمكن تسجيل هذا القادح لينطلق بعد الحدث Change وهناك معامل اضافي في عبارة تعريف القادح سوف تمكنك من تنفيذ الشفرة باحدى الطريقتين التاليتين اولا TRIGGER_BEFORE_ORIGINAL في هذه الحالة سوف تتم عملية تنفيذ شفرة القادح قبل تنفيذ الشفرة الاصلية للزر Save وهنا يمكن ان تقوم بكل عمليات التحقق المطلوبة قبل تنفيذ عملية الحفظ والطريقة الثانية TRIGGER_BEFORE_ORIGINA في هذه الحالة سوف تتم عملية تنفيذ شفرة القادح بعد تنفيذ الشفرة الاصلية للزر Save وهنا يمكن ان تقوم بكل العمليات الاضافية مثل حفظ المعلومات في جدول جديد تقوم باضافته الى النموذج.

Database triggers

يتم اطلاق هذا النوع من القادحات اعتمادا على Table Operations مثل Save,Read,Delete حيث يمكن تسجيل قادح لكل نوع من العمليات السابقة وسوف يتم تنفيذ شفرةالقادح بعد نجاح العمليات السابقة على قاعده البيانات وهنا توجد حالة خاصة بهذا النوع حيث سوف يتم امرار Table Buffer الى الشفرة البرمجية الخاصة بالقادح وبتالي يمكنك استخدام هذا Table buffer للقيام بالعمليات المماثلة على الجداول الاضافية التي تقوم انت باضافتها الى الجريت بلينز وذلك للحفاظ على تكامل البيانات بين جداولك وجداول الجريت بلينز.

Procedure triggers

يمكن ايضا تسجيل قادحات تعمل بعد استدعاء Procedures من قبل برنامج الجريت بلينز وهذا النوع مفيد جدا في حالات خاصة خصوصا اذا كنت مثلا تريد استرجاع سجل معين من الجدول الاضافي وتريد عرضه عند قيام المستخدم باستعراض السجل الاصلي حيث ان معظم نوافذ الجريت بلينز سوف تقوم بعملية اقفال lock للحقول التي تمثل primary key وبتالي سوف لن تكون قادر على استخدام focus trigger مع هذه الحقول لذا عليك ايجاد اي اجراء عام يقوم الجريت بلينز باستدعائه عند تنفيذ شفرة هذه الحقول وهذه العملية صعبة نوعا ما وتعتمد على الخبرة وعلى استخدام Script log وكيفية قراءة هذا Log .

Function Trigger

وهو مشابة للنوع السابق ولكن هذه المرة سوف تقوم بتسجيله ل Function بدل من تسجيله ل Procedure
__________________
GP Techno-Functional Consultant
humam غير متواجد حالياً   رد مع اقتباس
قديم 29-Apr-2012, 04:15 AM   #6
humam
مشرف منتدى المطورين
افتراضي Focus Trigger:

سوف نتناول هذا النوع بالتفصيل وسوف يكون استخدام باقي الانواع يحتمل نفس الطرق المستخدمة لتسجيل القادحات واستخدامها هذه القادحات سوف تستجيب لاحداث من النوع Focus event وهذه الاحدلث يمكن ان تقع على مستوى النموذج Form او النافذة Window او الحقول Fields والشكل التالي يوضح الكائنات والاحداث المختلفة التي يمكن استخدامها مع هذا النوع.

Registering focus triggers

قبل ان تتمكن من استخدام هذه القادحات عليك تسجيلها ضمن Runtime Engine وللقيام بذلك سوف نستخدم الدالة Trigger_RegisterFocus() ويجب ان تضع شفرة التسجيل تلك ضمن الااجراء startup procedure الان سوف نوضح هذه الدالة بشيء من التفصيل :
الصور المصغرة للصور المرفقة
اضغط على الصورة لعرض أكبر الاســـم:	img1.JPG‏ المشاهدات:	333 الحجـــم:	28.3 كيلوبايت الرقم:	455  
__________________
GP Techno-Functional Consultant
humam غير متواجد حالياً   رد مع اقتباس
قديم 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 غير متواجد حالياً   رد مع اقتباس
إضافة رد


يتصفح الموضوع حالياً : 1 (0 عضو و 1 ضيف)
 
أدوات الموضوع
انواع عرض الموضوع

ضوابط المشاركة
لا تستطيع إضافة مواضيع جديدة
لا تستطيع الرد على المواضيع
لا يمكنك اضافة مرفقات
لا يمكنك تعديل مشاركاتك

BB code متاحة
كود [IMG] متاحة
كود HTML معطلة

الانتقال السريع

المواضيع المتشابهه
الموضوع كاتب الموضوع المنتدى مشاركات آخر مشاركة
مساعده في Dexterity y85.fox مواضيع المطورين الأخرى 4 19-Jan-2015 02:31 PM
سؤال سريع بخصوص Triggers zakwithu منتدى أكواد ومواضيع الـ SQL Server 0 30-Sep-2013 10:47 AM
Dexterity هاني مواضيع المطورين الأخرى 22 18-May-2013 08:54 AM
Question related to Dexterity mkhatib مواضيع المطورين الأخرى 2 05-May-2012 09:29 AM
Text File in Dexterity humam مواضيع المطورين الأخرى 11 19-Jan-2012 07:47 PM


جميع الأوقات بتوقيت GMT +3. الساعة الآن 08:17 AM.


Powered by vBulletin® Version 3.8.3

الموقع والمنتدى من تطوير » شركة المنذر للاستضافة والتصميم

Copyright © 2000-2010 Jelsoft Enterprises Limited.
الموقع لا يمثل أي جهة رسمية بل هو جهد شخصي يرمي الى تجميع القدرات في برنامج جريت بلينز