2012-02-13 24 views
8

Ho un flusso di lavoro personalizzato in CRM 2011 che viene attivato manualmente rispetto ai record di entità personalizzati. Quando viene selezionato un singolo record per l'elaborazione, il flusso di lavoro ha sempre esito positivo. Tuttavia, quando si seleziona più di un record, almeno uno fallirà. Gli errori forniti sembrano variare da un tentativo all'altro, anche se vengono utilizzati gli stessi dati.Errore "Puntatore non valido" del flusso di lavoro CRM 2011

errori che ho incontrato finora sono:

  • ValidateOpen - Incontrato CrmDbConnection disposta quando dovrebbe non essere smaltito Non è possibile creare uno SqlExecutionContext da un altro
  • SqlExecutionContext su cui OnBeginRequest non è stato chiamato

E dopo il riavvio del server DB:

  • puntatore non valido

Tutti questi si verificano quando si chiama il metodo Update del IOrganizationService. L'errore Puntatore non valido sembra essere l'errore più comune da quando è stato riavviato il server DB (mi è stato suggerito che potrebbe essere un problema con un server DB troppo occupato). Ho anche eliminato qualsiasi backlog di attività asincrone nel caso in cui questo fosse il problema, ma non ha avuto alcun effetto.

Qualcuno sa cosa significa questo errore, perché potrei averlo capito o come posso risolvere il problema?

Grazie mille!

risposta

7

Sembra che questo messaggio di errore sia un modo per dire "tentato di aprire un'altra connessione a CRM quando il precedente era aperto" e il motivo che tenta di eseguire è molto importante per Infatti, fallisce solo quando si elaborano più di un record.

Riferimento questo blog:

Sembra che quando un flusso di lavoro viene eseguito più record, utilizza la stessa istanza della classe, il che significa che le variabili a livello di classe non sarà ri-istanziati tra le esecuzioni. Quindi, quando le esecuzioni successive arrivano al codice che imposta la variabile di servizio a livello di classe su un'istanza di IOrganisationService, trova che le variabili ne hanno già una e che è aperta.

La soluzione che ho trovato più facile da implementare per avere la variabile di servizio all'interno della funzione Esegui, piuttosto che a livello di classe. Questo ha risolto il problema ovunque che ho provato da allora.

+1

Questo era lo stesso problema che avevo, e anche la soluzione risolveva il mio. Correzione chiave –

+0

: 'implementalo [IOrganizationService] all'interno della funzione Execute (e passalo al codice dipendente) anziché a livello di classe' – mmcrae

Problemi correlati