Como buscar informações de status do Workflow no SharePoint Online (365)
CENÁRIO:
Olá!
Nas versões antigas (on-premises) do SharePoint Server é bem fácil obter o status do workflow bastando apenas adicionar uma coluna na view que contém o nome do Workflow.
Entretanto, no SharePoint Online (365) é um pouco diferente. Ainda temos a coluna do workflow (WorkflowColumnStatus), mas ela fica “em branco”. Como fazer para verificar, programaticamente, o status do workflow que foi desenvolvido dentro de um SharePoint Add-in?
ERRO:
Colunas em branco:
SOLUÇÃO:
Utilizando o SharePoint CSOM ou JSOM (Javascript Object Model) é possível instanciar o WorkflowServicesManager e obter as informações do workflow.
Em texto:
var workflowServicesManager = new WorkflowServicesManager(ctx, ctx.Web);
// connect to the instance service
var workflowInstanceService = workflowServicesManager.GetWorkflowInstanceService();
// get all instances
var workflowInstances = workflowInstanceService.EnumerateInstancesForListItem(listId, itemId);
ctx.Load(workflowInstances, i => i.Include(f => f.Id, f => f.LastUpdated, f => f.Status));
ctx.ExecuteQuery();
foreach (var instance in workflowInstances)
{
try
{
if (instance.Status.ToString() != “Completed”)
{
Console.WriteLine(“{0} – {1} – {2}”,
instance.Id.ToString(),
instance.LastUpdated,
instance.Status.ToString());
}
}
catch (Exception ex)
{
_telemetry.TrackException(ex);
}
}
. J
Abraço!
Could not load file or assembly Microsoft.VisualStudio.Shell.15.0
CENÁRIO:
Montando o pipeline de Build e Release automático de um projeto SharePoint Add-in (SharePoint App – SharePoint Online 365) descobri que não tem um template de tarefa de build no Visual Studio Online (VSTS).
Então, parti para construir a tarefa de build vazia (Empty) onde colocamos os comandos para realizar o build.
Eis que ao tentar dar build usando o msbuild.exe me deparo com um erro bem estranho.
ERRO:
“C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\MSBuild\Microsoft\VisualStudio\v15.0\SharePointTools\Microsoft.VisualStudio.SharePoint.targets(395,5): Error : Could not load file or assembly ‘Microsoft.VisualStudio.Shell.15.0, Version=15.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a’ or one of its dependencies. The system cannot find the file specified.”
SOLUÇÃO:
Depois de algumas (muitas) pesquisas descobri que é necessário adicionar referências no projeto para fazer o build com sucesso. Passos para resolver:
- Adicionar um arquivo “Microsoft.VisualStudio.SharePoint.AddAssemblySearchPaths.targets” na raiz do seu projeto (conteúdo do arquivo mais abaixo)
- Adicionar “<Import Project=”Microsoft.VisualStudio.SharePoint.AddAssemblySearchPaths.targets” />” no arquivo .csproj para importar o arquivo adicionado.
- Pronto, agora é build com sucesso! 😉
Conteúdo do arquivo “Microsoft.VisualStudio.SharePoint.AddAssemblySearchPaths.targets”:
<Project xmlns=’http://schemas.microsoft.com/developer/msbuild/2003′ >
<UsingTask TaskName=”AddAssemblySearchPath” TaskFactory=”CodeTaskFactory” AssemblyFile=”$(MSBuildToolsPath)\Microsoft.Build.Tasks.Core.dll”>
<ParameterGroup>
<SearchPath ParameterType=”System.String” Required=”true” />
</ParameterGroup>
<Task>
<Using Namespace=”System” />
<Using Namespace=”System.IO” />
<Using Namespace=”System.Reflection” />
<Code Type=”Fragment” Language=”cs”>
<![CDATA[
AppDomain.CurrentDomain.AssemblyResolve += (sender, e) =>
{
string assemblySearchPath = Path.Combine(SearchPath, e.Name.Split(‘,’)[0] + “.dll”);
if (File.Exists(assemblySearchPath)) return Assembly.LoadFrom(assemblySearchPath);
return null;
};
]]>
</Code>
</Task>
</UsingTask>
<Target Name=”addAssemblySearchPaths”>
<AddAssemblySearchPath SearchPath=”$(MSBuildExtensionsPath)\..\Common7\IDE\PrivateAssemblies\” />
<AddAssemblySearchPath SearchPath=”$(MSBuildExtensionsPath)\..\Common7\IDE\PublicAssemblies\” />
</Target>
</Project>
Também adicionei o arquivo para download aqui: https://1drv.ms/u/s!Ass2zQvJNjQNguMdQGn53ziBBweFBg
Para resolver essa zica, contei com a ajuda do super http://diegomarques.azurewebsites.net/.
Abraço!