Hallo zusammen,
ich habe eine Frage zum Lifecycle von AppSource/Marketplace Apps in Business Central, speziell zu TableExtensions und AppSourceCop AS0001.
Ausgangssituation:
Wir haben eine AppSource-App „XXX Base App“. Die Versionen 28.0.0.1 bis 28.0.0.9 sind bereits in AppSource veröffentlicht.
In dieser Base App gibt es aktuell eine Abhängigkeit auf eine Drittanbieter-App aus AppSource. Der Grund ist unter anderem eine TableExtension auf eine Tabelle dieser Drittanbieter-App, z. B.:
tableextension 50000 "My Payment Provider Ext." extends "Third Party Payment Provider"
Diese TableExtension enthält ein eigenes Feld, z. B.:
field(50000; "Import active"; Boolean)
Zusätzlich gab es in der Base App weitere Objekte, die von dieser Drittanbieter-App abhängig sind, z. B. Reports, PageExtensions und Subscriber.
Ziel:
Die Base App soll zukünftig auch bei Kunden installierbar sein, die diese Drittanbieter-App nicht im Tenant haben. Deshalb möchten wir die gesamte drittanbieterbezogene Funktionalität aus der Base App herauslösen. (Ja ich weiß ..es sollte vorher gemacht werden, aber jemand hat nicht dran gedacht).
Dafür haben wir eine separate Bridge/Companion App entwickelt. Diese Bridge App hängt weiterhin von der Drittanbieter-App ab und enthält die spezifischen Integrationsobjekte. In der Base App haben wir die migrierten Objekte zunächst auf ObsoleteState = Pending gesetzt. Die Bridge App enthält die neue Funktionalität und ein neues Feld auf der Drittanbieter-Tabelle. Die Daten aus dem alten Feld sollen in das neue Feld der Bridge migriert werden.
Der geplante Ablauf wäre aus technischer Sicht gewesen:
1. Base App Version X:
Alte drittanbieterbezogene Objekte bleiben noch vorhanden, werden aber als obsolete/pending markiert.
Datenmigration in die Bridge App.
2. Nächste Major-Version:
Alte drittanbieterbezogene Objekte aus der Base App entfernen.
Dependency auf die Drittanbieter-App aus app.json der Base App entfernen.
Die Integrationsfunktionalität lebt nur noch in der Bridge App.
Problem:
Ich bin jetzt auf AppSourceCop AS0001 gestoßen:
https://learn.microsoft.com/dynamics365 ... cop-as0001Dort steht, dass Tables und TableExtensions nicht entfernt werden dürfen, weil sie für die Datenbanksynchronisierung benötigt werden.
Wenn ich das richtig verstehe, bedeutet das in unserem Fall:
Auch wenn wir die Funktionalität in die Bridge App verschieben, darf die bereits veröffentlichte TableExtension der Base App nicht entfernt werden. Wenn sie aber in der Base App bleiben muss, muss auch die Dependency auf die Drittanbieter-App in der Base App bleiben, weil die TableExtension eine Tabelle dieser Drittanbieter-App erweitert.
Damit wäre die Base App weiterhin nicht installierbar bei Kunden, die diese Drittanbieter-App nicht verwenden.
Meine Fragen:
1. Ist diese Interpretation korrekt?
Darf eine bereits in AppSource veröffentlichte TableExtension auf eine Tabelle einer Drittanbieter-App grundsätzlich nicht mehr aus der ursprünglichen App entfernt werden?
2. Gibt es einen supported Weg, diese TableExtension aus der Base App zu entfernen und gleichzeitig die Dependency auf die Drittanbieter-App aus der Base App zu entfernen?
3. Würde ObsoleteState = Removed hier helfen, oder gilt AS0001 trotzdem?
4. Kann der Mechanismus MovedTo/MovedFrom in diesem Szenario helfen?
Also konkret: ein Feld aus einer TableExtension der Base App in eine neue Bridge App verschieben, wobei die TableExtension eine Tabelle aus einer Drittanbieter-App erweitert.
Und falls ja: Kann danach die ursprüngliche TableExtension bzw. Dependency wirklich aus der Base App entfernt werden?
Wichtig ist uns, dass keine Daten verloren gehen. Aktuell gibt es produktive Daten im Feld der alten TableExtension. Diese Daten müssten entweder in die Bridge App migriert oder anderweitig erhalten werden.
Hat jemand von euch so einen Fall schon einmal gelöst oder eine klare Aussage von Microsoft dazu bekommen?
Vielen Dank im Voraus!