随笔 - 136  文章 - 1 评论 - 2145 trackbacks - 136

quickflow最新版本增加了ExecuteCode活动,用Designer设计的流程也可以编写代码逻辑了。

image

ExecuteCode活动属性说明:
image

UserContext:指定代码是以启动人的身份还是系统账号身份运行。

MethodCode:要运行的代码, 双击活动即可调出代码编辑窗口

MethodParam:参数,可以在代码中直接通过param访问。

ExecuteCode实现原理:

ExecuteCode采用动态代码编译实现,用户可以指定一个方法的实现代码,QuickFlow会把方法代码最终编译成一个类DynamicClass ,如下:

using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Workflow.ComponentModel;
using Microsoft.SharePoint; 
using Microsoft.SharePoint.Workflow;
using Microsoft.SharePoint.WorkflowActions;
using CodeArt.SharePoint.CamlQuery;
//methodusing

namespace DynamicCodeGenerate
{
    public class DynamicClass : QuickFlow.DynamicClassTemplate
    {
        public DynamicClass(Activity root, SPWorkflowActivationProperties p)
            : base(root, p)
        {
        }
        protected override void Execute(string param)
        { 
            //dllref 
            //using  CodeArt.SharePoint.CamlQuery;
            //methodcode ;
        }
    }
}";

用户代码被插入到//methodcode 的位置。

基本方法

DynamicClass的基类已经实现了大量常用的方法,可以直接调用:

基本属性和方法

SPWeb Web 获取当前SPWeb
SPListItem Item 获取当前ListItem
protected SPList List 获取当前List
void Log(object msg) 写日志,日志信息会显示到工作流状态页面
object GetVariable(string name) 获取工作流变量值
void SetVariable(string name, object v) 设置工作流变量值
   

列表项操作方法

SPListItem GetItem(string listName, int itemId) 获取列表项
SPListItemCollection GetItems(string listName, CamlExpression expr) 查询列表项
void UpdateItem(string fieldNames, params object[] values) 更新列表项
void UpdateItem(string listName, int itemId, string fieldNames, params object[] values)  
UpdateItem(String listName, int itemId, Hashtable properties)  
int CreateItem(String listName, Hashtable properties) 创建列表项
int CreateItem(string listName, string fieldNames, params object[] values)  

void DeleteItem(String listName, int itemId)

删除列表项

void DeleteItems(String listName, CamlExpression expr)

删除符合条件的列表项
void SetModerationStatus(String listName, int itemId, SPModerationStatusType type, string comments) 设置内容审批状态
void SetModerationStatus(SPModerationStatusType type, string comments) 设置当前项目的内容审批状态

QuickFlow.DynamicClassTemplate 的实现见:

http://cid-7f5a25cdf47d03e6.office.live.com/self.aspx/QuickFlow/FrameworkCode/DynamicClassTemplate.cs

http://cid-7f5a25cdf47d03e6.office.live.com/self.aspx/QuickFlow/FrameworkCode/DynamicClassTemplate.ListItem.cs

除了以上提供的方法,可以编写任何C#代码

image

注:

1)建议只在QFD中使用ExecuteCode,如果采用VS+QF,直接处理QuickFlow提供的相关事件(如Completed)或者用Step+CodeActivity更好的实现代码功能。

2)在自定义表单的情况下,代码应该优先写到表单中或业务逻辑层。

posted on 2011-04-17 14:32 jianyi 阅读(713) 评论(15) 编辑 收藏