Domanda

Quello che sto cercando di realizzare qui è diverso dal solito "creare e distribuire un nuovo lavoro di timer personalizzato". Quindi, per favore cooperare.

Scenario : Ho circa 200 liste nel mio sito. Ogni lista ottiene i suoi dati da un servizio Web della terza parte (codice di cutom / non BCS). Il recupero dei dati avviene tramite lavori timer. I lavori del timer chiamano il servizio Web, ottiene i dati freschi e aggiorna gli elementi dell'elenco. Questo sta attualmente lavorando con più liste multiple e 1 processo timer per aggiornare i dati.

Problema : Ora il problema che sto affrontando è che ognuno degli elenchi ha la propria frequenza di aggiornamento. Dy List da 1 a 30 deve essere aggiornato ogni 5 minuti. Elenca da 31 a 60 ogni 10 minuti, ecc. Attualmente sto maneggiando questo con un timestamp di riferimento.

Funziona bene nella maggior parte degli scenari - a meno che il servizio Web non ritenga ai dati di grandi dimensioni, nel qual caso ci vogliono più di 5 a 10 minuti per il completamento di 4-5 elenchi. Allo stesso tempo, gli altri elenchi - dovevano essere aggiornati 5 minuti fa, ma stanno ancora aspettando di essere aggiornati perché il lavoro timer è occupato ad aggiornare un altro elenco e il refresh è in que. Questa è una soluzione completamente non esattabile al mio client perché l'elenco con una durata della frequenza inferiore (5 minuti) è di una priorità più alta degli elenchi che vengono aggiornati ogni 10 minuti.

La mia domanda è : Come posso creare un nuovo lavoro timer per ogni lista? Ogni volta che aggiungo un nuovo elenco (attraverso il codice), voglio creare un lavoro timer allo stesso tempo, che si prenderà cura di rinfrescare i dati in questo e questo elenco solo. In questo modo, avrò un lavoro timer indipendente per ogni lista e non dover dipendere dal lavoro del 1 timer per prendere tutto il carico. Con questo approccio avrò 200 lavori Timer in esecuzione. Che è OK con il mio cliente.

Spero di essere in grado di trasmettere il messaggio. I miei lavori timer stanno funzionando bene. Non ho bisogno di suggerimenti su come ottenere il lavoro del timer funzionante, ecc. La mia domanda è, come posso creare una nuova definizione di lavoro in modo dinamico attraverso il codice (nessuna distribuzione).

È stato utile?

Soluzione

Assumendo che i tuoi lavori del timer personalizzati semplicemente eredita da spjobdefinition è possibile istanziare una nuova istanza di esse, alterare la proprietà di pianificazione in base ai tuoi tempi e aggiornamento. Potrebbe pagare per dare i nomi univoci dei nuovi istanze ....

var timerJob = new CustomTimerJob(webApplication, siteUrl)
{
    Schedule = new SPDailySchedule 
    { 
        BeginMinute = 1;
        EndMinute = 2;
    }
    Title = "List XXX Timer Job";
};
timerJob.Update();
.

In termini di aggiunta di questi quando aggiungi una nuova istanza di elenco, è qui che si è in mente.Esistono eventi MISTADEDED e LISTADDING che è possibile agganciare per l'elenco aggiunto.

Potresti avere problemi con il contesto di sicurezza quando questi funzionano come dovrai essere un account abbastanza privilegiato per aggiungere lavori timer.

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