Question Problème d'extraction lors d'une convertion de document

  • vendredi 28 mai 2010 07:53
     
      A du code
    Bonjour,

    Je développe en ce moment avec VS2010 un workflow devant convertir (via le service word automation) un document Word en PDF après une approbation.
    Mes bibliothèques doivent avoir le système d'extraction d'activé.

    Mon problème est lors de la conversion d'un document possedant déjà une version PDF.
    Je m'explique : la 1ère fois que je converti le document avec en nom "20100528", tous se passe bien. Si je veux convertir une nouvelle version de ce même document (avec le même nom), le workflow plante avec une exception sur l'extraction du document de destination.

    J'ai donc essayé de l'extraire avant la conversion, mais je reçois une erreur sur la méthode job.AddFile me disant que le document est extrait et ne peut petre remplacé.
    System.Exception: Le fichier de sortie «*32Processus dOprations PO/Sous Processus « Gestion des partenariats » (PO21)/20100527v0.2.pdf*» est extrait et ne peut pas être remplacé


    Et si je n'extrait pas mon document, j'ai une erreur pendant la conversion me disant que le document doit être extrait avant d'être modifié.
    Error uploading output file to Sharepoint document library. Microsoft.SharePoint.SPFileCheckOutException: Le fichier «*http://srv465/direction_qualite/32Processus dOprations PO/Sous Processus « Gestion des partenariats » (PO21)/20100527v0.1.pdf*» n'est pas extrait. Vous devez d'abord extraire ce document avant de le modifier.



    Mon code :
    private void convertDocument_ExecuteCode(object sender, EventArgs e)
      {
       SPListItem currentItem = workflowProperties.Item;
    
       // Verify the document added is a Word document
       // before starting the conversion.
       if (currentItem.Name.Contains(".docx") || currentItem.Name.Contains(".doc"))
       {
        // Create a Word Automation Services conversion job
        ConversionJob job = new ConversionJob("Word Automation Services");
    
        // Specify conversion settings
        job.UserToken = workflowProperties.OriginatorUser.UserToken;
    
        if (workflowProperties.Site.SiteSubscription != null)
         job.SubscriptionId = workflowProperties.Site.SiteSubscription.Id;
        job.Settings.OutputFormat = SaveFormat.PDF;
        job.Settings.OutputSaveBehavior = SaveBehavior.AppendIfPossible;
        job.Name = "Publication Document";
    
        // Add the file
        String fileUrl = workflowProperties.WebUrl + "/" + workflowProperties.ItemUrl;
    
        fileName = System.IO.Path.GetFileNameWithoutExtension(fileUrl);
        newFileName = DateTime.Now.ToString("yyyyMMdd") + "v" + currentItem.File.UIVersionLabel;
        String outputUrl = fileUrl.Replace(fileName, newFileName);
    
        /*
        SPListItemCollection items = workflowProperties.Web.Lists[workflowProperties.ListId].Items;
        for (int i = 0; i < items.Count; i++)
        {
         SPListItem item = items[i];
         if (item.FileSystemObjectType == SPFileSystemObjectType.File)
         {
          if (item.File.Name.Contains(newFileName))
          {
           item.File.CheckOut();
    
          }
         }
        }
        */
        job.AddFile(fileUrl, System.IO.Path.ChangeExtension(outputUrl, "pdf"));
    
        // Schedule the conversion
        job.Start();
    
        // Save the conversion job ID
        jobId = job.JobId;
       }
      }


    Merci pour tout aide.

Toutes les réponses

  • vendredi 28 mai 2010 14:19
     
      A du code

    Après moulte essai et prise de tête, j'ai trouvé la solution.

    L'extraction du document doit en fait etre faite après le avoir ajouter le fichier à notre ConversionJob.

    private void convertDocument_ExecuteCode(object sender, EventArgs e)
        {
          currentItem = workflowProperties.Item;
    
          // Verify the document added is a Word document
          // before starting the conversion.
          if (currentItem.Name.Contains(".docx") || currentItem.Name.Contains(".doc"))
          {
            // Create a Word Automation Services conversion job
            ConversionJob job = new ConversionJob("Word Automation Services");
    
            // Specify conversion settings
            job.UserToken = workflowProperties.OriginatorUser.UserToken;
    
            if (workflowProperties.Site.SiteSubscription != null)
              job.SubscriptionId = workflowProperties.Site.SiteSubscription.Id;
            job.Settings.OutputFormat = SaveFormat.PDF;
            job.Settings.OutputSaveBehavior = SaveBehavior.AppendIfPossible;
            job.Settings.UpdateFields = true;
            job.Name = "Publication Document";
            
            // Add the file
            String fileUrl = workflowProperties.WebUrl + "/" + workflowProperties.ItemUrl;
    
            fileName = System.IO.Path.GetFileNameWithoutExtension(fileUrl);
            newFileName = DateTime.Now.ToString("yyyyMMdd") + "v" + currentItem.File.UIVersionLabel;
            String outputUrl = fileUrl.Replace(fileName, newFileName);
    
            job.AddFile(fileUrl, System.IO.Path.ChangeExtension(outputUrl, "pdf"));
    
            SPListItemCollection items = workflowProperties.Web.Lists[workflowProperties.ListId].Items;
            for (int i = 0; i < items.Count; i++)
            {
              SPListItem item = items[i];
              if (item.FileSystemObjectType == SPFileSystemObjectType.File)
              {
                if (item.File.Name.Contains(newFileName))
                {
                  item.File.CheckOut();
                }
              }
            }
            
            // Schedule the conversion
            job.Start();
    
            // Save the conversion job ID
            jobId = job.JobId;
          }
        }