الانتقال إلى المحتوى
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.

ما هو التريجر المقابل ل Post-Insert فى ال Adf

Featured Replies

بتاريخ:

السلام عليكم
عندى VO مبنى على EO خاص بتسجيل مصاريف الابناء فى المدارس
اليوزر المفروض يدخل المبلغ و يختار من القائمة العملة فيتم تحويل المبلغ دة للجنية المصرى

الفانكشن اللى بتحول المبلغ للمجنية المصرى موجودة اصلا فى الداتابيذ

عاوز اسجل المبلغ بالجنية المصرى دة بعد ما يحصل INSERT على الفيو و قبل ما يحصل COMMIT
هل فى حد عندة مثال عن حاجة ذى دى
او اى اقتراح ابدا فيها ازاى

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

السلام عليكم
بعد البحث وجدت ان الحل ممكن ان يكون فى overRide the doDML() ميثود اللي موجودة فى ال EO

   protected void doDML(int operation, TransactionEvent e) {
    super.doDML(operation, e);
   }



انا قريت ال document دى http://docs.oracle.com/cd/E12839_01/web.1111/b31974/appendix_formstriggers.htm

الوقتى انا اصلا عامل read only VO بسيطة جدا بسستدعى فيها الفانكشن اللى بترجع المبلغ بالجنية المصرى و هى فيها 2 parameters العملة و المبلغ المطلوب تحويلة للجنية

Select (_currency_id,_amount) from dual


و عامل طبعا ال bind variable بتاعتى

سؤالى الوقتى هو ازاى اقدر اعمل للفيو دى execute query من داخل الميثود doDml() بحيث ارجع النتيجة فى variable ??

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

السالم عليكم
وجدت الحل و أنشرة الان للاستفادة

هنفرض ان ال VO اللى بتستدعى فيها الفانكشن اللى بتحول العمله اسمها CurrencyRateVO
و ان ال Entity Object اللى بتسجل فيها المصاريف مثلا اسمها Expenses

لعمل المطلوب قم بالتالي:

  1. اذهب الى ال Expenses Entity و اضف View Accessor و هو CurrencyRateVO
  2. فى ال CurrencyRateVO اذهب الى Java و اضف View Row Impl باختيار " Generate ViewRow Class و اختار ايضا Include accessors
  3. ارجع مرة اخرى ل Expenses Entity object و اختار Java و اعمل Generate Entity object class
  4. افتح الكلاس الجديدة و اذهب الى الميثود protected void doDML(int operation, TransactionEvent e)
  5. و انقل التالي


   protected void doDML(int operation, TransactionEvent e) {
    if(operation==EntityImpl.DML_INSERT){
	    RowSet currencyView = this.getCurrencyRateAccess();
	    currencyView.setNamedWhereClauseParam("p_curr_id", 27);
	    currencyView.executeQuery();
	    CurrencyRateRowImpl first = (CurrencyRateRowImpl)currencyView.first();
	    this.setRate(first.getRate());
    }



الكود سهل جدا و مفهوم هو بيستدعى ال view و يعمل execute query و يرجع الناتج
فى الحقيقة ال VO فيها parameter واحد فقط و ليس 2 كما كنت كاتب فى السابق
يمكنك تعديل الكود حتى يعمل معك

بتاريخ:

وان كان قيمة البارمتر (

p_curr_id

) تأتى من قيمة أى Attribute فى Entity يمكنك وضعها مباشرة فى

View Accessor عن طريق عمل edit على viewAccessor ومن ثم ستجد اسم البارمتر ضع فى Value اسم

Attribute الموجود فى Entity مباشرة
وبالتالى لن تحتاج لكتابة

setNamedWhereClauseParam ولا

executeQuery

:)

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

اعتقد ان الكلام دة ممكن يكون صح لو فية association بين 2entities لكن الموضوع هنا مختلف انا فاكر انى جربت قبل كدة الحل دة و منفعش . جرب بين entity and read only view

بتاريخ:
   protected void doDML(int operation, TransactionEvent e) {
	if(operation==EntityImpl.DML_INSERT){
		RowSet currencyView = this.getCurrencyRateAccess();
		currencyView.setNamedWhereClauseParam("p_curr_id", 27);
		currencyView.executeQuery();
		CurrencyRateRowImpl first = (CurrencyRateRowImpl)currencyView.first();
		this.setRate(first.getRate());
	}





جزاكم الله خيرا
بس سؤال بسيط
هل فيه فرق بين EntityImpl.DML_INSERT و operation.DML_INSERT
بتاريخ:

لا فرق

بتاريخ:

شكرا يابشمهندس

بتاريخ:

هل ممكن نضيف Method فى Application Module وهى تنادى الفانكشن فى الداتا بيز .
ومن داخل Expenses Entity ننادى المثود الموجودة فى Application Module
بحيث نناديها من أى مكان من الأبلكيشن

بتاريخ:

هذا ممكن

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

وان كان قيمة البارمتر (

p_curr_id


) تأتى من قيمة أى Attribute فى Entity يمكنك وضعها مباشرة فى

View Accessor عن طريق عمل edit على viewAccessor ومن ثم ستجد اسم البارمتر ضع فى Value اسم


Attribute الموجود فى Entity مباشرة
وبالتالى لن تحتاج لكتابة

setNamedWhereClauseParam ولا


executeQuery

:)




كلامك صح
بعد البحث فى اقتراحك وجدت حل ابسط بكتثر
و هو انى اكتب فى ال transient Attribute
"<AccessorName>.first().<AttributeNameinChileVO>"
مثلا لو انا عندى خاصة بتفاصيل راتب موظف و عاوز اعرض فيها كمان مثلا تاريخ ميلاد الموظف اللى هو موجود اصلا فى ال Entity اللى اسمها Employees . بس هضيف لل EO بتاعت تفاصيل الراتب Accessor من ال Employee و اضيف بعد كدة transient Attribute و اكتب فية
EmployeesVOAccess.first().BirthDate

بتاريخ:

كلامك مظبوط جدا ياطارق بس لازم تكون متأكد ان

EmployeesVOAccess أو

EmployeesVOAccess

.

first لا يكون ب null يعنى الكود النهائى



if(EmployeesVOAccess != null && EmployeesVOAccess.first() != null)
{
return EmployeesVOAccess.first().BirthDate;
}
return null;

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

كلامك مظبوط جدا ياطارق بس لازم تكون متأكد ان

EmployeesVOAccess أو


EmployeesVOAccess


.


first لا يكون ب null يعنى الكود النهائى




if(EmployeesVOAccess != null && EmployeesVOAccess.first() != null)
{
return EmployeesVOAccess.first().BirthDate;
}
return null;




الله عليك
:)

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

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

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

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

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

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.