powered by simpleCommunicator - 2.0.41     © 2025 Programmizd 02
Форумы / SharePoint [игнор отключен] [закрыт для гостей] / как программно выполнить действие над элементом списка?
4 сообщений из 4, страница 1 из 1
как программно выполнить действие над элементом списка?
    #37975567
Lukich
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Коллеги, как программно выполнить действие над элементом списка?
Получить список доступных действий удалось так:
Код: c#
1.
2.
3.
4.
5.
6.
SPWorkflowManager manager = web.Site.WorkflowManager;
SPWorkflowTaskCollection tasks = manager.GetItemTasks((SPListItem)item);
foreach (SPWorkflowTask task in tasks)
{
        Console.WriteLine(task.Name);    
}
...
Рейтинг: 0 / 0
как программно выполнить действие над элементом списка?
    #37977678
Фотография tsyselsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Lukich,

Дайте больше контекста.
...
Рейтинг: 0 / 0
как программно выполнить действие над элементом списка?
    #37981364
Lukich
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Подробнее:
WorkFlow делали (без меня) с использованием Nintex - простенький алгоритм согласования сначала у руководителя, затем у согласователей.
Задача сделать вебсервис, который бы мог помимо получения информации об элементе списка, выполнять действия в соответствии с WorkFlow.

Пытаюсь использовать WorkflowManager.StartWorkflow как например тут
Проблема в том, что у элемента списка ParentList.WorkflowAssociations - пусто.

Может нужно как-то по-другому делать?
...
Рейтинг: 0 / 0
как программно выполнить действие над элементом списка?
    #37982764
Фотография tsyselsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LukichПодробнее:
WorkFlow делали (без меня) с использованием Nintex - простенький алгоритм согласования сначала у руководителя, затем у согласователей.
Задача сделать вебсервис, который бы мог помимо получения информации об элементе списка, выполнять действия в соответствии с WorkFlow.

Пытаюсь использовать WorkflowManager.StartWorkflow как например тут
Проблема в том, что у элемента списка ParentList.WorkflowAssociations - пусто.

Может нужно как-то по-другому делать?

Nintex, не юзал, хз как там у них все организовано.
Есть вопрос. Вы пытаетесь стартануть WF, c формы какой
или один процесс стартует другой? Помню с контекстами там проблемы были.
Некоторые объекты были не инициализированы.

WorkflowAssociation вешали на тип или на библиотеку(и снимали соответственно) статичной утилиткой типа ниже приведенной
утилитка
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Microsoft.SharePoint.Workflow;
using Microsoft.SharePoint;
using System.Globalization;

namespace Virtual.Doc.Metadata.Utils
{
    public static class WorkflowUtils
    {
        public static void addWorkflowAssociation(SPWeb web, String wfName, String wfHistoryListName, String taskListName,  SPList library)
        {
            string WORKFLOW = wfName;
            string HISTORY = wfHistoryListName;
            bool historylistfound = false;

            foreach (SPList list in web.Lists)
            {
                if (list.Title == HISTORY)
                {
                    historylistfound = true;
                }
            }
            if (!historylistfound)
            {
                web.Lists.Add(HISTORY, HISTORY, SPListTemplateType.WorkflowHistory);
            }

            SPWorkflowAssociation association = null;
            foreach (SPWorkflowAssociation assoc in library.WorkflowAssociations)
            {
                if (assoc.Name == WORKFLOW)
                {
                    association = assoc;
                }
            }
            SPList workflowtasks = web.Lists[taskListName];
            workflowtasks.EnableAssignToEmail = true;
            workflowtasks.Update();

            if (association == null)
            {
                SPWorkflowTemplate template =
                    web.WorkflowTemplates.GetTemplateByName(WORKFLOW, CultureInfo.CurrentCulture);
                association = SPWorkflowAssociation.CreateListAssociation(template, WORKFLOW, workflowtasks, web.Lists[HISTORY]);
                association.AssociationData = string.Empty;
                association.AllowManual = false;
                association.AutoStartChange = false;
                association.AutoStartCreate = true;

                library.WorkflowAssociations.Add(association);
                library.Update();
            }
        }

        public static bool addWorkflowAssociation(SPWeb web, String wfName, String wfHistoryListName, String taskListName, SPContentType ctype)
        {
            try
            {
                string WORKFLOW = wfName;
                string HISTORY = wfHistoryListName;

                SPList historyList = ListUtils.GetList(web, HISTORY, SPListTemplateType.WorkflowHistory);

                SPWorkflowAssociation association = ctype.WorkflowAssociations.GetAssociationByName(WORKFLOW, CultureInfo.CurrentCulture);

                SPList taskList = ListUtils.GetList(web, taskListName, SPListTemplateType.Tasks);
                taskList.EnableAssignToEmail = true;
                taskList.Update();

                if (null == association && historyList != null && taskList != null)
                {
                    SPWorkflowTemplate template = web.WorkflowTemplates.GetTemplateByName(WORKFLOW, CultureInfo.CurrentCulture);
                    association = SPWorkflowAssociation.CreateWebContentTypeAssociation(template, WORKFLOW, taskList.Title, HISTORY);
                    association.AssociationData = string.Empty;
                    association.AllowManual = true;
                    association.AutoStartChange = false;
                    association.AutoStartCreate = false;

                    ctype.WorkflowAssociations.Add(association);
                    ctype.Update();
                }
                return true;
            }
            catch
            {
                return false;
            }
        }
    }
}


...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / SharePoint [игнор отключен] [закрыт для гостей] / как программно выполнить действие над элементом списка?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]