"إذا أراد العامل أن يؤدي عمله بشكل جيد، فعليه أولاً أن يشحذ أدواته." - كونفوشيوس، "مختارات كونفوشيوس. لو لينجونج"
الصفحة الأمامية > برمجة > كيفية كتابة البرنامج النصي للعميل لحذف جميع البيانات في doctype في frappe

كيفية كتابة البرنامج النصي للعميل لحذف جميع البيانات في doctype في frappe

تم النشر بتاريخ 2024-11-08
تصفح:937

how to write client script for delete doctype all data in frappe

إليك مشاركة مدونة تتضمن النص الذي قدمته:


حذف رسائل WhatsApp على دفعات باستخدام Frappe

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

في هذا المنشور، سنستكشف كيفية إعداد الحذف الدفعي لمستندات "رسائل WhatsApp" باستخدام رمز مخصص داخل Frappe.

لماذا حذف الدفعة؟

عند التعامل مع آلاف السجلات أو أكثر، فإن محاولة حذفها جميعًا مرة واحدة يمكن أن يؤدي إلى إجهاد الخادم الخاص بك، مما يتسبب في انتهاء المهلات أو بطء الأداء. تسمح لنا المعالجة المجمعة بتقسيم المهمة إلى أجزاء أصغر يمكن التحكم فيها، مما يقلل الحمل على الخادم ويضمن تجربة مستخدم أكثر سلاسة.

تخصيص طريقة عرض القائمة

أولاً، سنقوم بتعديل عرض القائمة لنوع مستند "رسالة WhatsApp" لإضافة زر لحذف الدُفعة. سيؤدي هذا الزر إلى تشغيل عملية حذف جميع رسائل WhatsApp على دفعات.

إليك الكود لتخصيص عرض القائمة:

frappe.listview_settings['WhatsApp Message'] = {
    onload: function(listview) {
        // Add a custom button in the list view
        // Uncomment this section to enable the button
         listview.page.add_inner_button(__('Delete All Docs'), function() {
            // Confirm before proceeding with the deletion
             frappe.confirm(
                 'Are you sure you want to delete all Whatsapp messages?',
                 function() {
                     Start the batch deletion process
                     delete_in_batches();
                 }
             );
         });
    }
};

يضيف الجزء الذي تم التعليق عليه من الكود زرًا يسمى "حذف جميع المستندات" إلى عرض القائمة. بمجرد النقر عليه، فإنه يطالب المستخدم بالتأكيد قبل البدء في عملية الحذف. يمكنك إلغاء التعليق على هذا الجزء من التعليمات البرمجية لتمكين الزر في بيئتك.

وظيفة حذف الدفعة

جوهر هذه العملية هو وظيفة الحذف_in_batches. تقوم هذه الوظيفة بجلب مجموعة من المستندات، وحذفها واحدًا تلو الآخر، ثم تنتقل إلى الدفعة التالية مع تأخير، مما يضمن عدم إرهاق الخادم.

إليك الكود الكامل لحذف الدفعة:

function delete_in_batches(batch_size = 2000) {
    // Step 1: Fetch a batch of documents to be deleted
    frappe.call({
        method: "frappe.client.get_list",
        args: {
            doctype: "WhatsApp Message",  // Your target doctype
            fields: ["name"],  // Fetch only the 'name' field (docnames)
            limit: batch_size  // Process in batches of 2000
        },
        callback: function(response) {
            let docs = response.message;

            if (docs && docs.length > 0) {
                // Step 2: Loop through each document in the batch and delete it
                docs.forEach(function(doc, index) {
                    frappe.call({
                        method: "frappe.client.delete",
                        args: {
                            doctype: "WhatsApp Message",  // Ensure this is correct
                            name: doc.name
                        },
                        callback: function(r) {
                            if (!r.exc) {
                                frappe.show_alert({
                                    message: `Document ${doc.name} deleted`,
                                    indicator: 'green'
                                });
                            }
                        }
                    });
                });

                // Step 3: Delay the next batch to prevent server overload
                setTimeout(function() {
                    delete_in_batches(batch_size);  // Recursive call to delete the next batch
                }, 2000);  // 2-second delay between batches
            } else {
                // No more documents to delete
                frappe.msgprint("All WhatsApp messages have been deleted.");
                frappe.listview.refresh();  // Refresh the list view once the process completes
            }
        }
    });
}

كيف يعمل:

  1. جلب المستندات:

    تبدأ الوظيفة بجلب مجموعة من مستندات رسائل WhatsApp، مع التحكم في حجم الدفعة بواسطة معلمة Batch_size (الافتراضي هو 2000).

  2. حذف المستندات:

    بالنسبة لكل مستند يتم جلبه، يستدعي البرنامج النصي الأسلوب frappe.client.delete لحذف المستند. بعد كل عملية حذف ناجحة، يظهر إشعار للمستخدم.

  3. التجميع العودي:

    بمجرد معالجة الدفعة، تتوقف الوظيفة مؤقتًا لمدة ثانيتين قبل جلب الدفعة التالية وحذفها. يساعد هذا التأخير على منع التحميل الزائد على الخادم.

  4. انتهاء:

    عندما لا يكون هناك المزيد من المستندات لحذفها، يتم عرض رسالة للمستخدم، ويتم تحديث عرض القائمة لتعكس التغييرات.

خاتمة:

يعد هذا البرنامج النصي حلاً بسيطًا ولكنه فعال لحذف كميات كبيرة من البيانات في Frappe. من خلال تقسيم عملية الحذف إلى دفعات أصغر يمكن التحكم فيها، فإننا نتجنب التحميل الزائد على الخادم ونضمن سير العملية بسلاسة. يمكنك تعديل حجم الدفعة والتأخير لتناسب احتياجاتك، اعتمادًا على حجم البيانات وسعة الخادم.

لا تتردد في دمج هذا البرنامج النصي في تطبيق Frappe الخاص بك لتسهيل حذف رسائل WhatsApp أو أي نوع آخر من المستندات.

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

إليك شرحًا تفصيليًا للكود مع تضمين الكود نفسه:

import frappe

@frappe.whitelist()
def delete_all_docs(doctype):
    # Get all documents of the specified doctype
    docs = frappe.get_all(doctype)

    # Loop through each document in the list
    for doc in docs:
        # Delete the document using its name and the provided doctype
        frappe.delete_doc(doctype, doc.name, force=1)

    # Commit the changes to the database to make deletions permanent
    frappe.db.commit()

    # Return a confirmation message
    return f"All documents from {doctype} have been deleted."

انهيار الكود:

  1. استيراد frappe : يؤدي هذا إلى استيراد وحدة frappe، التي تعد جوهر إطار عمل Frappe، مما يسمح لك بالوصول إلى وظائف قاعدة البيانات والخادم.

  2. @frappe.whitelist(): يتيح هذا الديكور إمكانية الوصول إلى وظيفةحذف_all_docs عبر واجهة برمجة تطبيقات Frappe ويمكن استدعاؤها من التطبيقات أو البرامج النصية الخارجية.

  3. defحذف_all_docs(doctype):: تم تعريف الوظيفة لقبول معلمة واحدة:

    • نوع الوثيقة: نوع المستند (على سبيل المثال، "الموظف"، "العميل") الذي سيتم حذف جميع السجلات منه.
  4. docs = frappe.get_all(doctype): يؤدي هذا إلى جلب كافة المستندات الخاصة بنوع المستند المحدد وتخزينها في متغير المستندات. ستتضمن كل وثيقة يتم إرجاعها اسم الوثيقة، والذي سيتم استخدامه للحذف.

  5. بالنسبة للمستند في المستندات: : تتكرر الوظيفة خلال كل مستند في قائمة المستندات.

  6. frappe.delete_doc(doctype, doc.name, force=1): داخل الحلقة، يتم حذف كل مستند عن طريق تحديد نوع المستند واسم المستند. تضمن الوسيطة force=1 حذف المستند بالقوة، وتجاوز قواعد التحقق من الصحة وعمليات التحقق إذا لزم الأمر.

  7. frappe.db.commit(): بمجرد حذف جميع المستندات، يتم تنفيذ تغييرات قاعدة البيانات، مما يجعل عمليات الحذف دائمة.

  8. return f"تم حذف جميع المستندات من {doctype}.": بعد حذف جميع المستندات، يتم إرجاع رسالة نجاح، تشير إلى نجاح العملية.

هذه الوظيفة مفيدة عندما تحتاج إلى حذف جميع المستندات من نوع مستند معين في تطبيق Frappe.

بيان الافراج تم إعادة إنتاج هذه المقالة على: https://dev.to/04anilr/how-to-write-client-script-for-delete-doctype-all-data-in-frappe-18e0?1 إذا كان هناك أي انتهاك، من فضلك اتصل بـ [email protected]
أحدث البرنامج التعليمي أكثر>

تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.

Copyright© 2022 湘ICP备2022001581号-3