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

بتاريخ:

كيف يمكنني تخزين المستخدم الذي قام بتعديل السجل وتاريخ التعديل
مع العلم انني عامل الصلاحيات عن طريق جدول في قاعدة البيانات فيه المستخدمين وكلمة السر
وبالتالي عايز عندما يقوم المستخدم بالحفظ يتم تسجيل اسمه وتاريخ التعديل علي نفس السجل

وذلك في صفحةjsf
معمول بال ADF
وانا اعمل علي
jdeveloper 11.2

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

بتاريخ:

السلام عليكم حبيبنا

اولا انت ببساطة تقوم تضيف عمودين الاول لتاريخ التعديل والتاني للمستخدم وتقوم تكتب كود في الزر بتاع الحفظ نفسو
مثلا افرض انك عندك bottun بتاع save ومثلا اعمدتك id , name , sal , وانت اضفت العمودين القلتهم ليك save_date , user_name

اكتب الكود دا

insert into my_table values (:id , :name , :sal ,to_char(sysdate,'dd-mm-yyyy hh24:mi:ss'),user)
commit


والله اعلم

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

شكرا يا استاذي علي الرد

انا فعليا عامل الحقول في الجدول
بس الكود الذي كتبته جملة sql
ولكن انا اريد عمل ذلك من خلال ال
ADF

بتاريخ:

بالنسبة لتخزين اسم المستخدم الذى قام بالتعديل

بعد عمل اللوجين قم بتخزين ال UserId فى ال BC session ثم فى ال Entity Impl فى ميثود الdoDML قوله لو حصل تعديل خللى ال ModifiedBY هو رقم المستخدم المتخزن عندك فى السيشن هكذا

protected void doDML(int operation, TransactionEvent e) {

	Number userid = (Number)getFromSession("UserId");
   		if(operation == DML_UPDATE){
		setModifiedBy(userid);	
	}
	super.doDML(operation, e);
}



بالنسبة لتاريخ التعديل

اجعل هذا ال History column) attribute )ومن track change History اختار modified on

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

شكرا جزيلا علي الرد
وهل يمكن ان توجد طريقة اخري غير ذلك من خلال backing
والكود الموجود علي الصفحة نفسها

بتاريخ:

المهدس هاله ممكن تشرح لي اش يعمل هذا الكود اذا سمحتي
protected void doDML(int operation, TransactionEvent e) {

Number userid = (Number)getFromSession("UserId");
if(operation == DML_UPDATE){
setModifiedBy(userid); setModifiedBy(userid);
}
super.doDML(operation, e);
}

وماذا تعمل

بتاريخ:

الاخ / samirtarek

بالطبع يمكن عمل ذلك من خلال backing bean ولكن بهذه الطريقه انت بتعمل Break MVC Pattern وده شىء غير مستحب عمله على الاطلاق المتغير ده بتحصل عليه كناتج لعملية الدخول اللى بتتهندل عن طريق ال Model Layer وبالتالى بيتم تخزينه هناك وبنضعه ك Default Value لقيمه attribute اخر فما الفائده من استدعائه الى ال view Layer عموما يوجد مكانين لتخزين ال user Data فى ال DB transaction session او فى http session. (والافضل تخزين بعض الداتا فى كلا ال two sessions فى حالة استخدامك لهم فى المكانين شوف المثال ده من هنا

الاخ/ majed

احنا هنا بنعمل override على DoDML اللى بيتم استدعائها automatically فى حالة insert, update و ال delete (ال framework بيستدعيها بدون اى تدخل منا ) وبنقوله فى حالة ال update خللى تم التعديل بواسطة هو رقم المستخدم اللى عامل لوجين والمتخزن عندك فى السيشن بس خللى بالك من ان ال DoDML بيتم استدعائها بعد ال validation اقره عنها فى oracle Docs من هنا

عموما انا ليه ملاحظه ودى ليست لسائلى الموضوع ولكن لاى حد بيبدا ADF جديد لانى شايفه ان اللى بيحصل الاتى واحد مثلا حيبنى مشروع بال DF فبدلا من اعطاء هذه التقنيه حقها فى الدراسه والفهم لبعض الوقت ثم البدأ فى التطبيق لا يشوف كام موضوع دراج ودروب من عند اوراكل على كام توتريال وبعدين يبدا يشتغل وده خاطىء تماما لازم تقرا ال Oracle Docs فى الاول واذا معندكش وقت ليها فعلى الاقل لازم تقرا وتفهم كويس جدا الDeveloper guide وخاصة اجزاء ال business components لان دى بتمثل ال infrastructure او الاساس اللى بتبنى عليه مشروعك كله وبالتالى تمكنك منها حيوفر عليك وقت كتير جدا بعد كده

ومثالا على موضوع التطبيق السريع ده كنت من كان يوم بشوف مشروع اتبنى منه اجزاء كتيره بالفعل وبعدين فوجئت ان فى ال model layer عاملين 11 ابليكيشن موديول وكلهم Root Application module وليس nested ل Parent app module معنى كده ان اليوزر الواحد حيعمل 11 connection الى الداتابيز لو عندك 10 يوزر متزامنين يبقى حتعمل 110 من ال connections الى الداتابيز ومفيش حل لتقليل عدد ال Connections الى الداتابيز غير اعادة التصميم لجعلهم nested App module ل parent واحد فقط

طبعا الغرض من الكلام ده اننا لازم نقرا ونفهم وبعد كده نطبق وليس العكس

  • بعد 10 شهور...
بتاريخ:

الاخت القديره
Hala Salem

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

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

  • بعد 4 أسابيع...
بتاريخ:

المهدس هاله ممكن تشرح لي اش يعمل هذا الكود اذا سمحتي
protected void doDML(int operation, TransactionEvent e) {

Number userid = (Number)getFromSession("UserId");
if(operation == DML_UPDATE){
setModifiedBy(userid); setModifiedBy(userid);
}
super.doDML(operation, e);
}

وماذا تعمل


Dear Majed

simply it is doDML (work for each record) method in Enitity Object to make pre insert or pre update

to assign values of user & date , and get user data from session scope i think

good luck
  • بعد 2 أسابيع...
بتاريخ:

سؤال هة بالنسبة للميثود اللى هترجعلى اليوزر getFromSession
الميثود دى هتبقى فى managed bean يعنى على ال view project
معنى كدة انى هضطر اضيف ال view controler project فى ال dependency بتاع ال model project
علشان ال model project يقدر يشوف الميثود دى
هل الكلام دة صح و لا لا؟
و هل دى طريقة جيدة؟
شكرا

بتاريخ:

Dear Tarek



no need, you can simpley access session from Entity Object and back beans using below example



ADFContext.getCurrent().getSessionScope().get("username")



thanks

بتاريخ:

Dear Tarek

no need, you can simpley access session from Entity Object and back beans using below example

ADFContext.getCurrent().getSessionScope().get("username")

thanks

ممتاز
معنى كدة انى هعمل التالي
1- هعمل ال managed bean بتاعتي فى ال session scope
2- مثلا ال managed bean هيكون فيها attribute اسمة username

بعد كدة فى ال DoDML() فى ال Entity Object


String loginUser =(String) ADFContext.getCurrent().getSessionScope().get("username);


تمام كدة؟؟؟

بتاريخ:

kindly, do managed bean scope what every you want, and assign value for session parameter using same senario like below




ADFContext.getCurrent().getSessionScope().put("username", getUsername().getValue().toString());



Good Luck

  • بعد 11 شهور...
بتاريخ:

اخي الكريم .. يقوم الـ ASF بالـ Mini auto Audit ... فقط يحتاج منك بعض الإعدادات ... راجع الروابط التاليه

 

How to use History columns in Oracle ADF for mini auditing

 

والربط التالي

 

Populating WHO Columns in Oracle ADF : Created by, Creation Date, Last Updated by, Last Updated on
  • بعد 2 أسابيع...
بتاريخ:

شكرا للاخ omdawebs ولكن هل الطريقة في الرابط كافية اني لو حبيت اضايف بيانات اخرى مثل اسم الجهاز المستخدم في التعديل او الاضافة او رقم سيشن الدخول 

بتاريخ:

تستطيع استخدام الدالة doDML لتنفيذ ما تريد

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

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

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

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

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

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.