«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > как написать клиентский скрипт для удаления всех данных типа документа во фраппе

как написать клиентский скрипт для удаления всех данных типа документа во фраппе

Опубликовано 8 ноября 2024 г.
Просматривать:180

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();
                 }
             );
         });
    }
};

Закомментированная часть кода добавляет кнопку с надписью «Удалить все документы» в представление списка. После щелчка он запрашивает у пользователя подтверждение перед началом процесса удаления. Вы можете раскомментировать эту часть кода, чтобы включить кнопку в вашей среде.

Функция пакетного удаления

Ядром этого процесса является функция delete_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, размер которого контролируется параметром patch_size (по умолчанию — 2000).

  2. Удаление документов:

    Для каждого извлеченного документа сценарий вызывает метод frappe.client.delete для удаления документа. После каждого успешного удаления пользователю показывается уведомление.

  3. Рекурсивная пакетная обработка:

    После обработки пакета функция приостанавливает работу на 2 секунды, прежде чем загрузить и удалить следующий пакет. Эта задержка помогает предотвратить перегрузку сервера.

  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. import frappe: импортируется модуль frappe, который является ядром платформы Frappe и позволяет получить доступ к функциям базы данных и сервера.

  2. @frappe.whitelist(): этот декоратор позволяет функции delete_all_docs быть доступной через API Frappe и вызываться из внешних приложений или скриптов.

  3. def delete_all_docs(doctype):: функция определена так, чтобы принимать один параметр:

    • doctype: тип документа (например, «Сотрудник», «Клиент»), из которого будут удалены все записи.
  4. docs = frappe.get_all(doctype): извлекает все документы указанного типа документа и сохраняет их в переменной docs. Каждый возвращенный документ будет содержать имя документа, которое используется для удаления.

  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 Если есть какие-либо нарушения, пожалуйста, свяжитесь с Study_golang@163 .comdelete
Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3