Рабочий процесс SharePoint 2007 в VS: OnTaskChanged не запускается для элемента задачи InfoPath - PullRequest
1 голос
/ 25 июля 2011

Я использую Visual Studio 2008 для создания функции последовательного рабочего процесса для MOSS (SP 2007), SP2.

Workflow overview

Мой список задач - это библиотека документов, содержащая формы InfoPathи действие CreateTask в моем рабочем процессе прекрасно их создает (они работают в браузере, все продвигаемые поля свойств работают должным образом и т. д.).Хотя экземпляр WF связан с другим списком задач (невозможно выбрать библиотеку в форме ассоциации WF и невозможно опубликовать мою форму IP для чего-либо, кроме библиотеки).

В приложении приведен снимок экрана частиУ меня возникли проблемы с ... Все 4 из активированных действий имеют один и тот же токен корреляции ("taskToken"), а его владельцем является репликатор.

Условие "Мой пока действие" является условием кода,который на данный момент просто «возвращает» True.

Я пишу сообщение в список истории WF каждый раз, когда я вхожу в любой метод, и вижу следующее в конце моего списка истории (WF Status of «Выполняется "):

  1. в createTask1
  2. в OnTaskCreated1
  3. в утверждение TaskIsComplete (мой условный метод для while)

Ивот и все.WF просто остается там, независимо от того, сколько раз я обновляю свою задачу.

Я думаю, что есть проблема с ассоциацией моей задачи с WF.На странице «Состояние WF» над списком «История» я вижу свою задачу в списке, но с недопустимым 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 и this.currentTaskProps, предположив, что моя задача не была правильно связана с действием OnTaskChanged (до того как его свойство TaskID было просто пустым GUID по умолчанию)

Есть идеи, что я мог упустить или сделать неправильно?

1 Ответ

1 голос
/ 26 июля 2011

Я нашел решение этой проблемы, хотя я бы предпочел использовать свой оригинальный подход, если кто-нибудь знает способ заставить его работать ...

Обзор того, что я делаю по-другомутеперь нужно:

  1. Опубликовать мою форму задачи в локальном расположении, а затем включить опубликованный .xsn в мой проект VS (Добавить существующий)
  2. В мой элемент Feature / ElementManifests (of feature.xml), добавил элемент ElementFile для .xsn
  3. . В моих Elements / Workflow / MetaData (of elements.xml или workflow.xml, в зависимости от шаблона проекта) добавлен элемент Task0_FormURN с "urn: "строка из -PUBLISHED- .xsn
  4. Заменил весь мой код CreateTask на что-то вроде (код / ​​предварительное форматирование НЕ работает для меня в FF, извините):

    Задача CreateTask = отправитель как 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;

  5. Вместо того, чтобы назначать мои значения первичному источнику данных в форме задачи, я использую ItemMetadata.xml (для поискаэто) указывать каждое поле формы как поле во вторичном источнике данных и устанавливать такие значения, как:

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

Затем правильная задача помещается на страницу состояния рабочего процесса, и действие OnTaskChanged запускается правильно.

...