"Se um trabalhador quiser fazer bem o seu trabalho, ele deve primeiro afiar suas ferramentas." - Confúcio, "Os Analectos de Confúcio. Lu Linggong"
Primeira página > Programação > como escrever script de cliente para excluir doctype todos os dados em frappe

como escrever script de cliente para excluir doctype todos os dados em frappe

Publicado em 2024-11-08
Navegar:152

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

Aqui está uma postagem do blog que incorpora o script que você forneceu:


Excluindo mensagens do WhatsApp em lotes usando Frappe

Gerenciar grandes quantidades de dados em qualquer sistema pode ser desafiador, especialmente quando se trata de exclusão eficiente de registros. No Frappe, podemos lidar com esse cenário customizando a visualização da lista e excluindo registros em lotes para evitar sobrecarregar o servidor.

Nesta postagem, exploraremos como configurar a exclusão em lote de documentos "Mensagens do WhatsApp" usando código personalizado no Frappe.

Por que exclusão em lote?

Ao lidar com milhares ou mais registros, tentar excluí-los todos de uma vez pode sobrecarregar seu servidor, causando tempos limite ou desempenho lento. O processamento em lote nos permite dividir a tarefa em partes menores e gerenciáveis, reduzindo a carga no servidor e garantindo uma experiência de usuário mais tranquila.

Personalizando a visualização de lista

Primeiro, modificaremos a visualização de lista do tipo de documento "Mensagem do WhatsApp" para adicionar um botão para exclusão em lote. Este botão irá acionar o processo de exclusão de todas as mensagens do WhatsApp em lotes.

Aqui está o código para personalizar a visualização de lista:

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

A parte comentada do código adiciona um botão chamado "Excluir todos os documentos" à visualização de lista. Uma vez clicado, ele solicita confirmação do usuário antes de iniciar o processo de exclusão. Você pode descomentar esta parte do código para ativar o botão em seu ambiente.

A função de exclusão de lote

O núcleo deste processo é a função delete_in_batches. Esta função busca um lote de documentos, exclui-os um por um e, em seguida, prossegue para o próximo lote com atraso, garantindo que o servidor não fique sobrecarregado.

Aqui está o código completo para exclusão em lote:

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

Como funciona:

  1. Buscando documentos:

    A função começa buscando um lote de documentos de mensagens do WhatsApp, com o tamanho do lote controlado pelo parâmetro batch_size (o padrão é 2000).

  2. Excluindo documentos:

    Para cada documento obtido, o script chama o método frappe.client.delete para excluir o documento. Após cada exclusão bem-sucedida, uma notificação é mostrada ao usuário.

  3. Lote recursivo:

    Depois que um lote é processado, a função faz uma pausa de 2 segundos antes de buscar e excluir o próximo lote. Esse atraso ajuda a evitar a sobrecarga do servidor.

  4. Conclusão:

    Quando não houver mais documentos para excluir, uma mensagem será exibida ao usuário e a exibição da lista será atualizada para refletir as alterações.

Conclusão:

Este script é uma solução simples, mas eficaz para exclusão em lote de grandes quantidades de dados no Frappe. Ao dividir o processo de exclusão em lotes menores e gerenciáveis, evitamos sobrecarregar o servidor e garantimos que a operação ocorra sem problemas. Você pode modificar o tamanho do lote e o atraso para atender às suas necessidades, dependendo do volume de dados e da capacidade do servidor.

Sinta-se à vontade para integrar este script ao seu próprio aplicativo Frappe para agilizar a exclusão de mensagens do WhatsApp ou qualquer outro tipo de documento.

Depois de escrever o script do cliente, escreva esta lógica no script do servidor, selecione no tipo de script do servidor API e escreva este código no script

Aqui está uma explicação detalhada do código com o próprio código incluído:

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."

Detalhamento do código:

  1. import frappe: Importa o módulo frappe, que é o núcleo do framework Frappe, permitindo que você acesse funcionalidades de banco de dados e servidor.

  2. @frappe.whitelist(): Este decorador permite que a função delete_all_docs seja acessível via API do Frappe e possa ser chamada a partir de aplicativos ou scripts externos.

  3. def delete_all_docs(doctype):: A função é definida para aceitar um parâmetro:

    • doctype: O tipo de documento (por exemplo, "Funcionário", "Cliente") do qual todos os registros serão excluídos.
  4. docs = frappe.get_all(doctype): Isso busca todos os documentos do tipo de documento especificado e os armazena na variável docs. Cada documento retornado incluirá o nome do documento, que será usado para exclusão.

  5. for doc in docs:: A função percorre cada documento na lista de documentos.

  6. frappe.delete_doc(doctype, doc.name, force=1): Dentro do loop, cada documento é excluído especificando o doctype e o doc.name. O argumento force=1 garante que o documento seja excluído à força, ignorando regras de validação e verificações, se necessário.

  7. frappe.db.commit(): Depois que todos os documentos forem excluídos, as alterações do banco de dados serão confirmadas, tornando as exclusões permanentes.

  8. return f"Todos os documentos de {doctype} foram excluídos.": Depois que todos os documentos forem excluídos, uma mensagem de sucesso será retornada, indicando que a operação foi bem-sucedida.

Esta função é útil quando você precisa excluir todos os documentos de um determinado doctype em uma aplicação Frappe.

Declaração de lançamento Este artigo está reproduzido em: https://dev.to/04anilr/how-to-write-client-script-for-delete-doctype-all-data-in-frappe-18e0?1 Se houver alguma violação, por favor entre em contato com study_golang@163 .comdelete
Tutorial mais recente Mais>

Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.

Copyright© 2022 湘ICP备2022001581号-3