Cannot convert type 'int' to '...Runtime.NavOption'

15. August 2017 08:33

Hier etwas zum Füttern der Suchmaschine. Betroffen sind viele NAV-Versionen, vermutlich ab NAV 2013.

  1. Wenn euch folgender Laufzeitfehler begegnet:
    error CS0030: Cannot convert type 'int' to 'Microsoft.Dynamics.Nav.Runtime.NavOption'

    Außerdem im Eventlog:
    Type: Microsoft.Dynamics.Nav.Types.Exceptions.NavNCLMetadataCompileErrorException
    Compilation of assembly 'xxx.dll' failed. This can be caused by differences between binaries in your installation or your database. Ensure that all installation components are consistent and up to date. Error details: xxx : error CS0030: Cannot convert type 'int' to 'Microsoft.Dynamics.Nav.Runtime.NavOption'

  2. oder sich der NAV-Dienst mit folgendem Event Log nicht mehr starten lässt:
    The Microsoft Dynamics NAV Server instance could not start because of an event publisher or subscriber error in relation to Codeunit xxx. Try to recompile the object in the development environment to ensure the correct metadata is used.
    Compilation of assembly 'xxx.dll' failed. This can be caused by differences between binaries in your installation or your database. Ensure that all installation components are consistent and up to date. Error details: xxx : error CS0030: Cannot convert type 'int' to 'Microsoft.Dynamics.Nav.Runtime.NavOption'
... dann verwendet ihr im Code irgendwo ein
Code:
OptionVariable += 1;
(oder -= usw).

Der unter 2. erwähnte Eventlog enthält irreführende Informationen: Die genannte Codeunit hat kein Problem mit Subscribern oder Publishern. Sie hat enthält zwar Subscriber oder Publisher, aber die unerlaubte Zuweisung += 1 kann irgendwo anders stehen. Immerhin ist die Codeunit-ID richtig, und auch mit Hilfe der Error details findet man die ursächliche Codezeile.

Kompilieren allein der Objekte bringt übrigens nichts, schon gar nicht einen Fehler. Es ist ein reiner Laufzeitfehler.

Workaround:
Code:
OptionVariable := OptionVariable + 1;


Dies befindet sich aktuell bei Microsoft in der Prüfung.
Nachtrag: Korrigiert mit NAV 2017 CU10

Re: Cannot convert type 'int' to '...Runtime.NavOption'

16. August 2017 06:15

Auch schön und auch seit gestern in der Mache: Vergleich zwischen Feld Record ID und Variable RecordID. Führt zu einem Compilerfehler.

Re: Cannot convert type 'int' to '...Runtime.NavOption'

16. August 2017 08:35

SilverX hat geschrieben:Auch schön und auch seit gestern in der Mache: Vergleich zwischen Feld Record ID und Variable RecordID. Führt zu einem Compilerfehler.

Gibt es dazu bereits einen Workaround?

Ohne es ausprobiert zu haben, könnte ich mir folgenden Workaround vorstellen:
IF FORMAT(MyRecID) <> FORMAT(MyRecord."Source Record ID") THEN

Re: Cannot convert type 'int' to '...Runtime.NavOption'

16. August 2017 11:41

Ja. Oder du weist das Feld einer Variablen zu.

Re: Cannot convert type 'int' to '...Runtime.NavOption'

17. August 2017 19:15

Natalie hat geschrieben:Workaround:
Code:
OptionVariable := OptionVariable + 1;

Das erinnert mich an den ähnlichen Fehler in den aten NAV-Versionen beim Hochzählen einer Datum-Variable:
Code:
MyDate := TODAY;
MyDate += 1;
MESSAGE(FORMAT(MyDate)); -> Fehler

Code:
MyDate := TODAY;
MyDate :=  MyDate +1;
MESSAGE(FORMAT(MyDate)); -> kein Fehler