Domanda

Tutti -

Sto usando WSS 3.0. Attualmente, HR caricherà il curriculum aziendale interno di un dipendente in una raccolta documenti sul nostro sito, ma per motivi di privacy, dobbiamo quindi limitare l'accesso a tale raccolta documenti, il che costringe gli utenti a passare attraverso le risorse umane ogni volta che desiderano aggiornare il proprio curriculum.

Il mio pensiero è quello di creare un elenco con gli allegati abilitati che consenta agli utenti di visualizzare / modificare solo i propri elementi e quindi autorizzare le risorse umane a gestire tutte le voci. Questo funziona ad eccezione del fatto che HR dovrà creare l'elemento di elenco iniziale e allegare il curriculum, il che significa che l'elemento di elenco sarà " creato da {hr} " e non visibile / modificabile dall'utente finale il cui curriculum è allegato.

Qualche idea su come posso consentire alle risorse umane di modificare il " creato da " campo al momento del caricamento in modo che gli utenti finali possano vedere e modificare il proprio curriculum o farlo in modo diverso?

Grazie!

È stato utile?

Soluzione

Crea una raccolta documenti per contenere i curriculum. Quindi dai al dipartimento risorse umane (gruppo utenti SharePoint) "leggi / scrivi tutto" permessi sulla biblioteca, dai a tutti gli altri di leggere / scrivere i tuoi " diritti. Crea un tipo di contenuto chiamato " Riprendi " in base al tipo di contenuto del documento pronto all'uso. Quindi aggiungere un campo che contiene il Dipendente (campo SPUser) che il curriculum riguarda al tipo di contenuto (e qualsiasi altro campo richiesto, ad esempio nome, indirizzo ecc.). Chiedi a HR di compilarlo correttamente quando crei il listitem (rendi i campi obbligatori).

Quindi, scrivi un oggettoeventreceiver associato al tipo di contenuto che hai appena creato e sovrascrivi l'evento ItemUpdated.

Il codice sarebbe simile al seguente:

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();
         }
       }
     }
   });
}

puoi associare ItemEventReceiver usando FeatureReceiver al tipo di contenuto in questo modo:

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();

Altri suggerimenti

Perché non usare semplicemente una raccolta documenti per i curriculum? (invece di un elenco con allegati.) Puoi dare a HR piena lettura / scrittura a tutti i documenti all'interno e il proprietario del curriculum avrà le autorizzazioni per contribuire solo al proprio curriculum.

Ho trovato un modo per cambiare il campo Creato da usando SharePoint Designer per creare un flusso di lavoro.

  1. Crea un campo fittizio nel tuo elenco con un nome facile da individuare, ad es. XYZZY. Trasformalo in una "persona o gruppo" campo.
  2. In SharePoint Designer, crea un flusso di lavoro per il tuo elenco. Consenti avvio manuale e avvio automatico quando viene creato un nuovo elemento.
  3. Azioni - > Imposta campo nell'elemento corrente - > Imposta XYZZY sul campo del tuo elenco che contiene l'account utente che desideri inserire in Creato da.
  4. Fai clic su Fine
  5. Ora, apri il tuo file .xoml del flusso di lavoro con Blocco note. Sostituisci " XYZZY " con " Autore " ;. Salvare il file .xoml.
  6. Apri il flusso di lavoro in Designer. Fai clic su Fine in modo che venga rielaborato con il nuovo codice.
  7. Elimina il campo fittizio dall'elenco.
  8. Esegui il flusso di lavoro su ciascun elemento esistente nell'elenco. I nuovi articoli si correggeranno automaticamente.

Con una schermata di caricamento personalizzata è possibile modificare il contesto dell'utente corrente prima di eseguire il caricamento. Richiede la ricerca del token utente usando qualcosa di simile al seguente (si tratta di frammenti di codice funzionante con gestione degli errori e altre cose rimosse). Nota che il programma utente sicuro richiederà che l'utente corrente sia fondamentalmente un amministratore / proprietario.

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;
}

Ho avuto una situazione simile (migrazione a sharepoint) in cui ho dovuto aggiungere un file con l'utente admin a una raccolta documenti e quindi " change " gli utenti. L'ho fatto in questo modo, potrebbe aiutarti un po ':

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();
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top