Question

Tous -

J'utilise WSS 3.0. Actuellement, les ressources humaines téléchargeront le curriculum vitae interne d’un employé dans une bibliothèque de documents de notre site. Toutefois, pour des raisons de confidentialité, nous devons restreindre l’accès à cette bibliothèque de documents, ce qui oblige les utilisateurs à consulter HR chaque fois qu’ils souhaitent mettre à jour leur CV.

Je pensais créer une liste avec les pièces jointes activées permettant aux utilisateurs de ne voir / éditer que leurs propres éléments, puis d'autoriser les ressources humaines à gérer toutes les entrées. Cela fonctionne, sauf que HR devra créer l'élément de liste initial et joindre le CV, ce qui signifie que l'élément de liste sera "créé par {hr}". et non visible / modifiable par l'utilisateur final dont le CV est joint.

Toute idée sur la manière dont je peux autoriser les ressources humaines à modifier le " créé par " champ sur le téléchargement pour que les utilisateurs finaux voient et puissent modifier leur CV, ou procéder de manière différente?

Merci!

Était-ce utile?

La solution

Créez une bibliothèque de documents pour stocker les CV. Ensuite, indiquez au service des ressources humaines (groupe d'utilisateurs SharePoint) "tout lire / tout écrire". sur la bibliothèque, donnez à tous les autres le droit de lire / écrire votre propre " droits. Créez un type de contenu appelé "Reprendre". basé sur le type de contenu de document prêt à l'emploi. Ajoutez ensuite un champ contenant le type Employé (champ SPUser) concerné par le curriculum vitae au type de contenu (et tout autre champ requis, par exemple nom, adresse, etc.). Demandez aux ressources humaines de saisir ces informations correctement lors de la création de la liste (indiquez les champs obligatoires).

Ensuite, écrivez un itemeventreceiver lié au type de contenu que vous venez de créer et remplacez l'événement ItemUpdated.

Le code ressemblerait à ceci:

public override void ItemUpdated(SPItemEventProperties properties)
{
  SPSecurity.RunWithElevatedPrivileges(delegate
  {
    using (SPWeb web = properties.OpenWeb())
    {
       web.AllowUnsafeUpdates = true; 
       var item = web.Lists[properties.ListId].GetItemById(properties.ListItemId);
       if (item != null)
       {
         if (item.Fields.ContainsField("Employee"))
         {
           item["Author"] = item["Employee"]; 
           // Author is the internal name of the Created by field, 
           // always use Internal Names!
           DisableEventFiring();
           item.SystemUpdate();
           EnableEventFiring();
         }
       }
     }
   });
}

vous pouvez lier ItemEventReceiver à l'aide d'un objet FeatureReceiver au type de contenu comme suit:

SPContentType docCt = web.ContentTypes[new SPContentTypeId("CONTENTYPE ID GOES HERE")];
docCt.EventReceivers.Add(SPEventReceiverType.ItemUpdated, "ASSEMBLYNAME, Version=1.0.0.0, Culture=neutral, PublicKeyToken=TOKEN", "FULLY QUALIFIED CLASSNAME");
docCt.Update();

Autres conseils

Pourquoi ne pas simplement utiliser une bibliothèque de documents pour les CV? (au lieu d’une liste contenant des pièces jointes.) Vous pouvez donner aux ressources humaines des informations complètes en lecture / écriture sur tous les documents qu’il contient, et le propriétaire du curriculum vitae n’a que l’autorisation de contribuer uniquement à son propre curriculum vitae.

J'ai trouvé un moyen de modifier le champ Créé par en utilisant SharePoint Designer pour créer un flux de travail.

  1. Créez un champ fictif dans votre liste avec un nom facile à localiser, par exemple. XYZZY. Faites-en une "personne ou un groupe". champ.
  2. Dans SharePoint Designer, créez un flux de travail pour votre liste. Autoriser le démarrage manuel et démarrer automatiquement lorsqu'un nouvel élément est créé.
  3. Actions - > Définir le champ dans l'élément actuel - > Définissez XYZZY sur le champ de votre liste qui contient le compte d'utilisateur que vous souhaitez définir dans Créé par.
  4. Cliquez sur Terminer
  5. Ouvrez maintenant votre fichier .xoml de flux de travail avec le Bloc-notes. Remplacez " XYZZY " avec "Auteur". Enregistrez le fichier .xoml.
  6. Ouvrez le flux de travail dans Designer. Cliquez sur Terminer pour qu'il traite à nouveau avec le nouveau code.
  7. Supprimez le champ factice de la liste.
  8. Exécutez le flux de travail sur chaque élément existant de votre liste. Les nouveaux éléments se corrigent d'eux-mêmes automatiquement.

Avec un écran de téléchargement personnalisé, vous pouvez modifier le contexte de l'utilisateur actuel avant de procéder au téléchargement. Cela nécessite de rechercher le jeton utilisateur en utilisant quelque chose comme ce qui suit (ce sont des fragments de code de travail avec la gestion des erreurs et d'autres éléments supprimés). Notez que EnsureUser exigera que l'utilisateur actuel soit essentiellement un administrateur / propriétaire.

using (SPSite site = GetImpersonatedSite(runAsUser))
{
    using (SPWeb web = site.OpenWeb())
    {
        // Do stuff here
    }
}

private SPSite GetImpersonatedSite(string username)
{
    user = SPContext.Current.Web.EnsureUser(username);
    SPSite site = new SPSite(SPContext.Current.Web.Url, user.UserToken);
    return site;
}

J'ai connu une situation similaire (migration vers SharePoint) dans laquelle je devais ajouter un fichier contenant l'utilisateur admin à une bibliothèque de documents, puis "changer". les utilisateurs. Je l’ai fait comme ça, cela pourrait vous aider un peu:

using (var root = site.RootWeb)
 {
   var users = root.SiteUsers;
   var user = users["domain\username"];
   file.Item[SPBuiltInFieldId.Created_x0020_By] = user.ID;
   file.Item[SPBuiltInFieldId.Modified_x0020_By] = user.ID;
   file.Item.UpdateOverwriteVersion();
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top