DotNet Überladung und Optionale Parameter

2. März 2011 09:42

Hallo,

da ich ursprünglich aus der C#-Welt komme habe ich direkt mal in Dynamics NAV 2009 R2 den Dateityp DotNet ausprobiert.
Mir ist aufgefallen, dass bei Nutzung von DotNet optionale Parameter immer mit angegeben werden müssen.
Im konkreten Fall habe ich die Office Interop Klassen benutzt um eine Excel-Instanz zu erstellen.
Im Member Workbooks.Open gibt es einen nicht optionalen Parameter (Dateiname) und 14 optionale Parameter.
Diese muss ich im Code der Page alle angeben, da ich ansonsten eine Fehlermeldung bekomme, dass die Parameteranzahl nicht stimmt.

Das zweite sind überladene Funktionen.
Da ich aus einer Page heraus ein Programm starten wollte, dachte ich mir, dass ich die Funktion Process.Start nutze.
Dies ist eine überladene Funktion mit mehreren möglichen Parameter-Kombinationen.
Hier funktioniert nur der Aufruf ohne Parameter.
Beim Aufruf einer überladenen Funktion kommt die Fehlermeldung beim Ausführen, dass die Methode Start nicht gefunden werden konnte.

Hat jemand ähnliche Erfahrungen gemacht und nähere Informationen dazu?
Gibt es dafür ein Walkaround?

grüße,
Jürgen

Re: DotNet Überladung und Optionale Parameter

2. März 2011 10:26

Guten Morgen,

das Problem gabs bei den Automations schon.
Ein Workaround wäre wohl eine eigene DLL, welche Du benutzt, um deine benötigten Aufruf in eindeutige Funktionsnamen aufzusplitten, die du dann in nav benutzen kannst.

Gruß
Jan

Re: DotNet Überladung und Optionale Parameter

2. März 2011 10:33

Hallo Jan,

das möchte ich aber vermeiden, da ich die DotNet Variablen Clientseitig ausführen möchte und deshalb nicht den Addin-Ordner füllen will.
War schon so verzweifelt, bei optionalen Parametern einfach System.Object zu übergeben, klappt aber nicht.
Gibt es keine Möglichkeit irgendwie ein NULL zu übergeben aus C/AL heraus?

grüße
Jürgen

Re: DotNet Überladung und Optionale Parameter

2. März 2011 11:04

Hmm, Automations mit dem Parameterwert "TRUE" bei dem Befehl CREATE erstellen? :-P

Gruß
Jan

Re: DotNet Überladung und Optionale Parameter

2. März 2011 18:06

Als Angabe für optionale Parameter müsste es eigentlich eine DotNet Variable Type.Missing sein
Diese funktioniert aber leider bei Dynamics NAV nicht. :cry:

Falls das doch jemand hinbekommt, bitte mitteilen.

grüße
Jürgen

Re: DotNet Überladung und Optionale Parameter

3. März 2011 14:46

Hallo,

zumindest für die optionalen Parameter habe ich eine Lösung gefunden:

Als erstes erstelle ich eine DotNet Variable DotNetMissing vom Typ : 'mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.Reflection.Missing'

Danach eine DotNet Variable DotNetObject vom Typ: 'mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.Object'

Nun initialisiere ich im Code die Variable DotNetObject mit DotNetMissing: DotNetObject:=DotNetMissing;

Danach kann ich die Variable DotNetObject als optionalen Parameter angeben und die entsprechende Funktion zieht den Standardwert.

grüße
Jürgen

Re: DotNet Überladung und Optionale Parameter

10. März 2011 15:12

Hallo,

nach langem ausprobieren, stelle ich fest, dass System.Reflection.Missing auch nicht immer als optionaler Parameter funktioniert.
Weiche jetzt doch auf eine eigene Klassenbiblothek aus, in der ich die betroffenen Objekte als Referenz übergebe.
Dann kann ich in meiner Klassenbiblothek mit diesem Objekt weiterarbeiten.
Ist dann alles in der Klassenbiblothek erledigt, kann ich in Dynamics NAV mit dem gleichen Objekt wieder weiterarbeiten.

Für ein Workbooks.Open würde das so aussehen:

Code:

using Excel = Microsoft.Office.Interop.Excel;
public class ExcelTools
    {
       
        public void WorkbooksOpen(ref Excel.Workbooks xWorkbooks, string xFilename)
        {
            xWorkbooks.Open(xFilename);
        }

    }



grüße
Jürgen

Re: DotNet Überladung und Optionale Parameter

10. März 2011 17:45

Hi Jürgen,

die Programmiersprache wechseln ist kein Thema oder? Falls doch, dann evtl . VB.NET:

Code:
Function OpenExcel(ByVal myfilename as string, Optional ByVal myUpdatelinks as Object = Nothing)
'Your Code
End Function


So müßte eigentlich der Parameter schon vorbelegt sein und kann auch nicht vergessen werden zu übergeben.

Volker

Re: DotNet Überladung und Optionale Parameter

10. März 2011 18:07

Iiiih, VB .NET :D

Re: DotNet Überladung und Optionale Parameter

10. März 2011 19:35

Tja, wenn es aber in dem Fall hilft. Außerdem kommen auch die C#-Programmierer nicht ganz um VB rum -> Zur Programmierung von Workflows in .NET müssen die Bedingungen in VB eingegeben werden, auch in C#-Projekten.

Volker

Re: DotNet Überladung und Optionale Parameter

10. März 2011 20:04

Hallo,

leider hätte ich aber immer noch mit der vorgeschlagenen VB-Lösung das gleiche Problem, dass ich aus Dynamics NAV heraus immer noch alle Parameter angeben müsste...
Das war ja die Ausgangslage, dass ich aus Dynamics NAV heraus, trotz optionaler Parameter, alle angeben muss.

grüße
Jürgen

Re: DotNet Überladung und Optionale Parameter

11. März 2011 09:13

Da bin ich mir jetzt nicht sicher, da im Gegensatz zu C# bei VB der Parameter ja schon mit einem Wert (z. B. auch "Nothing") vorbelegt ist. Bei C# muss man explizit ein Missing angeben.

Volker

Re: DotNet Überladung und Optionale Parameter

11. März 2011 09:20

Da täuscht Du Dich. Bei C# sind die Parameter mit dem Wert Type.Missing vorbelegt...

grüße
Jürgen