viernes, 30 de noviembre de 2012

SharePoint Conference 2012

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.









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?

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

SharePoint 2010 (38) Microsoft (32) Desarrollo SharePoint (31) Gerardo Reyes Ortiz (27) SharePoint (20) SharePoint 2013 (18) Errores SharePoint (12) México (10) PowerShell (9) Silverlight (8) Visio Services (7) Features (6) MVP (6) Silverlight 3 (6) WebCast (6) Workflows (6) Configuracion SharePoint 2010 (5) D.F. (5) API REST (4) Configuracion SharePoint 2010; (4) Troubleshooting (4) Visual Studio 2010 (4) Visual studio (4) WSS (4) Web parts (4) Apps (3) Comunidad SharePoint (3) Configuración SharePoint 2013 (3) ODATA (3) SharePoint Server (3) SharePoint; Instalación SharePoint; Troubleshooting; Search Service (3) Silverlight 3.0 (3) Silverlight Toolkit (3) WebParts (3) javascript (3) jquery (3) Eventos SharePoint (2) Office 2010 (2) PeoplePicker (2) REST (2) SQL Server (2) Scripting (2) Search Service Application (2) SharePoint Designer (2) UPA (2) UPS (2) Workflows SharePoint (2) host header (2) Apps Development (1) Big Bang (1) CAS (1) CSOM (1) Codeplex (1) CompartiMOSS (1) Configuracion SharePoint 2010; Errores SharePoint (1) Configuracion SharePoint 2010; SharePoint 2010 (1) Custom Actions (1) Custom Editor Parts (1) Delegate Controls (1) Deployment (1) DisableLoopbackCheck (1) Document Library (1) Entrevista (1) Examenes de Certificación (1) Extract WSP (1) FBA (1) FS4SP (1) Fakes (1) Fast Search Server 2010 For SharePoint (1) Fiddler (1) HTTP.SYS (1) HTTPS (1) JSON (1) Language Pack's (1) Latam (1) MAXDOP (1) MCSM (1) MSExpertos (1) MVC (1) Microsoft México (1) Microsoft; Codeplex; Screencast; (1) My Sites (1) SQL Server 2012 (1) SQL Server Reporting Services (1) Screencast (1) Screencast; (1) Service Applications (1) Service Pack (1) SharePoint 2007 (1) SharePoint 2010 SP 1 (1) SharePoint API (1) SharePoint Conference (1) SharePoint Emulators (1) SharePoint Farm (1) SharePoint Health Analyzer (1) SharePoint Magazine (1) SharePoint Online (1) SharePoint Search (1) SharePoint Test (1) SharePoint; Desarrollo SharePoint (1) Shims (1) Simposio (1) Simposio Latinoamericano (1) SkyDrive Pro (1) Soporte Microsoft (1) Templates (1) Tip (1) VSeWSS (1) Virtual Machine (1) Visual Studio 2012 (1) WCF (1) WSS; IIS 7 (1) Web API (1) Web Content Management (1) Web Services (1) Windows 8 (1) Windows Live ID (1) Xml (1) appcmd (1) iOS (1) jqGrid (1) onload function (1)