Willkommen bei Entwickler-Forum.
Seite 1 von 2 1 2 LetzteLetzte
Ergebnis 1 bis 10 von 15
  1. #1
    Stammgast
    Registriert seit
    03.03.2007
    Ort
    Schleswig-Holstein
    Beiträge
    315

    Standard Objekt-Übergabe an .NET Anwendung

    Hallo,

    Ich habe eine kleine .NET Anwendung geschrieben, die labidar zusammengefasst dazu dient, Daten für einen Auftrag zu sammeln.
    Dieses Formular möchte ich nun dahingehend erweitern, dass ich aus diesen Daten direkt einen Beleg erzeugen kann.
    Für die Beleginitialisierung benötige ich allerdings ein Mandanten-Objekt, das mir an der Stelle nicht zur Verfügung steht.

    Dieses Objekt steht mir allerdings zum Zeitpunkt des Aufrufs des Formulars zur Verfügung, so dass ich eine Möglichkeit suche, diese an die Anwendung zu übergeben.
    Per CommandLineArgs bekomme ich ja nur String-Werte übergeben.

    Gibt es eine Möglichkeit, dass ich der Main() oder der Form1() auf ein externes Objekt zugreife?
    Die entsprechenden Assemblies, um mit dem Objekt zu handeln habe ich bereits als Verweis in meinem Projekt hinterlegt und habe darauf auch Zugriff.
    Ich müsste jetzt nur noch ein entsprechendes Objekt damit casten.

    Danke für Tipps und/oder Hinweise
    Gruß Arne
    PHP rocks!
    Eine Initiative der PHP Community

  2. #2
    Stammgast
    Registriert seit
    23.04.2011
    Ort
    Zürich
    Beiträge
    435

    Standard

    Mir ist nicht ganz klar was du möchtest aber google mal nach WCF oder "Interprocess Communication"

  3. #3
    Stammgast
    Registriert seit
    03.03.2007
    Ort
    Schleswig-Holstein
    Beiträge
    315

    Standard

    Hi,

    Danke für den Hinweis.
    Der Begriff "Interprocess Communication" war mir nicht geläufig, denke aber dass ich den Ansatz schon getestet habe.

    Ich habe hierfür die Methode über das Clipboard-Objekt gewählt.
    Diesem habe ich mit Clipboard.setData( "my.object.type", myObject ) das Objekt zugewiesen und erhalte auch ein true in der .NET Applikation, wenn ich das mit Clipboard.ContainsData( "my.object.type" ) abfrage.
    Im nächsten Step bekommt er allerdings die Zuweisung nicht sauber hin.

    Ich werde die anderen Wege der IC auch noch mal testen, danke!


    Gruß Arne


    Zitat Zitat von Wernfried
    Mir ist nicht ganz klar was du möchtest [...]
    Wir arbeiten mit einer Warenwirtschaft, die über Schnittstellen anpassbar/erweiterbar ist. Diese Schnittstellen kann ich mit C#.NET tlw. befüllen.
    Innerhalb dieser Schnittstellen sind aber Formulare und Listen "größerer" Datenmengen sehr langsam, weshalb ich die Möglichkeit nutze für bestimmte Dinge "auszubrechen".

    Ich schnappe mir dann mein Visual Studio und erstelle eine kleine Form-Applikation, die schnell und individuell für die User bedienbar ist.
    Den "Ausbruch" führe ich über einen Process und den entsprechenden ProcessStartInfo-Informationen aus.
    Wenn der User die Arbeit am Formular beendet hat, läuft die Funktion aus der Schnittstelle automatisch weiter un verarbeitet die Daten, die von der .NET Applikation in einer Datenbank abgelegt wurden.

    Ich würde nun diese Weiterverarbeitung gerne im .NET Formular integrieren.
    Mein Problem dabei ist, dass ich für bestimmte Aufgaben das Mandanten-Objekt der WaWi benötige, das mir natürlich in der Schnittstelle selbst zur Verfügung steht.
    Dieses Mandanten-Objekt möchte ich an die .NET-Applikation weiterreichen, um es dort zu verwenden.

    Mir geht es nicht um Lizenz-Umgehung. Mir ist klar, dass bei meinem Vorhaben temporär eine Lizenz "verbraucht" wird, was absolut akzeptabel ist.
    Mit dem Tool arbeitet eh nur eine Person maximal zur selben Zeit, so dass sich das mit den Lizenzen in Grenzen hält.
    Und i.d.R. sollte man innerhalb von einigen Minuten mit dem Formular durch sein, so dass die Lizenz wieder frei wird.

    Ich hoffe, das gibt es etwas verständlicher wieder?
    PHP rocks!
    Eine Initiative der PHP Community

  4. #4
    Stammgast
    Registriert seit
    26.02.2003
    Beiträge
    4.787

    Standard

    Tatsächlich schwer verständlich vielleicht die Frage mit ein paar mehr Details anreichern.

    Man könnte erraten das das Formular und das Beleg erzeugen 2 verschiedene Programme sind? Gleichzeitig sprichst du von Referenzen auf irgendwas. Ist damit etwas 3.tes gemeint das die Programmteile bezüglich Mandant enthalten? Wenn ja wo ist dann das Problem du hast ein Referenz also benutz einfach die Dinge die in dieser Assembly stecken?

  5. #5
    Forenheld
    Registriert seit
    26.02.2003
    Beiträge
    16.121

    Standard

    Ev. das Objekt serialisieren und als String dem anderen Prozess übergeben
    Christian

  6. #6
    Stammgast
    Registriert seit
    03.03.2007
    Ort
    Schleswig-Holstein
    Beiträge
    315

    Standard

    Zitat Zitat von Ralf Jansen Beitrag anzeigen
    Tatsächlich schwer verständlich vielleicht die Frage mit ein paar mehr Details anreichern.

    Man könnte erraten das das Formular und das Beleg erzeugen 2 verschiedene Programme sind? Gleichzeitig sprichst du von Referenzen auf irgendwas. Ist damit etwas 3.tes gemeint das die Programmteile bezüglich Mandant enthalten? Wenn ja wo ist dann das
    Problem du hast ein Referenz also benutz einfach die Dinge die in dieser Assembly stecken?
    Nein, nicht ganz, also nochmal Schritt für Schritt:

    Ich befinde mich grundsätzlich in der Umgebung der hier eingesetzten WaWi ( Warenwirtschaft ).
    Diese kann ich über Schnittstellen erweitern, wozu ich C#.NET verwende.

    Innerhalb dieser Schnittstelle habe ich alles, was ich benötige, eben auch das Mandantenobjekt!
    Nur sind die Formulare innerhalb dieser Schnittstellen sehr langsam und nicht schön zu bedienen.

    Daher "springe" ich aus der Schnittstelle mittels Process.Start() in eine eigene kleine .NET-Applikation, in der die Benutzer über DataGridViews deutlich performanter und effektiver die Daten "verwalten" können.
    Aus diesen Daten möchte ich nun bestimmte Belegarten erstellen, wozu ich aber das Mandantenobjekt benötige.
    Da ich das nicht in der .NET-Applikation habe, beende ich diese und lande wieder in der WaWi-Schnittstelle, in der ich das entsprechende Objekt habe und Belege erzeugen kann.

    Dieses Hin- und Hergespringe gefällt mir nicht, weshalb ich gerne die Belegerzeugung in der .NET Applikation machen möchte.

    Ich suche also nur eine Möglichkeit, vor bzw. bei dem Aufruf der .NET Applikation das Mandantenobjekt zu übergeben.
    Nichts drittes also, sondern einfach nur zwei Komponenten: WaWi-Schnittstelle und eigene .NET Applikation


    Zitat Zitat von Christian Marquardt
    Ev. das Objekt serialisieren und als String dem anderen Prozess übergeben
    Das werde ich nochmal probieren, danke!
    PHP rocks!
    Eine Initiative der PHP Community

  7. #7
    Stammgast
    Registriert seit
    26.02.2003
    Beiträge
    4.787

    Standard

    Daher "springe" ich aus der Schnittstelle mittels Process.Start()
    Und wieso kannst du an der Stelle wo du Process.Start() aufrufst nicht einfach ein Form.Show() aufrufen? Oder irgendwas equivalentes das auch in der anderen Anwendung passiert? Wenn du ein Process.Start() da hinprogrammiert bekommst dann kannst du bestimmt auch die Anwendung die du da startest auch direkt referenzieren und entsprechend denn darin enthaltenen Code ausführen ohne einen neuen Prozess abzuspalten.

  8. #8
    Stammgast
    Registriert seit
    03.03.2007
    Ort
    Schleswig-Holstein
    Beiträge
    315

    Standard

    Zitat Zitat von Ralf Jansen Beitrag anzeigen
    Und wieso kannst du an der Stelle wo du Process.Start() aufrufst nicht einfach ein Form.Show() aufrufen? Oder irgendwas equivalentes das auch in der anderen Anwendung passiert? Wenn du ein Process.Start() da hinprogrammiert bekommst dann kannst du bestimmt auch die Anwendung die du da startest auch direkt referenzieren und entsprechend denn darin enthaltenen Code ausführen ohne einen neuen Prozess abzuspalten.
    Wenn das geht, gerne. Aber wie soll ich denn das Formular aus meiner eigenen .exe direkt ansprechen?!
    Ich befinde mich doch an der Stelle noch gar nicht in meiner eigenen .NET Applikation.

    Um das mal auf ein simpelstes Beispiel runterzubrechen:
    Stell Dir vor, Du hast zwei von einander völlig unabhängige .exe-Dateien, nennen wir sie WaWi.exe und Formular.exe.
    Du startest und arbeitest innerhalb der WaWi.exe und alles ist soweit gut.
    Jetzt kommt aber der Moment, in dem ich eine weitere Anwendung starte ( mein .NET Formular! ), welche sich in Formular.exe befindet.
    Wenn Du mir sagst, wie ich nun anders als mit Process.Start() die Formular.exe sinnvoll starten soll, versuche ich das gerne.

    Hinweis: Mit WaWi.exe ist hier nur beispielhaft die Warenwirtschaft gemeint, in der sich der Benutzer im Standard aufhält.


    Gruß Arne
    PHP rocks!
    Eine Initiative der PHP Community

  9. #9
    Stammgast
    Registriert seit
    26.02.2003
    Beiträge
    4.787

    Standard

    Wenn ich es richtig verstanden habe dann hast du es geschafft innerhalb der WaWi.exe deinen eigenen Code auszuführen eben denn Process.Start Aufruf. Dann solltest du da doch auch genauso anderen Code ausgeführt bekommen?

    Wenn das geht, gerne. Aber wie soll ich denn das Formular aus meiner eigenen .exe direkt ansprechen?!
    Ich befinde mich doch an der Stelle noch gar nicht in meiner eigenen .NET Applikation.
    Ich bezweifle noch das du einen weiteren Prozess brauchst. Nach dem was du beschreibst kann man Code in der anderen Anwendung auch ausführen. Zumindest hast du nirgendwo explizit von Einschränkungen gesprochen. Das was wir wissen ist das du dort ein Process.Start() ausgeführt hast udn über Net Funktionen auch am Clibboard rumgespiel hast. Mir ist nicht ersichtlich warum dieser Code geht aber was anderes geht nicht.
    Geändert von Ralf Jansen (13.04.2017 um 18:49 Uhr)

  10. #10
    Stammgast
    Registriert seit
    03.03.2007
    Ort
    Schleswig-Holstein
    Beiträge
    315

    Standard

    Sorry, weiß gerade nicht, ob ich nicht verstehe, was Du meinst oder umgekehrt.
    Du hast gesagt:
    Und wieso kannst du an der Stelle wo du Process.Start() aufrufst nicht einfach ein Form.Show() aufrufen?
    Die Antwort ist: Weil ich an der Stelle kein Objekt meiner der Form habe! Die WaWi bietet mir Schnittstellen, in denen ich in begrenztem Rahmen .NET anwenden kann.
    Eigene Masken kann ich an der Stelle nur aufrufen, indem ich sie direkt über das System, in diesem Falle über Process.Start() aufrufe.
    Wie soll ich denn die Form referenzieren, wenn es sie an der Stelle noch gar nicht gibt?!

    Nach dem was du beschreibst kann man Code in der anderen Anwendung auch ausführen. Zumindest hast du nirgendwo explizit von Einschränkungen gesprochen.
    Dass aber nicht alles möglich ist, lässt sich bereits in #3 vermuten:
    Wir arbeiten mit einer Warenwirtschaft, die über Schnittstellen anpassbar/erweiterbar ist. Diese Schnittstellen kann ich mit C#.NET tlw. befüllen.
    Innerhalb dieser Schnittstellen sind aber Formulare und Listen "größerer" Datenmengen sehr langsam, weshalb ich die Möglichkeit nutze für bestimmte Dinge "auszubrechen".
    Wenn ich Dich nicht recht verstehe, kläre mich bitte auf.
    Ich weiß nur nicht, wie ich das Problem noch beschreiben soll, weil ich finde, dass es ziemlich eindeutig ist.

    Innerhalb der Schnittstelle habe ich zwar auch die Möglichkeit, Formulare zu verwenden, ( nicht TForm von VS! ), aber die haben für meine Zwecke einfach zu wenig Controls.
    Ich kann mir wohl Controls aus dem DevExpresss-Repertoire zusammenklöppeln, aber nur über einen Weg, der das Formular nicht mehr besonders benutzerfreundlich und langsam macht.
    Das ist aber ein Schnittstellenproblem, würde ich mal behaupten.

    Da jetzt die meiste Arbeit der Ansicht Datenbank lastig ist, habe ich mit Visual Studio unabhängig von der WaWi eine Windows-Form-Anwendung erstellt, die alles schnell und benutzerfreundlich zur Verfügung stellt.
    D.h., man kann grundsätzlich auch mit dem Formular auch arbeiten, wenn man die WaWi deinstallieren würde!

    Diese Windows-Form Anwendung ist aber eben wie gesagt unabhängig von der WaWi und kann auch nicht einfach so da hinein kopiert o.ä. werden.
    Ich muß diese explizit aufrufen/starten. Das mache ich wie gesagt über Process.Start() ( anstatt Doppelklick wenn ich an der Stelle auf die WaWi verzichten würde ).
    Ich nutze die Schnittstelle der WaWi an der Stelle also nur, um eigene Formulare zu starten, damit die User alles an einer Stelle verwalten können.
    So selten ist die Vorgehensweise eigentlich nicht, denke ich...

    Gibt es einen besseren Weg, bin ich gern bereit diesen zu erfahren und evtl. zu nutzen.
    Bisher bleibt mir nur die Möglichkeit, eigene Windows-Form-Anwendungen über bspw. Process.Start() aufzurufen.

    Ich bin Dir wirklich dankbar, dass Du Dich zumindest damit befasst, aber ich weiß echt nicht, wie ich das noch erklären soll/kann.

    Erstmal schöne Ostertage
    Danke Arne
    PHP rocks!
    Eine Initiative der PHP Community

 

 
Seite 1 von 2 1 2 LetzteLetzte

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •