Как получить статус рабочего процесса утверждения элемента с использованием объектной модели sharepoint? - PullRequest
6 голосов
/ 19 октября 2010

Существует список, с которым связан рабочий процесс утверждения, рабочий процесс запускается при добавлении элемента. Список имеет анонимный доступ, поэтому любой может ввести элемент, но элемент должен быть утвержден утверждающим. элемент будет иметь статус (например, одобрен, отклонен и т. д.).

Теперь я создаю визуальную веб-часть. Я хочу отображать элементы списка в сетке. Но мне нужно отображать только те элементы, которые одобрены. Я использую объектную модель sharepoint, Как я могу фильтровать элементы на основе статус утверждения.

Спасибо

Ответы [ 4 ]

2 голосов
/ 23 августа 2012
private static void ListWorkflowStatus()
{
    string siteUrl = ConfigurationManager.AppSettings["SiteUrl"];

    // Get the site in impersonated context
    using (SPSite site = new SPSite(siteUrl))
    using (SPWeb web = site.OpenWeb())
    {
        SPList lib = web.Lists[ConfigurationManager.AppSettings["LibraryName"]];

        foreach (SPListItem item in lib.Items)
        {
            string titleColumn = ConfigurationManager.AppSettings["TitleColumn"];
            string workflowColumn = ConfigurationManager.AppSettings["WorkflowColumn"];

            string workflowStatus = item[workflowColumn] as string;
            Console.WriteLine(string.Format("{0}\t{1} ({2})", item[titleColumn], GetStatusName(workflowStatus), workflowStatus));
        }
    }
}

private static string GetStatusName(string value)
{
    if (string.IsNullOrEmpty(value))
    {
        return "N/A";
    }

    switch (value)
    {
        case "0":
            return "Not Started";
        case "1":
            return "Failed On Start";
        case "2":
            return "In Progress";
        case "3":
            return "Error Occurred";
        case "4":
            return "Canceled";
        case "5":
            return "Completed";
        case "6":
            return "Failed On Start (retrying)";
        case "7":
            return "Error Occurred (retrying)";
        case "15":
            return "Canceled";
        case "16":
            return "Approved";
        case "17":
            return "Rejected";
        default:
            return "N/A";
    }
}

Единственная проблема заключается в том, как получить имя столбца рабочего процесса;для этого я предлагаю вам использовать инструмент SharePoint Manager 2010, перейдите в библиотеку, с которой связан рабочий процесс, и получите оттуда имя столбца (это будет не более 8 символов, для меня это было "AOFWF0")

2 голосов
/ 19 октября 2010

Имя поля «Статус рабочего процесса» обычно состоит из первых 8 буквенно-цифровых символов имени вашего рабочего процесса. Значение Approved равно 16. Поэтому выбор только утвержденных элементов должен выглядеть примерно так:

string caml = @"<Where><Eq><FieldRef Name='MyApprov' /><Value Type='WorkflowStatus'>16</Value></Eq></Where>";
SPQuery query = new SPQuery();
query.Query = caml;
SPListItemCollection items = list.GetItems(query);
1 голос
/ 17 февраля 2012

Вы можете получить статус, используя этот пример кода

Пример кода:

//Obtain a list item
SPListItem currItem = currList.Items[0];
//Get the workflow status value
int wFlowStatusnum= (int)currItem ["WorkFlowName"];
//this will give you the one you see in the List view
string wFlowStatus= System.Enum.GetName(typeof(SPWorkflowStatus), wFlowStatusnum);
0 голосов
/ 04 октября 2013

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

Так что в итоге я делаю свой собственный поиск, и вот как ясформировать имя поля рабочего процесса

string WFColumnName = string.Empty;
foreach (SPWorkflowAssociation assoc_wf in ReqList.WorkflowAssociations)
        {
            if (assoc_wf.BaseTemplate.Id.ToString() == "63e32cd3-2002-4b2f-81b0-4a2b4c3ccafa")
            {
                string str_workflowName = assoc_wf.Name;
                Regex rgx = new Regex("[^a-zA-Z0-9]");
                str_workflowName = rgx.Replace(str_workflowName, "");
                if (str_workflowName.Trim().Length >= 8)
                    WFColumnName = str_workflowName.Substring(0, 8);
                else
                    WFColumnName = str_workflowName.Substring(0, str_workflowName.Length);

                break;
            }
            }  

Имя столбца формируется на основе этого (имя вводит в заблуждение, но оно примерно соответствует названию столбца): Как получить статус рабочего процесса SharePoint для каждого SPэлемент со скриптом PowerShell?

, а затем я использую его в своем запросе CAML

if(WFColumnName != string.Empty)
            viewFields += "<FieldRef Name='" + WFColumnName + "' />";

, и в моем случае мне просто нужно проверить, завершен он или нет, я получаюстроковое значение и сравнить с "5".

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...