Eseguire il lavoro Timer SharePoint a livello programmatico utilizzando RunNow () utilizzando account con diritti di non amministratore

sharepoint.stackexchange https://sharepoint.stackexchange.com//questions/76125

Domanda

Ho un lavoro timer personalizzato che è programmato per eseguire durante un periodo di tempo specifico.

Voglio dare una funzionalità Run Now usando il pulsante Click Dal WebPart personalizzato SharePoint.Se eseguo il lavoro timer utilizzando un account amministratore di fattoria utilizzando il codice sotto tutto funziona bene, ma qualsiasi altro utente di SharePoint con account non agricole riceve accesso negato il problema.

var traceJob = (from jobDefinition in MainWebApp.JobDefinitions
                                where jobDefinition.DisplayName == "Sync Timer Job"
                                select jobDefinition).SingleOrDefault();
if (traceJob != null)
{
   traceJob.RunNow();
}
.

RunWithElevatedPrivilages Né impersonazione era di alcun aiuto.Qualcuno mi può aiutare per favore.Come posso consentire agli utenti Normal SharePoint di eseguire il codice sopra.

È stato utile?

Soluzione

Per eseguire i diritti di amministrazione agricola del metodo RunNow. Quando si utilizza il metodo RunWithElevatedPrivileges, il codice viene eseguito nel contesto dell'account del pool di applicazioni, che di solito non ha i diritti di amministrazione della fattoria (e non dovrebbe averlo in base alle migliori pratiche)

Quindi la soluzione è quella di eseguire il codice nel contesto di alcuni utenti che ha i diritti di amministratore della fattoria. Non ho trovato una bella soluzione per farlo direttamente nel codice per WebPart, ma è possibile eseguirlo da un altro lavoro timer (poiché i lavori del timer funzionano con il servizio Timer SharePoint, che ha i diritti di amministratore della fattoria).

Questa non è una soluzione molto elegante, ma puoi creare un altro lavoro timer che è programmato per funzionare ogni minuto. Questo lavoro timer controlla un tipo di flag sul tuo sito, che è impostato quando fai clic su quel pulsante in WebPart. Se il flag è impostato, esegue il tuo lavoro timer originale utilizzando il metodo RunNow e ripristina la bandiera. Avrai un ritardo tra una pressione del pulsante e l'esecuzione del lavoro del timer effettivo circa un minuto (a volte inferiore), che potrebbe essere OK a seconda di ciò che stai cercando di ottenere.

Quando si invoca il metodo RunNow, il processo non viene eseguito subito, ma cambia la definizione del lavoro e imposta il successivo tempo di esecuzione del momento nel momento corrente nel database, quindi verrà eseguito la prossima volta che il timer di SharePoint sta elaborando i lavori del timer. È in genere un ritardo di 5-10 secondi comunque prima che il lavoro sia effettivamente eseguito.

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