给SPD增加自已写的Activity

前天要做个让SPD在设计工作流的时候能添加的Activity .

场景是这样的,当流程走到某一步的时候,必须设置当前列表项的权限为部分人只读,部分人可修改,完了再走几步后恢复权限(先前没自定义权限,所以直接恢复继承就OK).

最后做完的效果应该是这样,SPD里设计工作流时可以在操作里找到我们自定义的Activity.


下面两张图是我们的
Activity被加到工作流里的界面.




 

那么,是怎么做到跟SPD集成的呢?其实很简单.

第一步,首先我们得先做好这个Activity.

建项目添加Activity之后.要添加两个引用




 

然后一堆的namespace.

然后一堆的DependencyProperty.

然后一堆的功能代码.

Activity的实现代码就不贴了,严重影响页面.^_^最下面有下载整个项目的连接
第二步,强签名程序集,因为我们要把它装到GAC.

签名过后Rebuild.DLL拖到GAC里去.

第三步,修改站点对应的目录里的web.config文件,搜索到</authorizedTypes>在这行上面加入一行:

 

< authorizedType  Assembly ="ItemRole, Version=1.0.0.0, Culture=neutral, PublicKeyToken=810fc8cb8b152837"  Namespace ="ItemRole"  TypeName ="*"  Authorized ="True"   />

 

Assembly的值可以用Reflector来看程序集
 

第四步, 在服务器上注册我们的Activity

定位到路径C:\Program Files\Common Files\Microsoft Sharedweb server extensions\12\TEMPLATE\2052\Workflow

里面有个wss.actions,可以通过修改这个文件来注册我们的Activity

更推荐的做法是,参考wss.actions新建一个action后缀的文件 custom.actions

也可以直接修改wss.actions actions 节里加上下面两段:

< Action  Name ="设置列表项的权限"
      ClassName
="ItemRole.SetRoleActivity"
      Assembly
="ItemRole, Version=1.0.0.0, Culture=neutral, PublicKeyToken=810fc8cb8b152837"
      AppliesTo
="all"
      Category
="Sample" >
      
< RuleDesigner  Sentence ="将%1的权限设置为%2用户只读,%3可写" >          
    
< FieldBind  Field ="ListId,ListItem"  Text ="此列表"  Id ="1"  DesignerType ="ChooseListItem"   />
    
< FieldBind  Field ="Reader"  DesignerType ="Person"  Text ="只读用户"  Id ="2" />
    
< FieldBind  Field ="Editor"  DesignerType ="Person"  Text ="可写用户"  Id ="3" />
    
</ RuleDesigner >
    
< Parameters >
    
< Parameter  Name ="__Context"  Type ="Microsoft.SharePoint.WorkflowActions.WorkflowContext"  Direction ="In"   />
    
< Parameter  Name ="ListId"  Type ="System.String, mscorlib"  Direction ="In"   />
    
< Parameter  Name ="ListItem"  Type ="System.Int32, mscorlib"  Direction ="In"    />
    
< Parameter  Name ="Reader"  Type ="System.Collections.ArrayList, mscorlib"  Direction ="In"   />
    
< Parameter  Name ="Editor"  Type ="System.Collections.ArrayList, mscorlib"  Direction ="In"   />
      
</ Parameters >
    
</ Action >

    
< Action  Name ="恢复列表项的权限继承"
      ClassName
="ItemRole.ResetRoleInheritanceActivity"
      Assembly
="ItemRole, Version=1.0.0.0, Culture=neutral, PublicKeyToken=810fc8cb8b152837"
      AppliesTo
="all"
      Category
="Sample" >
      
< RuleDesigner  Sentence ="将%1 恢复为继承父权限" >          
    
< FieldBind  Field ="ListId,ListItem"  Text ="此列表"  Id ="1"  DesignerType ="ChooseListItem"   />
    
</ RuleDesigner >
    
< Parameters >
    
< Parameter  Name ="__Context"  Type ="Microsoft.SharePoint.WorkflowActions.WorkflowContext"  Direction ="In"   />
    
< Parameter  Name ="ListId"  Type ="System.String, mscorlib"  Direction ="In"   />
    
< Parameter  Name ="ListItem"  Type ="System.Int32, mscorlib"  Direction ="In"    />
      
</ Parameters >
    
</ Action >

来解释一下上面的代码

Action 的Name很好理解,就是在SPD里显示的名字,
ClassName指定类名,
Assembly不用说了,
AppliesTo,应用的对象,all就是全部,还可以是list,doclib
Category,在SPD里显示时的分类名
RuleDesigner 定义了在SPD添加了Activity后显示的东西。
FieldBind里有两个重要的的属性,Field跟DesignerType
有好多个DesignerType可用,对应着不同的弹出框和不同的功能。比如这里用到的Person ChooseListItem分别是用来选择用户和列表项的。
至于别的DesignerType和功能,最好的查阅地方我觉得还是wss.actions,对应着SPD显示出来的效果和功能去wss.actions里查看用的哪个Type.都用到什么Field等等。
Parameters里的每一个parameter对应着RuleDesigner里的Field,里面的各个属性也不难理解。
其中有一个__Context很重要。传递工作流运行时的上下文用的。
//其实没什么可解释的,一看就明白的那种。

第五步
,重启IIS.OK

现在用SPD在站点上创建工作流的时候就可以用到我们自己定制的Activity.(Activity一样是可以调试的,附加到正确的w3wp里就可以了)



完整项目下载

转载于:https://www.cnblogs.com/EricWang/archive/2008/05/08/1188125.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值