بتاريخ: 14 فبراير 201214 سنة comment_220722 السلام عليكملقد عملت عملية بحث وتعمل بشكل سليملكن المشكلة هي أنه في حالة الخروج من الصفحة والعودة مجددا لها تظل نتيجة البحث قائمة ولا تنمسحفمالحل لهذه المشكلةوشكرا لكم تقديم بلاغ
بتاريخ: 15 فبراير 201214 سنة كاتب الموضوع comment_220788 الحمد لله وجدت الحل 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"; } تقديم بلاغ
بتاريخ: 15 فبراير 201214 سنة comment_220850 الاخ/ 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(); } } تقديم بلاغ
بتاريخ: 15 فبراير 201214 سنة comment_220857 الاخ/ a5hhk والاخت هالهصحيح أن ما ذكرتموه يعمل ولكن الأمور أبسط من ذلك في ADF ولا تحتاج إلى كتابة أي كود على الإطلاق حيث يمكن مسح نتيجة البحث في كل مرو نغادر في الصفحة عن طريق جعل الاحتفاظ بالبيانات في scope الـ page من خلال الـ Page definition وهذا يحتاج إلى تغيير قيمة واحدة فقط وبدون أي كود تقديم بلاغ
بتاريخ: 15 فبراير 201214 سنة comment_220858 اذا كنت تقصد TrackQueryPerformed فهى تقوم بمسح نتائج البحث فقط وليس معايير البحث تقديم بلاغ
بتاريخ: 16 فبراير 201214 سنة comment_220873 الأخت هالة:نعم معك حق أن هذه الخاصية تمسح نتيجة البحث فقط حيث أنه طبقاً للأخ السائل فقد طلب مسح النتيجة فقط ، أما إذا أحببت مسح معايير البحث فإن الـ query component يوفر دالة الـ reset بشكل جاهز يسمح بإعادة الاستخدام أكثر من مرة.ملحوظة هامة:الطريقة التي تستخدمينها في استدعاء الدوال من Application Module قديمة جداً حيث توجد بدلاً منها أكثر من طريقة بديلة للاستدعاء بدون عمل Client Interface وبدون وضع الدالة في page definition لأن هذه الطريقة تستهلك وقتاً في حين أن كافة الطرق الأخرى الأحدث وفرت طرق أكثر سهولة لذلك. أنصحك بقراءة المزيد عن Service Interface للتعرف على الطرق الأحدث تقديم بلاغ
بتاريخ: 16 فبراير 201214 سنة comment_220890 الاخ/ sd4itاولا:من المفترض انه عندما يستدعى المستخدم صفحة البحث يحدث reset لل query و لنتائج البحث معا ولا يقوم هو بنفسه بعمل reset ويمسح المعايير اللى كتبها سابقا2 ليس كل شىء يمكن عمله Declarative فى ال query فافرض مثلا ان المستخدم لا يغادر الصفحة من الاساس ولكن بيتم وضع ال Query فى pop up وعاوزين فى كل مره يتم فيها فتح ال pop up يتم عمل reset لل query ولنتائج البحث فلازم نعمل كود فى الfetch listener3 رغم انى مبحبش اكرر نقطه سبق مناقشتها الا ان الموضوع عمره ما كان الطريقه دى طويله والطريقه دى قصيره ولكن حسب ال usecase اللى عندنا بنختار افضل طريقه يمكن تنفيذها بها فرغم ان المثال السابق يمكن عمله باستدعاء ال data provider وال app module ومنه الميثود ( وهذه الطريقه ليست قصيره بالمناسبة) الا ان ال client interface مهمه جداً ولا يمكن الاستغناء عنها باى حال من الاحوال والا لكان من الأولى ان اوراكل نفسها تلغيها مع النسخ الحديثه من الجى ديف لوجود طرق بديلة ولكن من المعروف أن استهلاك ال Service method فى ال UI له حالات عديده وفى بعض تلك الحالات لا يوجد حل غير استخدام ال client interface فعلى سبيل المثال وليس الحصر لو عندك ميثود فى ال App module عاوز تستدعيها قبل صفحة معينه عندك فحتخرج الميثود دى فى ال client interface وتعملها drag قبل الصفحة ولا تنسى ايضا ان استخدام ال client interface لا يقتصر على app module فقط فنحن نستخدمها لاستدعاء ال methods من ال ViewobjectImpl وتنفيذها فى ال UI تقديم بلاغ
بتاريخ: 16 فبراير 201214 سنة comment_220891 الأخت هالة:اسمحي لي أن أصحح لك المعلومات.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معذرة معلوماتك خاطئة بالكامل وواضح في كلامك عدم معرفتك الصحيحة بالطرق الحديثة والحالات المختلفة ولذلك أكرر نصيحتي لك بالقراءة والتطبيق أكثر في هذه الجزئية تقديم بلاغ
بتاريخ: 16 فبراير 201214 سنة comment_220892 لم أقل ذلك حيث أنه لمسح النتائج فاستخدم TrackQueryPerformed ولمسح المعايير فاستخدم الدالة reset بحيث يمكن أن أفصل بين الاثنين في حالة احتجت عمل شئ واحد منهم فقط يعنى انت برضه حتستخدم كود وهو ده الكلام اللى انا قلته فى الاول الطريقة التي ذكرتها ليست declarative بل تعتمد على الكود طريقتك اللى ذكرتها هى انك حتخلى ال scope الخاص بال TrackQueryPerformed هو Page فاين الكود فى تلك الطريقه ؟ معذرة معلوماتك خاطئة بالكامل وواضح في كلامك عدم معرفتك الصحيحة بالطرق الحديثة بدلا من هذا الكلام العام اللى مفهمتش منه حاجة ياريت ترد بالتفصيل على نقطتى الثالثه وتقولى ما هو الخطأ خصوصا انى ذكرت الطريقه اللى بتقول عليها حديثة اما بالنسبة للنصيحة فشكرا عليها رغم عدم احتياجى لها لان طبعا كل مبرمج خاصة فى ال ADF بيطور نفسه باستمرار خاصة مع التحديثات الكبيره اللى بتحدث فى هذه التقنية تقديم بلاغ
بتاريخ: 16 فبراير 201214 سنة comment_220893 الأخت هالة:بالنسبة بالنقطة الأولى والثانية فدعيني أوضح مرة ثانية.في حالة احتجت فقط مسح نتيجة البحث (كما طلب الأخ السائل) فيكفيني استخدام TrackQueryPerformed وبدون كتابة كود ، أما إذا احتجت بالإضافة إلى ذلك عمل مسح لمعايير البحث فيمكن استخدام الدالة reset المتاحة في ADF وهنا نكتب كود ولكن ميزة الدالة reset أنها لا تتطلب تعريف الدالة في App Module ولا في page definition كما أنه يمكن عملها دالة عامة بحيث تكون عملية مسح المعايير عبارة عن سطر واحد فقط في الكود ، إذن أيهما أفضل:1. أن أقوم بعمل Java Code للـ App Module وأكتب فيه الكود ثم أقوم بتنفيذها في client interface ثم سحبها في الصفحة ثم كتابة كود في الـ bean2. أم اكتب سطر واحد في الـ 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 به العديد من التحديات التي تجعل المبرمج يبحث بشكل أكثر تعمقاً من المبرمج الذي يقوم ببناء أنظمة جديدة ، وهذه النصيحة موجهة لكافة المبرمجين تقديم بلاغ
بتاريخ: 28 فبراير 201214 سنة comment_221286 و الله هو الواحد بيستفاد جدا لما لتتناقشو انتو ال2 بالذات مع بعضبس مش عاوز الموضوع يحتد كده و انه يكون بشكل ودي اكترانا بصراحة بستفاد جدا من مناقشتكم انتو ال2 تقديم بلاغ
انضم إلى المناقشة
يمكنك المشاركة الآن والتسجيل لاحقاً. إذا كان لديك حساب, سجل دخولك الآن لتقوم بالمشاركة من خلال حسابك.