OVH Cloud OVH Cloud

CopyTo et event handler

4 réponses
Avatar
Alex
Bonjour,

j'ai créé un gestionnaire d'événement pour une bibliothèque SPS et j'ai
toujours la même erreur au moment de faire un copyTo.
Pourtant, j'ai tracé tout le code et il m'a l'air bon. Y a t-il une
protection d'accès pendant l'execution du gestionnaire ou autre chose sachant
que je suis admin du domainde ?
Je suis avec SPS sp2 et WSS v2 et mon code est en .net v2.

Je vous colle mon code au cas ou il y aurait une erreur

public void OnEvent(SPListEvent theEvent)
{

//On ecrit le nom de la bibliothèque
EventLog.WriteEntry("EventSPS", "theEvent.Site.Url : " + theEvent.Site.Url);

//On récupère le SPWEB du site qui heberge la bibliothèque
SPWeb siteWeb = theEvent.Site.OpenWeb();

//On regarde quel evenement est généré
switch (theEvent.Type)
{

case SPListEventType.Update:

//L'evenement est de type update
EventLog.WriteEntry("Evenement SPS", "L'evenement est de type update");

//On récupère l'url du fichier
string originalUrl = theEvent.UrlAfter;

EventLog.WriteEntry("Evenement SPS", "theEvent.UrlAfter : " +
theEvent.UrlAfter);

//On ecrit l'utilisateur en cours (je trouve bien mon login admin)
EventLog.WriteEntry("Evenement SPS", "UserLoginName : " +
theEvent.UserLoginName);

//On récupère le fichier
SPFile fichierAvant = siteWeb.GetFile(originalUrl);

//On remet l'url complete
originalUrl = fichierAvant.Url;

EventLog.WriteEntry("Evenement SPS", "fichierAvant.Url : " + originalUrl);

//On récupère l'index du point
int point = originalUrl.LastIndexOf(".") ;

EventLog.WriteEntry("Evenement SPS", "point : " + point.ToString() );

//On récupère l'extension du fichier
string extension = originalUrl.Substring(point);

EventLog.WriteEntry("Evenement SPS", "extension : " + extension);

//On récupère l'url sans l'extension
string urlSansExt = originalUrl.Remove(point);

EventLog.WriteEntry("Evenement SPS", "urlSansExt : " + urlSansExt);

//On créer la nouvelle adresse (je modifie juste le nom du fichier)
string nouvelleUrl = urlSansExt + "-666" + extension;

EventLog.WriteEntry("Evenement SPS", "nouvelleUrl : " + nouvelleUrl);

//On tente de copier le fichier (sachant que même try catch n'empeche pas
l'exeption)
fichierAvant.CopyTo(nouvelleUrl);

break;


}

}

4 réponses

Avatar
Renaud Comte
J'ai fait quelqus recherche mais je ne vois pas trop non plus

Peut être
http://www.sharepointblogs.com/ssa/archive/2006/05/04/6278.aspx

Voila voila

Renaud Comte [MVP]
--------------------------------------
http://blogs.developpeur.org/themit/
http://blog.spsclerics.com/

Bonjour,

j'ai créé un gestionnaire d'événement pour une bibliothèque SPS et
j'ai toujours la même erreur au moment de faire un copyTo. Pourtant,
j'ai tracé tout le code et il m'a l'air bon. Y a t-il une protection
d'accès pendant l'execution du gestionnaire ou autre chose sachant que
je suis admin du domainde ? Je suis avec SPS sp2 et WSS v2 et mon code
est en .net v2.

Je vous colle mon code au cas ou il y aurait une erreur

public void OnEvent(SPListEvent theEvent)
{
//On ecrit le nom de la bibliothèque
EventLog.WriteEntry("EventSPS", "theEvent.Site.Url : " +
theEvent.Site.Url);
//On récupère le SPWEB du site qui heberge la bibliothèque SPWeb
siteWeb = theEvent.Site.OpenWeb();

//On regarde quel evenement est généré
switch (theEvent.Type)
{
case SPListEventType.Update:

//L'evenement est de type update
EventLog.WriteEntry("Evenement SPS", "L'evenement est de type
update");
//On récupère l'url du fichier
string originalUrl = theEvent.UrlAfter;
EventLog.WriteEntry("Evenement SPS", "theEvent.UrlAfter : " +
theEvent.UrlAfter);

//On ecrit l'utilisateur en cours (je trouve bien mon login admin)
EventLog.WriteEntry("Evenement SPS", "UserLoginName : " +
theEvent.UserLoginName);
//On récupère le fichier SPFile fichierAvant > siteWeb.GetFile(originalUrl);

//On remet l'url complete
originalUrl = fichierAvant.Url;
EventLog.WriteEntry("Evenement SPS", "fichierAvant.Url : " +
originalUrl);

//On récupère l'index du point
int point = originalUrl.LastIndexOf(".") ;
EventLog.WriteEntry("Evenement SPS", "point : " + point.ToString() );

//On récupère l'extension du fichier
string extension = originalUrl.Substring(point);
EventLog.WriteEntry("Evenement SPS", "extension : " + extension);

//On récupère l'url sans l'extension
string urlSansExt = originalUrl.Remove(point);
EventLog.WriteEntry("Evenement SPS", "urlSansExt : " + urlSansExt);

//On créer la nouvelle adresse (je modifie juste le nom du fichier)
string nouvelleUrl = urlSansExt + "-666" + extension;

EventLog.WriteEntry("Evenement SPS", "nouvelleUrl : " + nouvelleUrl);

//On tente de copier le fichier (sachant que même try catch n'empeche
pas
l'exeption)
fichierAvant.CopyTo(nouvelleUrl);
break;

}

}



Avatar
dref
Bonjour,

J'ai eu le même pb, pour pouvoir faire la copie, je suis obligé de faire,
avant la copie:

- une impersonation dans le code (sur le compte admin) cf
http://support.microsoft.com/kb/306158/
- fixer la propriété AllowUnsafeUpdates de l'objet SPWeb à true

En espérant que cela vous aide...

"Alex" a écrit :

Bonjour,

j'ai créé un gestionnaire d'événement pour une bibliothèque SPS et j'ai
toujours la même erreur au moment de faire un copyTo.
Pourtant, j'ai tracé tout le code et il m'a l'air bon. Y a t-il une
protection d'accès pendant l'execution du gestionnaire ou autre chose sachant
que je suis admin du domainde ?
Je suis avec SPS sp2 et WSS v2 et mon code est en .net v2.

Je vous colle mon code au cas ou il y aurait une erreur

public void OnEvent(SPListEvent theEvent)
{

//On ecrit le nom de la bibliothèque
EventLog.WriteEntry("EventSPS", "theEvent.Site.Url : " + theEvent.Site.Url);

//On récupère le SPWEB du site qui heberge la bibliothèque
SPWeb siteWeb = theEvent.Site.OpenWeb();

//On regarde quel evenement est généré
switch (theEvent.Type)
{

case SPListEventType.Update:

//L'evenement est de type update
EventLog.WriteEntry("Evenement SPS", "L'evenement est de type update");

//On récupère l'url du fichier
string originalUrl = theEvent.UrlAfter;

EventLog.WriteEntry("Evenement SPS", "theEvent.UrlAfter : " +
theEvent.UrlAfter);

//On ecrit l'utilisateur en cours (je trouve bien mon login admin)
EventLog.WriteEntry("Evenement SPS", "UserLoginName : " +
theEvent.UserLoginName);

//On récupère le fichier
SPFile fichierAvant = siteWeb.GetFile(originalUrl);

//On remet l'url complete
originalUrl = fichierAvant.Url;

EventLog.WriteEntry("Evenement SPS", "fichierAvant.Url : " + originalUrl);

//On récupère l'index du point
int point = originalUrl.LastIndexOf(".") ;

EventLog.WriteEntry("Evenement SPS", "point : " + point.ToString() );

//On récupère l'extension du fichier
string extension = originalUrl.Substring(point);

EventLog.WriteEntry("Evenement SPS", "extension : " + extension);

//On récupère l'url sans l'extension
string urlSansExt = originalUrl.Remove(point);

EventLog.WriteEntry("Evenement SPS", "urlSansExt : " + urlSansExt);

//On créer la nouvelle adresse (je modifie juste le nom du fichier)
string nouvelleUrl = urlSansExt + "-666" + extension;

EventLog.WriteEntry("Evenement SPS", "nouvelleUrl : " + nouvelleUrl);

//On tente de copier le fichier (sachant que même try catch n'empeche pas
l'exeption)
fichierAvant.CopyTo(nouvelleUrl);

break;


}

}



Avatar
Alex
Merci à vous deux, je teste ça

Merci

"dref" a écrit :

Bonjour,

J'ai eu le même pb, pour pouvoir faire la copie, je suis obligé de faire,
avant la copie:

- une impersonation dans le code (sur le compte admin) cf
http://support.microsoft.com/kb/306158/
- fixer la propriété AllowUnsafeUpdates de l'objet SPWeb à true

En espérant que cela vous aide...

"Alex" a écrit :

> Bonjour,
>
> j'ai créé un gestionnaire d'événement pour une bibliothèque SPS et j'ai
> toujours la même erreur au moment de faire un copyTo.
> Pourtant, j'ai tracé tout le code et il m'a l'air bon. Y a t-il une
> protection d'accès pendant l'execution du gestionnaire ou autre chose sachant
> que je suis admin du domainde ?
> Je suis avec SPS sp2 et WSS v2 et mon code est en .net v2.
>
> Je vous colle mon code au cas ou il y aurait une erreur
>
> public void OnEvent(SPListEvent theEvent)
> {
>
> //On ecrit le nom de la bibliothèque
> EventLog.WriteEntry("EventSPS", "theEvent.Site.Url : " + theEvent.Site.Url);
>
> //On récupère le SPWEB du site qui heberge la bibliothèque
> SPWeb siteWeb = theEvent.Site.OpenWeb();
>
> //On regarde quel evenement est généré
> switch (theEvent.Type)
> {
>
> case SPListEventType.Update:
>
> //L'evenement est de type update
> EventLog.WriteEntry("Evenement SPS", "L'evenement est de type update");
>
> //On récupère l'url du fichier
> string originalUrl = theEvent.UrlAfter;
>
> EventLog.WriteEntry("Evenement SPS", "theEvent.UrlAfter : " +
> theEvent.UrlAfter);
>
> //On ecrit l'utilisateur en cours (je trouve bien mon login admin)
> EventLog.WriteEntry("Evenement SPS", "UserLoginName : " +
> theEvent.UserLoginName);
>
> //On récupère le fichier
> SPFile fichierAvant = siteWeb.GetFile(originalUrl);
>
> //On remet l'url complete
> originalUrl = fichierAvant.Url;
>
> EventLog.WriteEntry("Evenement SPS", "fichierAvant.Url : " + originalUrl);
>
> //On récupère l'index du point
> int point = originalUrl.LastIndexOf(".") ;
>
> EventLog.WriteEntry("Evenement SPS", "point : " + point.ToString() );
>
> //On récupère l'extension du fichier
> string extension = originalUrl.Substring(point);
>
> EventLog.WriteEntry("Evenement SPS", "extension : " + extension);
>
> //On récupère l'url sans l'extension
> string urlSansExt = originalUrl.Remove(point);
>
> EventLog.WriteEntry("Evenement SPS", "urlSansExt : " + urlSansExt);
>
> //On créer la nouvelle adresse (je modifie juste le nom du fichier)
> string nouvelleUrl = urlSansExt + "-666" + extension;
>
> EventLog.WriteEntry("Evenement SPS", "nouvelleUrl : " + nouvelleUrl);
>
> //On tente de copier le fichier (sachant que même try catch n'empeche pas
> l'exeption)
> fichierAvant.CopyTo(nouvelleUrl);
>
> break;
>
>
> }
>
> }
>


Avatar
Alex
Et voilà,

Ca marche grâce à vous, merci.

Il faut effectivement faire une impersonation pour que le code puisse
s'executer correctement.

En fait, lors de mes recherches, il me semblait avoir vu un article comme
quoi le SP2 de WSS, obligait de faire une impersonation (ce que j'avais fait)
pour que le code marche.
Mais comme d'habitude, j'ai du me tromper lors de l'ecriture de celle-ci (je
n'ai pas l'habitude des impersonations. Mais bon maintenant ça marche

Merci encore pour votre aide


PS : Voici le code corrigé et qui marche


> > public void OnEvent(SPListEvent theEvent)
> > {
> >
> > //On ecrit le nom de la bibliothèque
> > EventLog.WriteEntry("EventSPS", "theEvent.Site.Url : " + theEvent.Site.Url);
> >
> >
> > //On fait une impersonation avec l'utilisateur actuel (SP2 oblige)
> > WindowsImpersonationContext wic = WindowsIdentity.GetCurrent
> > ().Impersonate();
> >
> > //On récupère le SPWEB du site qui heberge la bibliothèque
> > SPWeb siteWeb = theEvent.Site.OpenWeb();
> >
> > //On regarde quel evenement est généré
> > switch (theEvent.Type)
> > {
> >
> > case SPListEventType.Update:
> >
> > //L'evenement est de type update
> > EventLog.WriteEntry("Evenement SPS", "L'evenement est de type update");
> >
> > //On récupère l'url du fichier
> > string originalUrl = theEvent.UrlAfter;
> >
> > EventLog.WriteEntry("Evenement SPS", "theEvent.UrlAfter : " +
> > theEvent.UrlAfter);
> >
> > //On ecrit l'utilisateur en cours (je trouve bien mon login admin)
> > EventLog.WriteEntry("Evenement SPS", "UserLoginName : " +
> > theEvent.UserLoginName);
> >
> > //On récupère le fichier
> > SPFile fichierAvant = siteWeb.GetFile(originalUrl);
> >
> > //On remet l'url complete
> > originalUrl = fichierAvant.Url;
> >
> > EventLog.WriteEntry("Evenement SPS", "fichierAvant.Url : " + originalUrl);
> >
> > //On récupère l'index du point
> > int point = originalUrl.LastIndexOf(".") ;
> >
> > EventLog.WriteEntry("Evenement SPS", "point : " + point.ToString() );
> >
> > //On récupère l'extension du fichier
> > string extension = originalUrl.Substring(point);
> >
> > EventLog.WriteEntry("Evenement SPS", "extension : " + extension);
> >
> > //On récupère l'url sans l'extension
> > string urlSansExt = originalUrl.Remove(point);
> >
> > EventLog.WriteEntry("Evenement SPS", "urlSansExt : " + urlSansExt);
> >
> > //On créer la nouvelle adresse (je modifie juste le nom du fichier)
> > string nouvelleUrl = urlSansExt + "-666" + extension;
> >
> > EventLog.WriteEntry("Evenement SPS", "nouvelleUrl : " + nouvelleUrl);
> >
> > //On tente de copier le fichier (sachant que même try catch n'empeche pas
> > l'exeption)
> > fichierAvant.CopyTo(nouvelleUrl);
> >
> > break;
> >
> >
> > }
> >
> > //On arrete l'impersonation
> > wic.Undo();
> >
> > }
> >