VS中的SharePoint 2007工作流:OnTaskChanged未针对InfoPath任务项触发

时间:2011-07-25 13:22:31

标签: sharepoint-2007 workflow sharepoint-workflow

我正在使用Visual Studio 2008为MOSS(SP 2007),SP2创建顺序工作流功能。

Workflow overview

我的任务列表是一个包含InfoPath表单的文档库,我工作流中的CreateTask活动正在完美地创建它们(它们在浏览器中工作,所有提升的属性字段按预期工作,等等)。虽然WF实例与另一个任务列表相关联(无法在WF关联表单上选择库,但无法将我的IP表单发布到库以外的任何其他任何内容)。

附件是我遇到问题的WF部分的屏幕截图...所有4个已启用的活动都具有相同的关联令牌(“taskToken”),其所有者是复制者。

My While Activity条件是一个Code Condition,现在只是“返回”True。

每次输入任何方法时,我都会向WF历史记录列表写一条消息,并在历史记录列表的末尾看到以下内容(WF状态为“进行中”):

  1. in createTask1
  2. in OnTaskCreated1
  3. 在approvalTask​​IsComplete(我的条件方法为While)
  4. 就是这样。无论我多少次更新我的任务,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之前)

    任何想法,我可能会错过或做错?

1 个答案:

答案 0 :(得分:1)

我找到了解决这个问题的方法,但如果有人知道如何让它工作,我宁愿使用我原来的方法......

现在对我的不同做法的概述是:

  1. 将我的任务表单发布到本地位置,然后将已发布的.xsn包含在我的VS项目中(Add Existing)
  2. 在我的Feature / ElementManifests元素(feature.xml)中,为.xsn添加了一个ElementFile元素
  3. 在我的Elements / Workflow / MetaData(elements.xml或workflow.xml中,取决于项目模板)中,添加了一个Task0_FormURN元素,其中包含-PUBLISHED- .xsn
  4. 的“urn:”字符串
  5. 用类似的东西替换了我的所有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;

  6. 我没有将我的值分配给任务表单的主数据源,而是使用ItemMetadata.xml(搜索它)将每个表单字段指定为辅助数据源中的字段,并将这些值设置为:

    task.TaskProperties.ExtendedProperties [“type”] = this.requestItem.type();

  7. 然后将正确的任务放在“工作流状态”页面上,OnTaskChanged活动正在正常触发。