الانتقال إلى المحتوى
View in the app

A better way to browse. Learn more.

مجموعة مستخدمي أوراكل العربية

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

عمل تريجر لإظهار رسالة هل رتريد الحفظ أم لا لو حدث تغيرات على الفورم

Featured Replies

بتاريخ:

السلام عليكم ورحمة الله وبركاته

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

[size="5"]لان المستخدم كل يوم مطفشني يقول في مشكلة في البرنامج ( ونفس المشكلة ) وأريد أن أسكته ......
وأرجو المساعدة ...[/size] :P

ملاحظة:
هذا إذا قام بإضافة سجل ولم يقم بالحفظ أو الحذف عند الخروج بعطيني رسالة أم غير ذلك لا يعطيني رسالة
- استخدم Form 6i

تم تعديل بواسطة mustafagamiel
تم تعديل العنوان للدلالة على المضمون

بتاريخ:

اخي العزيز اضف alert وسميها save_alter وضع بها رسالة "هل تريد الحفظ ؟"
ثم ابني روتين بعنوان save_work وضع به الكود التالي :
PROCEDURE save_work IS

return_alter number;

begin
return_alter := show_alert('save_alter');

if return_alter = alert_button1 then

commit;

else
rollback;
end if;



END;

ثم في زر الخروج اكتب :
save_work;








حاسب نفسك قبل ان تحاسب

بتاريخ:
  • كاتب الموضوع

شكرا لأهتمامك
ملاحظة :
هذا إذا عمل إضافة أو حذف ولم يحفظ وخرج من البرنامج يعطيني رسالة , أم إذا لم يعمل أي إضافة سجل وخرج من البرنامج لا يعطيني الرسالة ويخرج من البرنامج

تم تعديل بواسطة mustafagamiel
حذف التعقيب كي يكون الرد واضح

بتاريخ:

اخي الكريم :الروتين التالي عندقيامك بالضغط علي زر خروج
تظهر لك رسالة "هل تريد الحفظ" اذا كنت تريد حفظ ما قمت به اضغط"ok" واذا لم تريد اضغط "no" الامر بسيط
PROCEDURE save_work IS

return_alter number;

begin
return_alter := show_alert('save_alter');

if return_alter = alert_button1 then

commit;
exit_form;
else
exit_form(no_commit,no_validate);
end if;
end;

بتاريخ:
  • كاتب الموضوع

[ولكن إذا ضغظ على الخروج و لم يقم بإي اجراء إضافة ولا حذف لا يعطيني رسالة بل يخرج مباشرة مثل برنامج الورد لما تضيف بيانات ولم تقم بحفظها وخرجت من البرنامج الورد يعطيك رسالة يسألك هل تريد حفظ البيانات أما اذا لم تقم بإي تغيرات يجرج دايركت بدون إظهار الرسالة ..
أرجو أنك فهمت قصدي وشكرا على الأهتمام

بتاريخ:

الاخ الكريم
ده الوضع الطبيعي للفورم لو إنت غيرت أي شيء وحاولت الخروج يستشعر التغيرات ويسألك هل تريد الحفظ أم لا


احتمال انت كاتب في زر الخروج

exit_form(no_commit);



ممكن تشيل الباراميتير بتاع no_commit
وتتركها فارغة أو تكتب كده

exit_form(ask_commit);



هل هذا ماتقصد

بتاريخ:

السلام عليكم.

إضافه بسيطه على الكود السابق.

أولاً: قم بعمل Alert وسميه SAVE_VALIDATION و إجعل نوعه STOP . ثم إجعل ال LABEL للثلاث أزرار Yes و NO و Cancel على التوالي.

ثانياً: قم بإضافة Program unit وسميه SAVE_ALERT . وإجعل نوعه Procedure وداخله أكتب الكود التالي:



PROCEDURE SAVE_ALERT IS
AL_ID ALERT;
AL_SHOW NUMBER;
BEGIN IF :SYSTEM.FORM_STATUS = 'CHANGED'
	THEN
 AL_ID := FIND_ALERT('SAVE_VALIDATION');
 IF ID_NULL (AL_ID)
 	THEN
 	MESSAGE('SAVE_VALIDATION alert doesn''t exist! Create it first. ');
 	RAISE Form_Trigger_Failure;
 ELSE
 AL_SHOW	:= SHOW_ALERT('SAVE_VALIDATION');
 IF AL_SHOW = ALERT_BUTTON1
 	THEN
 	COMMIT;
 	EXIT_FORM;
 ELSIF AL_SHOW = ALERT_BUTTON2
 	THEN
 	EXIT_FORM(NO_VALIDATE);
 ELSIF AL_SHOW = ALERT_BUTTON3
 	THEN
 	NULL;
 END IF;
 END IF;
 ELSE
 	NULL;
 	END IF;
 END;



ثالثاً: على مستوى الفورم هناك Trigger إسمه KEY-EXIT أضف بداخله الكود التالي:

SAVE_ALERT;

بتاريخ:
  • كاتب الموضوع

أنا عملت حسب المطلوب ولكن البرنامج لا يخرج اذا ضغط على زر خروج , ويوجد ملف مرفق وعملته كما طلبت وشكرا

save.zip

تم تعديل بواسطة mustafagamiel
حذف التعقيب كي تكون المشكلة واضحة

بتاريخ:

اجمل سلام من Sam To mustafa

بتاريخ:

عدل الكود ليصبح هكذا.

PROCEDURE SAVE_ALERT IS
AL_ID ALERT;
AL_SHOW NUMBER;
BEGIN IF :SYSTEM.FORM_STATUS = 'CHANGED'
THEN
AL_ID := FIND_ALERT('SAVE_VALIDATION');
IF ID_NULL (AL_ID)
THEN
MESSAGE('SAVE_VALIDATION alert doesn''t exist! Create it first. ');
RAISE Form_Trigger_Failure;
ELSE
AL_SHOW := SHOW_ALERT('SAVE_VALIDATION');
IF AL_SHOW = ALERT_BUTTON1
THEN
COMMIT;
EXIT_FORM;
ELSIF AL_SHOW = ALERT_BUTTON2
THEN
EXIT_FORM(NO_VALIDATE);
ELSIF AL_SHOW = ALERT_BUTTON3
THEN
NULL;
END IF;
END IF;
ELSE
EXIT_FORM;
END IF;
END;

بتاريخ:
  • كاتب الموضوع

شكرا جزيلاً للمساعدة , وشكرا خاص للمهندس weloooo فقد تم حلها بطرقتك ولكن بعض الإضافات البسيطة :

PROCEDURE SAVE_ALERT IS
AL_ID ALERT;
AL_SHOW NUMBER;
BEGIN IF :SYSTEM.FORM_STATUS = 'CHANGED' then 
AL_ID := FIND_ALERT('SAVE_VALIDATION');
IF ID_NULL (AL_ID)
THEN
MESSAGE('SAVE_VALIDATION alert doesn''t exist! Create it first. ');
RAISE Form_Trigger_Failure;
ELSE
AL_SHOW := SHOW_ALERT('SAVE_VALIDATION');
IF AL_SHOW = ALERT_BUTTON1
THEN

:SYSTEM.MESSAGE_LEVEL:=5;

COMMIT;

:SYSTEM.MESSAGE_LEVEL:=0;

EXIT_FORM;
ELSIF AL_SHOW = ALERT_BUTTON2
THEN
EXIT_FORM(NO_VALIDATE);
ELSIF AL_SHOW = ALERT_BUTTON3
THEN
NULL;
END IF;
END IF;
ELSE

EXIT_FORM;
END IF;

if ERROR_CODE ='40102' THEN

EXIT_FORM(NO_VALIDATE);


end if;

END;



تم ضبط المشاركة ليسهل قراتها

تم تعديل بواسطة mustafagamiel

بتاريخ:

الأخ مهاب الريح.

بالنسبه للكود من المستحسن إنك تشيل سطر الكود SYSTEM.MESSAGE_LEVEL أظن إنه ليس له داعي هنا والكود هايشتغل من غيره.

إضافه: طريقة كتابة الكود مباشرة داخل أي تريجر طريقه تؤثر سلبيا على الآداء والسرعه في الفورم، عشان كده أحسن طريقه هي كتابة الأكواد داخل PROGRAM UNITS ثم إستدعاء إسم ال PROGRAM UNIT داخل ال TRIGGER مثلما فعلنا في هذا المثال. وياريت يتم ال PROGRAM UNITS داخل PACKAGE ثم إستدعاء هذه ال PACKAGE أثناء عمل الفورم وده له تأثير إيجابي على الآداء لإن كما تعرفون كل ال PROGRAM UNITS داخل الPACKAGE يتم عمل COMPILE لها مره واحده فقط وذلك عند إستدعاءها أول مره، وبذلك نتجنب أن الفورمه تعمل COMPILE لكل الأكواد بداخلها عند إستدعائها كل مره مما يؤثر سلبا علي الPERFORMANCE وده بيعالج عيب إعتدنا عليه ( الأوراكل فورمز ثقيله) :P . فياريت العمل بهذه الطريقه على طول

انضم إلى المناقشة

يمكنك المشاركة الآن والتسجيل لاحقاً. إذا كان لديك حساب, سجل دخولك الآن لتقوم بالمشاركة من خلال حسابك.

زائر
أضف رد على هذا الموضوع...

برجاء الإنتباه

بإستخدامك للموقع فأنت تتعهد بالموافقة على هذه البنود: سياسة الخصوصية

Account

Navigation

البحث

إعداد إشعارات المتصفح الفورية

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.