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

Dodml() Override In Bc

Featured Replies

بتاريخ:

ممكن توضيح ازاي اقدر اهندل ال Business LOGIC في الميثود doDML() انا عملت ابليكشن بسيط علي scott لكن مش قادر اعمل override للميثود كل ما احاول استخدم
EmpImpl emp= EmpImpl.getDefinitionObject();
emp.setEmpno(n);
دايما خطأ في السطر ده

EmpImpl emp= EmpImpl.getDefinitionObject();


وانا باستخدمها في حالة ( if(operation == DML_UPDATE)

لو ممكن مثال عليها اكون شاكر جدا

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

بتاريخ:

شوف يا محمد انا مش فاهمه سؤالك لكن اذا كان قصدك انك عاوز تعمل update او Delete أو حتى create لاى row فى الEntity فده عن طريق methods فى الApplication module class وفكرتها اولا انى بعمل method بحصل من خلالها على الkey الخاص بالrow وبعد كده اعمل Update للrow ده او حتى delete لو عاوز توضيح اكتر عن الطريقه دى ممكن اكتب لك مثال عنها اما اذا كان سؤالك انك عاوز لما تعمل create لاى Entity تدخل قيم default فدى بطريقة تانية وهى اننا بنعمل override على create method اللى موجوده فى EntityImpl class


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

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

اولا شكرا علي التفاعل ياهاله

ثانيا حسب ما انا قرأت ان الميثود doDML بنعمل ليها override لو حبينا نعمل اي شيء لما اليوزر يعمل insert or update or delete في الحاله الي باتكلم عليها مثلا update لحقل معين انه مثلا يعمل update لحقل تاني وليكن في تابل تاني او نفس التابل او بدل ما يعمل حذف ل row اعمل update لفلاج ب 1 او اني انادي علي ميثود بتجيب maxid لل Empno فانا بحاول اعمل override للميثود دي بس مش عارف لانها دايما تدي ارور او ما تنفذش الي انا كاتبه فلو مكن مثال بسيط اكون ممتن جدا

ثالثا: << وفكرتها اولا انى بعمل method بحصل من خلالها على الkey الخاص بالrow وبعد كده اعمل Update للrow ده او حتى delete لو عاوز توضيح اكتر عن الطريقه دى ممكن اكتب لك مثال >> لو مافيهاش غلاسه ياريت مثال عن دي بالمره واسف جدا اني تقلت عليكي بس انا محتاج لهم جدا جدا و الف الف شكر مره تانيه

بتاريخ:

شوف بالنسبة للحالة الاولى اللى هى DML_UPDATE ففكرتها ببساطة ان الuser لما يعمل update لاى Attribute (طبعا ده بيتم من خلال الصفحة ) اللى بيحصل ان فى Attribute تانى برضه بنعمله set أو update بقيمة جديدة

مثال

اذا اردنا مثلا ان الuser عندما يعدل (update ) لاى Attribute فى HR.Employees Entity يتم تعديل Hire_date الى تاريخ اليوم

الحل

حنعمل Application عادى فيه employees entity object وفى الEmployeesImpl.java (الكلاس الخاصة بالEntity of Employees ) حنكتب الmethod دى اللى هى override على ()prepareForDML

	protected void prepareForDML(int operation, TransactionEvent e) {
	super.prepareForDML(operation, e);
	
	if (operation == DML_UPDATE)
	
	  {
   
		setAttribute("HireDate",new oracle.jbo.domain.Date(new Timestamp(System.currentTimeMillis())));
}
}



ومتنساش تعمل import ل

 import oracle.jbo.domain.Date;
import java.sql.Timestamp;



واذا عملت viewobject مبنى على entity دى وعملت له drop على الصفحة حتلاقى اى تحديث فيه (فى اى حقل منه)حيعمل برضه تحديث لل hire_date الى تاريخ اليوم من دون اى تدخل من الuser وجربها

بتاريخ:

اما بالنسبة للفكرة التانية فدى طويله شويه وممكن متحتجلهاش بس هى طريقه فعاله وحتفهم منها طريقة التعامل مع الentity programmatically يعنى ازاى تضيف row او تحذفه او حتى تعدل فيه عن طريق الEntity نفسها وكل الmethod دى بنكتبها فى AppModuleImpl.java class

مثال

عاوزين مثلا نعمل update لDepartmentName لاى row فى hr.Departments

الحل

نعمل Application عادى فيه Entity الخاصة بالdepartments وبعد عملها بنخلى JDeveloper generate two classes بتوعها اللى هما
DepartmentsImpl.java و DepartmentsDefImpl وفى الِAppModuleImpl.java (الكلاس الخاصة بالApplication module

1- نكتب الmethod دى اللى بتساعدنا نلاقى اى row فى الentity عن طريق الId الخاص بالrow

	 private EntityImpl retrieveDeptbyId(long DeptId){					 
String Entityname="model.Departments";		   
  EntityDefImpl  DeptDef=EntityDefImpl.findDefObject("model.Departments");
	 Key Deptkey=new Key(new Object[]{DeptId});
	 return DeptDef.findByPrimaryKey(getDBTransaction(),Deptkey);
	 
	
 }



2- -اول ما بنحصل على الrow فى ايدينا عن طريق الId بتاعه اللى غالبا بيبقى الprimary key بيبقى من السهل اننا نعمل فيه Update او حتى Delete والmethod دى بتعمل update لل DepartmentName وطبعا بستخدم فيها الmethod الاولى عشان احدد اى row بالظبط وفى الاخر بعمل Commit the transaction

	 public void updateDeptName(long DeptId,String newDeptname){
   EntityImpl DepartmentsImpl=retrieveDeptbyId(DeptId);
	if ( DepartmentsImpl != null) {
	DepartmentsImpl.setAttribute("DepartmentName",newDeptname);
	try {
   // Commit the transaction
	getDBTransaction().commit();
}
catch (JboException ex) {
getDBTransaction().rollback();
throw ex;

}}}



3-حنعمل test للmethod دى فى الmain method داخل الApp module

		public static void main(String[] args) {
		String amDef = "model.AppModule";
		String config = "AppModuleLocal";
		ApplicationModule am =  Configuration.createRootApplicationModule(amDef,config);
		AppModuleImpl service=(AppModuleImpl)am;
		try {
		//  change the name of Departmentname where DeptId=1000
		service.updateDeptName(1000,"Financial");
		
	   
}
catch (JboException ex) {
System.out.println("ERROR: "+ex.getMessage());
}}



ولا تنسى انك تعمل import ل

import oracle.jbo.JboException;
import oracle.jbo.client.Configuration;



هنا سيتم عمل update للdepartmentName الى Financail طبعا للDeptId رقم 1000

واعمل run لكلاس الAppModuleImpl.java وجربها حتلاقى ان فعلا deptName تم عمل update له فى الداتابيز

ملحوظة
راجع الينك ده من هنا

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

بصراحه مش عارف اشكرك ازاي الف الف شكر ياهاله

انا جربت الطريقه الاولي واشتغلت معايا بس فيه ملاحظات بسيطه كده

setAttribute("HireDate",new oracle.jbo.domain.Date(new Timestamp(System.currentTimeMillis())));
الكود ده ما اشتغلش معايا كان بيدي ارور وبعد كده مكنش له اي تاثير علي عمود ال Hiredate استبدلته انا بال سطر ده واشتغل
setAttribute("Hiredate",new oracle.jbo.domain.Date(hdat()));
hdat() دي ميثود عملتها بتجيب current date واعمل له cust مع oracle.jbo.domain.Date

ايه الفرق بين اني استخدم setAttribute او اني استخدم setColumnName() في الEmpImpl مباشرة مع العلم ان الاتنين اشتغلو كويس معايا

ليه استخدمنا prepareForDML وما استخدمناش doDML

الطريقه التانيه هاجربها وارد عليكي تاني ان شاء الله

والف الف الف شكر علي التفاعل والمساعده

بتاريخ:

شوف يا محمد اولا بالنسبة للmethod الخاصة بال Timestamp

الكود ده ما اشتغلش معايا كان بيدي ارور وبعد كده مكنش له اي تاثير علي عمود ال Hiredate استبدلته انا بال سطر ده واشتغل
setAttribute("Hiredate",new oracle.jbo.domain.Date(hdat()));
hdat() دي ميثود عملتها بتجيب current date واعمل له cust مع oracle.jbo.domain.Date


الغلط مش فى الكود خالص ومالوش أى علاقة بالmethod اللى انت عملتها الmethod الاولى شغاله كويس وانا مجرباها الغلطة اللى عندك ان الجافا حساسة لحالة الاحرف عشان كده اسم الAttribute فى حالة hr schema كان HireDate اما المثال اللى انت عملته كان على Scott schema واسم الAttribute كان Hiredate عشان كده كان بيديك الERRORو مكنش له اي تاثير علي عمود ال Hiredate لانه شايف ان اسم الAttribute ده(HireDate )مش موجود والدليل على كده جرب الmethod الاولى واكتب Hiredate اذا كنت شغال على scott او HireDate اذا كنت شغال على Hr وحتلاقيها اشتغلت معاك والHireDate اتغير فعلا ولمعرفة اسم الAttribute بالظبط من ملف ال XML الخاص بالEntity

اما بالنسبة لsetColumnName() فدى مبستخدمهاش وبصراحة اول مرة اعرفها

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

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

لو لا حظتي في الكود بتاعي اني غيرت فعلا HireDate وخليتها Hiredate

setColumnName الي اقصده مش ان اسمها فعلا كده انا اقصد السيتر الخاصه بالكولم ده الي موجده في EmpImpl
زي setEmpno(233);

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

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

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

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

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

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.