بتاريخ: 15 فبراير 200422 سنة comment_1358 السلامُ عليكم نتيجه للقصور الكثير الذي يوجد في الـ 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 تقديم بلاغ
بتاريخ: 15 فبراير 200422 سنة comment_1365 كلمة شكراً لا تكفي للمجهود الرائع منكألف شكر أخوك Oracle تقديم بلاغ
بتاريخ: 15 فبراير 200422 سنة comment_1374 وعليكم السلام ماقصرت أخي خالد وجزاك الله خيرا على هذا المجهود الرائع وإلى الأمام ان شاء الله للرقي بالمنتدى تحياتي تقديم بلاغ
بتاريخ: 15 فبراير 200422 سنة comment_1375 السلام عليكم ., ماذا نقول امام هذا الابداع , لا يوجد كلام ؟؟؟جزاك الله خيرا . تقديم بلاغ
بتاريخ: 18 فبراير 200422 سنة comment_1617 كلمة شكراً لا تكفي للمجهود الرائع منكألف شكر أخوك Oracle كلمة شكراً لا تكفي للمجهود الرائع منكألف شكر تقديم بلاغ
بتاريخ: 19 فبراير 200422 سنة comment_1658 جزاكم الله خير الجزاء وربنا يجعله في ميزان حسناتك تقديم بلاغ
بتاريخ: 13 فبراير 200719 سنة comment_91640 شكرا على المجهود اخى ولكن اللينك مش شغال و وجود الفورم سوف يفيد كثيرا فى فهم الموضوع تقديم بلاغ
بتاريخ: 14 فبراير 200719 سنة comment_91733 السلام عليكم جزاك الله خيرا ً يا أخي و لكن الفورم غير موجودة أرجوا من سيادتكم التكرم برفعه ِ مرة أخري و السلام عليكم تقديم بلاغ
بتاريخ: 25 يوليو 200916 سنة comment_164425 يرجي من السادة الذين قاموا بتحميل الشاشة وضعها ثانية تقديم بلاغ
بتاريخ: 25 يوليو 200916 سنة comment_164450 الحمد لله والصلاه والسلام علي رسول الله صلي الله عليه وسلم اللهم ربنا يا اله كل شئ وخالق كل شئ لا تسالنا عن شئ واغفر لنا كل شئ انا واخي الكريم واخواننا وجميع المسلمين والمسلمات والمؤمنين والمؤمنات من اول الخلق الي يوم الدين وكل من له علينا حق واغتبناه او بهتناه او نلنا منه بما لا يرضيك واجعله له نورا يوم القيامه اللهم ربنا ما بيينا وبين جلالتك فاغفره لنا فانت الغفور الرحيم لا غفور غيرك وما بيننا وبين عبادك فتحمله عنا فانت الله الواحد القهار الديان الله امين وصلي اللهم علي سيدنا محمد وعلي اله وصحبه اجميعن ومن بتعه باحسان الي يوم الدين امين امين امين امين امينرجاء وضع الفورم لانه تم حذفه حتي تتم الاستفاده المثلي ولك مني جزيل الشكر والعرفان تقديم بلاغ
بتاريخ: 20 نوفمبر 201213 سنة comment_229308 رجاء وضع الفورم لانه تم حذفه ولك مني جزيل الشكر تقديم بلاغ
بتاريخ: 20 نوفمبر 201213 سنة comment_229315 رجاء وضع الفورم لانه تم حذفه وشكراً تم تعديل 20 نوفمبر 201213 سنة بواسطة az123 تقديم بلاغ
بتاريخ: 1 أغسطس 201312 سنة comment_238957 هل يتم كتابة اى كود على الزر لانه لا يفعل اى شئ وشكرا على المجهود الرائع تقديم بلاغ
انضم إلى المناقشة
يمكنك المشاركة الآن والتسجيل لاحقاً. إذا كان لديك حساب, سجل دخولك الآن لتقوم بالمشاركة من خلال حسابك.