在写这一系列文章的时候,先要谢一个人,那就是园子里的笑煞天,做Workflow有一段时间,先前也看了一些workflow的资料,可是SharePint Workflow的资料还是很少。看了这些资料,可还是很晕头晕脑的,真正让我对workflow有个比较清楚的认识的,还是笑煞天的那篇很详细的Sequential workflow的文章。
无论是书上,还是网上,本身SharePoint Workflow就很少。除去使用SPD,绝大多数的是VS+Infopath,而且是Sequential类型的。State Machine+ASPX Form的很少很少。再经过一段时间的学习,现在想将自己学习到的一些经验分享出来。可能会分几篇。希望大家多多指教。
在这个workflow中,我们假定一个很简单的场景,就是sending mail。但是这个workflow有两个不同的Task,一个Task是为这个Mail指定相应的MailBody,From,To。一个Task给出相应的一些comment。在有两个Task的情况下,我们需要创建两个不同的Content Type。
1.在VS中建一个Class Library的Project,将其中的C#文件删除,建一个文件夹,在里面建三个XML文件,为了简单,所以这里的Cntent Type都比较简单。这里有个文件是大家很熟悉的Feature.xml,我们将会用一个Feature来安装我们的Content Type。另外的两个文件就是用来定义两个不同的Content Type。
2.MailBody Content Type
首先最先要注意的是 ContentType ID。所有的workflow Cotent Type ID都是以0x01080开头,这里面牵涉到Content Type的继承问题,具体请看http://msdn.microsoft.com/en-us/library/ms452896.aspx。你在取名的时候,可以先是以 0x01080开头,然后跟两个00(不要问我为什么,我也很疑惑),再在后面跟一个GUID的字符串。至于ContentType中引用的FieldRfs,你只需要指定ID和Name,这个Name是内部使用的,你要尽可能的防止与原有的字段发生冲突,我们在List中看到的只是Display Name。至于对字段的定义,这里就是直接和Content Type写在一起,你也可以分开写在另外的一个文件里面。对Field的定义,参考http://msdn.microsoft.com/en-us/library/ms437580.aspx。在后面我们会自定义EditTask Form,但是这里还没有讲到,所以相应的一些字段就空着,但是并不影响我们安装使用以下的两个Content Type
Code
1 <?xml version="1.0" encoding="utf-8" ?>
2 <Elements xmlns="http://schemas.microsoft.com/sharepoint/">
3 <ContentType ID="0x01080100E1D3EF13617C4b63AB9252DEEF0A4CDB"
4 Name="MailBody"
5 Group="MyContent"
6 Version="0"
7 Hidden="FALSE" Description="This Content Type is a Mail body" >
8 <FieldRefs>
9 <FieldRef ID="{525E758B-B416-4960-8711-9DDB72339E83}" Name="_MailTo" ShowInEditForm="TRUE" ShowInListSettings="TRUE" ReadOnly="FALSE"/>
10 <FieldRef ID="{D62E226E-F804-45f1-95DA-4B79509A40E1}" Name="_MailBody" ShowInEditForm="TRUE" ShowInListSettings="TRUE" ReadOnly="FALSE"/>
11 </FieldRefs>
12 </ContentType>
13 <Field ID="{525E758B-B416-4960-8711-9DDB72339E83}" Name="_MailTo" Group="MyContent" DisplayName="Peope Mail To" Type="UserMulti" DisplaceOnUpgrade="True" Hidden="False" ReadOnly="False" BaseType="LookupMulti" Mult="TRUE">
14
15 </Field>
16 <Field ID="{D62E226E-F804-45f1-95DA-4B79509A40E1}" Name="_MailBody" Group="MyContent" DisplayName="Mail Body" Type="Note" DisplaceOnUpgrade="True" Hidden="False" ReadOnly="False" />
17
18 </Elements>
19
3.MailComment ContentType
Code
<?xml version="1.0" encoding="utf-8" ?>
<Elements xmlns="http://schemas.microsoft.com/sharepoint/">
<ContentType ID="0x01080100DBDB07313A2549d5ABC363C906A9F72D"
Name="MailComment"
Group="MyContent"
Version="0"
Hidden="FALSE" Description="This Content Type is a Mail comment" >
<FieldRefs>
<FieldRef ID="{EDC78DAD-A984-4a81-BFA1-1047D231C05A}" Name="_MailComment" ShowInEditForm="TRUE" ShowInListSettings="TRUE" ReadOnly="FALSE"/>
<FieldRef ID="{8AAA2B01-2F49-4bb6-9A5C-87D992911CE9}" Name="_MailDate" ShowInEditForm="TRUE" ShowInListSettings="TRUE" ReadOnly="FALSE"/>
</FieldRefs>
</ContentType>
<Field ID="{EDC78DAD-A984-4a81-BFA1-1047D231C05A}" Name="_MailComment" Group="MyContent" DisplayName="Mail Comment" Type="Note" DisplaceOnUpgrade="True" Hidden="False" ReadOnly="False">
</Field>
<Field ID="{8AAA2B01-2F49-4bb6-9A5C-87D992911CE9}" Name="_MailDate" Group="MyContent" DisplayName="Mail Date" Type="DateTime" DisplaceOnUpgrade="True" Hidden="False" ReadOnly="False" />
</Elements>
3.Feature.xml 大家对这个文件已经比较熟悉了,这里就不多做解释了。我前面有几篇也有涉及到Feature,大家要是有兴趣的话,可以去看看。
Code
<?xml version="1.0" encoding="utf-8" ?>
<!-- _lcid="1033" _version="12.0.3412" _dal="1" -->
<!-- _LocalBinding -->
<Feature Id="{FDCCA231-0A1C-409d-BC3F-357C6E37673D}"
Title="SendMailCT"
Description="My Content Type"
Version="12.0.0.0"
Scope="Site"
xmlns="http://schemas.microsoft.com/sharepoint/">
<ElementManifests>
<ElementManifest Location="MailBody.xml" />
<ElementManifest Location="MailComment.xml" />
</ElementManifests>
</Feature>
4.下面是安装好后的一些图片效果。
可以在Site Content Types里面看到我们新建的两个Content Type
可以在Site Columns里面看到我们新建的四个Content Type