Custom Activities sind cool: Sie erlauben, komplexe Teillogik eine Workflows in eine eigene Klasse / Activity zu packen, und dann den eigentlich Workflow schön schlank zu halten. Wenn nur nicht der Standard Workflow Designer im Visual Studio dann sämtliche Activities in der Custom Activity wieder anzeigt:
Das NERVT gewaltig. Jedenfalls mich persönlich. Zum Glück gibt es - wie für die meisten Probleme - dafür auch eine einfache Lösung: Einen Custom Designer per Attribut auf die Custom Activity setzen. Was jetzt kompliziert tönt, ist ganz einfach, da der Custom Designer nur deklariert werden muss, und gar keinen eigentlichen Code enthält.
[Designer(typeof(MyDesigner), typeof(IDesigner))]
public partial class HandleGroupReview : SequenceActivity
{
private class MyDesigner : ActivityDesigner { }
// … A lot of workflow code …
}
Anschliessend muss noch das Attribut “Designer” auf der Custom Activity Klasse gesetzt werden und der oben abgebildete Workflow sieht schon wieder viel aufgeräumter aus.

Falls wir einen Timeout einbauen möchten, müssen wir auf ein zweites Event warten die Delay Activity um anschliessend den Reminder zu senden. Glücklicherweise gibt's in der Windows Workflow Foundation die Listen Activity, welche es ermöglicht, auf mehrere Events gleichzeitig zu warten. Diese Activity blockiert den Workflow bis einer der angegebenen Events eintritt.