khaled بتاريخ: 15 فبراير 2004 تقديم بلاغ مشاركة بتاريخ: 15 فبراير 2004 السلامُ عليكم نتيجه للقصور الكثير الذي يوجد في الـ developer يتوجب احياناً على المبرمج ان يقوم بعمل ما يحتاجه بنفسه .لا شك انه في بعض الاحيان يكون لديك Tabular block يحوي المئات او الالاف من السجلات , وعملية البحث عن معلومه معينه يكون من الصعب الحصول عليها خاصة عندما تكن البيانات غير مرتبه .لذلك قمت بعمل كود برمجي عام يمكن ان نقوم بوضعه في الـobject libarary ومن ثم نستخدمه مع اي Form نستطيع من خلاله استبدال الـPrompet التابع لكل حقل في الـ Tabular block الى زر يمكن ان نستخدمه في عملية الترتيب .وإليكم الخطوات :1-نقوم بعمل Control Block ونضع به عدد كبير من الازرار وليكن عدد 65 زر حسب اكبر عدد متوقع من الحقول ممكن ان يكون موجود في الـtabular block ولتكن تسميت الازرار B1 ,B2 ........B652- نعمل package يحوي عدد 2 procedures الاول لعمل ترتيب للازرار ووضعها بدلام من الـ Prompets والثاني لعمل ترتيب عندما نضغط على اي زر .وهذا كود الـ package specification. PACKAGE Sort_pkg IS PROCEDURE Arrange_buttons (p_Block_name VARCHAR2); PROCEDURE Sort_Block (p_Column_Name VARCHAR2 , p_Block_Name VARCHAR2 := NULL); END; كود الـ package body PACKAGE BODY SORT_PKG IS g_Block_Name VARCHAR2(200); g_Last_Block_Name VARCHAR2(200); g_Last_Column_Name VARCHAR2(200); FUNCTION Is_Item_Sortable(p_Item VARCHAR2) RETURN NUMBER IS l_ret_val NUMBER := -1; l_is_visible varchar2(30); l_calc_mode varchar2(30); l_column_name varchar2(200); l_is_database_item varchar2(30); BEGIN if p_item is null then return (-1); end if; l_column_name:=Get_item_property(P_item,column_name); l_is_visible := get_item_property(p_item, VISIBLE); -- l_is_database_item := get_item_property(p_item, DATABASEITEM); IF l_is_visible = 'TRUE' and l_column_name is not null -- and l_is_database_item = property_true -- and l_calc_mode is none THEN l_ret_val := 1; -- means sortable ELSIF l_is_visible='TRUE' AND l_column_name is null then l_ret_val:=0; --calculated item button shud apper but disapled ELSE l_ret_val:=-1; END IF; RETURN l_ret_Val; exception when others then return (-1); END; PROCEDURE Arrange_buttons (p_Block_name VARCHAR2) IS Cur_item VARCHAR2(200):=p_Block_name || '.' || Get_block_property(p_Block_name,first_item); Lst_item VARCHAR2(200):=p_Block_name || '.' || Get_block_property(p_Block_name,last_item); Type Button_record is record ( X number, Y number, W number, L varchar2(200), c_name varchar2(200) ); B_rec Button_record; B_Name varchar2(200); I integer:=0; l_is_Sort boolean := TRUE; BEGIN g_Block_Name := p_Block_Name; -- go_item(Cur_item); Loop -- Cur_item:=:System.cursor_item; Exit when Cur_item IS NULL; IF Is_Item_Sortable(cur_item)=1 OR Is_Item_Sortable(cur_item)=0 THEN -- l_is_sort then i:=i+1; B_name:='B'||i; --Get The text item property B_rec.x:=Get_item_property(cur_item,x_pos); B_rec.y:=Get_item_property(cur_item,y_pos); B_rec.w:=Get_item_property(cur_item,width); B_rec.l:=Get_item_property(cur_item,PROMPT_TEXT ); B_rec.c_name:=Get_item_property(cur_item,column_name); --Set the button property Set_item_property(B_name,x_pos,B_rec.x); Set_item_property(B_name,y_pos,B_rec.y-15); Set_item_property(B_name,width,B_rec.w); Set_item_property(B_name,label, B_rec.L); Set_item_property(B_name,hint_text, B_rec.c_name); Set_item_property(B_name,visible, PROPERTY_TRUE); Set_item_property(B_name,enabled, PROPERTY_TRUE); set_item_property(cur_item, PROMPT_TEXT, ' '); IF Is_Item_Sortable(cur_item)=0 THEN Set_item_property(B_name,enabled, PROPERTY_FALSE); END IF; END IF; cur_item := get_item_property(cur_item, NEXTITEM); EXIT WHEN cur_item is null; cur_item := p_block_name || '.' || cur_item; -- next_item; -- Exit when Cur_item = Lst_item; End loop; END; PROCEDURE Sort_block (p_Column_Name VARCHAR2 , p_Block_Name VARCHAR2 := NULL) IS -- Cur_item VARCHAR2(200):=p_Block_Name || '.' ||get_item_property(:system.cursor_item,hint_text); order_by_list varchar2(200) := p_Column_Name; l_Block_Name VARCHAR2(200) := p_Block_Name; BEGIN --msg (Cur_item); if l_block_name is null then l_block_name := g_Block_Name; end if; if l_block_name is null then message('block name is not set, please call arrange_buttons first'); raise form_trigger_failure; end if; IF g_Last_Block_Name = l_Block_Name THEN if g_last_Column_Name is not null then order_by_list := order_by_list || ', ' || g_last_column_name; end if; ELSE g_Last_Column_Name := NULL; END IF; -- set_block_property(p_Block_Name,order_by, get_item_property(:system.cursor_item,hint_text)); set_block_property(l_Block_Name,order_by, order_by_list); g_last_block_name := l_block_name; g_last_column_name := p_column_name; go_block(l_Block_Name); if form_success then execute_query; -- go_item(Cur_item); go_item(l_block_name || '.' || p_column_name); end if; END; END; 3- الان نحتاج الى ان نحدد الـtabular block الذي نحتاج ان نستبدل الـprompet الخاص به الى ازرار وتكن كالاتي في الـ Trigger المسمى When-new-form-instanceالخاص بالـForm اعمل sort_pkg.arrange_buttons('emp'); حيث ان emp هو اسم الـTabular block الذي نريد ان نعمل له ترتيبالان نفذ الـForm ثم لاحظ انك تستطيع ان ترتب البيانات الموجوده في الـ block بمجرد الضغط على الزر .ملاحظه :الـobject مصمم بحيث ان يمكن ان يعمل مع اي فورم وذلك بوضعه في object libarary ومن ثم استخدامه مع اي فورم وهنا تكمن فائده الـGeneric coding.فكل ما عليك فقط هو ان تضع الـpackage والـ control block الموجود به الازرار في object group ومن ثم تضع الـ object group في object libaray .وهذا هو Form جاهز يحوي الـblock والـ package Sort.fmb اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
Guest عادل الشهري بتاريخ: 15 فبراير 2004 تقديم بلاغ مشاركة بتاريخ: 15 فبراير 2004 كلمة شكراً لا تكفي للمجهود الرائع منكألف شكر أخوك Oracle اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
msh بتاريخ: 15 فبراير 2004 تقديم بلاغ مشاركة بتاريخ: 15 فبراير 2004 وعليكم السلام ماقصرت أخي خالد وجزاك الله خيرا على هذا المجهود الرائع وإلى الأمام ان شاء الله للرقي بالمنتدى تحياتي اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
Amgad بتاريخ: 15 فبراير 2004 تقديم بلاغ مشاركة بتاريخ: 15 فبراير 2004 السلام عليكم ., ماذا نقول امام هذا الابداع , لا يوجد كلام ؟؟؟جزاك الله خيرا . اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
arab20002000 بتاريخ: 16 فبراير 2004 تقديم بلاغ مشاركة بتاريخ: 16 فبراير 2004 الف الف شكر على الدرس اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
TAREK ALHAMAD بتاريخ: 16 فبراير 2004 تقديم بلاغ مشاركة بتاريخ: 16 فبراير 2004 كلمة شكر قليله عليك يا خالد أنت رائع جدا اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
made of oracle بتاريخ: 18 فبراير 2004 تقديم بلاغ مشاركة بتاريخ: 18 فبراير 2004 كلمة شكراً لا تكفي للمجهود الرائع منكألف شكر أخوك Oracle كلمة شكراً لا تكفي للمجهود الرائع منكألف شكر اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
moh بتاريخ: 19 فبراير 2004 تقديم بلاغ مشاركة بتاريخ: 19 فبراير 2004 جزاكم الله خير الجزاء وربنا يجعله في ميزان حسناتك اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
galo بتاريخ: 13 فبراير 2007 تقديم بلاغ مشاركة بتاريخ: 13 فبراير 2007 مشكور اخي اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
amr_alzantoot بتاريخ: 13 فبراير 2007 تقديم بلاغ مشاركة بتاريخ: 13 فبراير 2007 شكرا على المجهود اخى ولكن اللينك مش شغال و وجود الفورم سوف يفيد كثيرا فى فهم الموضوع اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
hamadaforever بتاريخ: 14 فبراير 2007 تقديم بلاغ مشاركة بتاريخ: 14 فبراير 2007 السلام عليكم جزاك الله خيرا ً يا أخي و لكن الفورم غير موجودة أرجوا من سيادتكم التكرم برفعه ِ مرة أخري و السلام عليكم اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
kzaghloul بتاريخ: 10 يوليو 2007 تقديم بلاغ مشاركة بتاريخ: 10 يوليو 2007 مشكور جداً وأرجو إرفاق الفورم تحياتي لك اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
mageed_ahmed بتاريخ: 25 يوليو 2009 تقديم بلاغ مشاركة بتاريخ: 25 يوليو 2009 يرجي من السادة الذين قاموا بتحميل الشاشة وضعها ثانية اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
diya_almuzaffar بتاريخ: 25 يوليو 2009 تقديم بلاغ مشاركة بتاريخ: 25 يوليو 2009 السلام عليكممشكور على الجهد الرائع اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
sho_7222 بتاريخ: 25 يوليو 2009 تقديم بلاغ مشاركة بتاريخ: 25 يوليو 2009 الحمد لله والصلاه والسلام علي رسول الله صلي الله عليه وسلم اللهم ربنا يا اله كل شئ وخالق كل شئ لا تسالنا عن شئ واغفر لنا كل شئ انا واخي الكريم واخواننا وجميع المسلمين والمسلمات والمؤمنين والمؤمنات من اول الخلق الي يوم الدين وكل من له علينا حق واغتبناه او بهتناه او نلنا منه بما لا يرضيك واجعله له نورا يوم القيامه اللهم ربنا ما بيينا وبين جلالتك فاغفره لنا فانت الغفور الرحيم لا غفور غيرك وما بيننا وبين عبادك فتحمله عنا فانت الله الواحد القهار الديان الله امين وصلي اللهم علي سيدنا محمد وعلي اله وصحبه اجميعن ومن بتعه باحسان الي يوم الدين امين امين امين امين امينرجاء وضع الفورم لانه تم حذفه حتي تتم الاستفاده المثلي ولك مني جزيل الشكر والعرفان اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
db21 بتاريخ: 20 نوفمبر 2012 تقديم بلاغ مشاركة بتاريخ: 20 نوفمبر 2012 رجاء وضع الفورم لانه تم حذفه ولك مني جزيل الشكر اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
az123 بتاريخ: 20 نوفمبر 2012 تقديم بلاغ مشاركة بتاريخ: 20 نوفمبر 2012 (معدل) رجاء وضع الفورم لانه تم حذفه وشكراً تم تعديل 20 نوفمبر 2012 بواسطة az123 اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
wael.fadeel بتاريخ: 31 يوليو 2013 تقديم بلاغ مشاركة بتاريخ: 31 يوليو 2013 شكرا اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
mohamed.ramadan بتاريخ: 1 أغسطس 2013 تقديم بلاغ مشاركة بتاريخ: 1 أغسطس 2013 هل يتم كتابة اى كود على الزر لانه لا يفعل اى شئ وشكرا على المجهود الرائع اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
Recommended Posts
انضم إلى المناقشة
يمكنك المشاركة الآن والتسجيل لاحقاً. إذا كان لديك حساب, سجل دخولك الآن لتقوم بالمشاركة من خلال حسابك.