posted @ 2008-03-18 09:33 Windie Chai(笑煞天) 阅读(6101) | 评论 (35)编辑
     摘要: 在状态机工作流中,如何在接收并处理两个并行的事件呢?又如何在这两个事件都完成之后做进一步操作呢? 本文通过我的上一篇文章《MOSS多级审批工作流【StateMachine版】》来和大家分享我的一种方法。   阅读全文
posted @ 2008-07-22 09:04 Windie Chai(笑煞天) 阅读(1035) | 评论 (6)编辑
     摘要: 去年我发布过一个MOSS多级审批工作流,采用顺序工作流模式开发;后来又做了一些改进,用ConditionedActivityGroupActivity取代了繁复的WhileActivity+IfElseActivity嵌套,但仍然是顺序工作流。
在第二篇文章的末尾我曾写道:“审批这样的流程并不适合用顺序工作流来实现,用WF的另外一种工作流-状态机工作流会更好”,前段时间终于又想起了这回事儿,抽空把这个工作流用状态机实现了,现在和大家分享一下开发心得。
  阅读全文
posted @ 2008-07-15 09:08 Windie Chai(笑煞天) 阅读(1469) | 评论 (41)编辑
posted @ 2008-06-30 01:11 Windie Chai(笑煞天) 阅读(294) | 评论 (9)编辑
     摘要:
上周尝试了一下发布不久的Silverlight 2 beta2,设计了这么一个简单的播放器widget。它支持循环播放,支持自动播放,支持封面图片,支持暂停(鼠标移动到封面上就会淡入按钮)。
本来是想设计的稍微酷一点的,发现Silverlight2的矩阵变形能力还是相当弱的,其实现的功能也就是平移、平行四边形化和旋转,如果再支持梯形化就好了。
同时,也发现beta2相较之前版本的一些不同之处。
  阅读全文
posted @ 2008-06-26 09:33 Windie Chai(笑煞天) 阅读(2101) | 评论 (13)编辑
     摘要: 前段时间简单的研究了一下.NET操作Lotus Notes邮件的实现,具体的操作包括邮件的读取和发送,而且都要包含附件,其间参考了《在 Microsoft .NET 应用程序中使用 IBM Lotus Domino》一文,现在把成果和大家分享一下。
本文将分为获取用户列表、发送邮件、收取邮件三个部分,并会在文末提供范例程序的下载。   阅读全文
posted @ 2008-06-17 09:10 Windie Chai(笑煞天) 阅读(441) | 评论 (9)编辑
     摘要:
在Silverlight 1.1的时候,我就像用Silverlight设计一个饭否Show,无奈1.1时代貌似只能通过Web Services来获取跨域的数据,我认为这是一种别扭的开发方式,再加上1.1对中文并不友好,所以就改用Flash实现了这个饭否Show。
Silverlight 2终于解决了上述的两个问题,支持跨域获取数据,支持中文显示,于是我迫不及待的尝试着开发了一个饭否Show(在Silverlight 2 beta SDK 发布的几日后开始开发,开发完成后便忘记了,-___-|||),下面来简要的分享一下开发过程,也望各位Silverlight前辈不吝指教。
  阅读全文
posted @ 2008-04-29 09:38 Windie Chai(笑煞天) 阅读(2834) | 评论 (28)编辑
     摘要: Windows Workflow 其实是一个Runtime,而不是应用程序。在启动工作流之前,宿主进程必须先加载并运行工作流Runtime。宿主进程告诉Runtime要创建什么类型的工作流,Runtime则负责管理工作流的生命周期并通知宿主进程重要的生命周期事件,比如工作流的完成和终结。Runtime并不挑剔它的宿主,宿主可以是台式机上的智能客户端应用程序,也可以是机架上的服务器中运行的ASP.NET进程。所有宿主进程需要做的只是加载.NET 3.0工作流程序集而已。
在本章中,我们将深入探讨Windows Workflow Runtime和它的服务。首先来认识一下日志(Logging)、跟踪(Trackng)和工作流Runtime的配置选项;接着是调度服务(Scheduling Services),调度服务为Runtime执行工作流提供了线程支持;然后是持久化服务,持久化服务允许我们将工作流状态信息保存到持久存储设备;最后,我们将介绍跟踪服务,跟踪服务允许我们监视工作流的执行过程。  阅读全文
posted @ 2008-04-21 09:37 Windie Chai(笑煞天) 阅读(2140) | 评论 (13)编辑
     摘要: 在Windows Workflow中,一个活动有几种可能的状态?它们之间是如何转换的?如果我们编写自定义复合活动,该如何控制子活动的状态转换?  阅读全文
posted @ 2008-04-10 09:30 Windie Chai(笑煞天) 阅读(2411) | 评论 (2)编辑
     摘要: 话说有一个DIV元素,其内部有一个IMG元素和SPAN元素,不用理会这两个内部元素怎么布局,这不是我要讨论的重点。
为了实现一些特殊的效果,我需要利用TD的onmouseover和onmouseout事件,测试时就会发现如下的状况:
当鼠标移入DIV内部时,onmouseover事件被触发;接着再鼠标移动到DIV内部的IMG或者SPAN元素之上,我们肯定不会认为这时鼠标已经移到了DIV的外边,但奇怪的是onmouseout事件触发了,而且紧接着onmouseover事件也马上被触发了。
这可不是我想要的,那么怎么来“屏蔽”内部元素给外层元素带来的Javascript事件干扰呢?
  阅读全文
posted @ 2008-03-28 12:10 Windie Chai(笑煞天) 阅读(2100) | 评论 (18)编辑
posted @ 2008-03-18 09:33 Windie Chai(笑煞天) 阅读(6101) | 评论 (35)编辑
     摘要: 从根本上来说,采用组成法或继承法来创建自定义活动并没有太大的差别.
而且相对组成发来说,继承法更加容易理解.
在组成法中,我们关注于如何组织自定义活动内的子活动,并且创建了活动属性和执行模型.
而继承法是一种相对更加初级的方法,我们关注的更多的是活动本身所承载的功能.
让我们用继承法编写一个向控制台输出字符串的自定义活动,并为其添加验证器和友好的设计器外观吧.  阅读全文
posted @ 2008-03-18 09:33 Windie Chai(笑煞天) 阅读(2065) | 评论 (1)编辑
     摘要: 引进依赖属性的最终目标是什么?
依赖属性拥有什么功能?
怎样注册依赖属性?
什么时候应该选择依赖属性?  阅读全文
posted @ 2008-01-30 10:19 Windie Chai(笑煞天) 阅读(2253) | 评论 (2)编辑
     摘要: 今天在写一个Flash相册时遇到一个奇怪的问题,MovieClip中的动态文本框无论如何都不显示。通过trace语句可以确定该文本框是有值的,也就是说,这个动态文本框存在并且有值。
既然如此,为什么不显示呢?原来罪魁祸首就是:遮罩。  阅读全文
posted @ 2008-01-29 11:20 Windie Chai(笑煞天) 阅读(311) | 评论 (0)编辑
     摘要: 组合活动就像一个黑盒子,工作流设计器无法获取这个黑盒子内部的属性和事件,除非我们把这些属性和事件曝露给外部世界.
这时便需要利用属性升级(Property promotion),属性升级允许组合活动的设计者去决定属性对于外部世界的可见性.
  阅读全文
posted @ 2008-01-10 09:36 Windie Chai(笑煞天) 阅读(2396) | 评论 (5)编辑
     摘要: 今早从Andrew Connell 的blog看到Office 2007全线产品的SP1已经发布了.
下面给出下载页面的地址.  阅读全文
posted @ 2007-12-12 10:10 Windie Chai(笑煞天) 阅读(646) | 评论 (0)编辑
     摘要: 有两种方式可以创建自定义活动,即通过组合的方式和使用继承的方式.
组合是一种简单的创建工作流的方式.我们在设计器中拖拽并配置活动的属性,然后把这个自定义活动封装成一个程序集,这样就可以供其它工作流项目使用了.这种方式的优点是快速并且简单.
使用继承的方式来创建自定义活动,我们需要编写一个类,并使其继承Activity类.也可以继承自Activity的子类从而获得更多的功能.我们可以自定义活动的设计视图,验证,序列化和代码生成.继承的方式允许我们对自定义活动进行更深层次的控制,并且提供了使用自定义代码来扩展Windows Workflow的途径.  阅读全文
posted @ 2007-12-07 09:56 Windie Chai(笑煞天) 阅读(2347) | 评论 (1)编辑
     摘要: 3月份开始读《Programming Windows Workflow Foundation: Practical WF Techniques and Examples using XAML and C#》一书并写《WF编程》笔记,拖拖拉拉写到现在,居然也翻译了全书的一半。
这期间和很多朋友通过评论、留言、Email和IM等方式(就差写信了)就编写WF程序中遇到的问题进行探讨,套用某新闻节目中经常使用的和谐的五个字:“友好的交流”。
………………华丽的省略号………………  阅读全文
posted @ 2007-12-06 10:15 Windie Chai(笑煞天) 阅读(4374) | 评论 (16)编辑
     摘要: 使用通用的framework来开发软件虽然轻松,但却不够高效.我们每天都会遇到一些问题,只有使用专门面向这些问题的framework来开发软件才是真正的轻松并且高效.通过自定义活动,我们可以为这些日常问题量身打造工作流.自定义活动可以用来解决特定业务领域的问题,譬如,医疗软件中化验病人的血液样本的过程;我们也可以为IT领域编写自定义活动.如果我们的应用程序大量使用了Microsoft Message Queuing(MSMQ),我们就可以创建和MSMQ交互的自定义活动.
这一章将会讲述如何编写自定义活动,并且深入研究实现自定义活动的不同方式.我们会讨论如何使用组合的方式创建黑盒活动和白盒活动;如何使用继承的方式来创建自定义活动;如何创建验证和设计时的行为.接着,我们还会讨论一些相关概念,比如依赖性属性(Dependency Property)和执行上下文(Execution Context).在本章的最后,我们将比较组合和继承这两种创建自定义活动方式,并理解创建自定义活动的要点.  阅读全文
posted @ 2007-11-25 23:58 Windie Chai(笑煞天) 阅读(986) | 评论 (0)编辑
     摘要: 本节来介绍一下在状态机工作流中工作的活动.
一个状态机是由一系列状态(State)组成的.譬如,用来模拟软件bug跟踪的状态机工作流也许会包含以下四个状态:开启,分配,关闭和延期,工作流总是处于其中一个状态中.状态机的执行完全依靠事件来驱动.只有当工作流接收到适当的事件,才可以从当前的状态转换到一个新的状态.一个状态机必须包含一个起始状态和一个可选的结束状态.当工作流转换到结束状态时,工作流就完成了.
状态机工作流适合于模拟由外部决策来驱动执行的工作流.当我们做出了决策,比如关闭一个bug,我们需要一个本地通信服务来为工作流触发事件.工作流知道当前所处状态和可能将要转换到的状态.譬如,我们规定一个开启的bug必须在关闭之前被分配给相关人员,但它也可以从开启状态直接转换到延期状态.
我们在建立一个状态机时,第一步就是定义这些状态.  阅读全文
posted @ 2007-10-30 10:23 Windie Chai(笑煞天) 阅读(1402) | 评论 (5)编辑