„Wenn ein Arbeiter seine Arbeit gut machen will, muss er zuerst seine Werkzeuge schärfen.“ – Konfuzius, „Die Gespräche des Konfuzius. Lu Linggong“
Titelseite > Programmierung > So schreiben Sie ein Client-Skript zum Löschen aller Daten in Frappe

So schreiben Sie ein Client-Skript zum Löschen aller Daten in Frappe

Veröffentlicht am 08.11.2024
Durchsuche:852

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

Hier ist ein Blog-Beitrag, der das von Ihnen bereitgestellte Skript enthält:


WhatsApp-Nachrichten stapelweise mit Frappe löschen

Die Verwaltung großer Datenmengen in jedem System kann eine Herausforderung sein, insbesondere wenn es darum geht, Datensätze effizient zu löschen. In Frappe können wir dieses Szenario bewältigen, indem wir die Listenansicht anpassen und Datensätze stapelweise löschen, um eine Überlastung des Servers zu vermeiden.

In diesem Beitrag erfahren Sie, wie Sie die Stapellöschung von „WhatsApp Message“-Dokumenten mithilfe von benutzerdefiniertem Code in Frappe einrichten.

Warum Batch-Löschung?

Wenn Sie mit Tausenden oder mehr Datensätzen arbeiten, kann der Versuch, sie alle auf einmal zu löschen, Ihren Server überlasten und zu Zeitüberschreitungen oder einer langsamen Leistung führen. Durch die Stapelverarbeitung können wir die Aufgabe in kleinere, überschaubare Teile aufteilen, wodurch die Belastung des Servers verringert und ein reibungsloseres Benutzererlebnis gewährleistet wird.

Anpassen der Listenansicht

Zuerst ändern wir die Listenansicht des Dokumenttyps „WhatsApp-Nachricht“, um eine Schaltfläche zum Stapellöschen hinzuzufügen. Diese Schaltfläche löst den Vorgang zum stapelweisen Löschen aller WhatsApp-Nachrichten aus.

Hier ist der Code zum Anpassen der Listenansicht:

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

Der auskommentierte Teil des Codes fügt der Listenansicht eine Schaltfläche mit der Bezeichnung „Alle Dokumente löschen“ hinzu. Nach dem Anklicken wird der Benutzer zur Bestätigung aufgefordert, bevor der Löschvorgang gestartet wird. Sie können diesen Teil des Codes auskommentieren, um die Schaltfläche in Ihrer Umgebung zu aktivieren.

Die Batch-Löschfunktion

Der Kern dieses Prozesses ist die Funktion delete_in_batches. Diese Funktion ruft einen Stapel Dokumente ab, löscht sie einzeln und fährt dann mit einer Verzögerung mit dem nächsten Stapel fort, um sicherzustellen, dass der Server nicht überlastet wird.

Hier ist der vollständige Code für die Stapellöschung:

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

So funktioniert es:

  1. Dokumente abrufen:

    Die Funktion beginnt mit dem Abrufen eines Stapels von WhatsApp-Nachrichtendokumenten, wobei die Größe des Stapels durch den Parameter „batch_size“ gesteuert wird (Standard ist 2000).

  2. Dokumente löschen:

    Für jedes abgerufene Dokument ruft das Skript die Methode frappe.client.delete auf, um das Dokument zu löschen. Nach jedem erfolgreichen Löschvorgang wird dem Benutzer eine Benachrichtigung angezeigt.

  3. Rekursive Stapelverarbeitung:

    Sobald ein Stapel verarbeitet wurde, pausiert die Funktion 2 Sekunden lang, bevor der nächste Stapel abgerufen und gelöscht wird. Diese Verzögerung hilft, eine Serverüberlastung zu verhindern.

  4. Fertigstellung:

    Wenn keine Dokumente mehr zum Löschen vorhanden sind, wird dem Benutzer eine Meldung angezeigt und die Listenansicht wird aktualisiert, um die Änderungen widerzuspiegeln.

Abschluss:

Dieses Skript ist eine einfache, aber effektive Lösung zum Stapellöschen großer Datenmengen in Frappe. Indem wir den Löschvorgang in kleinere, überschaubare Stapel aufteilen, vermeiden wir eine Überlastung des Servers und stellen einen reibungslosen Ablauf sicher. Sie können die Batch-Größe und die Verzögerung je nach Datenvolumen und Serverkapazität an Ihre Bedürfnisse anpassen.

Fühlen Sie sich frei, dieses Skript in Ihre eigene Frappe-Anwendung zu integrieren, um das Löschen von WhatsApp-Nachrichten oder anderen Dokumenttypen zu optimieren.

Nachdem Sie das Client-Skript geschrieben haben, schreiben Sie diese Logik in das Server-Skript, wählen Sie die API für den Server-Skripttyp aus und schreiben Sie diesen Code in das Skript

Hier ist eine detaillierte Erklärung des Codes, einschließlich des Codes selbst:

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

Code-Aufschlüsselung:

  1. frappe importieren: Dies importiert das Frappe-Modul, das den Kern des Frappe-Frameworks darstellt, und ermöglicht Ihnen den Zugriff auf Datenbank- und Serverfunktionen.

  2. @frappe.whitelist(): Dieser Dekorator ermöglicht, dass die Funktion delete_all_docs über die API von Frappe zugänglich und von externen Anwendungen oder Skripten aus aufrufbar ist.

  3. def delete_all_docs(doctype):: Die Funktion ist so definiert, dass sie einen Parameter akzeptiert:

    • doctype: Der Dokumenttyp (z. B. „Mitarbeiter“, „Kunde“), aus dem alle Datensätze gelöscht werden.
  4. docs = frappe.get_all(doctype): Dadurch werden alle Dokumente des angegebenen Doctypes abgerufen und in der Variable docs gespeichert. Jedes zurückgegebene Dokument enthält den Dokumentnamen, der zum Löschen verwendet wird.

  5. für Dokument in Dokumenten:: Die Funktion durchläuft jedes Dokument in der Liste Dokumente.

  6. frappe.delete_doc(doctype, doc.name, force=1): Innerhalb der Schleife wird jedes Dokument durch Angabe des Doctype und des doc.name gelöscht. Das Argument „force=1“ stellt sicher, dass das Dokument zwangsweise gelöscht wird, wobei ggf. Validierungsregeln und Prüfungen umgangen werden.

  7. frappe.db.commit(): Sobald alle Dokumente gelöscht sind, werden die Datenbankänderungen festgeschrieben, wodurch die Löschungen dauerhaft werden.

  8. return f „Alle Dokumente von {doctype} wurden gelöscht.“: Nachdem alle Dokumente gelöscht wurden, wird eine Erfolgsmeldung zurückgegeben, die angibt, dass der Vorgang erfolgreich war.

Diese Funktion ist nützlich, wenn Sie alle Dokumente eines bestimmten Dokumenttyps in einer Frappe-Anwendung löschen müssen.

Freigabeerklärung Dieser Artikel ist abgedruckt unter: https://dev.to/04anilr/how-to-write-client-script-for-delete-doctype-all-data-in-frappe-18e0?1 Wenn es einen Verstoß gibt, bitte Kontaktieren Sie Study_golang@163 .comdelete
Neuestes Tutorial Mehr>

Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.

Copyright© 2022 湘ICP备2022001581号-3