بتاريخ: 14 أكتوبر 200916 سنة comment_172864 ممكن توضيح ازاي اقدر اهندل ال Business LOGIC في الميثود doDML() انا عملت ابليكشن بسيط علي scott لكن مش قادر اعمل override للميثود كل ما احاول استخدم EmpImpl emp= EmpImpl.getDefinitionObject(); emp.setEmpno(n);دايما خطأ في السطر ده EmpImpl emp= EmpImpl.getDefinitionObject(); وانا باستخدمها في حالة ( if(operation == DML_UPDATE) لو ممكن مثال عليها اكون شاكر جدا تم تعديل 14 أكتوبر 200916 سنة بواسطة xizoaziz تقديم بلاغ
بتاريخ: 15 أكتوبر 200916 سنة comment_172977 شوف يا محمد انا مش فاهمه سؤالك لكن اذا كان قصدك انك عاوز تعمل update او Delete أو حتى create لاى row فى الEntity فده عن طريق methods فى الApplication module class وفكرتها اولا انى بعمل method بحصل من خلالها على الkey الخاص بالrow وبعد كده اعمل Update للrow ده او حتى delete لو عاوز توضيح اكتر عن الطريقه دى ممكن اكتب لك مثال عنها اما اذا كان سؤالك انك عاوز لما تعمل create لاى Entity تدخل قيم default فدى بطريقة تانية وهى اننا بنعمل override على create method اللى موجوده فى EntityImpl class تم تعديل 15 أكتوبر 200916 سنة بواسطة Hala Salem تقديم بلاغ
بتاريخ: 15 أكتوبر 200916 سنة كاتب الموضوع comment_172998 اولا شكرا علي التفاعل ياهاله ثانيا حسب ما انا قرأت ان الميثود doDML بنعمل ليها override لو حبينا نعمل اي شيء لما اليوزر يعمل insert or update or delete في الحاله الي باتكلم عليها مثلا update لحقل معين انه مثلا يعمل update لحقل تاني وليكن في تابل تاني او نفس التابل او بدل ما يعمل حذف ل row اعمل update لفلاج ب 1 او اني انادي علي ميثود بتجيب maxid لل Empno فانا بحاول اعمل override للميثود دي بس مش عارف لانها دايما تدي ارور او ما تنفذش الي انا كاتبه فلو مكن مثال بسيط اكون ممتن جدا ثالثا: << وفكرتها اولا انى بعمل method بحصل من خلالها على الkey الخاص بالrow وبعد كده اعمل Update للrow ده او حتى delete لو عاوز توضيح اكتر عن الطريقه دى ممكن اكتب لك مثال >> لو مافيهاش غلاسه ياريت مثال عن دي بالمره واسف جدا اني تقلت عليكي بس انا محتاج لهم جدا جدا و الف الف شكر مره تانيه تقديم بلاغ
بتاريخ: 16 أكتوبر 200916 سنة comment_173046 شوف بالنسبة للحالة الاولى اللى هى 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 وجربها تقديم بلاغ
بتاريخ: 16 أكتوبر 200916 سنة comment_173050 اما بالنسبة للفكرة التانية فدى طويله شويه وممكن متحتجلهاش بس هى طريقه فعاله وحتفهم منها طريقة التعامل مع ال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 له فى الداتابيزملحوظةراجع الينك ده من هنا تقديم بلاغ
بتاريخ: 16 أكتوبر 200916 سنة كاتب الموضوع comment_173067 بصراحه مش عارف اشكرك ازاي الف الف شكر ياهاله انا جربت الطريقه الاولي واشتغلت معايا بس فيه ملاحظات بسيطه كده 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 الطريقه التانيه هاجربها وارد عليكي تاني ان شاء اللهوالف الف الف شكر علي التفاعل والمساعده تقديم بلاغ
بتاريخ: 18 أكتوبر 200916 سنة comment_173343 شوف يا محمد اولا بالنسبة لل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() فدى مبستخدمهاش وبصراحة اول مرة اعرفها تم تعديل 18 أكتوبر 200916 سنة بواسطة Hala Salem تقديم بلاغ
بتاريخ: 18 أكتوبر 200916 سنة كاتب الموضوع comment_173402 لو لا حظتي في الكود بتاعي اني غيرت فعلا HireDate وخليتها Hiredate setColumnName الي اقصده مش ان اسمها فعلا كده انا اقصد السيتر الخاصه بالكولم ده الي موجده في EmpImpl زي setEmpno(233); تقديم بلاغ
انضم إلى المناقشة
يمكنك المشاركة الآن والتسجيل لاحقاً. إذا كان لديك حساب, سجل دخولك الآن لتقوم بالمشاركة من خلال حسابك.