بتاريخ: 19 مارس 200619 سنة comment_63540 السلام عليكمانا كاتب كود في key_exit trigger وهذا هو الكود ------------------------------------------if :system.form_status ='CHANGED' THENalert_number:=show_alert('exit_alert');if alert_number=alert_button1 then:system.message_level:=25;alert_number:=show_alert('save');if alert_number=alert_button1 thencommit_form;exit_form;elsif alert_number=alert_button2 thenexit_form(no_commit);else null;end if;end if;elsif :system.mode = 'ENTER-QUERY' then Set_Block_Property(:system.cursor_block,CURRENT_RECORD_ATTRIBUTE ,'default');exit_form;elseexit_form;end if;end ;وبختصار هذا الكود يفحص عند الخروج اذا عمل المستخدم اي تغييرات على الفورم يعطي alert ويساله اذا اراد التخزين وان لم يعمل اي تغيير يخرج من الفورم---------- في جدول اسمه user_events وفي هذا الجدول يتم تخزين كل شي عمله المستخدم من بحث وتعديل واضافةانا اردت ان اخزن وقت الخروج من الفورم في هذا الجدول وهذا هو الكود على key _exit trigger-------declarealert_number number;v_log_out_time varchar2(100);v_login_date varchar2(100);v_log_in_time varchar2(100);v_form_name varchar2(100);beginglobal_pkg.set_log_out_time(to_char(SYSDATE,'hh24:MI:ss')); v_log_out_time:=global_pkg.get_log_out_time;v_login_date:=global_pkg.get_login_date;v_log_in_time :=global_pkg.get_log_in_time;v_form_name :=global_pkg.get_form_name;update user_events set log_out_time =v_log_out_timewhere user_name=:global.user_name and login_date=v_login_date and log_in_time=v_log_in_time and form_name=v_form_name;commit_form;الان المشكلة اذا المستخدم عمل تغيير و وكبس خروج تلقائيا ينفذ ال commit الثانية ويخزن ولا يسال المستخدم ان اراد التخزينبمعنى اخر وين برايكم مناسب وضع الكود الثاني لتخزين وقت الخروج في الجدول ملاحظة انا وضعت الكود لتعم الفائدة وشكرا تقديم بلاغ
بتاريخ: 20 مارس 200619 سنة كاتب الموضوع comment_63628 وين الشبيحة والاراكلجيةما حد عارف يعلق اي تعليقمع خالص تحياتي تقديم بلاغ
بتاريخ: 20 مارس 200619 سنة comment_63645 الاخ الكريمضع التاليفهذه الطريقة تفحص اذا نعم يقوم بالتخزين والاى يقوم بعمل rollbackاستخدم التريجر التاليWHEN-WINDOW-CLOSED if :system.form_status ='CHANGED' THEN alert_number:=show_alert('exit_alert'); if alert_number=alert_button1 then :system.message_level:=25; alert_number:=show_alert('save'); if alert_number=alert_button1 then commit_form; exit_form; elsif alert_number=alert_button2 then exit_form(no_commit); else null; end if; end if; elsif :system.mode = 'ENTER-QUERY' then Set_Block_Property(:system.cursor_block,CURRENT_RECORD_ATTRIBUTE ,'default'); exit_form; else exit_form; end if; end; استخدم هذا الكود في التريجر post-updateعلى مستوى الفورم declare alert_number number; v_log_out_time varchar2(100); v_login_date varchar2(100); v_log_in_time varchar2(100); v_form_name varchar2(100); begin global_pkg.set_log_out_time(to_char(SYSDATE,'hh24:MI:ss')); v_log_out_time:=global_pkg.get_log_out_time; v_login_date:=global_pkg.get_login_date; v_log_in_time :=global_pkg.get_log_in_time; v_form_name :=global_pkg.get_form_name; update user_events set log_out_time =v_log_out_time where user_name=:global.user_name and login_date=v_login_date and log_in_time=v_log_in_time and form_name=v_form_name; COMMIT; EXCEPTION when others then DECLARE server_err NUMBER := abs(DBMS_ERROR_CODE); server_msg VARCHAR2(2000) := DBMS_ERROR_TEXT; BEGIN rollback; message('Error during insert: '||to_char(server_err) ||'-'||server_msg); END; تم تعديل 20 مارس 200619 سنة بواسطة Admin05 تقديم بلاغ
انضم إلى المناقشة
يمكنك المشاركة الآن والتسجيل لاحقاً. إذا كان لديك حساب, سجل دخولك الآن لتقوم بالمشاركة من خلال حسابك.