Löschen eines Mandanten (Juristische Person) in D365FO

In einem Projekt standen wir vor der Herausforderung, die Daten eines Mandanten (Juristische Person) zu löschen. Da die Holding eine Ihrer Firmen verkaufte und somit nicht mehr rechtmässige Inhaberin dieser Daten war, mussten diese aus der bestehenden Umgebung gelöscht werden. Der Standad bietet hier für (noch) keine Unterstützung und auch die Gespräche mit dem DSE-Team verliefen im Sande.

So haben wir es gelöst (auf Basis PU33):

  1. Eine Klassen-Extension der Klasse SysDatabaseTransDelete erstellt:
    [ExtensionOf(classStr(SysDatabaseTransDelete))]
    final class SysDatabaseTransDelete_AXP_Extension
    {
       
    void deleteTable(SysDictTable sysDictTable)
        {
           
    Common  common;
            common = sysDictTable.makeRecord();

     

            select count(RecId) from common;

            if (common.RecId)
            {
                info(strFmt(
    ‚Deleting %1 records in %2‘,
                             common.RecId,
                             sysDictTable.name()));
               
    //Exceptions (must be deleted with doDelete)
               
    if (sysDictTable.id() == tableNum(SalesLine))
                {
                    
    while select forupdate common
                    {
                        common.doDelete();
                    }
                }
            }

            next deleteTable(sysDictTable);
        }

        void handleNonTransTable(SysDictTable sysDictTable)
        {
           
    this.deleteTable(sysDictTable);

            next handleNonTransTable(sysDictTable);
        }
    }

  2. Zusätzlich die Inhalte folgender Tabellen gelöscht:
    delete from BATCH where COMPANY = ‘xxx’
    delete from BATCHJOB where COMPANY = ‘xxx’
    delete from MAINACCOUNTLEGALENTITY where LEGALENTITY = ‘[CompanyInfo.RecId]’
  3. Die Klasse mittels URL starten:
    https://yourenvironment.sandbox.operations.dynamics.com/?cmp=lum&mi=SysClassRunner&cls=SysDatabaseTransDelete
 

Das wars. Falls Du eine oder merhere Tabelle findest, welche wir vergessen haben (oder welche Probleme verursachen), wären wir froh um eine Rückmeldung.

Bleibt noch zu erwähnen, dass Ihr bitte vorsichtig mit diesem Code umgeht. So kann dieser doch ziemlichen Schaden anrichten. Bitte also vorgängig immer sauber in einer Testumgebung testen und erst im produktiven System starten, wenn Ihr Euch zu 100% sicher seid (oder zumindest einen Backup habt).

Share on twitter
Share on linkedin