Pergunta

Preciso obter o status de um fluxo de trabalho programaticamente.Coisas que tentei:

  • item[workflowName] - me deu um "8" embora o fluxo de trabalho esteja concluído (parece sempre retornar 8, não sei por que) (não foi útil)
  • SPFieldWorkflowStatus.GetFieldValueAsText(item[workflowName]) - retorna uma string vazia
  • SPWorfklow.InternalState - foi "bloqueado | em execução | notStarted" no evento WorkflowStarting e WorkflowStarted.Foi "concluído" no evento WorkflowCompleted.Por que foi notStarted durante o evento WorkflowStarted?

Existem outras maneiras de obter o status de um fluxo de trabalho?

what i need

O que preciso fazer para um cliente é criar uma coluna em uma lista onde o cliente possa ver o status de um fluxo de trabalho executado em outra lista (como uma pesquisa, que já tentei usar, mas não consegui selecionar o campo do fluxo de trabalho onde está o status).É por isso que agora estou tentando resolver isso com um campo de hiperlink, mas não consigo obter o status correto de um fluxo de trabalho.

Foi útil?

Solução

Fluxo de trabalho de status que você pode obter usando o seguinte método

public string GetWorkflowStatus(SPListItem item, String workFlowName)
{
    SPWorkflowManager manager = item.Web.Site.WorkflowManager;
    foreach (SPWorkflow instance in manager.GetItemWorkflows(item))
    {
        if (instance.ParentAssociation.Name == workFlowName)
        {
            foreach (SPField field in instance.ParentList.Fields)
            {
                if (field is SPFieldWorkflowStatus)
                {
                    SPFieldWorkflowStatus statusField = (SPFieldWorkflowStatus)field;
                    if (statusField.Title == workFlowName)
                    {
                       int statusValue = int.Parse(item[statusField.StaticName].ToString());
                       return statusField.GetFieldValueAsHtml(statusValue);
                    }
                }
            }
        }
    }
    return String.Empty;
}

Outras dicas

A versão simplificada:

public static string GetWorkflowStatus(SPListItem listItem,  string workflowTitle)
{    
    var workflowStatusField = listItem.Fields[workflowTitle] as SPFieldWorkflowStatus;
    int statusValue = int.Parse(listItem[workflowStatusField.StaticName].ToString());
    return workflowStatusField.GetFieldValueAsHtml(statusValue);
}

Parece ser um problema com a quantidade de fluxos de trabalho em execução nessa lista.Eu li Aqui que o status pode retornar" 8 "se 15 ou mais campos de status de fluxos de trabalho existirem em uma lista.Temos atualmente 26 fluxos de trabalho em execução nessa lista e, portanto, suponho que não seja possível obter o status sem causar um viewQueryoverflow.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a sharepoint.stackexchange
scroll top