我正在使用Visual Studio 2008为MOSS(SP 2007),SP2创建顺序工作流功能。
我的任务列表是一个包含InfoPath表单的文档库,我工作流中的CreateTask活动正在完美地创建它们(它们在浏览器中工作,所有提升的属性字段按预期工作,等等)。虽然WF实例与另一个任务列表相关联(无法在WF关联表单上选择库,但无法将我的IP表单发布到库以外的任何其他任何内容)。
附件是我遇到问题的WF部分的屏幕截图...所有4个已启用的活动都具有相同的关联令牌(“taskToken”),其所有者是复制者。
My While Activity条件是一个Code Condition,现在只是“返回”True。
每次输入任何方法时,我都会向WF历史记录列表写一条消息,并在历史记录列表的末尾看到以下内容(WF状态为“进行中”):
就是这样。无论我多少次更新我的任务,WF都会留在那里。
我认为我的任务与WF的关联存在问题。在WF Status页面上,在History列表上方,我看到列出了我的任务,但是URL无效(它指向的列表甚至不存在)。
我的createTask方法的超基本伪代码如下:
private void createTask1_MethodInvoking() {
WriteToHistoryList("in createTask1");
// create task form in doc lib:
string newTaskName = [new unique name for task];
using (MemoryStream) {
XmlTextWriter writer;
// build XML doc for InfoPath form using writer
web.Files.Add(taskListURL + newTaskName + ".xml", writer.trimmedBufferBytes);
}
// get the new task item:
SPQuery = [CAML query using newTaskName];
SPListItem newTaskItem = [item from CAML query];
// associate new task form with WF (theoretically):
((CreateTask)sender).TaskId = newTaskItem.UniqueId;
this.currentTaskID = newTaskItem.UniqueId; // this is a public guid on my WF class, bound in the properties of the OnTaskCreated, OnTaskChanged, and OnTaskCompleted as the taskID
SPWorkflowTaskProperties props = new SPWorkflowTaskProperties();
props.AssignedTo = [me];
props.DueDate = [tomorrow];
props.Title = "Test Title"; // NOT the actual task title, but this is what's showing up on the WF Status page
((CreateTask)sender).TaskProperties = props;
this.currentTaskProps = props; // Another public property of the WF class, bound as the AfterProperties property of the later task Activities
}
设置已转换的发件人的TaskId和TaskProperties,并将类的公共属性设置为这些值似乎是多余的,对我来说是错误的(如果这是一个并行复制器,我会怎么做?),但我添加了this.currentTaskID
和{I}猜测我的任务没有与OnTaskChanged活动正确关联(在它的TaskID属性只是默认的“空”GUID之前)
任何想法,我可能会错过或做错?
答案 0 :(得分:1)
我找到了解决这个问题的方法,但如果有人知道如何让它工作,我宁愿使用我原来的方法......
现在对我的不同做法的概述是:
用类似的东西替换了我的所有CreateTask代码(代码/预格式化对我不起作用,对不起):
CreateTask task = sender as CreateTask;
task.TaskId = Guid.NewGuid();
task.TaskProperties = new SPWorkflowTaskProperties();
task.TaskProperties.TaskType = 0; //匹配Task0_FormURN元素
task.TaskProperties.Title = newName;
task.TaskProperties.AssignedTo = [me]
this.currentTaskID = task.TaskId;
this.currentTaskProps = task.TaskProperties;
我没有将我的值分配给任务表单的主数据源,而是使用ItemMetadata.xml(搜索它)将每个表单字段指定为辅助数据源中的字段,并将这些值设置为:
task.TaskProperties.ExtendedProperties [“type”] = this.requestItem.type();
然后将正确的任务放在“工作流状态”页面上,OnTaskChanged活动正在正常触发。