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

بتاريخ:

السلام عليكم
لقد عملت عملية بحث وتعمل بشكل سليم
لكن المشكلة هي أنه في حالة الخروج من الصفحة والعودة مجددا لها تظل نتيجة البحث قائمة ولا تنمسح

فمالحل لهذه المشكلة

وشكرا لكم

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

الحمد لله وجدت الحل
public static Object evaluateEL(String el) {
FacesContext facesContext = FacesContext.getCurrentInstance();
ELContext elContext = facesContext.getELContext();
ExpressionFactory expressionFactory =
facesContext.getApplication().getExpressionFactory();
ValueExpression exp =
expressionFactory.createValueExpression(elContext, el,
Object.class);

return exp.getValue(elContext);
}

public String cb1_action() {
// Add event code here...

DCBindingContainer dbc= (DCBindingContainer) BindingContext.getCurrent().getCurrentBindingsEntry();
dbc.findIteratorBinding("IteratorName").getViewObject().executeEmptyRowSet();
return "sn_back";
}

بتاريخ:

الاخ/ a5hhk

ما فهمته من سؤالك انك عاوز لما المستخدم يفتح صفحة البحث تانى بعد ما سابها يتم مسح كل معايير البحث اللى كتبها وكمان نتائجه يعنى تعمل reset لل ADF View criteria وكمان لنتائج البحث فى الجدول ولعمل ذلك يتم وضع method بتعمل reset فى ال backing bean الخاصة بالصفحة فى ال post construct وبالتالى عند استدعاء الصفحة من اى مكان يتم تنفيذ هذه الميثود ولا يتم وضعها على بوتون زى ما انت عامل وحلها كالاتى

اولا: قم بوضع هذه الميثود اللى بتعمل reset لل Criiteria وللجدول فى ال AppModuleImpl

public void resetCriteria() {
	ViewObjectImpl voImpl = getLocationsView1();
	ViewCriteria vc = voImpl.getViewCriteria("LocationsViewCriteria");
	vc.resetCriteria();
	voImpl.executeEmptyRowSet();
}



طبعا قم بتغيير اسم الفيو اوبجكت وال view criteria ليوافق اللى عندك وخرج الميثود دى فى ال client Interface وضعها فى ال page Definition

ثانيا: فى ال backing bean الخاصة بالصفحة قم باستدعاء الميثود اللى كتبناها كالاتى

@PostConstruct
public void OnLoad() {
	if (!AdfFacesContext.getCurrentInstance().isPostback()) {
		DCBindingContainer dcb = (DCBindingContainer)BindingContext.getCurrent().getCurrentBindingsEntry();
		dcb.getOperationBinding("resetCriteria").execute();
	}
}

بتاريخ:

الاخ/ a5hhk والاخت هاله
صحيح أن ما ذكرتموه يعمل ولكن الأمور أبسط من ذلك في ADF ولا تحتاج إلى كتابة أي كود على الإطلاق حيث يمكن مسح نتيجة البحث في كل مرو نغادر في الصفحة عن طريق جعل الاحتفاظ بالبيانات في scope الـ page من خلال الـ Page definition وهذا يحتاج إلى تغيير قيمة واحدة فقط وبدون أي كود

بتاريخ:

اذا كنت تقصد TrackQueryPerformed فهى تقوم بمسح نتائج البحث فقط وليس معايير البحث

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

شكرا لكما على هذا الشرح الرائع

بتاريخ:

الأخت هالة:
نعم معك حق أن هذه الخاصية تمسح نتيجة البحث فقط حيث أنه طبقاً للأخ السائل فقد طلب مسح النتيجة فقط ، أما إذا أحببت مسح معايير البحث فإن الـ query component يوفر دالة الـ reset بشكل جاهز يسمح بإعادة الاستخدام أكثر من مرة.

ملحوظة هامة:
الطريقة التي تستخدمينها في استدعاء الدوال من Application Module قديمة جداً حيث توجد بدلاً منها أكثر من طريقة بديلة للاستدعاء بدون عمل Client Interface وبدون وضع الدالة في page definition لأن هذه الطريقة تستهلك وقتاً في حين أن كافة الطرق الأخرى الأحدث وفرت طرق أكثر سهولة لذلك. أنصحك بقراءة المزيد عن Service Interface للتعرف على الطرق الأحدث

بتاريخ:

الاخ/ sd4it

اولا:من المفترض انه عندما يستدعى المستخدم صفحة البحث يحدث reset لل query و لنتائج البحث معا ولا يقوم هو بنفسه بعمل reset ويمسح المعايير اللى كتبها سابقا

2 ليس كل شىء يمكن عمله Declarative فى ال query فافرض مثلا ان المستخدم لا يغادر الصفحة من الاساس ولكن بيتم وضع ال Query فى pop up وعاوزين فى كل مره يتم فيها فتح ال pop up يتم عمل reset لل query ولنتائج البحث فلازم نعمل كود فى ال
fetch listener

3 رغم انى مبحبش اكرر نقطه سبق مناقشتها الا ان الموضوع عمره ما كان الطريقه دى طويله والطريقه دى قصيره ولكن حسب ال usecase اللى عندنا بنختار افضل طريقه يمكن تنفيذها بها فرغم ان المثال السابق يمكن عمله باستدعاء ال data provider وال app module ومنه الميثود ( وهذه الطريقه ليست قصيره بالمناسبة) الا ان ال client interface مهمه جداً ولا يمكن الاستغناء عنها باى حال من الاحوال والا لكان من الأولى ان اوراكل نفسها تلغيها مع النسخ الحديثه من الجى ديف لوجود طرق بديلة ولكن من المعروف أن استهلاك ال Service method فى ال UI له حالات عديده وفى بعض تلك الحالات لا يوجد حل غير استخدام ال client interface فعلى سبيل المثال وليس الحصر لو عندك ميثود فى ال App module عاوز تستدعيها قبل صفحة معينه عندك فحتخرج الميثود دى فى ال client interface وتعملها drag قبل الصفحة ولا تنسى ايضا ان استخدام ال client interface لا يقتصر على app module فقط فنحن نستخدمها لاستدعاء ال methods من ال ViewobjectImpl وتنفيذها فى ال UI

بتاريخ:

الأخت هالة:
اسمحي لي أن أصحح لك المعلومات.


1. من المفترض انه عندما يستدعى المستخدم صفحة البحث يحدث reset لل query و لنتائج البحث معا ولا يقوم هو بنفسه بعمل reset ويمسح المعايير اللى كتبها سابقا
لم أقل ذلك حيث أنه لمسح النتائج فاستخدم TrackQueryPerformed ولمسح المعايير فاستخدم الدالة reset بحيث يمكن أن أفصل بين الاثنين في حالة احتجت عمل شئ واحد منهم فقط

2 ليس كل شىء يمكن عمله Declarative فى ال query فافرض مثلا ان المستخدم لا يغادر الصفحة من الاساس ولكن بيتم وضع ال Query فى pop up وعاوزين فى كل مره يتم فيها فتح ال pop up يتم عمل reset لل query ولنتائج البحث فلازم نعمل كود فى ال fetch listener
الطريقة التي ذكرتها ليست declarative بل تعتمد على الكود وبالتالي استطيع استدعاء الكود في أي مكان أحتاجه

3 رغم انى مبحبش اكرر نقطه سبق مناقشتها الا ان الموضوع عمره ما كان الطريقه دى طويله والطريقه دى قصيره ولكن حسب ال usecase اللى عندنا بنختار افضل طريقه يمكن تنفيذها بها فرغم ان المثال السابق يمكن عمله باستدعاء ال data provider وال app module ومنه الميثود ( وهذه الطريقه ليست قصيره بالمناسبة) الا ان ال client interface مهمه جداً ولا يمكن الاستغناء عنها باى حال من الاحوال والا لكان من الأولى ان اوراكل نفسها تلغيها مع النسخ الحديثه من الجى ديف لوجود طرق بديلة ولكن من المعروف أن استهلاك ال Service method فى ال UI له حالات عديده وفى بعض تلك الحالات لا يوجد حل غير استخدام ال client interface فعلى سبيل المثال وليس الحصر لو عندك ميثود فى ال App module عاوز تستدعيها قبل صفحة معينه عندك فحتخرج الميثود دى فى ال client interface وتعملها drag قبل الصفحة ولا تنسى ايضا ان استخدام ال client interface لا يقتصر على app module فقط فنحن نستخدمها لاستدعاء ال methods من ال ViewobjectImpl وتنفيذها فى ال UI
معذرة معلوماتك خاطئة بالكامل وواضح في كلامك عدم معرفتك الصحيحة بالطرق الحديثة والحالات المختلفة ولذلك أكرر نصيحتي لك بالقراءة والتطبيق أكثر في هذه الجزئية

بتاريخ:
لم أقل ذلك حيث أنه لمسح النتائج فاستخدم TrackQueryPerformed ولمسح المعايير فاستخدم الدالة reset بحيث يمكن أن أفصل بين الاثنين في حالة احتجت عمل شئ واحد منهم فقط


يعنى انت برضه حتستخدم كود وهو ده الكلام اللى انا قلته فى الاول

الطريقة التي ذكرتها ليست declarative بل تعتمد على الكود


طريقتك اللى ذكرتها هى انك حتخلى ال scope الخاص بال TrackQueryPerformed هو Page فاين الكود فى تلك الطريقه ؟

معذرة معلوماتك خاطئة بالكامل وواضح في كلامك عدم معرفتك الصحيحة بالطرق الحديثة


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

الأخت هالة:
بالنسبة بالنقطة الأولى والثانية فدعيني أوضح مرة ثانية.
في حالة احتجت فقط مسح نتيجة البحث (كما طلب الأخ السائل) فيكفيني استخدام TrackQueryPerformed وبدون كتابة كود ، أما إذا احتجت بالإضافة إلى ذلك عمل مسح لمعايير البحث فيمكن استخدام الدالة reset المتاحة في ADF وهنا نكتب كود ولكن ميزة الدالة reset أنها لا تتطلب تعريف الدالة في App Module ولا في page definition كما أنه يمكن عملها دالة عامة بحيث تكون عملية مسح المعايير عبارة عن سطر واحد فقط في الكود ، إذن أيهما أفضل:
1. أن أقوم بعمل Java Code للـ App Module وأكتب فيه الكود ثم أقوم بتنفيذها في client interface ثم سحبها في الصفحة ثم كتابة كود في الـ bean
2. أم اكتب سطر واحد في الـ bean
لا خلاف أن الطريقة الثانية أفضل وأسرع

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

رغم انى مبحبش اكرر نقطه سبق مناقشتها الا ان الموضوع عمره ما كان الطريقه دى طويله والطريقه دى قصيره ولكن حسب ال usecase اللى عندنا بنختار افضل طريقه يمكن تنفيذها بها
هذا خطأ كبير لأننا في عصر السرعة فيجب أن يكون التنفيذ دائماً بأسرع الطرق ، ولو عملت في وظيفة Architect فستعرفين أن مهمة هذا الشخص الأساسية هي بناء الأدوات التي تجعل التنفيذ أسرع وأسهل كما أنه لو كان لديك 1000 (ألف) شاشة للتنفيذ (وهذا هو الرقم العادي الذي نقوم بتنفيذه) فستعرفين أهمية اختصار الوقت ، وكما سبق لي إيضاحه ، فيمكنني تنفيذ ما ذكرت في سطر واحد فقط ، إذن ما ذكرتيه ليس الطريقة الأفضل

فرغم ان المثال السابق يمكن عمله باستدعاء ال data provider وال app module ومنه الميثود ( وهذه الطريقه ليست قصيره بالمناسبة)
هذا غير صحيح لأن هذه العملية عبارة عن سطر واحد فقط ، هل يوجد ما هو أقصر من ذلك؟ لا يمكن

الا ان ال client interface مهمه جداً ولا يمكن الاستغناء عنها باى حال من الاحوال والا لكان من الأولى ان اوراكل نفسها تلغيها مع النسخ الحديثه من الجى ديف لوجود طرق بديلة
على العكس تماماً فإننا نستخدم الـ client interface في أضيق الحدود لأنه توجد طرق أخرى بديلة أسرع ، ووجود طرق بديلة لا يعني الحذف لأن وجود أكثر من طريقة يمثل قيمة تسويقية للتقنية عن طريق اكتسابها مرونة التنفيذ بعدة طرق

ولكن من المعروف أن استهلاك ال Service method فى ال UI له حالات عديده وفى بعض تلك الحالات لا يوجد حل غير استخدام ال client interface
هذا خطأ كبير لأنه لا توجد الحالة التي لا توجد أمامي غير طريقة الـ client interface في تنفيذها بل على العكس تماماً توجد حالات لا أستطيع فيها استخدام الـ client interface كما ساوضح لاحقاً ، وبالمناسبة يمكنني استخدام الـ bean أو الـ Page Listener أو الـ Controller أو Phase Listener أو Navigation Handler أو عن طريق تخصيص دوال الـ framework نفسه ، وكما ذكرت لك أنه يتضح عدم وضوح هذه النقاط لك ولذلك تظنين أن الـ client interface هو الطريقة الوحيدة للتنفيذ وهذا غير صحيح ، ومع الأسف هذه النقاط كبيرة جداً لفهم آليتها وأماكن عملها ولا يتسع المجال لشرحها تفصيلياً ولكن خذيها من أصحاب الخبرة أنها تستطيع تنفيذ المطلوب

فعلى سبيل المثال وليس الحصر لو عندك ميثود فى ال App module عاوز تستدعيها قبل صفحة معينه عندك فحتخرج الميثود دى فى ال client interface وتعملها drag قبل الصفحة ولا تنسى ايضا ان استخدام ال client interface لا يقتصر على app module فقط فنحن نستخدمها لاستدعاء ال methods من ال ViewobjectImpl وتنفيذها فى ال UI
هذا غير صحيح حيث وضحت في النقطة السابقة بعض من الطرق المختلفة لتنفيذ نفس هذا العمل ولكن دعيني أعطي لك حالة من الحالات التي نقابلها في التطوير خاصة أثناء التحويل من الفورم إلى ADF حيث يوجد في الفورم trigger باسم when-new-form-instance يتم تنفيذه عند فتح الشاشة وفيه يتم استدعاء stored procedure من قاعدة البيانات وبناء على القيمة التي ترجع منه فسيقوم بعمل إخفاء أو إظهار لعدد 15 حقل من الشاشة وعمل disable أو enable لعدد 20 حقل أخر (وهذا ليس بمبالغة في الأرقام ويمكنك سؤال مبرمجي الفورم خاصة في الشاشات الضخمة) ، فالمشكلة في وضع الكود في App Module أنه ليس لدي تحكم في أدوات بناء الشاشة نفسها (صحيح توجد طريقة ولكنها عقيمة جداً) ولذلك يصبح التنفيذ في App Module بمثابة المستحيل ، وهذا ما ذكرته في النقطة السابقة

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

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

و الله هو الواحد بيستفاد جدا لما لتتناقشو انتو ال2 بالذات مع بعض
بس مش عاوز الموضوع يحتد كده و انه يكون بشكل ودي اكتر
انا بصراحة بستفاد جدا من مناقشتكم انتو ال2

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

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

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

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

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

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.