Mandant löschen mittels AL

Bild Microsoft Dynamics 365 Business Central (ehem. Business-Edition)

Mandant löschen mittels AL

Beitragvon Steini » 17. Juni 2020 15:36

Hallo,
ich versuche gerade eine Testumgebung zu automatisieren, mittels
Code: Alles auswählen
 CopyCompany(CompanyName, NewCompanyName);
kann ich in AL einen Mandanten kopieren.
Wenn ich aber
Code: Alles auswählen
Company.DELETE(true);
ausführe (was in etwa der Aktion im User Interface entspricht, bekomme ich zwar ein True zurück, aber tatsächlich wird nichts gelöscht.
Gibt es eine Möglichkeit den einen Mandanten über AL Code zu löschen?
Steini
Microsoft Partner
Microsoft Partner
 
Beiträge: 111
Registriert: 18. Mai 2010 16:18
Arbeitsort: Nordbayern
Bezug zu Microsoft Dynamics: Microsoft Partner
Microsoft Dynamics Produkt: Microsoft Dynamics NAV
Microsoft Dynamics Version: 2.x - NAV2018, D365BC

Re: Mandant löschen mittels AL

Beitragvon Jbb93 » 17. Juni 2020 17:15

Wie hast du denn die zu löschende Company ausgewählt? Ich nehme an Company.GET() vorher?
Versuchst du vlt. die Company zu löschen in der du gerade noch bist?
Jbb93
Microsoft Partner
Microsoft Partner
 
Beiträge: 91
Registriert: 25. Januar 2016 11:20
Realer Name: Julian Breininger
Arbeitsort: Saarland
Bezug zu Microsoft Dynamics: Microsoft Partner
Microsoft Dynamics Produkt: Microsoft Dynamics NAV
Microsoft Dynamics Version: NAV 4.0 - BC aktuell

Re: Mandant löschen mittels AL

Beitragvon sweikelt » 18. Juni 2020 07:32

ein
Code: Alles auswählen
Company.Get()
???

es sollte doch
Code: Alles auswählen
Company.GET('xyz');
sein wobei XYZ für den zu löschenden Mandanten steht.
ich vermute das Julian das so meinte, aber zur Sicherheit hab ich es mal ergänzt.
Benutzeravatar
sweikelt
Microsoft Partner
Microsoft Partner
 
Beiträge: 1776
Registriert: 18. November 2010 10:15
Wohnort: Oschatz
Realer Name: Stephan Weikelt
Arbeitsort: Berlin
Bezug zu Microsoft Dynamics: Microsoft Partner
Microsoft Dynamics Produkt: Microsoft Dynamics NAV
Microsoft Dynamics Version: 3-2018 | D365BC

Re: Mandant löschen mittels AL

Beitragvon Steini » 18. Juni 2020 10:17

schon klar, den get auf den entsprechenden Mandanten mache ich vorher. Egal ob company.delete(true) oder company.delete(false) er löscht den Mandanten nicht.
Nur wenn ich wirklich über die Page gehe (die übrigens keine weiteren Trigger beinhaltet), lässt sich der Mandant manuell löschen.

Und nein, es ist nicht die Company in der ich bin. Versuch war es eine Aufgabenwarteschlange zu erstellen, welche täglich einen Mandanten sichert und in TestmandantX umbenennt.
Wenn drei Mandanten erstellt wurden, wird der älteste wieder gelöscht. Ermittlung wird ausgeführt auch ein "if company.delete then..." gibt ein TRUE zurück, tatsächlich macht er aber garnichts.
Steini
Microsoft Partner
Microsoft Partner
 
Beiträge: 111
Registriert: 18. Mai 2010 16:18
Arbeitsort: Nordbayern
Bezug zu Microsoft Dynamics: Microsoft Partner
Microsoft Dynamics Produkt: Microsoft Dynamics NAV
Microsoft Dynamics Version: 2.x - NAV2018, D365BC

Re: Mandant löschen mittels AL

Beitragvon Natalie » 18. Juni 2020 10:23

Steini hat geschrieben:ich versuche gerade eine Testumgebung zu automatisieren

Was meinst du eigentlich damit? Wenns dir um die Verwendung des Test Tools geht, dann solltest du nicht per Code neue Mandanten erstellen und löschen (müssen)
GruĂź, Natalie

Frage beantwortet oder Problem von allein gelöst? Schreibe bitte [Gelöst] vor den Titel des ersten Beitrags.

Bitte erst suchen, dann fragen. Bitte beachte den kleinen Community-Knigge.
Kein Support per PN, Mail, IM oder Telefon! DafĂĽr ist dieses Forum da.
Benutzeravatar
Natalie
Moderator
Moderator
 
Beiträge: 9257
Registriert: 31. Oktober 2006 19:51
Bezug zu Microsoft Dynamics: Microsoft Partner
Microsoft Dynamics Produkt: Microsoft Dynamics NAV

Re: Mandant löschen mittels AL

Beitragvon Steini » 18. Juni 2020 10:56

Der Kunde wünscht in der Anfangsphase eine tägliche Sicherung für interne Schulungs- und Testzwecke. Daher war in diesem Fall die Überlegung dies über Mandantenkopien zu automatisieren. Das Thema ist ziemlich komplex und es werden verschiedene KI Szenarien durchgespielt, daher kann es anfangs auch vorkommen, dass der Hauptmandant verworfen wird und auf dem Testmandanten mit besseren Resultaten weitergearbeitet wird. Daher möchten wir an dieser Stelle auch nicht mit Sandboxumgebungen arbeiten.
Steini
Microsoft Partner
Microsoft Partner
 
Beiträge: 111
Registriert: 18. Mai 2010 16:18
Arbeitsort: Nordbayern
Bezug zu Microsoft Dynamics: Microsoft Partner
Microsoft Dynamics Produkt: Microsoft Dynamics NAV
Microsoft Dynamics Version: 2.x - NAV2018, D365BC

Re: Mandant löschen mittels AL

Beitragvon sweikelt » 18. Juni 2020 11:00

Kannst du bitte einmal den Quellcode posten?
Deine beiden Zeilen sind fĂĽr die Analyse nicht ausreichend.
Benutzeravatar
sweikelt
Microsoft Partner
Microsoft Partner
 
Beiträge: 1776
Registriert: 18. November 2010 10:15
Wohnort: Oschatz
Realer Name: Stephan Weikelt
Arbeitsort: Berlin
Bezug zu Microsoft Dynamics: Microsoft Partner
Microsoft Dynamics Produkt: Microsoft Dynamics NAV
Microsoft Dynamics Version: 3-2018 | D365BC

Re: Mandant löschen mittels AL

Beitragvon m_schneider » 18. Juni 2020 11:06

Keine Ahnung warum es nicht funktioniert. Ich kann mir vorstellen, dass das ähnlich der Object-Tabelle ist, um Datenverlust zu vermeiden.

Ich habe jedoch noch eine andere Idee: verwende doch Powershell.
MfG Michael
Benutzeravatar
m_schneider
 
Beiträge: 2141
Registriert: 20. Januar 2009 14:36
Realer Name: Michael Schneider
Arbeitsort: Treuen
Bezug zu Microsoft Dynamics: End-Anwender
Microsoft Dynamics Produkt: Microsoft Dynamics NAV
Microsoft Dynamics Version: 2017

Re: Mandant löschen mittels AL

Beitragvon sweikelt » 18. Juni 2020 11:10

m_schneider hat geschrieben:Ich habe jedoch noch eine andere Idee: verwende doch Powershell.


in der Cloud?
Benutzeravatar
sweikelt
Microsoft Partner
Microsoft Partner
 
Beiträge: 1776
Registriert: 18. November 2010 10:15
Wohnort: Oschatz
Realer Name: Stephan Weikelt
Arbeitsort: Berlin
Bezug zu Microsoft Dynamics: Microsoft Partner
Microsoft Dynamics Produkt: Microsoft Dynamics NAV
Microsoft Dynamics Version: 3-2018 | D365BC

Re: Mandant löschen mittels AL

Beitragvon Steini » 18. Juni 2020 11:10

Code: Alles auswählen
Company.Reset();
Company.SetRange(Name, NewCompanyName);
if Company.Count > MaxCompanyBackups then begin
  DeleteCompanies := Company.Count - MaxCompanyBackups;
  CompanyNo := 0;
  Company.FindSet();
  repeat
    CompanyNo += 1;
    Company2.get(Company.Name);
    if Company2.Delete(true) then begin
      Company.Next();
      Message(Company.Name + '-> %1', CompanyNo); //fĂĽr Testzwecke:
                    // Message wird ausgegeben, Mandant noch vorhanden!
    end;
   until CompanyNo = DeleteCompanies;
end;
Steini
Microsoft Partner
Microsoft Partner
 
Beiträge: 111
Registriert: 18. Mai 2010 16:18
Arbeitsort: Nordbayern
Bezug zu Microsoft Dynamics: Microsoft Partner
Microsoft Dynamics Produkt: Microsoft Dynamics NAV
Microsoft Dynamics Version: 2.x - NAV2018, D365BC

Re: Mandant löschen mittels AL

Beitragvon m_schneider » 18. Juni 2020 11:25

sweikelt hat geschrieben:
m_schneider hat geschrieben:...verwende doch Powershell.


in der Cloud?

Nicht?

Edit: dann eben Automation API
MfG Michael
Benutzeravatar
m_schneider
 
Beiträge: 2141
Registriert: 20. Januar 2009 14:36
Realer Name: Michael Schneider
Arbeitsort: Treuen
Bezug zu Microsoft Dynamics: End-Anwender
Microsoft Dynamics Produkt: Microsoft Dynamics NAV
Microsoft Dynamics Version: 2017

Re: Mandant löschen mittels AL

Beitragvon sweikelt » 18. Juni 2020 11:39

@Michael - auf die Automation API hätte ich auch gesetzt :lol:

ich kann defintiv sagen, dass es OnPrem (BC160) ohne Probleme möglich ist, einen Mandanten zu löschen - ich hau jetzt mal meine Löschroutine (lol - 2 Zeilen Code) in meine SaaS Umgebung
PS:

der Code ist ein wenig "wirr"

Code: Alles auswählen
      Company.Next();
      Message(Company.Name + '-> %1', CompanyNo); //fĂĽr Testzwecke:
                    // Message wird ausgegeben, Mandant noch vorhanden!


--> dafuq? klar ist der noch vorhanden - ist ja auch der nächste!

Update -> SaaS funktioniert ebenfalls ohne Probleme

Code: Alles auswählen
codeunit 50100 "DeleteComp"
{
    trigger OnRun()
    var
        Comp: Record Company;
    begin
        Comp.GET('CompToDelete');
        Comp.DELETE(true);
    end;
}



wie gesagt, dein Code ist ein bisschen verwirrend.

was mich noch interessieren wĂĽrde:
Nur wenn ich wirklich über die Page gehe (die übrigens keine weiteren Trigger beinhaltet), lässt sich der Mandant manuell löschen

--> wie kommst du darauf, dass die Page kein Trigger auĂźer anscheinend dem OnDelete hat?
Benutzeravatar
sweikelt
Microsoft Partner
Microsoft Partner
 
Beiträge: 1776
Registriert: 18. November 2010 10:15
Wohnort: Oschatz
Realer Name: Stephan Weikelt
Arbeitsort: Berlin
Bezug zu Microsoft Dynamics: Microsoft Partner
Microsoft Dynamics Produkt: Microsoft Dynamics NAV
Microsoft Dynamics Version: 3-2018 | D365BC

Re: Mandant löschen mittels AL

Beitragvon Steini » 18. Juni 2020 12:24

Automation API habe ich auch schon gefunden, schön und einfach wäre es halt alles über AL zu erledigen.
Witzigerweise wird der DELETE ja ausgeführt und es gibt TRUE zurück, wenn ich dann aber in die Mandantenauswahl gehe steht er immer noch drin und ich kann in den "gelöschten Mandanten" wechseln.
Die Tabelle Company ist ja nur eine virtuelle Tabelle, aber wenn ich ja über die Page lösche funktioniert es ja auch. Findet man eigentlich irgendwo den Trigger-Code dazu, es öffnen ja mehrere Confirm Fenster beim manuellen löschen.?
Steini
Microsoft Partner
Microsoft Partner
 
Beiträge: 111
Registriert: 18. Mai 2010 16:18
Arbeitsort: Nordbayern
Bezug zu Microsoft Dynamics: Microsoft Partner
Microsoft Dynamics Produkt: Microsoft Dynamics NAV
Microsoft Dynamics Version: 2.x - NAV2018, D365BC

Re: Mandant löschen mittels AL

Beitragvon Steini » 18. Juni 2020 12:28

OK, die Message hab ich schnell reingebastelt. das ist nicht Optimal. Aber ich habe jetzt in drei unterschiedlichen Versionen getestet und selbst wenn es 10 Mandanten gibt und er mit 7x die Löschmessage zeigt, dann sind bei mir danach noch alle Mandanten verfügbar.
Steini
Microsoft Partner
Microsoft Partner
 
Beiträge: 111
Registriert: 18. Mai 2010 16:18
Arbeitsort: Nordbayern
Bezug zu Microsoft Dynamics: Microsoft Partner
Microsoft Dynamics Produkt: Microsoft Dynamics NAV
Microsoft Dynamics Version: 2.x - NAV2018, D365BC

Re: Mandant löschen mittels AL

Beitragvon sweikelt » 18. Juni 2020 12:37

das mag ja alles sein, aber ich habe es problemlos OnPrem und bei SaaS getestet - dein Codeausschnitt ist wie gesagt "verwirrend".
Ich weiĂź weder, wann dein Code wie aufgerufen wird, noch was du meinst, dass die Page anscheinend nur den Delete-Trigger hat, noch kenne ich deine Variablen


du machst ein SetRange auf Name mit NewCompanyName -> und dann ein Repeat until....sorry, aber was soll dabei rauskommen?
du willst also den Mandanten Namens String in NewCompanyName löschen?
Benutzeravatar
sweikelt
Microsoft Partner
Microsoft Partner
 
Beiträge: 1776
Registriert: 18. November 2010 10:15
Wohnort: Oschatz
Realer Name: Stephan Weikelt
Arbeitsort: Berlin
Bezug zu Microsoft Dynamics: Microsoft Partner
Microsoft Dynamics Produkt: Microsoft Dynamics NAV
Microsoft Dynamics Version: 3-2018 | D365BC

Re: Mandant löschen mittels AL

Beitragvon Steini » 18. Juni 2020 12:58

tatsächlich ist es ein SETFILTER(Name,NewCompanyName+'*'
habe versucht den Code vor dem Posten noch etwas zu vereinfachen. Tatsächlich wird der Code ja bei mir ausgeführt, da er ja auch die Message ausgibt.
Steini
Microsoft Partner
Microsoft Partner
 
Beiträge: 111
Registriert: 18. Mai 2010 16:18
Arbeitsort: Nordbayern
Bezug zu Microsoft Dynamics: Microsoft Partner
Microsoft Dynamics Produkt: Microsoft Dynamics NAV
Microsoft Dynamics Version: 2.x - NAV2018, D365BC

Re: Mandant löschen mittels AL

Beitragvon sweikelt » 18. Juni 2020 13:39

Wir wissen nicht, von wo und wie dein Code aufgerufen wird, wir kennen die Variablen (weder die Deklaration, noch den Inhalt (z.B. NewCompanyName) nicht (klar können wir uns die vorstellen, aber ...nein)
Wir kennen auch den Aufbau eurer Mandantennamen nicht.
Ich hab einen Mandanten jeweils OnPrem sowie SaaS angelegt (Mandant kopieren) und diesen dann ohne Probleme in beiden Systemen gelöscht - den original Code dafür habe ich gepostet (sorry natürlich fehlte die Action, die ich zum ausführen der Codeunit verwendete - den findest du jetzt unten) - klar war der Mandantenname hardcoded, aber ich könnte dir auch eine nicht hardcoded Variante zur Verfügung stellen.

dein
Code: Alles auswählen
repeat...until
entspricht nicht wirklich einer Standardimplementierung - dein neuerliches SetFilter ebenfalls nicht.

Der gepostete Code entspricht nicht dem, der ausgefĂĽhrt wird.
--> Bitte entschuldige, aber was sollen wir nun deiner Meinung nach tun?

Code: Alles auswählen
pageextension 50101 "CustDeleteCompBttn" extends "Customer List"
{
    layout
    {
        // Add changes to page layout here
    }

    actions
    {
        addlast("&Customer")
        {
            action(Killer)
            {
                Visible = true;
                ApplicationArea = all;
                trigger OnAction()
                var
                    myCod: Codeunit DeleteComp;
                begin
                    myCod.RUN;
                end;
            }
        }
    }

}
Benutzeravatar
sweikelt
Microsoft Partner
Microsoft Partner
 
Beiträge: 1776
Registriert: 18. November 2010 10:15
Wohnort: Oschatz
Realer Name: Stephan Weikelt
Arbeitsort: Berlin
Bezug zu Microsoft Dynamics: Microsoft Partner
Microsoft Dynamics Produkt: Microsoft Dynamics NAV
Microsoft Dynamics Version: 3-2018 | D365BC


ZurĂĽck zu 365 Business Central

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast