IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

SharePoint .NET Discussion :

Exception de type : System.Runtime.InteropServices.COMException


Sujet :

SharePoint .NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Développeur SharePoint
    Inscrit en
    Juin 2013
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur SharePoint
    Secteur : Bâtiment

    Informations forums :
    Inscription : Juin 2013
    Messages : 19
    Par défaut Exception de type : System.Runtime.InteropServices.COMException
    Bonjour,

    Je développe un flux de travail d’approbation de document dans une bibliothèque de documents SharePoint 2010. Lorsque l’administrateur ajoute un document, celui-ci est approuvé automatiquement et publié ce qui permet de le rendre visible par tous les utilisateurs.
    Le problème c’est que dans cette phase d’approbation automatique, il y a deux Update qui se produisent en même temps ce qui déclenche les exceptions ci-dessous :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Détails de l'exception: System.Runtime.InteropServices.COMException: <nativehr>0x81020015</nativehr><nativestack></nativestack>Le fichier Documents partages/SPCHOL308_Manual_CS.docx a été
    modifié par DCPT01\mos1 le 02 sept. 2013 16:04:58 +0200.
    Erreur source:
    Trace de la pile:
    Informations sur la version : Version Microsoft .NET Framework :2.0.50727.5420; Version ASP.NET :2.0.50727.5420
    Une exception non gérée s'est produite lors de l'exécution de la demande Web actuelle. Les informations relatives à l'origine et
    l'emplacement de l'exception peuvent être identifiées en utilisant la trace de la pile d'exception ci-dessous.
    [COMException (0x81020037): <nativehr>0x81020015</nativehr><nativestack></nativestack>Le fichier Documents partages/SPCHOL308_Manual_CS.docx a été modifié par DCPT01\Microsoft.SharePoint.Library.SPRequestInternalClass.AddOrUpdateItem(String bstrUrl, String bstrListName, Boolean bAdd, Boolean bSystemUpdate, Boolean bPreserveItemVersion, Microsoft.SharePoint.Library.SPRequest.AddOrUpdateItem(String bstrUrl, String bstrListName, Boolean bAdd, Boolean bSystemUpdate, Boolean bPreserveItemVersion, Boolean [SPException: Le fichier Documents partages/SPCHOL308_Manual_CS.docx a été modifié par DCPT01\mos1 le 02 sept. 2013 16:04:58 +0200.]
    Microsoft.SharePoint.SPGlobal.HandleComException(COMException comEx) +27254482
    Microsoft.SharePoint.Library.SPRequest.AddOrUpdateItem(String bstrUrl, String bstrListName, Boolean bAdd, Boolean bSystemUpdate, Boolean bPreserveItemVersion, Boolean Microsoft.SharePoint.SPListItem.AddOrUpdateItem(Boolean bAdd, Boolean bSystem, Boolean bPreserveItemVersion, Boolean bNoVersion, Boolean bMigration, Boolean bPublish, Microsoft.SharePoint.SPListItem.UpdateInternal(Boolean bSystem, Boolean bPreserveItemVersion, Guid newGuidOnAdd, Boolean bMigration, Boolean bPublish, Boolean bNoVersion, Microsoft.SharePoint.WebControls.SaveButton.SaveItem(SPContext itemContext, Boolean uploadMode, String checkInComment) +1461
    Microsoft.SharePoint.WebControls.SaveButton.OnBubbleEvent(Object source, EventArgs e) +1167
    System.Web.UI.Control.RaiseBubbleEvent(Object source, EventArgs args) +70
    System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl, String eventArgument) +29
    System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +2981
    Lorsqu’un utilisateur ajoute un document dans la bibliothèque de document, il y a la phase d’ajout du document (addItem) et la phase de mise à jour des métadonnées (UpdateItem). Cette dernière phase se chevauche le Update pour la publication du document d’où l’exception.

    Si quelqu’un a une idée ou une solution, je suis preneur.

    Merci d’avance.

  2. #2
    Membre Expert
    Avatar de guitou12
    Homme Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 077
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 077
    Par défaut
    Salut,

    essaie en entourant le AddItem par un Lock
    Ex développeur Php / J2EE.
    Actuellement reconverti à SharePoint 2013

    Mon blog SP 2013

  3. #3
    Membre averti
    Homme Profil pro
    Développeur SharePoint
    Inscrit en
    Juin 2013
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur SharePoint
    Secteur : Bâtiment

    Informations forums :
    Inscription : Juin 2013
    Messages : 19
    Par défaut
    Citation Envoyé par guitou12 Voir le message
    Salut,

    essaie en entourant le AddItem par un Lock


    Je vois que je me suis pas fais bien comprendre.
    C'est au moment de faire le Update() que l'exception est declenché; voir code ci-dessous:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
                SPListItem listItem = workflowProperties.Item;
                if (listItem.ModerationInformation != null)
                {
                    listItem.ModerationInformation.Status = SPModerationStatusType.Approved;
                    listItem.ModerationInformation.Comment = "";
                    listItem.Update();
                }

  4. #4
    Membre Expert
    Avatar de guitou12
    Homme Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 077
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 077
    Par défaut
    Si j'ai bien tout compris dans l'ordre on doit avoir

    Add item
    Update Item (maj métadonnées)
    Update Item (status = approved --> publication)

    On pourrait avoir un peu plus de détails sur l’enchaînement du code de ces 3 blocs ?

    Merci
    Ex développeur Php / J2EE.
    Actuellement reconverti à SharePoint 2013

    Mon blog SP 2013

  5. #5
    Membre averti
    Homme Profil pro
    Développeur SharePoint
    Inscrit en
    Juin 2013
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur SharePoint
    Secteur : Bâtiment

    Informations forums :
    Inscription : Juin 2013
    Messages : 19
    Par défaut
    l'enchainement du processus est le suivant:

    Ajout du document dans la bibliothèque (addItem) et maj des données des colonnes (UpdateItem);
    Pendant ce temps, y a ce code qui tourne derière pour vérifier le groupe SharePoint de l'utilisateur pour passer à une étape suivant du flux:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
                using (SPWeb web = workflowProperties.Web)
                {
                    SPListItem listItem = workflowProperties.Item;
                    // récupération de informations de l'utilisateur qui ajoute un document dans la bibliothèque
                    SPFieldUserValue userValue = new SPFieldUserValue(web, listItem[SPBuiltInFieldId.Editor].ToString());
                    SPUser users = userValue.User;
                    try
                    {
                        // Vérification de l'existance de l'utilisateur dans le groupe des Admins
                        SPUser currentUser = web.Groups[strGroupeAdminName].Users.GetByID(users.ID);
                        if (currentUser != null)
                        {
                            // Approbation automatique, passe à la phase Approuver où à lieu la publication
                            e.Result = true; 
                        }
                    }
                    catch (SPException)
                    {
                        e.Result = false;
                    }
                }
    Et quand la première condition est vérifié (e.Result = true), il passe à la phase Validation et publication. C'est dans cette phase qu'à lieu de second update donc voici le code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
                SPListItem listItem = workflowProperties.Item;
                if (listItem.ModerationInformation != null)
                {
                    //Publier le document pour qu'il soit visible par tous les visiteurs
                    listItem.ModerationInformation.Status = SPModerationStatusType.Approved;
                    listItem.ModerationInformation.Comment = "Document Apprové";
                    listItem.Update();
                }
    Et tout ce code s'execute pendant que le premier update (renseignement des métadonnées du document ajouté) est en cours.
    Le premier update + celui de listItem.Update() declenche l'exception que j'avais cité la haut qui nous dit que le document a deja été modifié.

    Je suis devant ce problème. Je ne peux pas supprimer le second Update si non le document ne sera pas publié et quand je met
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    listItem.SystemUpdate(false);
    , l'exception n'est pas declanché mais par contre le document n'est pas publié.

    Merci d'avance

  6. #6
    Membre Expert
    Avatar de guitou12
    Homme Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 077
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 077
    Par défaut
    De quel type est l'objet workflowProperties ?

    Dans ton second bloc de code au lieu d'appeler
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SPListItem listItem = workflowProperties.Item;
    essaie de récupérer ton item à partir de la liste dans laquelle il est stocké (à partir de son Guid par exemple) et non pas à partir de workflowProperties
    Ex développeur Php / J2EE.
    Actuellement reconverti à SharePoint 2013

    Mon blog SP 2013

Discussions similaires

  1. Réponses: 8
    Dernier message: 26/01/2011, 08h23
  2. System.Runtime.InteropServices.COMException Service WCF
    Par Carmel_O dans le forum Windows Communication Foundation
    Réponses: 6
    Dernier message: 18/03/2010, 20h15
  3. Réponses: 1
    Dernier message: 02/07/2008, 11h21
  4. Réponses: 1
    Dernier message: 27/03/2007, 09h50
  5. Réponses: 2
    Dernier message: 11/10/2006, 10h36

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo