RSS 2.0 Feed
微软前沿产品
Windows Vista, Visual Studio 2005, BizTalk 2006, Office 12, MSN 8.0 and etc.
摘要:    Workflow Foundation的问题确实很多,差点把我邮箱爆了,我无法解决所有问题,也无法一一回复。其实网上还有很多资料可以去查找,你可以到http://wf.netfx3.com/学习下载Sample,也可以下载最新的WIndows Vista SDK(内含.netfx3.0 SDK),看本《Essential Windows Workflow Foundation》,或者到 Architecture Journal 去下载06年7期“工作流主题”的杂志,最后有问题解决不了一定要到http://forums.microsoft.com/MSDN/ShowForum.aspx?ForumID=122&SiteID=1这个Workflow官方论坛或者 SharePoint-Workflow http://forums.microsoft.com/MSDN/ShowForum.aspx?ForumID=1207&SiteID=1 去问,会得到wf相关开发者的回答的。下面从那论坛摘几个比较常见的问题: 复杂的审批问题:比较简单的审批问题就是让一个人专门进行审批,如果他批准则通过,拒绝则结束。但是现实中都是复杂的流程,但再复杂的流程也都可以拆分成简单的流程,所以,当很多人都想知道Workflow Foundation是否可以满足他们的工作流场景时,我都会说99%都可以。呵呵,当然具体实施碰到的风险因素按具体项目具体分析了。言归正传,复杂的审批流程一般可以归纳成下面3类:(假设给5个人同时分配一项审批任务) 领导一票制:5个人中的那个大老板批准或否决了,则该审批任务不管其他人如何,均按领导意思继续下面流程。 全票制:当且仅当5个人都批准或都否决,该审批才会结束并继续下面流程。 票数权衡制:5个人中3个人批准则当作批准,或者3个人否则则当否决处理继续下面流程。可以理解为超过50%,或者根据人员角色按一定的权重去处理后,按最终既定标准权重处理流程。 实现方法可以参考: http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=1107491&SiteID=1 http://forums.microsoft.com/MSDN/showpost.aspx?postid=1168294&siteid=1 State-Machine Workflow中的Parallel并行问题: http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=1209800&SiteID=1 http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=1175008&SiteID=1 Load Balanced负载均衡下的Workflow: http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=1178486&SiteID=1 http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=1181865&SiteID=1 Workflow 的版本问题: http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=1188702&SiteID=1 http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=302495&SiteID=1 从web.config中获取WorkflowRuntime实例:http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=1200209&SiteID=1 Tracking:http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=1188418&SiteID=1     97年在BBS上文豪挥笔,98年Mud边武侠风云,99年OICQ里风花雪月,看着html大普及,asp搅动动态网站……一晃10年过去了。盖茨把他的口号从“A PC on every desk and in every home”进化成“Empower people through great software any time, any place, and on any device”,似乎也预示网络时代的到来。如今,单就web应用这块来说,技术层面的flash、ajax、wpf/e曾出不穷,概念层面的blog, wiki, tag, podcast, videocast等日新月异,呵呵,看得眼花缭乱。不过,在这么一个发展的历程里,也总是能找到几条发展方向,我简称之为三化。 用户体验个性化(体验):对于普通用户来说,他只care体验,包括UI和Function。 技术体系标准化(标准):对于平台商来说,他们应该会更care标准,许多专利都出自并握在他们手里。 应用领域普及化(随时随地任何设备上享受任何服务):对于应用服务供应商,他们应该care互连互通,这可是他们吸引最大群体用户,创造最大利润的根源。     每个方向上都会因为各种利益而出现各种技术或理念,反过来各种技术和理念也基本都在这三个方向里进行验证决定其生死。...[阅读全文]

posted @ | Feedback (3) | Filed Under [ 个人评论和作品 微软前沿产品 ]

摘要:6、ECM Starter Kits 虽然是 for Beta2TR,但完全可以正常跑在正式版里,当然前提是对里面的个别打不开或跑不起来的项目进行一点修改。 CustomSignatures项目:把相关的 CorrelationToken 由 SignatureWorkflow 改为 SignaturesWorkflow。出现这种现象也不知道该说微软什么了,估计是赶时间推出这个 Sample。 ModificationSample项目:跑到 Workflow1.cs 代码里,找到 updateTask1 代码段,把相关 updateTask1.AssignedTo 等等都在中间加个  TaskProperties 属性,变成 updateTask1.TaskProperties.AssignedTo 这类的。 其他如果还有问题,可以具体看,要么注释,要么做修改,不影响整体代码可读性,大部分也都在正式版里运行正常。 7、我有这么一个场景,我一进去编辑 Task Form 时,该 Task Form 前面列出这条记录的Title等基本字段值,然后下面有“同意”或“下一步”的按钮,还有“拒绝”或“取消”的按钮。我点“同意”或“下一步”不要立马提交,而是转到显示另外一个Form让我填同意后需要处理的一些表单数据。如果我按“拒绝”或“取消”也转到显示另一个Form让我填不同意时要录入的另外一些信息。     这个应用只要你用过InfoPath的视图,就立刻知道怎么实施了。InfoPath的一个表单是允许多个视图的,所以你大可以把包含“同意”和“拒绝”的两个按钮的 Form 当作第一个默认视图,同时再增加一个同意后的视图和一个拒绝后的视图,然后制定这两个按钮的规则(Action里有switch view的这项),点同意就显示同意的视图,点不同意就显示不同意的视图,同时把同意或拒绝的状态值赋值给数据源中某个字段,这样就完全达到了上面的效果。     扩展下思路:你可以用radiobutton排出一队的选项,因为 radiobutton 绑定着一个字段,所以可以判断当用户选定哪个项时来决定我要显示哪个视图。比如,我有“全部公开”、“部分公开”和“不予公开”三个项,我选“全部公开”然后按下一步,就可以跑到全部公开的视图里填写一份政府公文,输入xxxx年xx号和备注后,按提交就完成这个步骤了;以此类推。     额外提下InfoPath,我们知道 InfoPath Form 不用编码本身就可以有一定规则流程的,这些动作包括常用的对输入数据的校验、根据某种条件进行某种动作、执行一些Action等。所以,你可以直接在表单里设置诸如必填字段、进行自动计算、动态增加节点数据、根据输入数据动态调整表单表现或设置数据源字段、根据一定规则执行一定操作等等,而大部分这些操作在发布到 MOSS 中进行 Web 显示时,还是可以正常使用的,使得数据收集这块变得异常方便快捷。 8、MOSS的Workflow历史记录在哪里?     你可以通过右键菜单中的Workflow菜单进去查看该条记录的工作流情况,有工作流的已经运行过的步骤产生的Task链接,也有每步的动作列表。如果想看所有Workflow的历史列表,可以访问 http://服务器/Lists/Workflow%20History 查看,不过估计那些数据不是人能看懂的。但至少可以保证,工作流从头到尾所有的业务数据和流程数据都是存在的,都可以提供给你去查到你所要的历史痕迹的。     如果你还熟悉Workflow Foundation的 TrackingService,你用了其Sample的 WorkflowMonitor 打算来跟踪查看 MOSS 的 Workflow 时,sorry,结果是无法运行,无法跟踪,无法查看。Why?没错,WorkflowMonitor可以利用Workflow Foundation的TrackingService跟踪监控Workflow,但是 MOSS 的 Workflow 却没有使用 Workflow Foundation 默认的 TrackingService(这个实在让人费解,不知出于什么目的),所以如果你要Monitor,那可以考虑为 MOSS 写一个 WPF Application 的 Workflow Monitor,相信这个 idea 应该还是不错的:-) 那MOSS怎么做历史跟踪,打开Reflector看看 Microsoft.SharePoint.WorkflowActions.dll里的相关类,也许就清楚了。 9、差不多了,这个 InfoPath + Workflow + MOSS 的主题就到此为止,这个主题仅仅是当作辅助参考。最后看了choral 的《如何配置Windows SharePoint Services 3.0的搜索》的文章的后面评论中,有人评论说 MOSS 不值得关注,而我则反过来想告诉大家一句话:请重视或正视MOSS!微软平台上的企业应用开发商/开发人员都必须重视这个产品,而微软的对手们也必须正视这个产品。也许答案在这张图里。 ...[阅读全文]

posted @ | Feedback (7) | Filed Under [ 微软企业服务器 微软前沿产品 ]

摘要:5、接上贴补充下一些内容。 如何看InfoPath表单是否发布成功:打开SharePoint 3.0管理中心,在应用程序管理有 InfoPath Form Services 一节,进入“Manage Form Template”就可以看到你所有发布的表单。其中看状态 Status 栏,如果为 Ready,则表示该表单已经准备好可以使用了;如果为 Installing,那就是有可能因为前面罗列的各种原因造成表单模板还无法正常发布,这时候你就要检查了。另外,你可以通过URL访问已经发布的表单,地址为类似 http://服务器/_layouts/formserver.aspx?XsnLocation=urn:schemas-microsoft-com:office:infopath:ReviewTaskForm:-myXSD-2005-11-22T23-52-35,后面 XsnLocation=跟上表单的 ID(URN)即可。 前面提过,在MOSS中,每个Workflow都是作为一个Feature存在,然后具体使用时再关联到某个List/Library中然后创建Workflow实例运行的。在一个Workflow生命周期里,业务数据自然主要就是List/Library中的记录数据SPListItem/SPFile,再辅之任务列表数据;而Workflow过程中需要的一些流程状态数据则被WF提供的服务持久化(术语好像叫“钝化”之类的)起来,供Workflow被启用时再度激活,从而顺利继续工作流的运作。 关于 Task。一开始很多要问为什么(是/要) Task?因为在 MOSS 2007 的 Workflow 中,对于业务流程中人的部分,即工作流中人为参与的部分主要是通过“任务 Task”形式实现的。即要某人来审批或添加些数据时,就在Task列表中创建分配一个 Task 给他,然后这个人过来编辑 Task,完成人为数据的录入采集,使得工作流继续运行。 上贴有提到如果不小心用VSTA打开产生后部C#/VB.NET代码后,发布时变成了需要经过管理员审核才能使用。为什么会这样?这类表单和其他表单还有什么区别吗?答案就在《Office Forms Server 简介》。 SharePoint Desginer 2007 的工作流设计不支持 InfoPath 表单形式吗?是的,很遗憾,SPD2007只支持 ASPX Form形式的 Task Form。所以如果要在 MOSS 2007 里开发 InfoPath + Workflow,还得用前面说过的方法。当然,前面的方法也支持 ASPX Form形式,详细可看 ECM Starter Kits中很经典的 ASPX Form 范例 —— CollectFeedback 示例。 为什么 Workflow.xml 中的 AssociationUrl="_layouts/CstWrkflIP.aspx" 和 InstantiationUrl="_layouts/IniWrkflIP.aspx" 不能换成其他页面?这些页面可以理解为 InfoPath Form 的 Host Page(实际是这些页面内部嵌入了显示InfoPath Form的WebPart),InfoPath Form Services处理 InfoPath Form后通过这些 xxxIP.aspx 的页面把 InfoPath Form表单以 Web Page形式呈现出来。所以,不能改变成其它页面,否则无法正常显示 InfoPath Form。 不太明白 ItemMetadata.xml 作用,或者说把SPListItem数据传给InfoPath Form并和InfoPath控件绑定显示出来的过程是怎样的?这个一开始确实比较费解。首先根据 SDK 操作一遍后,此时 ItemMetadata.xml 已经作为辅助数据源和资源文件保存在 InfoPath Form里了。记得,此时最好把 ItemMetadata.xml 理解为 InfoPath Form 的“数据源”!然后传递过程是这样的: 把准备传递给 Task......[阅读全文]

posted @ | Feedback (7) | Filed Under [ 微软企业服务器 微软前沿产品 ]

摘要:在MOSS 2007种利用InfoPath 2007结合Workflow Foundation可以高效的做出非常强大的工作流应用。因为在SDK中这部分的内容有点不流畅,读起来比较费劲。所以我想以我的一点小经验和大家Share下,希望能少走点弯路,然后再结合 SDK 、ECM Starter Kits 和 WSS Workflow StarterKits 快速掌握这个非常棒的功能。 1、我要创建用于 MOSS 的 Workflow 项目。      请下载 WSS Workflow StarterKits,安装后将有个"SharePoint Server"的组,内有 SharePoint Sequential Workflow Library 和 SharePoint State Machine Workflow Library 两个项目模板。利用这两个模板创建的项目,对 Workflow 的开发、部署都很方便。 项目用到的 Microsoft.Office.Workflow.Tasks.dll、Microsoft.SharePoint.dll 和 Microsoft.SharePoint.WorkflowActions.dll 均在装有MOSS 2007的机器的 C:\Program Files\Common Files\Microsoft Shared\web server extensions\12\ISAPI\ 目录下。其中开发时主要注意记得在VS2005工具箱里注册 microsoft.sharepoint.WorkflowActions.dll,就可以从工具箱里拖拉出 MOSS 特有的 Workflow 控件了。 Feature.xml:在 MOSS 中, Workflow 是作为 MOSS 的 Feature 存在的,具体使用时再关联到具体某个 List 或 Library 中并创建实例运作的。因为 Feature.xml 文件就是安装部署时候要把生成的项目 dll 文件作为 Feature 注册到 MOSS 中的描述文件了。刚打开时是空的,只是一些提示,按提示插入 Feature 的 Snippets,就有一段 xml 代码插入。其中 GUID 可通过 VS2005 菜单 Tools 下的 Create GUID 创建一个新的 GUID 填入;中间有个 <ElementManifest Location="workflow.xml" /> 节点用于关联工作流 xml 描述文件。 Workflow.xml:工作流描述文件。其中有工作流名字Name(该名字在添加 Workflow 关联具体列表或文档库时显示在工作流列表中);GUID(同样通过 Create GUID 生成填入);CodeBesideClass和CodeBesideAssembly对应工作流类全名和程序集全称(项目如进行签名,此处需明确PublickToken,同时把 install.bat 中 gacutil 部分反注释掉);TaskListContentTypeId为工作流使用到的任务列表的 ContentType ID,默认为 Workflow Tasks......[阅读全文]

posted @ | Feedback (10) | Filed Under [ 微软企业服务器 微软前沿产品 ]

摘要:阅读前,可以先参考 MediaElement 的一译文。实现该例子一定要安装 WPF/E和SDK。 1、新建一个WPF/E Javascript Application。 2、修改 plugin.xaml,增加 MediaElement 元素(红色粗体部分) <Canvas xmlns="http://schemas.microsoft.com/client/2007"        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"        Loaded="javascript:root_Loaded">  <Canvas x:Name="button">    <Rectangle Stroke="#FF8E8E8E" StrokeThickness="2" RadiusX="2" RadiusY="2" Height="23" Width="75">      <Rectangle.Fill>        <LinearGradientBrush StartPoint="0.5,2.109" EndPoint="0.5,-1.109">          <GradientStop x:Name="gradientStop1" Color="#FFFF9E00" Offset="1"/>          <GradientStop x:Name="gradientStop2" Color="#FFEAEAEA" Offset="0.218"/>        </LinearGradientBrush>    &nb