SharePointCommunity
Die deutschsprachige Community für SharePoint, Microsoft 365, Teams, Yammer und mit Azure

Sponsored by

Willkommen im Forum Archiv.
Einträge sind hier nicht mehr möglich, aber der Bestand von 12 Jahren SharePoint-Wissen ist hier recherchierbar.




Visual Studio: WindowFormAnwendung während eines sequenziellen Workflows?

Geprüfte Antwort Dieser Beitrag hat 4 Antworten

Ohne Rang
7 Beiträge
Yuri Li erstellt 30 März 2012 11:14
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut
Hallo,
 
Ich teste gerade ein wenig mit Workflows in Visual Studio 2010 Ultimate, speziell mit sequenzielle Workflows für eine Liste in SharePoint 2010. Dabei hat sich bei mir die Frage gebildet, ob es möglich ist während eines Worfklows ein selbsterstelltes Fenster öffnen zu lassen.
Ich habe in Visual Studio ein sequenzieller Workflow gestartet in C#.
Alles drumherum aufgebaut, so dass der Workflow erstmal funktioniert, wenn er gestartet wird.
Dann habe ich eine weitere Klasse zum Projekt hinzugefügt die mithilfe von System.Window.Forms ein Fenster und Button erstellt.
Diese Klasse rufe ich dann in meinem sequenziellen Workflow auf.
Während des Debug Mode, sehe ich dass das Fenster initalisiert wird und der Workflow läuft problemlos weiter. Aber ich sehe das Fenster nicht. Es wird nicht sichtbar.
 
Erst hatte ich überlegt es liegt vlt daran, dass der Workflow zu schnell durcharbeitet und dadurch das Fenster keine Zeit hat sich zu erstellen. Daher habe ich dann ein Thread.Sleep eingebaut der solange läuft, bis auf den Button geklickt wird.
Leider kam ich daduch in eine Endlos-Schleife, weil, wie bereits gesagt, dass Fenster für meine Augen nicht sichtbar war.
Habe ich irgendwo ein Denkfehler oder kann man einfach nicht während eines Worklows ein Fenster erstellen?
 
Hier noch der grobe Quellcode:
Aufruf der Klasse Fenster in Worklfow1.cs:

Fenster test = new Fenster();
            test.Show();

Fenster.cs:
 
public class Fenster : Form
    {
        public Boolean shouldPause = true;
        public Fenster()
        {
            InitializeComponent();
            //while (shouldPause)
            //{
            //    System.Threading.Thread.Sleep(500);
            //}
        }
        private void InitializeComponent()
        {
            this.button1 = new System.Windows.Forms.Button();
            this.SuspendLayout();
            //
            // button1
            //
            this.button1.Location = new System.Drawing.Point(51, 95);
            this.button1.Name = "button1";
            this.button1.Size = new System.Drawing.Size(183, 55);
            this.button1.TabIndex = 0;
            this.button1.Text = "button1";
            this.button1.UseVisualStyleBackColor = true;
            this.button1.Click += new System.EventHandler(this.button1_Click);
            //
            // Program
            //
            this.ClientSize = new System.Drawing.Size(292, 273);
            this.Controls.Add(this.button1);
            this.Name = "Program";
            this.ResumeLayout(false);
        }
        private Button button1;
        private void button1_Click(object sender, EventArgs e)
        {
            shouldPause = false;
        }
 
    }
 
Vielen Dank schonmal für jegliche Art von Hilfe :)
 
Bis Dann
Yuri Li

Alle Antworten

Ohne Rang
19231 Beiträge
Andi Fandrich Als Antwort am 30 März 2012 11:51
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Vergiß Windows Forms im Zusammenhang mit SharePoint-Workflows. Erstens laufen die Workflows auf dem Server und das Fenster würde dann auch auf dem Server erscheinen (wo es niemand sieht). Und zweitens werden die Workflows von einem Dienst-Prozeß gestartet. Dienste laufen auch ohne daß jemand am System angemeldet ist und haben deshalb keine Interaktion mit dem Desktop. Sprich: sie können gar keine Fenster anzeigen.

Viele Grüße
Andi
af @ evocom de
Blog
Ohne Rang
7 Beiträge
Yuri Li Als Antwort am 30 März 2012 12:10
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut
Okay vielen Dank. Dann muss ich dort nicht weiter rumexperimentieren.
Der eigentliche Hintergrund des Ganzen ist, dass ich aus einer Sharepoint Liste Information sammeln und diese per Mail weiter veschicken möchte. Das alles klappt auch reibungslos mit foreach und System.Net.Mail. Der einzige Nachteil ist, dass die Mail sofort verschickt wird.
Und ich fände es gut, wenn man vorher den Mailtext sehen könnte. Denn dieser Workflow startet nur, wenn man ihn auslöst und endet dann auch wieder.
Ich habe es auch schon probiert, mit E-Mail Outlook zu verbinden, wo ich aber dann immer folgende Fehlermeldung bekomme:
Eine Ausnahme (erste Chance) des Typs "System.Runtime.InteropServices.COMException" ist in Mail.dll aufgetreten.
Zusätzliche Informationen: Retrieving the COM class factory for component with CLSID {0006F03A-0000-0000-C000-000000000046} failed due to the following error: 80010001.
Was mir soviel sagt, dass er keine Verbindung zu Outlook und der Webanwendung aufbauen kann.
Daher habe ich diese neuen Weg ausprobiert.
Gibt es überhaupt eine Möglichkeit mein Vorhaben zu realisieren? Oder muss ich akzeptieren, dass ich die Mail einfach nicht mehr sehen kann, vor dem abschicken?
Danke für die Antwort :)
Yuri Li
Ohne Rang
19231 Beiträge
Andi Fandrich Als Antwort am 30 März 2012 12:15
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Bei der Interaktion mit Outlook hast Du dasselbe Problem: Outlook auf dem Server und Windows-Dienst.

Aus dem Workflow heraus hast Du niemals eine direkte Interaktion mit dem Benutzer. Du kannst vom Server aus nicht erzwingen, daß auf dem Rechner des Benutzers irgendwas passiert. In Workflows verwendet man deshalb Aufgaben. In Deinem Fall müßtest Du also einem Benutzer eine Aufgabe zuweisen, mirt der Aufforderung den Mailtext zu prüfen. Sobald die Aufgabe erledigt ist, verschickt der Workflow dann die Mail.

Viele Grüße
Andi
af @ evocom de
Blog
Ohne Rang
7 Beiträge
Yuri Li Als Antwort am 30 März 2012 14:42
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut
Vielen Dank für die Antwort.
Ich probiere mal deinen Vorschlag aus, ansonstonsten lasse ich es einfach damit, dass die Mail verschickt wird.
 
Bis Dann
Yuri Li