none
Borrar archivos almacenados en una biblioteca de documentos automaticamente RRS feed

  • Pregunta

  • Hola,

    Me podrian ayudar con ideas de como podria eliminar archivos de una biblioteca de documentos de forma automatica.

    Descripción de caso

    Necesito borrar un archivo especifico todos los dias a determinada hora, ya que existe una aplicación que todos los dias genera el archivo automaticamente y lo ubica el la biblioteca de documentos, pero este esta fallando porque no es capaz de sobreescribir el archivo existente.

    Gracias por su ayuda

    miércoles, 31 de agosto de 2011 21:57

Respuestas

  • Hola,
    otra opción al TimerJob que no necesitaría programación sería crearte un Script con Powershell y programarlo todos los días en el Programador de Tareas de Windows. Sería algo así para eliminar si conoces el ID
    [void][System.reflection.Assembly]::LoadWithPartialName("Microsoft.SharePoint") 
    
    # Delete an item from the announcements list by Item ID
    
    $site = new-object Microsoft.SharePoint.SPSite("http://tusitio.com")       
    $web = $site.rootweb            
    
    $list = $web.Lists["Announcements"]          
    
    $deaditem = $list.GetItemById(2)
    $deaditem.Delete()
    
    $web.Dispose()
    $site.Dispose()
      
    
    o como sigue para eliminar utilizando una consulta CAML para localizar el fichero
    # Delete an item from the announcements list by using a CAML query
    
    [void][System.reflection.Assembly]::LoadWithPartialName("Microsoft.SharePoint") 
    
    
    $site = new-object Microsoft.SharePoint.SPSite("http://tusitio.com")       
    $web = $site.rootweb            
    $list = $web.Lists["Announcements"]          
    $caml='
     <Where>
     <Eq>
      <FieldRef Name="Title" />
      <Value Type="Text">NOMBREFICHERO</Value>
     </Eq>
     </Where>
    '
    
    $query=new-object Microsoft.SharePoint.SPQuery
    $query.Query=$caml
    
    $col=$list.GetItems($query)
    
    # Pipe results to a loop and delete each element
    $col | % { $_.Delete() }
    
    $web.Dispose()
    $site.Dispose()  
    

    Alberto Diaz Martin twitter://@adiazcan | http://geeks.ms/blogs/adiazmartin | MVP SharePoint Server

    • Marcado como respuesta Ismael Borche lunes, 5 de septiembre de 2011 20:42
    jueves, 1 de septiembre de 2011 10:47

Todas las respuestas

  • Hola,

    Antes de desarrollar nada que elimine el archivo, ¿has probado a ver el comportamiento de escritura del archivo en la biblioteca si habilitas versionado en la misma? Aparte de esto, me parece raro que no sea capas de sobreescribir el archivo, ¿has depurado la aplicación para ver en que momento se da el error? En cualquier caso, si decides continuar con la idea del borrado automático, lo que tienes que crear es un Timer Job que no es otra cosa que un servicio definido en el ámbito de SharePoint y que se ejecuta de acuerdo a una periodicidad. Te paso una referencia sobre como crear un Timer Job:

    http://geeks.ms/blogs/ciin/archive/2011/01/22/sharepoint-2010-como-crear-un-timer-job-con-las-tools-de-vs-2010-para-sharepoint.aspx

    Un saludo


    ------------------------------------------------------------
    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, 31 de agosto de 2011 22:38
  • Hola,
    otra opción al TimerJob que no necesitaría programación sería crearte un Script con Powershell y programarlo todos los días en el Programador de Tareas de Windows. Sería algo así para eliminar si conoces el ID
    [void][System.reflection.Assembly]::LoadWithPartialName("Microsoft.SharePoint") 
    
    # Delete an item from the announcements list by Item ID
    
    $site = new-object Microsoft.SharePoint.SPSite("http://tusitio.com")       
    $web = $site.rootweb            
    
    $list = $web.Lists["Announcements"]          
    
    $deaditem = $list.GetItemById(2)
    $deaditem.Delete()
    
    $web.Dispose()
    $site.Dispose()
      
    
    o como sigue para eliminar utilizando una consulta CAML para localizar el fichero
    # Delete an item from the announcements list by using a CAML query
    
    [void][System.reflection.Assembly]::LoadWithPartialName("Microsoft.SharePoint") 
    
    
    $site = new-object Microsoft.SharePoint.SPSite("http://tusitio.com")       
    $web = $site.rootweb            
    $list = $web.Lists["Announcements"]          
    $caml='
     <Where>
     <Eq>
      <FieldRef Name="Title" />
      <Value Type="Text">NOMBREFICHERO</Value>
     </Eq>
     </Where>
    '
    
    $query=new-object Microsoft.SharePoint.SPQuery
    $query.Query=$caml
    
    $col=$list.GetItems($query)
    
    # Pipe results to a loop and delete each element
    $col | % { $_.Delete() }
    
    $web.Dispose()
    $site.Dispose()  
    

    Alberto Diaz Martin twitter://@adiazcan | http://geeks.ms/blogs/adiazmartin | MVP SharePoint Server

    • Marcado como respuesta Ismael Borche lunes, 5 de septiembre de 2011 20:42
    jueves, 1 de septiembre de 2011 10:47
  • Hola Alberto,

    Muchas gracias por tu respuesta, pero al intentar hacerlo buscando el fichero me sale lo siguiente

    You cannot call a method on a null-valued expression.
    At C:\Documents and Settings\igeconfig\Desktop\Borrar.ps1:21 char:20
    + $col=$list.GetItems <<<< ($query)
        + CategoryInfo          : InvalidOperation: (GetItems:String) [], RuntimeException
        + FullyQualifiedErrorId : InvokeMethodOnNull
     
    You cannot call a method on a null-valued expression.
    At C:\Documents and Settings\igeconfig\Desktop\Borrar.ps1:24 char:21
    + $col | % { $_.Delete <<<< () }
        + CategoryInfo          : InvalidOperation: (Delete:String) [], RuntimeException
        + FullyQualifiedErrorId : InvokeMethodOnNull

    No se si estoy realizando algo mal o que debo hacer?

    Te agradezco la ayuda


    Daniel Melo
    jueves, 1 de septiembre de 2011 20:21
  • Por lo que parece, el método GetItems no te está devolviendo ningún elemento. Revisa la consulta.
    Alberto Diaz Martin twitter://@adiazcan | http://geeks.ms/blogs/adiazmartin | MVP SharePoint Server
    viernes, 2 de septiembre de 2011 10:40