[gelöst]Fehler bei "Publish-NAVApp"

4. Januar 2016 13:09

Hallo,
ich versuche mich momentan an Extensions in NAV 2016.
Leider kommt es beim Befehl Publish-NAVApp zu folgendem Fehler:

WARNUNG: UnhandledErrorMessage
Publish-NAVApp : Ein Element mit dem gleichen Schlüssel wurde bereits hinzugefügt.
In Zeile:1 Zeichen:1
+ Publish-NAVApp -Path $NavXPath -ServerInstance $ServerInstance
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (:) [Publish-NAVApp], ArgumentException
+ FullyQualifiedErrorId : System.ArgumentException,Microsoft.Dynamics.Nav.Apps.Management.Cmdlets.PublishNavApp


Ich habe 2 Datenbanken, eine zum Entwickeln, eine zum Publishen.
Die angepassten/neuen Objekte der Entwicklungsdb exportiere ich als Textdatei in einen Ordner, (17 Stück)
Aus der PublishDb exportiere ich keine Objekte, da erstmal nur neue hinzukommen.
Anschließend erstelle ich die Manifest und die NAVX Datei und versuche diese zu Publishen.

Ich zweifle daran das der Fehler bei den angepassten Objekten liegt, da ich den Fehler auch bekomme wenn ich nur ein Objekt anpasse und publishe..

Hat da jemand schon erfahrungen mit gemacht?
Zuletzt geändert von b.denger am 26. Januar 2016 16:26, insgesamt 1-mal geändert.

Re: Fehler bei "Publish-NAVApp"

7. Januar 2016 09:40

Ich habe herausgefunden das das Publishen auf einer NAV Standard DB funktioniert. (Die bisherigen Datenbanken waren mit unserem Branchenmodul ausgestattet)
Einen Ansatz wie ich herausfinde was an meinen Datenbanken schief läuft habe ich leider immernoch nicht.

Re: Fehler bei "Publish-NAVApp"

26. Januar 2016 16:20

Soo...

Ich habe den Fehler nun gefunden.
Ich habe mir eine Datenbank genommen und bin darin alle Tabellen die nicht Mandantenübergreifend sind durchlaufen und habe alle Datensätze gekillt.
Der Fehler "Ein Element mit dem gleichen Schlüssel wurde bereits hinzugefügt." kam immernoch.
Also hab ich mich an die anderen Tabellen gehangen die mir nicht gleich alles zerschießen.
Der Fehler wollte jedoch nicht verschwinden.
Zuletzt die Object Table, dort kann ich natürlich nicht alle Datensätze löschen da mir ja sonst keine Objekte mehr in Nav übrig bleiben :-D
Jedoch ist mir aufgefallen das in der Datenbank die ich genutzt habe der "Company Name" gefüllt war, in der "Demo Database NAV (9-0)" war dies nicht der Fall.
Da ich den Mandanten vorher gelöscht habe, habe ich die Datensätze mit dem Company = "MANDANTENNAME" gekillt.
und siehe da es funktioniert..

Wir haben herausgefunden das die Mandantennamen seit NAV 2013 R2 wohl nicht mehr gefüllt werden.
Bei einem Update von NAV 2013 auf NAV 2015 wird die Object Table scheinbar nicht korrigiert.
Ob bei einem Update auf NAV 2013 R2 eine Routine greift, welche die Tabelle Korrigiert weiß ich leider nicht.

Weiß jemand ob eine solche Korrektur bei irgendeinem Updateschritt vorgenommen wird?

Re: [gelöst]Fehler bei "Publish-NAVApp"

26. Januar 2016 16:34

Hallo,

kann es sein, dass du in deiner Extension einen Schlüssel in die Datenbank einfügen möchtest, der in deiner Zieldatenbank schon existiert (auch als Bestanddteil)?

Gruß Fiddi

Re: [gelöst]Fehler bei "Publish-NAVApp"

26. Januar 2016 16:37

Da ich nicht zu 100% genau weiß welche Datensätze beim Publishen angelegt werden kann ich dies nicht ganz verneinen.
Ich weiß jedoch das in keiner der Nav App Tabellen(2000000151 - 2000000163) ein Datensatz vorhanden war.

Re: [gelöst]Fehler bei "Publish-NAVApp"

26. Januar 2016 17:16

Ich weiß jedoch das in keiner der Nav App Tabellen(2000000151 - 2000000163) ein Datensatz vorhanden war.

Ich meinte damit, ob du in einer deiner Tabellen, die du mit deiner Extension erweiterst nicht schon ein Schlüssel vorhanden ist, den du jetzt durch die Extension hinzufügen möchtest. (z.B. du möchtest der Tabelle Item noch einmal den Schlüssel "No." hinzufügen)

Gruß Fiddi

Re: [gelöst]Fehler bei "Publish-NAVApp"

26. Januar 2016 17:50

Nein. Ich habe keine Tabellenfelder geändert/Hinzugefügt.
Es lag wohl ausschließlich an der Object Tabelle.

Re: [gelöst]Fehler bei "Publish-NAVApp"

25. Januar 2017 15:42

Hallo Ben,

mir ist nicht ganz klar, welcher Schritt bei dir zur Lösung des Problems beigetragen hat.

Hintergrund:
Wir haben das selbe Problem beim Veröffentlichen von Extensions mit Publish-NAVApp auf einer Kundendatenbank.
Bei diesee Kundendatenbank haben wir ein Upgrade von NAV2009 zu NAV2016 (mit dem Zwischenschritt über NAV2013) durchgeführt.
Beim Publish-NAVApp erhalten wir bei dieses Datenbank dann ebenfalls diesen "UnhandledErrorMessage".
Wenn wir alle Objekte der Kundendatenbank exportieren und in eine Cronus-Datenbank für NAV2016 importieren, können wir für diese Datenbank bzw. NAV-Server die Extensions veröffentlichen und installieren.

Bei der Kundendatenbank kann ich natürlich nicht hergehen und zuerst alle Mandanten löschen, nur damit die Extensions veröffentlicht und installiert werden können.

Re: [gelöst]Fehler bei "Publish-NAVApp"

25. Januar 2017 16:26

Hi Jörg,

da Ben sicherlich nicht mehr hier reinschaut (macht jetzt was anderes), versuche ich mal, deine Frage zu beantworten (sofern ich mich noch entsinnen kann).

In der Object-Table steht bei migrierten Datenbanken noch der der Mandantenname (vielleicht führen wir die Konvertierung einfach falsch durch, aber wir wissen dann nicht, was wir falsch machen).
Dies führt anscheinend dazu, dass das Installieren/Publishen der Extensions nicht ganz funktionieren will.

Du sollst natürlich nicht die Mandanten löschen, sondern ggf. die Datensätze in der Object-Table, wo ein Mandantenname drin steht, säubern......ACHTUNG -> ich habe das Ganze noch nicht probiert!

Somit wäre vielleicht zu prüfen, ob ein Export-NavData und dann der Import in eine frische CronusDB den Sachverhalt korrigiert.

hier ein Vergleich der Objecttabelle (gefiltert mal auf Name = Payment Terms):
Standard:
Obj_Standard.png


Migriert:
Obj_Migriert.png


ich hoffe, ich konnte mich einigermaßen Verständlich ausdrücken!
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.

Re: [gelöst]Fehler bei "Publish-NAVApp"

25. Januar 2017 16:40

Hallo Stephan,

danke für deine schnelle Antwort.
Das Problem dabei ist meines Erachtens, dass das Feld "Company Name" in der Object-Table zum primary Key der Tabelle gehört.
D.h. wenn ich in der Datenbank die Mandanten "Maier GmbH" und "Müller KG" habe und in beiden Mandanten Zahlungsbedingungen eingerichtet wurden, dann stehen m.W. in der Object-Table u.a.folgende Datensätze:
Type - Company Name - ID
0 - Maier GmbH - 3
0 - Müller KG - 3
(Type 0 müsste "TableData" sein).

Object Table - SSM.png


Ich muss das mal prüfen, was in NAV2016 / NAV2017 passiert, wenn ich einen zweiten Mandanten anlege und dort z.B. die Zahlungsbedingungen einrichte und welche Datensätze im Anschluss in der Object-Table stehen.
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.

Re: [gelöst]Fehler bei "Publish-NAVApp"

25. Januar 2017 17:23

Ji Jörg,

es hat aus meiner Sicht nichts damit zu tun, ob Datensätze vorhanden sind (z.B: eingerichtete Zahlungsbedinungen). Selbst wenn keine Drin sind, steht da anscheinend der Mandantenname drin.
In einer frischen Cronus 2016 / 2017 DB ist bei allen Datensätzen der Tabelle Object kein Mandantenname eingetragen....und da sind sicherlich Demodaten drin :)

Einfach die Datensätze, welchen einen Mandantennamen beinhalten,löschen, kann man sicherlich auch nicht. Vielleicht wenn mann einfach einen Mandanten sich herausnimmt, dann alle Datensätze in der Object-Table auf diesen filtert und dann
den Mandantennamen aus den gefilterten Datensätzen cleared.....aber wie gesagt, das habe ich auch noch nicht ausprobiert (muss ich aber auch demnächst machen)

Re: [gelöst]Fehler bei "Publish-NAVApp"

25. Januar 2017 17:24

Hallo,

wenn ich in einer Cronus-Datenbank für NAV2016 über "Copy-NAVCompany" den Cronus-Mandanten in einen neuen Mandanten "Maier GmbH" kopiere und anschließend die Object-Table ansehe, dann steht dort z.B. für die Zahlungsbedingungen nur ein Datensatz mit Typ 0 (TableData) in der Object-Table (sowohl in der Cronus AG als auch in Maier GmbH in Zahlungsbedingungen vorhanden):

Object Table - Cronus und weiterer Mandant.png


Bei einer migrierten Datenbank steht für jeden Mandant ein Datensatz in der Object-Table:

Object Table - migrierte Kundendatenbank.png


Der nächste Schritt wäre nun, die Datensätze, Typ "TableData" mit leerem "Company Name" anzulegen und die Datensätze mit Mandantenname aus der Tabelle zu löschen.
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.

Re: [gelöst]Fehler bei "Publish-NAVApp"

25. Januar 2017 17:25

JRenz hat geschrieben:Der nächste Schritt wäre nun, die Datensätze, Typ "TableData" mit leerem "Company Name" anzulegen und die Datensätze mit Mandantenname aus der Tabelle zu löschen.


genau mein Gedanke :)

Re: [gelöst]Fehler bei "Publish-NAVApp"

26. Januar 2017 14:32

Hallo,

hier unser aktueller Stand:
Ich wollte per Report neue Datensätze vom Typ "TableData" ohne Mandantenname in der Object-Tabelle anlegen und die Datensätze mit Mandantenname löschen.
Allerdings lässt NAV dies nicht zu.
Ich habe inzwischen aber die Bestätigung von Microsoft erhalten, dass tatsächlich die "mehrfachen" Einträge (mit Mandantenname) in der Object-Tabelle die Ursache für den Fehler beim Publish-NAVApp ist.
Ich sollte im Laufe des Tages die Info von Microsoft erhalten, wie die Object-Tabelle bereinigt werden kann (vermutlich per SQL-Skript).
Die Bereinigung der Object-Tabelle hätte m.M. im Laufe des Upgrades (z.B. beim Upgrade von NAV2013 zu NAV2016) durchgeführt werden müssen.
Microsoft klärt auch dies noch.

Ich werde die Infos, die ich dann von Microsoft erhalte, hier weitergeben.

Re: [gelöst]Fehler bei "Publish-NAVApp"

27. Januar 2017 10:29

JRenz hat geschrieben:Die Bereinigung der Object-Tabelle hätte m.M. im Laufe des Upgrades (z.B. beim Upgrade von NAV2013 zu NAV2016) durchgeführt werden müssen.


genau das meine ich auch.
Danke für die Info, freue mich schon auf die Erklärung von MS inkl. Fix-Script :wink:

Re: [gelöst]Fehler bei "Publish-NAVApp"

27. Januar 2017 10:33

Hallo,
wie Stephan bereits beschrieben hat, haben wir inzwischen die Object-Table über SQL-Skript bereinigt und alle Datensätze vom Typ 0 ("TableData") mit dem zweiten, dritten, ... Mandanten gelöscht und anschließend in den Datensätzen, in denen noch der erste Mandantenname enthalten war, den "Company Name" geleert.
Anschließend ließen sich die Apps mit Publish-NAVApp und Install-NAVApp veröffentlichen und installieren.

Da wir das Upgrade von NAV2009 --> NAV2013 --> NAV2016 laut den Upgrade-Dokumentationen von Microsoft durchgeführt haben und uns nicht klar ist, ob wir hierbei einen Fehler gemacht haben oder ob dies ein Bug im Upgrade-Prozess ist, wäre für mich die Info interessant, wie denn die Object-Tabelle bei anderen Datenbanken (NAV2015, NAV2016 oder NAV2017) aussieht, die von NAV2009 upgegradet wurden.

Re: [gelöst]Fehler bei "Publish-NAVApp"

27. Januar 2017 14:07

JRenz hat geschrieben:Hallo,
...mich die Info interessant, wie denn die Object-Tabelle bei anderen Datenbanken (NAV2015, NAV2016 oder NAV2017) aussieht, die von NAV2009 upgegradet wurden.


Du musst doch immer über 2013 gehen, wenn du von 2009 kommst, somit werden die nicht viel besser aussehen.
Kannst du uns noch einen gefallen tun, und das SQL-Script hier abstellen?

Re: [gelöst]Fehler bei "Publish-NAVApp"

27. Januar 2017 14:22

Hallo Stephan,

das Skripting im SQL Management Studio hat am Ende ein Kollege übernommen, wobei das eigentlich nichts besonderes war.

Von Microsoft haben wir dazu folgendes Vorgehensweise erhalten:

Erst ein Backup der Tabelle in neue Tabelle hizugefügt
Code:
SELECT * Into ObjectBackUp FROM [NAV90CusBlank].[dbo].[Object]


Danach doppelte Zeilen gelöscht.
Code:
DELETE [NAV90CusBlank].[dbo].[Object] where Type =0 and [Company Name] = 'CRONUS AT'


wir haben nach dem Löschen der Datensätze für Mandant 2 und 3 die Datensätze mit dem Mandantenname 1 geleert.

Code:
UPDATE [NAV90CusBlank].[dbo].[Object] SET [Company Name] = '' WHERE [Type] = 0

Re: [gelöst]Fehler bei "Publish-NAVApp"

30. Januar 2017 09:04

Hi Jörg,

vielen Dank für's Teilen. Ich muss es demnächst auch durchführen und wollte sichergehen, dass wir die DB nicht kaputt machen :P (wir testen natürlich vorher an einer Nicht-Produktiv-DB)