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

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

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

إضافة رد
 
أدوات الموضوع انواع عرض الموضوع
قديم 13-Nov-2011, 02:43 PM   #11
humam
مشرف منتدى المطورين
افتراضي

بناء القوائم في الجريت بلينز
هنا سوف نناقش كيف يتعامل برنامج الجريت بلينز مع القوائم وكيف يقوم بأنشاء تلك القوائم ان برنامج الجريت بلينز سوف يقوم بخزن القوائم الاافتراضية Default Menu في الجدول SY07110 او syMenuMstr . الان اذا قام المستخدم بعملية Customization على هذه القوائم الافتراضية فان هذه التعديلات سوف تخزن في الجدول SY07110 .
الان في كل مرة يقوم فيها المستخدم بعملية الولوج الى برنامج الجريت فان الجريت بلينز سوف يقوم بتشكيل القوائم الخاصة بهذا المستخدم والسبب في ذلك هو ان الصلاحيات المعطاة الى المستخدم قد تتغير الان توجد هناك طريقتين لبناء القوائم الاولى هي استخدام القوائم الافتراضية والتي تكون موجودة في Dictionary وتم بنائها بواسطة الكود وهذا السيناريو يحصل في حالة عدم وجود اي تغييرات على القوائم اما اذا كان المستخدم قد قام بعملية تعديل على القوائم (المقصود بالتعديل هنا ليست اضافة قوائم جديدة بل تغيير قوائم الجريت بلينز الاصلية ) فان الجريت بلينز في هذه الحالة سوف يضطر الى القيام بعملية بناء القوائم من الجدول SY07710 وهذه العملية ابطىء بكثير من العملية الاولى وقد تستغرق دقائق او اكثر وهذا امر في غاية الاهمية بالنسبة للمستخدمين لذا ينصح بعدم القيام بتعديلات على قوائم الجريت بلينز ما لم تكن هناك اسباب قاهرة وهنا اذكر ان الفهم النظري للموضوع يحمي المطورمن الوقوع في اخطاء البرمجية حيث حدثت عندنا حالة في مشروع سابق قامت الشركة بتطويره وهي ان المستخدمين يعانون من البطىء الشديد اثناء محاولة الدخول الى الجريت بلينز وطلبوا مني ايجاد السبب وبعد البحث في الوثائق وجدت السبب الذي ذكرته في اعلاه حيث اغفل المطور السابق وضع عبارة if then للتاكد من الطريقة التي يستخدمها الجريت بلينز لتكوين القوائم فأدى هذا الى البطئ في محاولة الولوج الى الجريت بلينز وسوف اوضح موقع هذه العبارة في الجزء التالي من الشفرة البرمجية لان الشفرات التي وضحت لحد الان لم تصل الى تكوين القوائم بل كانت مجرد فتح واغلاق النماذج الاوامر او Command.

اضافة الى ما ذكرت سابقا من طرق تكوين القوائم الخاصة بالجريت بلينز سوف نعود الى القوائم الخاصة بمشروعنا الذي نطوره وهنا اذكر ان Integration Dictionary (وهو Dictionary الذي سوف يضاف الى مجلد الجريت بلينز عند تفعيل Chunk File والذي يحتوي على القاموس بصورته المضغوطة سوف ياخذ هذا Dictionary مكانه مع باقي Dictionaries الاخرى في هذا المجلد)والذي يحتوي على Item Menus يجب ان يحتوي على SanScript Code تمثل بناء القوائم الخاصة بالمشروع الجديد وهنا سوف يحدث نفس السيناريو اي ان الجريت بلينز سوف يقوم ببناء القوائم التي تخص المشروع الجديد في كل مرة يحاول فيها المستخدم الولوج الى الجريت بلينز
طبعا في المرة الاولى التي يقوم المستخدم بتشغيل البرنامج بعد تنصيب Chunk file سوف تكون هناك عملية بطئ والسبب في ذلك هو ان الجريت بلينز سوف يقوم بخزن القوائم الجديدة من Integration Dictionary الى الجدول SY07710 وهذا سوف يحصل لمرة واحدة فقط .

الان سوف نعود لننظر الى تكوين القوائم بصورة متكاملة اي قوائم الجريت بلينز وقوائم المشروع الجديد وهنا توجد طريقتين:

•في حالة كون المستخدم قد غير قوائم الجريت بلينز الاصلية سوف يعمل الجريت بلينز على تكوين القوائم الخاصة بالجريت بلينز وقوائم المشروع الجديد باستخدام الجدول SY07710

•في حالة عدم وجود اي عملية تعديل قوائم الجريت بلينز سوف يعمل البرنامج على تكوين القوائم بالطريقة التالية بالنسبة الى قوائم الجريت بلينز سوف يستخدم الكود الموجودة في Dynamic.Dic (وهو القاموس الرئيسي) لبناء القوائم اما بالنسبة لقوائم المشروع الذي تضيفة فسوف يتم تكوينها من الكود الموجودة ضمن Integration Dictionary وهذه الطريقة تعمل بشكل اسرع من الطريقة الاولى.
__________________
GP Techno-Functional Consultant

آخر تعديل بواسطة humam ، 13-Nov-2007 الساعة 03:33 PM.
humam غير متواجد حالياً   رد مع اقتباس
قديم 13-Nov-2011, 02:52 PM   #12
humam
مشرف منتدى المطورين
افتراضي

تركيب القوائم في الجريت بلينز
لكي تكون قادر على اضافة قوائم جديدة تخص المشروع الذي تطوره عليك فهم تركيب القوائم في الجريت بلينز والذي توضحه وثائق الدكسترتي كما يلي:لاحظ الصور المرفقة


توضح وثائق الدكسترتي انه من الممكن اضافة اوامر جديدة الى الاجزاء التالية فقط :

• Tools submenus for Setup, Utilities, and Routines
• Transactions
• Inquiry
• Reports
• Cards
الصور المصغرة للصور المرفقة
اضغط على الصورة لعرض أكبر الاســـم:	Fig11.JPG‏ المشاهدات:	530 الحجـــم:	93.9 كيلوبايت الرقم:	263   اضغط على الصورة لعرض أكبر الاســـم:	Fig12.JPG‏ المشاهدات:	571 الحجـــم:	72.9 كيلوبايت الرقم:	264  
__________________
GP Techno-Functional Consultant
humam غير متواجد حالياً   رد مع اقتباس
قديم 13-Nov-2011, 02:57 PM   #14
humam
مشرف منتدى المطورين
افتراضي

شكرا جزيلا اخي عثمان جزاك الله عني خيرا
__________________
GP Techno-Functional Consultant

آخر تعديل بواسطة humam ، 13-Nov-2007 الساعة 03:56 PM.
humam غير متواجد حالياً   رد مع اقتباس
قديم 13-Nov-2011, 03:17 PM   #15
السيد سمارت ليست
عضو نشيط
 
تاريخ التسجيل: Jul 2007
الدولة: جدة - عند خزان الماء
المشاركات: 57
من مواضيعي  
افتراضي

موضوع خطير خطير جداً وأنا من أشد المعجبين بكتاباتك... ثابر وإلى الأمام...الموضوع يحتاج دراسة وقراءة متأنية .... ربنا يوفقك
السيد سمارت ليست غير متواجد حالياً   رد مع اقتباس
قديم 13-Nov-2011, 03:44 PM   #16
humam
مشرف منتدى المطورين
افتراضي

شكرا جزيلا اخي سمارت لست على هذا الاطراء بالمناسبة ظهرت وسيلة جديدة في GP10 اسمها List واصبحت تنافس السمارت لست امزح معك فقط يااخي ولكن فعلا ان List لها امكانيات جديدة وهي تتيح القيام بActions على الفقرات التي يحددها الزبون وانا حاليا في صدد فهم كيفية عمل هذا الجزء الجديدوكيفية القيام بعملية Customization عليه او اضافة List جديدة مع Action Pane ووجدت ان هذا الموضوع اعقد كثيرا من العمل مع قوائم الجريت بلينز هل جربت العمل مع هذا الجزء
__________________
GP Techno-Functional Consultant
humam غير متواجد حالياً   رد مع اقتباس
قديم 14-Nov-2011, 05:30 PM   #17
humam
مشرف منتدى المطورين
افتراضي

اضافة القوائم :

ان الدالة الاساسية المستخدمة لاضافة Commands الى القوائم هي

AddCommandToMenu

Syntax

AddCommandToMenu ParentDictID, ParentFormID, ParentCmdID, Sequence,
CmdDictID, CmdFormID, CmdID, CloneCmd, LoadMode;

Parameters

ParentDictID – The ID of the dictionary that contains the command list (menu or
submenu) to which the new command will be added. Use the constant DYNAMICS
to specify that you are adding items to the Microsoft Dynamics GP main dictionary.

ParentFormID – The resource ID of the command form that contains the definition of
the command list to which you are adding a command.

ParentCmdID – The resource ID of the command list to which you are adding a
command.

Sequence – An integer variable that can be used to specify the sequence of the item in
the command list. The value 0 specifies the command will be added to the end of
the list. The actual position of the command will be returned after the command is
added.

CmdDictID – The ID of the dictionary that contains the command you are adding.

CmdFormID – The resource ID of the command form that contains the definition of
the command you are adding.

CmdID – The resource ID of the command you are adding.

CloneCmd – A boolean parameter. The value true specifies that the command will be
added for all users, while the value false specifies that the command will be added
for only the current user.

LoadMode – An integer that specifies where the command will be added. The value
corresponds to one of the following constants

Constant Description
MENULOAD_TOTABLE The menu items are being added to the default menu setin the syMenuMstr table.

MENULOAD_TOMEMORY The menu items are being added directly to the menu set
Displayed in Microsoft Dynamics GP.
__________________
GP Techno-Functional Consultant
humam غير متواجد حالياً   رد مع اقتباس
قديم 14-Nov-2011, 05:32 PM   #18
humam
مشرف منتدى المطورين
افتراضي

للمزيد من المعلومات حول هذه الدالة يمكن ان تراجع وثائق الدكسترتي ولكن سوف احاول شرح هذه الدالة بقدر من التبسيط كما نلاحظ ان الدالة تحتوي على العديد من البرامتر يجب امرارها الى الدالة قبل ذلك عليك ان تحدد Form Name و Command List التي تريد اضافة الامر او القائمة الفرعية ولفعل ذلك استعن بالموضوع السابق والذي يحتوي على جدول يبين اسماء Form وCommand List لكل قوائم الجريت بلينز وعلى سبيل المثال وللتبسيط سوف احاول اضافة امر جديد الى قائمة Cards وتحت قسم المبيعات Sales لذا سوف استخدم اسم النموذج Command_Sales اما بالنسبة الى اسم الامر سوف يكون CL_Sales_Cards وهكذا مع باقي القوائم هذه هي الخطوة الاولى نعود الى الدالة نلاحظ ان المعامل الاول هو اسم Dictionary الاب وفي هذه الحالة سوف يكون DYNAMICS اما المعامل الثاني فهو Resource ID وكما وضحت في مقدمة موضوع تعلم الدكسترتي ان لكل مصدر سوف يكون له هناك معرف فريد يسمى Resource ID الان كيف نستطيع الحصول على هذا المعرف ؟ هناك بالطبع الدالة resourceid والتي تعيد قيمة هذا المعرف وهنا سوف نحتاج الى معرف النموذج الذي نريد اضافة الامر اليه وهو في هذه الحالة Command _Sales كما بينا سابقا

البرامتر التالي هو ايضا من نوع Resource ID وفي هذه المرة لل Command حيث ان Command يعتبر من المصادر لذا من البديهي ان
يكون له معرف ونستخدم نفس الدالة Resourceid لأستعادة هذه القيمة لل CL_Sales_Cards

البرامتر التالي هو Sequence وهنا وثائق الدكسترتي تقترح ان تقوم باضافة فقراتك الجديدة في نهاية القائمة وللقيام بذلك يجب اسناد القيمة صفر لهذا البرامترلفعل ذلك.
__________________
GP Techno-Functional Consultant
humam غير متواجد حالياً   رد مع اقتباس
قديم 14-Nov-2011, 05:35 PM   #19
humam
مشرف منتدى المطورين
افتراضي

البارامتر التالي هو Dictionary الذي تريد اضافة القوائم منه وهنا سوف تحتاج الى امرار قيمة المعرف لهذا Dictionary والذي سوف يكون بكل بساطة هو Integration Dictionary الذي تقوم بتطويره وهنا اود ان اوضح ان Dictionary سوف يكون عبارة عن حاوية للمصادر التي تقوم باضافتها من خلال مشروعك الجديد وكحال باقي المصادر يجب ان يكون هناك معرف لهذا Dictionary ولو ان هذا الكلام سوف ياخذنا بعيدا عن جوهر الموضوع لكن اجد من المفيد ذكره هنا لان الدالة السابقة سوف تحتاج الى هذه القيمة والا سوف لن تعمل عندما تقوم بتطوير مشروع جديد سواء كان عبارة عن Customization او Vertical Enhancement وقبل بدء العمل تقترح المايكروسوفت اعطاء معرف للDictionary الذي تطوره وتقترح تسجيل هذا المعرف عند المايكروسوفت اما السبب في ذلك انك لو استخدمت بالصدفة رقم معرف 414 فانك سوف تسبب فيما بعد كارثة من النوع المتوسط ؟ السبب في ذلك لو راجعت الملف Dynamics.Set سوف تجد ان هذا المعرف يشير الى مديول Human Resource وبتالي بمجرد تنصيب Chunk File الخاص بك وبعد استخلاص Integration Dictionary من Chunk File سوف تبدأ الكارثة الان اصبح هناك اكثر من Dictionary يمتلك نفس المعرف لذا يجب الانتباه عند اعطاء معرف للقاموس الجديد الذي تطوره وهنا قد يقترح احدهم قبل اعطاء رقم المعرف يجب على المطور فتح ملف Dynamics.Set واختيار رقم غير موجود بهذه القائمة هذا الحل يعتبر مقبول ولكن اذا نضرنا للموضوع من زاوية اخرى من المحتمل ان يكون Client الذي تطور المشروع لحسابه يمتلك مشروع من شركة تطوير اخرى وهنا سوف نعود الى نفس الاحتمالية اي وجود اكثر من Dictionary بنفس المعرف وفي الحقيقة ان معظم شركات التطوير لا تقوم بتسجيل المشاريع التي تصممها في المايكروسوفت والاسباب متعددة منها التكاليف المادية ومنها ان المايكروسوفت سوف تقوم بعملية فحص للمتج فأذا لم يكن مطابق للمواصفات قد يرفض وهكذا اذن ما هو الحل لكي يحمي المطور نفسه من الوقوع في هذه المشكلة عليه اولا ان يسال Client هل تمتلك مديول اضافي ام لا ومنه تأخذ رقم المعرف اذا كان موجود وتبقى على مسؤوليتك فحص Dynamics.Set وهنا عند فحص هذا الملف يجب ان تكون قد نصبت كل المكونات الاضافية للجريت بلينز.

بعد حل هذه الاشكالية اين سوف نقوم بوضع هذا المعرف ؟ تتم عملية اضافة المعرف في المرحلة الاخيرة اي عند تكوين Chunk File حيث احدى متطلبات تكوين Chunk File هي امرار المعرف الخاص ب Dictionary ولكن تذكر انك حددت رقم المعرف قبل البدء بالتصميم الان اثناء عملية التطوير قد تحتاج الى استخدام رقم المعرف كما في الدالة السابقة لذا هناك طريقتين لاضافة رقم المعرف الى Development Dictionary الاولى هي تكوين Constant وامرار القيمة له مثلا ISYS_PDC=8966 او تكوين Global Variable وامرار قيمة المعرف له DICID of global=9033 . قد يطرح احدهم تسأل لمذا لايمكن استخدام رقم المعرف بشكل مباشر؟ نعم يمكن ذلك وكما سوف افعل في الشفرة التالية لانها عبارة عن مثال بسيط ولكن في الواقع العملي قد تستخدم رقم المعرف في العشرات من الشفرات البرمجية وعندما تواجهك مشكلة في رقم المعرف سوف تضطر الى تغيير رقم المعرف وبدل من تغيير هذا الرقم في كل مكان وقد تنسى تغييره في بعض الشفرات وهذا يؤدي الى توليد Bugs فالطريقة السابقة تعطيك امكانية تغييره في مكان واحد وسوف ينعكس ذلك بشكل اوتوماتيكي في باقي الامكنة هسة الجماعة يكولون طولته وهي كصيره ولكن اجد ان الفهم النضري يقود الى النجاح العملي.
__________________
GP Techno-Functional Consultant
humam غير متواجد حالياً   رد مع اقتباس
قديم 14-Nov-2011, 05:41 PM   #20
humam
مشرف منتدى المطورين
افتراضي

نعود الى البارامتر التالي وهو رقم المعرف للنموذج الذي صممته انت ليكون Command Form وفي بداية الموضوع ذكرت Command Form.

البارمتر التالي هو رقم المعرف للCommand الذي صممته وتريد اضافته الى القوائم.

البارامتر التالي وهو من النوع Boolean ويجب ان يأخذ القيمة True لكي تظهر الفقرة لكل المستخدمين.

واخيرا واحد من اهم البارامتر هو Load Mode وهذا سوف يحدد الطريقة التي سوف تستخدمها لتكوين القوائم هل من الجدول SY07710 او من Dictionary وكما وضحت سابقا ان الطريقة الثانية اسرع بكثير الان كيف نقوم بأعداد هذه القيمة في الحقيقة ان الشفرة التي سوف تكتبها تمتلك برامترين من النوع Input اي سوف تمرر الى هذه الشفرة عند استدعائها واحد هذه البرامترات هي LoadMode والتي من خلال قيمتها سوف تعرف اي طريقة استخدم الجريت بلينز لتكوين القوائم هل من الجدول ام من Dictionary وبعد قراءة هذه القيمة سوف تمررها الى الدالة.

قبل توضيح الشفرة سوف اسرد بعض التفاصيل لكي تكون الشفرة واضحة كونت Command Form اسميته Command_My_IG وكونت فقرة او Command في هذا النموذج اسميته cmdCardMyLead وكتبت شفرة لاظهار هذا الامر في قائمة Cards>Sales وكذلك سوف يظهر في Area Page ل GP10 تحت قسم Sales لذا العناصر واضحة لاحظ الصورة المرفقة:
الصور المصغرة للصور المرفقة
اضغط على الصورة لعرض أكبر الاســـم:	Fig13.JPG‏ المشاهدات:	542 الحجـــم:	59.4 كيلوبايت الرقم:	270   اضغط على الصورة لعرض أكبر الاســـم:	Fig14.JPG‏ المشاهدات:	535 الحجـــم:	20.2 كيلوبايت الرقم:	271  
__________________
GP Techno-Functional Consultant
humam غير متواجد حالياً   رد مع اقتباس
إضافة رد


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

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

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

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

المواضيع المتشابهه
الموضوع كاتب الموضوع المنتدى مشاركات آخر مشاركة
قواعد تصميم الحسابات في جريت بلينز ahai الجزيئ المالي
(GL - AP - AR – BM - FA - AC ... ets.)
42 19-Jan-2015 07:39 PM
دورات تدريبية لبرنامج الجريت بلينز بالسعودية joomrd منتدى جريت بلينز العام 2 16-Oct-2014 10:58 PM
أنا بتوسع في شركتي وأريد معرفة كيفية شراء برنامج الجريت بلينز nicewise تعرف على جريت بلينز .... 4 13-Mar-2014 11:21 AM
قيَّم استخدامك لبرنامج جريت بلينز Monzer Osama منتدى جريت بلينز العام 0 11-Dec-2013 04:12 PM
اكواد اضافة القوائم لبرنامج الجريت بلينز humam مواضيع المطورين الأخرى 0 17-Apr-2012 12:26 PM


جميع الأوقات بتوقيت GMT +3. الساعة الآن 11:23 PM.


Powered by vBulletin® Version 3.8.3

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

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