none
Error al utilizar workflowProperties.Item.Update() RRS feed

  • Pregunta

  • Buenas,

    Tenemos una biblioteca de documentos que tiene activadas las opciones de "Requerir aprobación" y "Crear una versión cada vez que se edita un elemento".

    Queremos hacer un flujo de trabajo que incremente la versión del elemento de la biblioteca (si su versión actual es 3.1 pasarla a 4.0; si es 5.0 pasarla a 6.0).

    El problema lo tengo en el segundo ejemplo, cuando intento aprobar la versión 5.0 o no sube de versión o da un error por modificar el elemento estando protegido.

     

     

            private void codeActivity1_ExecuteCode(object sender, EventArgs e)
            {
                SPListItem spliElementoActual = workflowProperties.Item;
                SPFile spfFicheroActual = spliElementoActual.File;
    
                if (spliElementoActual.ModerationInformation.Status == SPModerationStatusType.Approved)
                {
                    //spliElementoActual.ModerationInformation.Status = SPModerationStatusType.Pending;
                    //spliElementoActual.Update();
    
                    if (spfFicheroActual.CheckOutType == SPFile.SPCheckOutType.None)
                    {
                        spfFicheroActual.CheckOut();
                        spfFicheroActual.Update();
                        spfFicheroActual.CheckIn("Se prepara item para actualizar automáticamente");
                        spfFicheroActual.Update();
                    }
                }
    
                spliElementoActual.ModerationInformation.Status = SPModerationStatusType.Approved;
                spliElementoActual.ModerationInformation.Comment = "Se aumenta la versión automáticamente";
                spliElementoActual.Update();
            }
    

    Se puede realizar esto utilizando solo la propiedad ModerationInformation?

     

    Gracias y saludos.


    • Editado ManuelGB jueves, 2 de febrero de 2012 16:11
    miércoles, 1 de febrero de 2012 15:18

Respuestas

  • Buenas,

    he encontrado un link con el mismo problema que tenía yo:

    http://social.msdn.microsoft.com/forums/en-US/sharepointworkflow/thread/6295ee7f-6e77-4944-a557-25d56787bdf8

    Se aplican todos los cambios que haya que realizar en el elemento y antes de realizar el update() se utiliza este código para recuperar el elemento con las modificaciones realizadas:

    SPDocumentLibrary library = (SPDocumentLibrary)workflowProperties.Web.Lists[workflowProperties.ListId];
    SPListItem splistitem = library.GetItemById(workflowProperties.ItemId);
    splisitem.update();
    
    

    De esta manera no da el error indicando que el archivo ha sido cambiado.

    (En el link se utiliza desde el inicio y después se realizan los cambios en el elemento de la lista, pero de esa forma me indica el mismo error.)

    Si alguien ve algun error en la conclusión, por favor, indicadlo para que otros no lo cometan.

    Saludos.

    • Propuesto como respuesta Uriel Almendra miércoles, 10 de abril de 2013 14:45
    • Marcado como respuesta Uriel Almendra miércoles, 10 de abril de 2013 14:45
    miércoles, 1 de febrero de 2012 21:58

Todas las respuestas

  • Buenas,

    tal vez la pregunta podría simplificarse.

    Durante la ejecución de un Workflow diseñado en Visual Studio,

    ¿Se puede editar el SPListItem desde el que se ha lanzado el flujo de trabajo?

     

    Gracias y saludos.

    Manolo.

    miércoles, 1 de febrero de 2012 17:45
  • Hola,

    Por supuesto, lo tienes en el objeto workflowproperties.

    Saludos


    ------------------------------------------------------------
    Juan Carlos González Martín MVP de SharePoint Server
    Director revista CompartiMOSS: http://www.gavd.net/servers/compartimoss/compartimoss_main.aspx
    Blog: http://geeks.ms/blogs/ciin
    Twitter: @jcgm1978
    ------------------------------------------------------------
    miércoles, 1 de febrero de 2012 19:28
  • Buenas Juan Carlos,

    el problema lo tengo cuando cambio el contenido de cualquiera de sus columnas y intento hacer un update() me da el siguiente error:

     

    Microsoft.SharePoint.SPException: SHAREPOINT\system modificó el archivo Documentacin Editable/....doc en 01 feb 2012 15:29:26 +0100. ---> 
    System.Runtime.InteropServices.COMException (0x81020037): <nativehr>0x81020015</nativehr><nativestack>
    </nativestack>SHAREPOINT\system modificó el archivo Documentacin Editable/Sistema ....doc
     en 01 feb 2012 15:29:26 +0100.     en Microsoft.SharePoint.Library.SPRequestInternalClass.AddOrUpdateItem(String bstrUrl, String bstrListName, 
    Boolean bAdd, Boolean bSystemUpdate, Boolean bPreserveItemVersion, Boolean bUpdateNoVersion, Int32& plID, String& pbstrGuid, Guid pbstrNewDocId,
     Boolean bHasNewDocId, String bstrVersion, Object& pvarAttachmentNames, Object& pvarAttachmentContents, Object& pvarProperties, 
    Boolean bCheckOut, Boolean bCheckin, Boolean bMigration, Boolean bPublish, String bstrFileName, ISP2DSafeArrayWriter pListDataValidationCallback, 
    ISP2DSafeArrayWriter pRestrictInsertCallback, ISP2DSafeArrayWriter pUniqueFieldCallback)     en 
    Microsoft.SharePoint.Library.SPRequest.AddOrUpdateItem(String bstrUrl, String bstrListName, Boolean bAdd, Boolean bSystemUpdate, 
    Boolean bPreserveItemVersion, Boolean bUpdateNoVersion, Int32& plID, String& pbstrGuid, Guid pbstrNewDocId, Boolean bHasNewDocId, 
    String bstrVersion, Object& pvarAttachmentNames, Object& pvarAttachmentContents, Object& pvarProperties, Boolean bCheckOut, 
    Boolean bCheckin, Boolean bMigration, Boolean bPublish, String bstrFileName, ISP2DSafeArrayWriter pListDataValidationCallback, 
    ISP2DSafeArrayWriter pRestrictInsertCallback, ISP2DSafeArrayWriter pUniqueFieldCallback)     --- Fin del seguimiento de la pila de la excepción interna
     ---     en Microsoft.SharePoint.SPGlobal.HandleComException(COMException comEx)     en Microsoft.SharePoint.Library.SPRequest.AddOrUpdateItem
    (String bstrUrl, String bstrListName, Boolean bAdd, Boolean bSystemUpdate, Boolean bPreserveItemVersion, Boolean bUpdateNoVersion, Int32& plID, 
    String& pbstrGuid, Guid pbstrNewDocId, Boolean bHasNewDocId, String bstrVersion, Object& pvarAttachmentNames, Object& pvarAttachmentContents,
     Object& pvarProperties, Boolean bCheckOut, Boolean bCheckin, Boolean bMigration, Boolean bPublish, String bstrFileName, 
    ISP2DSafeArrayWriter pListDataValidationCallback, ISP2DSafeArrayWriter pRestrictInsertCallback , ISP2DSafeArrayWriter pUniqueFieldCallback)     
    en Microsoft.SharePoint.SPListItem.AddOrUpdateItem(Boolean bAdd, Boolean bSystem, Boolean bPreserveItemVersion, Boolean bNoVersion, 
    Boolean bMigration, Boolean bPublish, Boolean bCheckOut, Boolean bCheckin, Guid newGuidOnAdd, Int32& ulID, Object& objAttachmentNames, 
    Object& objAttachmentContents, Boolean suppressAfterEvents, String filename)     en Microsoft.SharePoint.SPListItem.UpdateInternal(Boolean bSystem, 
    Boolean bPreserveItemVersion, Guid newGuidOnAdd, Boolean bMigration, Boolean bPublish, Boolean bNoVersion, Boolean bCheckOut, Boolean bCheckin, 
    Boolean suppressAfterEvents, String filename)     en Microsoft.SharePoint.SPListItem.Update()     en SGIPrueba31.Workflow1.Workflow1.codeActivity1_
    ExecuteCode(Object sender, EventArgs e)     en System.Workflow.ComponentModel.Activity.RaiseEvent(DependencyProperty dependencyEvent, Object 
    sender, EventArgs e)     en System.Workflow.Activities.CodeActivity.Execute(ActivityExecutionContext executionContext)     en System.Workflow.Comp
    onentModel.ActivityExecutor`1.Execute(T activity, ActivityExecutionContext executionContext)     en System.Workflow.ComponentModel.ActivityExecut
    or`1.Execute(Activity activity, ActivityExecutionContext executionContext)     en System.Workflow.ComponentModel.ActivityExecutorOperation.Run(IW
    orkflowCoreRuntime workflowCoreRuntime)     en System.Workflow.Runtime.Scheduler.Run()

    y debugueando observo que ocurre cuando realiza el update del ListItem.

    Gracias y saludos.

     

    miércoles, 1 de febrero de 2012 20:48
  • Buenas,

    he encontrado un link con el mismo problema que tenía yo:

    http://social.msdn.microsoft.com/forums/en-US/sharepointworkflow/thread/6295ee7f-6e77-4944-a557-25d56787bdf8

    Se aplican todos los cambios que haya que realizar en el elemento y antes de realizar el update() se utiliza este código para recuperar el elemento con las modificaciones realizadas:

    SPDocumentLibrary library = (SPDocumentLibrary)workflowProperties.Web.Lists[workflowProperties.ListId];
    SPListItem splistitem = library.GetItemById(workflowProperties.ItemId);
    splisitem.update();
    
    

    De esta manera no da el error indicando que el archivo ha sido cambiado.

    (En el link se utiliza desde el inicio y después se realizan los cambios en el elemento de la lista, pero de esa forma me indica el mismo error.)

    Si alguien ve algun error en la conclusión, por favor, indicadlo para que otros no lo cometan.

    Saludos.

    • Propuesto como respuesta Uriel Almendra miércoles, 10 de abril de 2013 14:45
    • Marcado como respuesta Uriel Almendra miércoles, 10 de abril de 2013 14:45
    miércoles, 1 de febrero de 2012 21:58