大家都知道验证码的作用。验证码是为了防止机器遍历密码而获取帐户的操作权。但如果在客户端来生成验证码,那不等于花瓶吗?这个道理大家都懂,但还是有很多大网站还是这样做。。。。 Sina的Blog生成验证码的代码的Js如下: function load_chk_img(s) { var stamp = new Date().getTime(); $(s).src = 'http://my.blog.sina.com.cn/myblog/checkwd_image.php?' + stamp; } 当stamp的值一定时,生成的验证码是相同的。例如: http://my.blog.sina.com.cn/myblog/checkwd_image.php?10000 对应的7040,只不过显示的7040的形状不同而已。 客户端完全可以修改stamp。从而获取一个Code,根据这个Code来验证。 再用机器去遍历password就OK了,如果密码简单的话,就可以到大流量的vip博客玩一把了,那些vip肯定会大吃一惊。
这两天在公司里玩了会Sea@35,虽然有很多不足,但还是值得自己的人玩一把。特别是几百号人一起上阵的情景。呵呵,满地都是人的感觉就是cool。 有兴趣的人还是值的一玩,毕竟改了些新东西。
今天修改wordpressmu遇到一个关于使用Jquery的bug,在IE下,老显示js有错误。bug显示信息为:Error:expected identifier, string or number。 我于是找到了dashboardswitcher.php里的一段js: jQuery( function($) { var switchTime; var w = false; var h = $( '#blog-title' ) .css({ background: 'transparent url( ../wp-content/mu-plugins/bullet_arrow_down.gif ) no-repeat scroll 100% .2em;', padding: '0 25px 2px 5px', cursor: 'pointer', border: '1px solid #14568a',//这里多了一个"," }) .parent().css( { position: 'relative' }).end() .append( $('#switchermenu') ) .hover( function() { $(this).css({ border: '1px solid #1a70b4'}); switchTime = window.setTimeout( function() { $('#switchermenu').fadeIn('fast').css( 'top', h ).find('a').width( w = w ? w : $('#switchermenu').width() ); }, 300 ); }, function() { window.clearTimeout( switchTime ); $(this).css({ border: '1px solid #14568a' }) ; $('#switchermenu').hide(); }) .height() - 3; }); jQuery还真是强大,既然一句话就实现了,包括样式变化,以及switchermenu的显示和隐藏等功能。正为jquery震撼,难怪说jquery改变了js的编码风格。 我在这段代码中找了半天,没有看出什么问题。可能是由于太相信wpmu了,一直只在自己添加的代码里找。外加,没有太在意wpmu中的小细节。而且,它在fireFox下一切都正常。正在无奈的情况下发现了多了一个“,”,呵呵,得意……又找到一个wpmu的bug。原来FF应该可以智能补差,例如<br >它会补充</br>,而对空的变量则会忽略。而IE则没有那么智能,原本期望“,”后有个变量,则自然出现错误。 一个小小的“,”,就可以看出两个browser的智能差距,没用过IE7,不知道它是不是也变智能了。
今年国庆可以说是在空虚无聊中度过。原因当然很多,首先是国庆没有回家,如果回家肯定不会这么无聊。不回家的理由也很简单,一个字“懒”。因为家里没有人(父母在外),回去一切都得自理,包括洗衣服、做饭。其次,身边的朋友大都跑其他地方工作了,不是去龙岩,就是回去当公务员,还有的跑三明,福州等等。再次,可能是现在的我没有以前那种激情了,以前一有时间就到处跑,到处玩。而现在,感觉世界不过就那样,没啥意思。最后,女朋友天天上班。 无聊归无聊,无聊总得忙些事情。于是,这几天再次拿起《PofEAA》,看的速度大不如前了,一天就只看那么几页,还好,每次看都有点收获。感觉大师的书些的比较严谨,啥主意和想法都凭证据,啥都是都讲究优劣对比、权衡。从这些就可以看出一个人的水平和书的质量,挑书,自然也要挑选这类的书。个人感觉,这类书对我影响最深。在细看《PofEAA》的同时,还顺便浏览了张询的《软件架构:组织原则与模式》的前面几十页的内容。 张询,给我印象最深的是评《UML三大硬伤》,分析问题有深度,是我比较崇拜的人。因为自己对英文比较感冒,自然而然要看这些人翻译的书,心里比较塌实。看了架构和组织的关系,自然想到自己所在的公司。自己感觉这个方面是公司的重病。个人感觉公司的产品很零散,所有产品可以说是堆积起来,而不是架构起来。一个已有11年的企业,既然每次开发都要从头做起,不得不说是一个悲哀。重复开发,人员流动太大等等许多问题都早早暴露出来。我们作为最底层的员工,只能用眼睛看待一切。 最后,以前一直想学ROR,结果一直没有时间。乘这次大放假的时间,把ROR塔起来。基于MVC架构的Rails,动态语言,内置的Server等,对于开发速度大大提高了。 今天也4号了,希望这次可以把ROR大致轮廓搞清楚,Ruby语法过一遍,有机会虚拟个项目玩一把。。。
OpenID注册地址: http://openid.35.com OpenID优势: 1、有了OpenID,你可以拿OpenID登陆所有支持OpenID登录的网站。这些支持OpenID登陆的网站对你的密码一无所知,保证了你的密码安全。你再也不用记多了username和password。 2、OpenID可以设置委托,可以把自己的域名作为OpenID。例如我把http://www.xmpoint.com注册openid委托,则可以利用http://www.xmpoint.com来登陆所有支持OpenID登录的网站。 3、OpenID可以注册N份个人资料,用于你登录的各个网站的personal profile。 OpenID劣势: 1、你登录的时候,你必须跳转到OpenIDServer去验证你的身份。这是必须的,要不支持OpenID的网站怎么知道你是不是冒牌的。 以后在网络上,域名就是你身份的表示,就象你现在的身份证一样。不同的是自己的身份证不能由自己来定,而OpenID的帐号你可以爱取啥就取啥(前提是你能注册到)。到那个时候,好的域名就更值钱了。
问题前提:mysql版本>=4.11、修改mysql目录下的my.ini#default-character-set=latin1default-character-set=utf82、修改wp-includes/wp-db.php在对象wpdb中添加函数set_charset($charset):class wpdb{ function set_charset($charset) { // check mysql version first. $serverVersion = mysql_get_server_info($this->dbh); $version = explode('.', $serverVersion); if ($version[0] < 4) return; // check if utf8 support was compiled in $result = mysql_query("SHOW CHARACTER SET like 'utf8'", $this->dbh); if (mysql_num_rows($result) <= 0) return; if ($charset == 'utf-8' || $charset == 'UTF-8') $charset = 'utf8'; @mysql_query("SET NAMES '$charset'", $this->dbh); }}3、并修改wordpressmu根目录下的wp-settings.php:require (ABSPATH . WPINC . '/vars.php');
$wpdb->set_charset(get_bloginfo('charset')); // add at this4、重新创建wordpressmu的数据库(重新安装wordpressmu)。
microformats原来还有此等威力,当然还是Xml,XPath的好用之处。什么是microformats,在microformats.org上这样描述:Designed for humans first and machines second, microformats are a set of simple, open data formats built upon existing and widely adopted standards.microformats网站:http://microformats.org一篇很好的文章:使用 microformats 分离数据与格式
我经历了开发商业系统和产品两种开发形式,在我个人里,发现了些自己感觉极其不舒服的东西。商业系统开发,简单一句话,就是客户和开发人员的需求的一个平衡。客户希望得到的系统是功能越强大,各个方面都达到自己的200%的满意,而开发人员则站在自己的角度尽量舍去不必要的功能,为了是自己能有更大的利润。往往花大量的时间去取的平衡,而忽略了系统的一些东西,最后开发出来的系统往往都不尽人意。在中国国情里,我只要能交出东西,就万事OK了。有时候即使能在很短时间内完成的功能,非得磨上几天。在开发上,尽量减少“不必要”的东西,例如文档和注释等等。这些就导致了一些IT的特有现状。一个词“悲哀”来形容。产品开发,则是要实现一个真正的商品。公司自己要拿这些产品来卖钱。因为是公司自己的角度,不存在和客户之间的矛盾,自然而然会去避免上面的一些问题,然而另一方面的问题就暴露出来了。在开发产品时,产品经理自然要把产品描述的很清楚,需求,设计都要做的很全面(过度),从而导致了文案化。公司花费在这些东西的成本过于庞大。如果产品好买的好,也就OK了,否则,就只能面临资金紧张,倒闭等问题。然而,开发人员毕竟是拿工资的,自然就会去消极怠工,希望这个产品能开发久些。原本可以在半年开发完成的,在开发人员手上非得磨个8-9个月。如果外加管理不好,往往产品组(程序管理组)和开发部协调不好,又会导致产品畸形。从上面的问题,这些问题都或多或少的存在。对于开发商业系统,如果能有具有开发技能的客户参与到商业系统的开发,那么可以缓解一些问题。而开发产品,如果能把产品流水线化,那么我想也可以或多或少地解决一些问题。当然也可以把产品利益相关话,产品开发买钱如果关系到产品开发里的每个人,产品开发就不会象现在这样了。一句话,感觉开发那么久,开发还是没有采用敏捷思想来解决一些问题。国内的开发还是处于国外十几年前的状况,或者更远。。。。在这种开发体制下,无论哪个人开发,无论是管理和开发人员,都不会感到舒服。。
I get a lot of request from a lot of people who see my works and get inspired and ask me how can they do the same? The questions I generally get are following:
Generally the questions are like this. Everyone asks me for a "shortcut" way to becoming a really good developer. So, here's the magical secret for becoming a really good developer and achieve everything I have achieved:
Work 18 hours per day, 7 days a week, 360 days a year for 13 years.
Yes! That's the secret. It's pretty easy. The only thing you need to do is "work" and do nothing else and you will achieve everything that I have achieved. Pretty easy. I did that, so you can do it too! Piece of cake.
If you want to go for the "long" way then here're the things you can try:
好久没来这里了,自从Microlink出来。现在的公司不能上网,刚搬了次家。网线要下个月才能接上。。。。。希望博客朋友见谅。由于公司的技术需要,最近在学AJAX,所以以后可能暂时不把精力放在SP上了。所以比较新的一些东西,我并没有去研究,去发掘。所以你遇到的问题我未必能解决。
原本打算把SPSiteManager用于MOSS2007,结果好象不行。于是把SPSiteManager修改了一下。主要修改两处:1、Analys.cs中的查询语句,SPS2003的ContentDatabase中的sites表有Fullurl字段,而现在变为了PortalURL。2、它原本的程序把spsitemanager_syntax.xml嵌入到程序集中,现在单独取出,只要相同目录就可以工作。这样,还可以通过它来查询命令参数。其分析功能强大,从Virtual Server开始到SiteCollections、Site、Web、DocLib、Folder、List等。它有点类似stsadm工具。具体操作例如:spsitemanager -o analyze -url http://vsts01:8000/ -targeturl http://vsts01:8000/ -sdd vsts01_allvs_level_0_sdd.xml具体的命令参数可以参考附件中的spsitemanager_syntax.xml文件。SPSiteManager.rar详细功能及源码请参考其官方blog:krichie运行要求:机器必须安装了MOSS2007。
条款一原话:当你需要考虑 不指向任何对象 的可能性时,或是考虑 在不同时间指向不同对象 的能力时,你就应该采用pointer。前一种情况你可以将 pointer设置为null,后一种情况你可以改变pointer所指对象。而当你确定 总是会代表某个对象,而且 一旦代表了该对象就不再能够改变,那么你应该选择reference。考虑四种情况:1、pointer:声明object*2、const_pointer:声明const objcect*3、reference:声明object&4、const_reference:声明const objcet&pointer,可以指向object对象,也可以指向从object继承的对象,只要是前面的对象都可以指向。const_point,可以指向固定对象,一但指向了某个对象,它就不能够指向其他对象了,当然对象里面的变化,它不关心。reference和const_reference也是同样的道理。很多人会问,那么pointer和reference有什么区别呢?或许看起来没有什么区别,你就这么想吧,pointer到对象,是指向对象。而reference就是对象。这时候又有人问那么reference和直接声明的对象又有什么区别呢?看看下面的用法:C#的程序员可能有以下幻想object& ro = new objcet ;//VC7.1下声明int& iValue=5;静态编译出现Error。object o = new object;但事实上用法应该是这样的,因为在C++里的只能把new的对象给指针,例如object* po=new object。object o;object& ro = o;//这个时候,他们没有什么区别,只不过是名字不同而已,一个为o,另一个为ro,这时候那个对象有两个名字。这时候可能又会想那么const_refencence又是怎么回事啊,那就是它所指代的对象不能变化(和const_pointer的区别),即对象状态为const。其实原本想划几个图来表示,那就可以更加直观了。可这个机子没工具,以后再补拉。
Google Web APIs service:Google提供给外界定制自己的服务。首先,你必须得先到http://www.google.com/apis/去注册一个Account,并获取一个License Key。其次,创建各种类型项目,进行web引用,其地址:http://api.google.com/GoogleSearch.wsdl再次,编写你要定制的代码。最后,显示的结果:唯一可惜的是,一个帐户一天只能访问1000次。源码:GoogleSearch.rar
今天在用Microsoft.Web.UI.WebControls.TreeView中发现了这个bug。递归过程是加载目录树,用递归的方法一层层加载目录。我创建一个DataTable来递归:
今天看了《深入浅出设计模式》的第一章。这篇文章读起来很轻松,而且也比较容易接受。它不象以前谈论的设计模式,感觉全是文字和代码。从头到尾看起来要晕个n回。我读的过程中往往会只看第一章,就不想再看后面的内容……《深入浅出设计模式》这本书,它的风格很象我们在处理实际问题上的讨论形式,层层引入来解释问题,没有深入,但确实达到了浅出的效果。在第一章里,一开始并不介绍设计模式,到最后才引出策略模式。总有一点“哦,策略模式原来是这样”,对于初学设计模式的人,大有裨益。所以向初学设计模式或感觉设计模式很高深的人,推荐这本书。
列表模板和网站模板类似,是你根据自己的需求定制了列表和网站,而你定制的列表和网站可以复用。那么我们就可以把它做为模板保存起来。目的把模板用于其他的网站或列表中。下面简单介绍列表模板:列表模板包含files, views, fields,和列表关联的Workflow信息, Web Parts,列表相关的content(可选)呆会将证实大家看,看其是否是包含这些数据。列表模板是以.stp文件存储,事实上是Cab包文件,模板的操作过程很相似,下面以列表模板为例:1、进入“网站设置”->网站管理的“网站库和列表”->“自定义‘共享文档’”->“将文档库另存为模板”进入后,填写模板信息2、转到“网站设置”->“列表模板”可以把ShareFileTemplate.stp下载到本地。3、要查看.stp文件,必须从网上下载一个Cabinet Manager打开.stp文件4、我们打开模板其实是一个manifest.xml文件,其内容主要包括:它切实包含了以上的那些内容。
网站模板和列表模板的差别是网站包括的数据是整个网站。如果你从获取一个.stp的网站模板,也可以通过如下的命令来添加模板:stsadm.exe -o addtemplate -filename Template_File_Name -title Template_Title [-description Template_Description]系统默认的共享文档库模板:manifest.rar
WebPart对于学习和研究SharePoint的人,已经不是什么新鲜的概念了。但对于学习.net Framework的人,可能会发现在System.web.ui.webcontrols下会发现多了WebPart的踪影。WebPart作为WebControl中的一种,比WebControl更高级一些,它可以在线Drag and Drop,并可以在线设置它的属性。以前利用VS2003开发WebPart,得安装WebPart Template For VSNet。当然也可以在VS2005下安装WebPart Template来开发WebPart。在这里我就不介绍用WebPart Template For VSNet来开发WebPart了。在VS2005下就可以不用安装WebPart Template来开发WebPart。下面我具体介绍其过程:1、创建 Web Control Library首先浏览C# Project Templates,然后选择Web Control Library,输入“SampleControl”。要开发WebPart用于SharePoint,就必须引用Microsoft.SharePoint.dll(必须是安装MOSS的服务器上的)。最后添加引用如下图:2、编写WebPart的代码你开发的WebPart,根据自己开发的功能选择相应的SP(SharePoint)命名空间,具体命名空间,请参考SDK。开发WebPart必须继承WebPart类。
3、编写WebPart定义文件(.dwp)这个文件是xml文件,任意文本文件更改其扩展名为.dwp就可以了。我的WebPart的程序集文件为SampleControl.dll。命名空间为Xdian.WebParts.SampleControl。所以我的SampleControl.dwp文件如下:
4、生成强名称程序集合在这点,我在VS2005下,没有找到解决方法,因为在C:\Program Files\Microsoft Visual Studio 8\SDK\v2.0\Bin下没有sn.exe这个工具了。我跑到VS2003的机子下,在cmd下浏览到VS2003下的bin目录。用sn.exe随机生成了一个key.snk。输入sn.exe -h可以看参数。然后在项目文件下的Assembly.cs下加入这么一行文字:[assembly: AssemblyKeyFile(@"C:\key.snk")]我是把key.snk放在C:盘下的。最后生成的程序集,可以通过sn.exe -Tp来参看其PublicKeyToken。我采用的方法是用gacutil.exe放入C:/Windows/Assembly下,然后看去属性中的PublicKeyToken。最终生成的程序集和配置文件如下:5、修改WebConfig。我想大家肯定会在那么多的Config混乱,你就把它放入你想添加WebPart到的SharePoint网站下。如下我把它放如8000端口的网站下(某个GUID网站下)。当然你也可以把你的WebPart放如全局上,那么你就得修改C:\Program Files\Common Files\Microsoft Shared\web server extensions下的相应文件(不推荐)。在WebConfig下,添加如下的配置信息:
6、添加WebPart到网站的WebPart Gallery中。你必须要有网站管理员的权限。进入http://vsts01:8000/下的网站管理。在WebPart管理的列表中,点击“上载”。浏览到我的SampleControl.dwp,然后输入配置信息,上传。最后在WebPart Gallery显示一条信息如下:7、把WebPart添加到网页显示。进入编辑网页。找到自己的SampleControl,然后添加(和SPS2003的操作有所不同)。最后终于把WebPart显示在自己的网站上,不过不要开发太多的WebPart,网站对WebPart的承受能力是有限的。一个网站大概可以承受100个WebPart左右。如果你的网站超过的话,那么你的网站速度会明显变慢。
虽然说SPS2003可以建立强大的门户网站,但在国内主要还是内部使用。例如我们公司的SPS2003网站就不对外开发,其主要用于公司内部的资料、信息的共享!对外发布的门户网站在国内还比较少,我见到三种:1、原风原貌:http://www.oceanstudio.net主要提供于学习SP用,几乎不提供美工,只是内容共享,交流。2、比较简单,清新:http://www.dreaman.cn主要是小型企业的发布网站(门户),提供一些资料、信息共享。3、大型的政府应用,豪华:http://www.suifenhe.gov.cn/这个网站是我看过做的比较好的。主要用于政府信息发布,共享,交流等。这是我在国内看到比较大的政府SharePoint应用。4、企业内部应用(原图):不对外开放http://sharepoint.microlink.net.cn在国内,占大多数的应用还是企业内部,因为企业主要是利用SPS2003来分享的企业内部资料和信息。SP平台还要整合企业内部的各种数据。因为安全性的原因,所以它们大多数不对外面开发。其中,不对外开发其中最重要的一个原因是对SP技术的不成熟,如果能对安全性和访问区域进行很好控制,企业还是希望能内外兼用的。
1、WebPart的开发,WebPart的开发在网络上的资料也最多,当然编写量也相对小一些,毕竟是一个控件,实现的功能比较有限。2、ConsoleApplication开发,主要是引用Windows SharePoint Service的程序集(在C:/Windows/Assebly下)或WSS 的webservice(在http://ServerName/_vti_bin/下)来操作SharePoint站点里的数据。ConsoleApplication可以定制服务器或群管理的功能。3、WindowsApplication开发,同ConaoleApplication,不同在于两种界面的表现不一样。大多数喜欢可视化操作,作为客户端,WinForm的WSS应用也是一个好的选择。4、WebSite开发,同上,表现形式为WebForm形式。5、WebApplication,这种是WSS功能比较强大的,其创建在WebServer的_layout目录下,对整个WebServer的所有SPWeb都可用。下面将具体介绍WebApplicaion。6、最后,就是开发WebSite Template了。它就象WSS上提供的网站模板,例如Wiki,Blog等。大型的企业应用,无非就这几种应用程序的整合。展示几个动手的结果图:ConsoleApplication结果图:WindowsApplication结果图:首先要登陆验证其次显示站点的文档,可以浏览并进行相应操作:下面介绍第5的WebApplicaion例子:首先、创建WebApplicaiton(请在IIS中加入一个MIME Type:扩展为.tmp 类型为 Common/Type)其次:打开VS2003或VS2005创建如下图的项目(asp.net应用程序),注意路径或Http路径要选择在创建的WebServer下的_layouts目录,否则就成为普通的asp.net应用程序了:再次,添加引用(三个是不同的,请查看路径列):最后,进行Coding,被忘了在UI上加FormDigest验证控件,输入http://servername/projectname/page看看其效果:程序的功能输入:一个用户名输出:这个用户所属的网站和权限。图为我在RootWeb上执行的效果,和SubSite下执行的效果是一样的。也就是说,程序的功能对于网站集来说是共享的。那么我们就可以在我们创建的SharePoint网站添加一个URL连接到这个页面的功能。
引用地址:
翻译来至《Understanding WF in WSS and Office 2007 v1.doc》作者:David Chappell, Chappell & Associates(鼎鼎大名)
翻译片段,全文请查看:http://www.davidchappell.com/blog/index.html在大多数组织级中,运用最多的人力工作流的离子就是提交审批。一些文档必须通过某一部分人来审批通过或拒绝,或许在文档里添加备注信息来解释意图。从用户角度,这里的例子将展示如何在WSS中实现提交审批工作流。在学习这个例子之前,我们必须先定义如下人员角色,角色包括:: >>工作流作者:创建工作流模板的开发人员或信息工作者 >> WSS管理员: 安装工作流模板并关联文档库和列表的人。 >>工作流发起人:开始运行工作流,触使工作流实例创建的人。 >> 工作流参与者:参与到工作流实例执行,以提供业务支持的人。下面将会描述到,每一种角色会在创建,安装,实例化和使用工作流中分别参与到。创建工作流对于创建WSS中工作流程,Microsoft提供两种选择。开发人员可以利用Visual Studio 2005 和 WF Workflow Designer来创建, 信息工作者利用Office SharePoint Designer的规则(rule-based)来创建。 这两种方式创建的工作流模板必须部署到WSS服务器上。Workflow编写将在后续中详细介绍, 现在,假设工作流模板已经被创建。关联WorkFlow到文档或列表要是模板可以用,则必须先把模板安装到WSS系统中。然后关联到某一文档库、列表或文档类型. 这样,流程就可以从这个库或列表中开始执行。工作流以同样的流程操作文档或列表记录,所以一个工作流模板可以附加到文档或列表记录上。 (当然也可以创建只关联文档,或只关联记录的工作流模板)。当工作流不能从文档类型中显式的启动的时候,工作流可以从定义的文档类型的文档或记录来启动。用Office SharePoint Designer创建的工作流安装和关联操作将自动被完成。如果用WF Workflow Designer 和 Visual Studio, WSS管理员必须自己安装工作流模板. 一旦安装完,模板必须关联到某一文档库、列表或文档类型。一些也可以有比管理员权限少的用户来操作。无论谁创建关联的必须给它取一个唯一的名字,这样允许它被用户引用。对于工作流创建者是否让创建关联的人来设置流程参数,这是可选的。例如:指定必须始终参与流程用户一个默认的列表这样的选项。一个同样的模板可以关联多个文档库、列表或文档类型。当然必须一个个创建每个关联。 关联被创建后并且选项也设置好了,一个工作流触发者可以从关联中创建一个工作流程实例了。这将在下面内容里介绍。
启动工作流WSS提供三种选择来启动工作流实例. 三种方法创建的实例都是每次在工作流开始阶段运行。(事实上,如果一个关联所创建的实例正在运行,那么就不能从那个关联创建另外实例)。三种方法是: >>工作流可以通过WSS用户手工启动。 >>工作流可以配置为当文档或记录被改动时自动运行。 >>工作流可以配置为当文档或记录被创建的时候自动运行。例如:Microsoft Word,用户可以保存一个新的文档到文档库中,这样就会触发一个实例运行。工作流触发者可以用Microsoft Word 2007 或 Word早期版本启动。不用依靠任何Microsoft应用程序工作流启动是完全有可能的.这个场景是用第一种方法来启动工作流. 图中显示WSS用户的一个文档库中的一个文档。要从这个文档来启动工作流实例,用户点击文档,通过上下文菜单选择“ Workflows”。它将触发到下面这个页面:在标题“Start a New Workflow”下,是从这个文档来触发开始执行的所有工作流名字。在这个例子中,它有两个选择“Approval”和“Collect Feedback”但如果一个管理员关联了其他工作流模板到这个文档,那么他们的名字也会显示在这里。在这个例子,触发者选择“Approval“, 页面将呈现如下:不象前面几个页面,这个页面的内容完全由工作流自己定义的。当一个工作流启动(例如, 当一个工作流实例被创建),它能选择性的显示它的用户指定显示的相应信息。对于提交的工作流程,显示如上图。这些信息包括每个审批人名字, 审批的时间和要通知的人员列表.。一旦这些信息被提供,用户点击右下角“Start“按钮。流程开始执行,请求每个参与评审这份文档的人,当这些人进入这个页面,它将看到这份文档。 当一个流程启动,它也可以选择发送email给启动的人。同样,当工作流完成时,工作流会通知文档的创建者。在这个例子中,对于这个实例,当审批流程结束的时候,审批工作流会发送。当然,也可以发送给参与流程的工作者,在这个例子中,当需要参与评审这份文档的时候,相关人也会收到email来通知他们。