程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> wf框架編程-設計器部分:工作流設計器(2)

wf框架編程-設計器部分:工作流設計器(2)

編輯:關於C語言

2 WF設計器

WF設計器的實現思路主要是每個Activity對應的ActivityDesigner和駐留環境(Designer Surface),這也為我們實現基於Web的WF設計器提供了思路,就winform環境和webform環境比較,AcitivityDesinger是不變的,變化的是駐留環境。很長時間沒有接觸WF了,這裡討論的環境是Winfrom下的,以後有機會做的Web環境下再整理吧。

wf框架編程-設計器部分:工作流設計器

Wf設計器結構

2.1 Activity Designer

Activity關於默認的DesignerAttribute聲明是Designer(typeof(ActivityDesigner), typeof(IDesigner);Designer(typeof(ActivityDesigner), typeof(IRootDesigner)

我們如果實現自定義的Acitivity,一般從Activity繼承就可以了,不需要重新寫。由於ActivityDesigner的設計表現為簡單矩形,所以我們看到的活動都是簡單矩形的樣子,當然我們也可以修改的很漂亮。對應復合活動,如圖,從CompositeActivityDesigner上繼承下來Desinger有好幾個,都有自己的設計表現,其中:ParallelActivityDesigner表現為所有子活動並行;SequenceDesigner表現是自動以順序方式呈現子活動。

如果是特殊的復合活動,可能需要自己實現Desinger。這裡覺的例子是wf本質論上的,大家也可以比較書看一下,電子書是可以免費下載的。例子中要實現自定義的PrioritizedInterleave,設計表現是需要在設計器上表現出優先級關系,由於現有類庫缺乏支持,所以就需要自己實現特點的Acitivity Designer.

如何實現自定義ActivityDesigner

PrioritizedInterleaveDesigner例子中,設計意圖是點自活動可以在PropertyGrid中設置Priority屬性,根據Priority值,子活動位於不特點位置  

可以通過PropertyGrid設置屬性

1.IExtenderListService中加入特定IExtenderProvider。見類圖。

2.特定IExtenderProvider實現

通過ProvidePropertyAttribute和PropertyGrid關聯

IExtenderProvider.CanExtend作為是否使用屬性的依據,如果為true,PropertyGrid控件會查找extender類中的Get<PropertyName>,Set<PropertyName>方法,實現和Acivity屬性的交互。

Wf還沒有開源,猜測這裡這裡使用AOP代碼織入並使用了Template模式。

3.Activity的聲明使用自定義的ActivityDesigner。Designer(typeof(自定義ActivityDesigner), typeof(IDesigner)

例子中PrioritizedInterleaveDesigner繼承自CompositeActivityDesigne,所以對PrioritizedInterleave的聲明,實際上對整個復合活動的聲明

CompositeActivityDesigner.ContainedDesigners

右鍵菜單修改屬性

1.實現IDesignerVerbProvider接口

2.初始化活動的時候IDesignerVerbProviderService.AddVerbProvider(IDesignerVerbProvider);

3.接口實現

通過ActivityDesignerVerb.PropertIEs得到Activity

針對這個Activity get並修改後Set

4.PerformLayout使修改生效

修改設計器圖形(復合活動和基礎活動都可以修改)

1.對於復合活動override Glyphs方法,得到ActivityDesignerGlyphCollection

ActivityDesignerGlyphCollection.Add(DesignerGlyph);

-
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved