Pues bien, ha sido un evento fabuloso, bastante bien organizado.
La calidad de profesionales que tuve oportunidad de conocer y las opiniones que compartimos fueron realmente valiosas
Las vegas es una ciudad asombrosa con muchos lugares a donde ir, aunque muy cara. De noche siempre hay algo que hacer
Sin duda un evento que quedara para la historia
Algunas fotos.
viernes, 30 de noviembre de 2012
domingo, 4 de noviembre de 2012
SharePoint 2010 - New instances of this workflow template are currently disallowed
¿Les ha pasado que alguna vez quieren iniciar una instancia de un flujo de trabajo y aparece este mensaje de error?
SharePoint 2007 - New instances of this workflow template are currently disallowed
Error: New instances of this workflow template are currently disallowed.
¿Pero y cómo podemos resolverlo cuando hablamos de código?
Para concluir, el código corregido
Happy Coding!
Bueno púes a mí me había pasado muchas veces, solo que nunca al utilizar código para iniciar automáticamente un flujo de trabajo, es decir, siempre que había obtenido este mensaje de error había sido utilizando la interfaz de usuario, para lo cual existen muchas referencias en la red para solucionarlo.
SharePoint 2007 - New instances of this workflow template are currently disallowed
Error: New instances of this workflow template are currently disallowed.
¿Pero y cómo podemos resolverlo cuando hablamos de código?
Al igual que cuando lidiamos con este error al intentar inicializar in flujo de trabajo utilizando la interfaz de usuario, este error se debe a que existe más de una versión del mismo flujo relacionada con la lista o cualquier otro elemento al que se pueda asociar un workflow como librerías de documentos, sitios, etc., en mi caso específico con un tipo de contenido.
Para ejemplificar este escenario, muestro a continuación mi código de powershell que tenía este error, y el cual simplemente intentaba iniciar programáticamente todas las instancias de una lista de SharePoint con el estatus de “Cancelled”:
cls #Add-PSSnapin microsoft.sharepoint.powershell $siteUrl="http://sp2010/mysite" $site = Get-SPSite -Identity $siteUrl foreach($web in $site.AllWebs) { $list=$web.Lists["List"] $manager=$site.WorkFlowManager foreach($ct in $list.ContentTypes) { if($ct.Name -eq "MyContentType") { $swapWorkflowAssociation = $Ct.WorkflowAssociations[0] } } #Si la referencia al objeto WorkflowAssociation es null, no intentamos iniciar el WF if($swapWorkflowAssociation -eq $null) { continue } foreach($listItem in $list.Items) { foreach($workflowInstance in $listItem.Workflows) { if($workflowInstance.InternalState -eq [Microsoft.SharePoint.Workflow.SPWorkflowState]::Cancelled) { $data=$workflowAssociation.AssociationData try { $result = $manager.StartWorkflow($listItem, $workflowAssociation, $data, $True) } catch { #Write-Host $_.Exception.ToString() } $cadena = "Se inicia el WF|" + $web.Url + "|" + $listItem.ID.ToString() + "|" + $listItem.Title + "|" + $workflowInstance.InternalState Write-Host $cadena } } } }
Como comente antes, en la línea marcada obtenía este mensaje de error. El error estaba en que debido al proceso de prueba y error desarrollo iterativo, el tipo de contenido tenía más de una versión del flujo de trabajo asociado, por lo que al intentar recuperar una referencia al objeto WorkflowAssociation, no se recuperaba precisamente la más “reciente” o actual. El truco está en que las versiones viejas del flujo de trabajo, además de ser establecidas con el atributo “No New Instances”, siempre son renombradas de la forma: “NombreDeMiWorkflow (fecha)”, excepto para la Asociación más reciente (la correcta).
Por lo que, para evitar este error, se debe validar que la propiedad Name del objeto WorkflowAssociation, sea exactamente como la establecimos en un principio, sin fechas (o algún otro texto adicional).
$swapWorkflowAssociation = $Ct.WorkflowAssociations[0]
Para concluir, el código corregido
cls Start-SPAssignment –Global #Add-PSSnapin microsoft.sharepoint.powershell $siteUrl="http://sp2010/mysite" $site = Get-SPSite -Identity $siteUrl foreach($web in $site.AllWebs) { $list=$web.Lists["List"] $manager=$site.WorkFlowManager foreach($ct in $list.ContentTypes) { if($ct.Name -eq "MyContentType") { foreach($swapWorkflowAssociation in $Ct.WorkflowAssociations) { if($swapWorkflowAssociation.Name -eq "MyWorkflowName") { $workflowAssociation = $swapWorkflowAssociation } } } } #Si la referencia al objeto WorkflowAssociation es null, no intentamos iniciar el WF if($swapWorkflowAssociation -eq $null) { continue } foreach($listItem in $list.Items) { foreach($workflowInstance in $listItem.Workflows) { if($workflowInstance.InternalState -eq [Microsoft.SharePoint.Workflow.SPWorkflowState]::Cancelled) { $data=$workflowAssociation.AssociationData try { $result = $manager.StartWorkflow($listItem, $workflowAssociation, $data, $True) } catch { #Write-Host $_.Exception.ToString() } $cadena = "Se inicia el WF|" + $web.Url + "|" + $listItem.ID.ToString() + "|" + $listItem.Title + "|" + $workflowInstance.InternalState Write-Host $cadena } } } }
Happy Coding!
Etiquetas:
Desarrollo SharePoint,
PowerShell,
SharePoint 2010,
Workflows,
Workflows SharePoint
Suscribirse a:
Entradas (Atom)