Domanda

Ho un requisito che gli utenti autenticati dovrebbero essere in grado di aggiungere in modo anonimo elementi a un elenco, cioè sono autenticati ma il campo creato da / modificato dal campo non dovrebbe mostrare il loro nome.Potrei semplicemente nascondere i campi dalla vista ma il cliente non vuole nemmeno gli utenti con il sito Coll Admin per poter vedere chi ha aggiunto quale oggetto.Immagino che potrei a questo con un ricevitore di eventi che cambia i campi in questione per memorizzare un account di servizio ma c'è un altro modo di farlo senza coinvolgere il codice personalizzato?

Grazie in anticipo.

È stato utile?

Soluzione

Puoi farlo tramite Central Admin ma non lo consiglierei di utilizzare questa procedura per tutti gli utenti autenticati.

    .
  • Nell'amministratore centrale, andare alla gestione delle applicazioni, quindi fai clic su "Politica Per applicazione web 'sotto' sicurezza dell'applicazione '.
  • Seleziona l'applicazione Web SharePoint stai caricando i documenti su
    e fai clic su "Aggiungi utenti".

  • Seleziona la zona desiderata (o "Tutte le zone") e fai clic su "Avanti".

  • Specifica il nome dell'account, selezionare la casella per "Controllo completo" e
    Seleziona la casella etichettata 'Account funziona come sistema', quindi fare clic su
    'Fine'.

    Il modo Consigliato è ovviamente per utilizzare il ricevitore dell'evento al Elenco e usa elemento.systemupdate (). Vedi il codice qui sotto:

    public override void ItemAdded
                              (SPItemEventProperties properties)
    {
       SPUser adminUser =
           properties.Web.EnsureUser("GEEKTRAINER\\charrison");
       using (SPSite site =
           new SPSite(properties.WebUrl, adminUser.UserToken))
       using (SPWeb web = site.OpenWeb()) {
         SPList list = web.Lists[properties.ListId];
         SPListItem item = list.GetItemById(properties.ListItemId);
    
         item.BreakRoleInheritance(true);
         item.SystemUpdate();
       }
    
    
     }
    
    .

    SystemUpdate ha due due sovraccarichi, SystemUpdate () e SystemUpdate (Boolean). Il secondo sovraccarico consente di controllare se una nuova versione è stata creata passando nel vero. Il valore predefinito (nessun sovraccarico di parametri) è falso: non creare una nuova versione.

Altri suggerimenti

Penso che per questo è possibile utilizzare l'elenco.systemupdate ()

Con Item.Update (), aggiorniamo le modifiche apportate all'elemento di elenco.È tutto ciò che fa?No, internamente aggiorna anche i campi "Modifiedydy" e "Modifiedon" secondo la corrente registrata all'utente e all'ora del server corrente.Opzionalmente aggiorna anche la versione dell'articolo se l'opzione di versioning è attivata per quell'elenco specifico.

Quindi, in qualsiasi momento se desideriamo non aggiornare queste cose extra, ad esempio il "modificato", "modificato" e la "versione elemento", quindi la soluzione per questo è utilizzare elemento.systemupdate () anziché.Aggiornare().Questo ti aiuterà a aggiornare solo i campi specificati all'interno dei blocchi di codice.

È possibile avere sempre un codice in esecuzione sulla parte ItemUpdata di un ricevitore evento dell'oggetto che dovrebbe essere eseguito in uno spsecurity.runwitelevatedPrileges ed eseguire un aggiornamento con esso o utilizzare qualcosa di simile a questo per aggiornare con uno specifico "User Dumy User" (assegnoCodice - L'ho appena scritto sul posto!).

Dovresti convalidare ciò che accade se hai abilitato il controllore (se c'è un caso per questo!)

using(SPSite currentSite = new SPSite(properties.Site.Url))
{ 
    SPWeb oWeb = oSite.OpenWeb();

    SPList oList = oWeb.Lists["TestCustomList"];
    SPListItemCollection oListCollection = oList.Items;
    foreach (SPListItem oListItem in oListCollection)
    {
        SPFieldUserValue oUser =
        new SPFieldUserValue(
            oWeb,
            oWeb.CurrentUser.ID,
            oWeb.CurrentUser.LoginName);

        // or you can hard code the value like this
        SPFieldUserValue oUser = new SPFieldUserValue(oWeb, 14, "Dummy User");
        oListItem["Author"] = oUser;//created by column value = "14;#DummyUser"
        oListItem["Editor"] = oUser;//modified by column value = "14;#DummyUser"              
        oListItem.Update();              
    }         
    oWeb.Update();
}
.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a sharepoint.stackexchange
scroll top