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

مشكلة فى Dml_update

Featured Replies

بتاريخ:

السلام عليكم ورحمة الله وبركاته

 

عند عمود نوعه Transient    وعامل له validation Rule   فى ال Entity Empl   وكذلك بجيب قيمته من ال ViewEmpl  (postquery)  علشان عند فتح الصفحة يجيب قيمته وتظهر على الشاشة (اسم الموظف مثلا)  

ولا بد من عمل Validation Rule    داخل ال entityEmpl  وكذلك بحتاج هذا العمود فى ENtityEmpl

 المشكلة هى :-

عند عمل create insert   بيروح فى الاول  DML_UPDATE   علشان يعمل تعديل للسجل السابق  

ثم يذهب للسجل الجديد وينفذ  DML_INSERT

 

 

المشكلة الاخرى لو ذهبت لصفحة اخرى واجريت اى تعديل او سجل جديد بيذهب للشاشة السابقة وينفذ  DML_UPDATE

 

 

فما الحل ؟  لانها عملية خطيرة جدا؟؟؟

 

 

  • الردود 47
  • المشاهدات 4.4k
  • البداية
  • اخر رد

أكثر المشاركين في هذا الموضوع

الصور المنشورة

بتاريخ:

لم أفهم المشكلة والسيناريو

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

 

عند عمل create insert   ثم الضغط على زرار  commit  بيروح فى الاول  DML_UPDATE   علشان يعمل تعديل لسجل السابق  

ثم يذهب للسجل hgphgn الجديد وينفذ  DML_INSERT

 

بتاريخ:

هل تم تعديل على السجل السابق؟

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

نعم 

عندى عمود نوعه Transient    وعامل له validation Rule   فى ال Entity Empl   وكذلك بجيب قيمته من ال ViewEmpl  (postquery)  علشان عند فتح الصفحة يجيب قيمته وتظهر على الشاشة (اسم الموظف مثلا)  

ولا بد من عمل Validation Rule    داخل ال entityEmpl  

بتاريخ:

في الواقع أريد أن أصل إلى سبب تعديل سجل أخر

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

الصفحة Master Detais

الصفحة تفتح على سجل  

 

 

وفى ال ViewRowImpl  الخاص بال Details    بجيب قيمة حقلين  transient   كمايلى

 

    @Override  
    public ViewRowImpl createInstanceFromResultSet(QueryCollection queryCollection, ResultSet resultSet) {
            System.out.println("proc_b_no_exp_date_NNNNNNNNNNNNN");
            ViewRowImpl  row = super.createInstanceFromResultSet(queryCollection, resultSet);             
            if (row.getAttribute("AddId")!=null){
                System.out.println("proc_b_no_exp_date");
                  boolean result4=true;     
                       String PlSQLCode4 ="BEGIN\n" + 
                       "SELECT B_NO,EXP_DATE \n" + 
                       "INTO ?,?\n" + 
                       "FROM PRODUCT\n" + 
                       "WHERE PROD_ID=?;\n" + 
                       "END ;";          
                       CallableStatement stat4=null;                                         
                                       try {          
                     stat4=getDBTransaction().createCallableStatement(PlSQLCode4,getDBTransaction().DEFAULT);
                     System.out.println("row.getAttribute(ProdId)"+row.getAttribute("ProdId"));                 
                     stat4.registerOutParameter(1, Types.VARCHAR);
                     stat4.registerOutParameter(2, Types.DATE);
                     stat4.setObject(3, row.getAttribute("ProdId"));                                                     
                     result4=stat4.execute(); 
                     row.setAttribute("B_NO",(stat4.getString(1))) ;
                     row.setAttribute("EXP_DATE",new Date (stat4.getDate(2)));
                     stat4.clearParameters();
                                                 } catch (Exception e4) {
                                                     // TODO: Add catch code                                     
                                                     System.out.println("proc_b_no_exp_date"+e4);    
                                                     System.out.println("proc_b_no_exp_date"+PlSQLCode4);
                                                     e4.printStackTrace();
                                                 } finally {
                                                   try {
                                                         stat4.close();     
                                                     } catch (Exception e4) {
                                                         // TODO: Add catch code
                                                         e4.printStackTrace();
                                                     }                                       
                                                 }  
                                
            }
            return super.createInstanceFromResultSet(queryCollection, resultSet);
        }
 
بقوم بعمل سجل جديد  
عند الحفظ بيروح لل update  لل Details  بعدد سجلاته  
 
ثم يبدأ فى التعامل مع السجل الجديد  ؟؟
بعدد سجلات ال  Details
بتاريخ:

هذه الدالة تقوم بالأسترجاع

لا علاقة لها بالحفظ

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

المتغيرين       row.setAttribute("B_NO",(stat4.getString(1))) ;

                     row.setAttribute("EXP_DATE",new Date (stat4.getDate(2)));
 
 
بيتعامل على انه قام بتعديل قيمهم 
 
بدليل لما اوقف السطرين السابقيين
 
 واعمل سجل جديد  عند الحفظ  لا يلتفت للسجلات السابقة ويقو فقط بحفظ السجل الجديد فقط

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

بتاريخ:

هذه للاسترجاع فقط

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

طيب يا باشمهندس هناك لاحظة اخرى

 

عند صفحة فى شاشة التصميم   او فى ال source  اقف على   زرار ال create insert    واذهب لل bindgs   اجد ال cursore    لا يقف على اى شيئ 

واقف على زرار ال commit  واذهب لل bindgs   اجد ايضا ال cursor  لايقف على شيء

ونفس الكلام مع زرار ال delete

ما عدا زرارى ال Execute  و ال Rollback  اجد الcursore  يقف عليهم فى ال bindgs   فهل لهذه الملاحظ اية مدلول 

 

الزراير الاولى لها اكود  

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

بتاريخ:

ضع صورة

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

post-79866-0-48412700-1524636511_thumb.pngزرار الاضافة   CreateInsert    

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

post-79866-0-95843100-1524636592_thumb.pngزرار الاضافة   CreateInsert         ال  bindgs

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

post-79866-0-25709100-1524636666_thumb.pngزرار ال execute   

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

post-79866-0-02479300-1524636726_thumb.pngزرار ال exexute   ال  bindgs

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

ملاحظة لم استطع احضار الصور على مرة واحدة  المشاركات الاربعة الاخيرة مرتبطة ببعض

 

ملاحظة اخرى لغيت هذه السطور وعمل save  بدون الذهاب الى  dml_update  ولم يلتفت لسجلات سابقة  

 

ملاحظة اخرى   المتغير    B_NO  transient      لها validation rule

 

 

@Override
    public ViewRowImpl createInstanceFromResultSet(QueryCollection queryCollection, ResultSet resultSet) {
            System.out.println("proc_b_no_exp_date_NNNNNNNNNNNNN");
            ViewRowImpl  row = super.createInstanceFromResultSet(queryCollection, resultSet);             
            if (row.getAttribute("AddId")!=null){
                System.out.println("proc_b_no_exp_date");
                boolean result4=true;     
                                      String PlSQLCode4 ="BEGIN\n" + 
                                      "SELECT B_NO,EXP_DATE \n" + 
                                      "INTO ?,?\n" + 
                                      "FROM PRODUCT\n" + 
                                      "WHERE PROD_ID=?;\n" + 
                                      "END ;";          
                                      CallableStatement stat4=null;                                         
                                                      try {          
                                    stat4=getDBTransaction().createCallableStatement(PlSQLCode4,getDBTransaction().DEFAULT);
                                    System.out.println("row.getAttribute(ProdId)"+row.getAttribute("ProdId"));                 
                                    stat4.registerOutParameter(1, Types.VARCHAR);
                                    stat4.registerOutParameter(2, Types.DATE);
                                    stat4.setObject(3, row.getAttribute("ProdId"));                                                     
                                    result4=stat4.execute(); 
                                    row.setAttribute("B_NO",(stat4.getString(1))) ;
                                    row.setAttribute("EXP_DATE",new Date (stat4.getDate(2)));
                                    stat4.clearParameters();
                                                                } catch (Exception e4) {
                                                                    // TODO: Add catch code                                     
                                                                    System.out.println("proc_b_no_exp_date"+e4);    
                                                                    System.out.println("proc_b_no_exp_date"+PlSQLCode4);
                                                                    e4.printStackTrace();
                                                                } finally {
                                                                  try {
                                                                        stat4.close();     
                                                                    } catch (Exception e4) {
                                                                        // TODO: Add catch code
                                                                        e4.printStackTrace();
                                                                    }                                       
                                                                }                 
            }
 
            return super.createInstanceFromResultSet(queryCollection, resultSet);
        }

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

بتاريخ:

هذا طبيعي لأن الزر به استدعاء لدالة مخصصة

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

ارجو توضيح هذا الجملة  

هذا طبيعي لأن الزر به استدعاء لدالة مخصصة

 

 

عند الغاء هذا الجزء   زرار الحفظ بيشتغل صح

ولو هذه هى المشكلة كيفية الحصول على قيمة عمود transient  (حاجة بديلة post query)

 

 

 

@Override
    public ViewRowImpl createInstanceFromResultSet(QueryCollection queryCollection, ResultSet resultSet) {
            System.out.println("proc_b_no_exp_date_NNNNNNNNNNNNN");
            ViewRowImpl  row = super.createInstanceFromResultSet(queryCollection, resultSet);             
            if (row.getAttribute("AddId")!=null){
                System.out.println("proc_b_no_exp_date");
                boolean result4=true;     
                                      String PlSQLCode4 ="BEGIN\n" + 
                                      "SELECT B_NO,EXP_DATE \n" + 
                                      "INTO ?,?\n" + 
                                      "FROM PRODUCT\n" + 
                                      "WHERE PROD_ID=?;\n" + 
                                      "END ;";          
                                      CallableStatement stat4=null;                                         
                                                      try {          
                                    stat4=getDBTransaction().createCallableStatement(PlSQLCode4,getDBTransaction().DEFAULT);
                                    System.out.println("row.getAttribute(ProdId)"+row.getAttribute("ProdId"));                 
                                    stat4.registerOutParameter(1, Types.VARCHAR);
                                    stat4.registerOutParameter(2, Types.DATE);
                                    stat4.setObject(3, row.getAttribute("ProdId"));                                                     
                                    result4=stat4.execute(); 
                                    row.setAttribute("B_NO",(stat4.getString(1))) ;
                                    row.setAttribute("EXP_DATE",new Date (stat4.getDate(2)));
                                    stat4.clearParameters();
                                                                } catch (Exception e4) {
                                                                    // TODO: Add catch code                                     
                                                                    System.out.println("proc_b_no_exp_date"+e4);    
                                                                    System.out.println("proc_b_no_exp_date"+PlSQLCode4);
                                                                    e4.printStackTrace();
                                                                } finally {
                                                                  try {
                                                                        stat4.close();     
                                                                    } catch (Exception e4) {
                                                                        // TODO: Add catch code
                                                                        e4.printStackTrace();
                                                                    }                                       
                                                                }                 
            }
 
            return super.createInstanceFromResultSet(queryCollection, resultSet);

 


@Override
    public ViewRowImpl createInstanceFromResultSet(QueryCollection queryCollection, ResultSet resultSet) {
            System.out.println("proc_b_no_exp_date_NNNNNNNNNNNNN");
            ViewRowImpl  row = super.createInstanceFromResultSet(queryCollection, resultSet);             
            if (row.getAttribute("AddId")!=null){
                System.out.println("proc_b_no_exp_date");
                boolean result4=true;     
                                      String PlSQLCode4 ="BEGIN\n" + 
                                      "SELECT B_NO,EXP_DATE \n" + 
                                      "INTO ?,?\n" + 
                                      "FROM PRODUCT\n" + 
                                      "WHERE PROD_ID=?;\n" + 
                                      "END ;";          
                                      CallableStatement stat4=null;                                         
                                                      try {          
                                    stat4=getDBTransaction().createCallableStatement(PlSQLCode4,getDBTransaction().DEFAULT);
                                    System.out.println("row.getAttribute(ProdId)"+row.getAttribute("ProdId"));                 
                                    stat4.registerOutParameter(1, Types.VARCHAR);
                                    stat4.registerOutParameter(2, Types.DATE);
                                    stat4.setObject(3, row.getAttribute("ProdId"));                                                     
                                    result4=stat4.execute(); 
                                    row.setAttribute("B_NO",(stat4.getString(1))) ;
                                    row.setAttribute("EXP_DATE",new Date (stat4.getDate(2)));
                                    stat4.clearParameters();
                                                                } catch (Exception e4) {
                                                                    // TODO: Add catch code                                     
                                                                    System.out.println("proc_b_no_exp_date"+e4);    
                                                                    System.out.println("proc_b_no_exp_date"+PlSQLCode4);
                                                                    e4.printStackTrace();
                                                                } finally {
                                                                  try {
                                                                        stat4.close();     
                                                                    } catch (Exception e4) {
                                                                        // TODO: Add catch code
                                                                        e4.printStackTrace();
                                                                    }                                       
                                                                }                 
            }
 
            return super.createInstanceFromResultSet(queryCollection, resultSet);
بتاريخ:

لم أفهم السؤال

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

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

بتاريخ:

لو وضعت في الزر دالة فهنا لن تجد في page definition ما يشير إلى operator المستخدم

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

اذا تم استخدام      الدالة

    public ViewRowImpl createInstanceFromResultSet(QueryCollection queryCollection, ResultSet resultSet) {

 

 

عند الضغط على زرار الحفظ بيمر على جميع سجلات الملف (تحديدا  25 سجل   حسب ال range size )    ويقوم بتنفيذ جملة  dml_update   على هذه السجلات ؟؟؟

فما الحل

 

    public ViewRowImpl createInstanceFromResultSet(QueryCollection queryCollection, ResultSet resultSet) {

بتاريخ:

هذا غير طبيعي طبعاً

جرب عمل comment على أي سطر فيه setAttribute ولنر النتيجة

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

انا بلجأ لهذه الدالة      public ViewRowImpl createInstanceFromResultSet(QueryCollection queryCollection, ResultSet resultSet) {

 
لايجاد قيم لاعمدة فى الجدول وبالتالى بعمل setAttribute
 
فهل هناك حل اخر لايجاد قيم هذه الاعمدة  عند الوقوف على اى سجل  خاصة ان هذه الحقول عليها validation rule    
ارجو يا باشمهندس  ايجاد حل 
 
خاصة كنت بعمل كده قى اوراكل فورم   فى postquery    لل block

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

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

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

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

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

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

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.