Utilizzare la classe OrganizationServiceContext

 

Data di pubblicazione: gennaio 2017

Si applica a: Dynamics 365 (online), Dynamics 365 (on-premises), Dynamics CRM 2016, Dynamics CRM Online

In Microsoft Dynamics 365 (online e locale), è possibile utilizzare la classe OrganizationServiceProxy per accedere ai servizi Web. In alternativa, è possibile utilizzare l'elemento OrganizationServiceContext generato dallo strumento per la creazione di codice per accedere alle funzionalità aggiuntive. La classe OrganizationServiceContext consente di registrare le modifiche, gestire le identità e le relazioni e accedere a Microsoft Dynamics 365 dal provider LINQ. Questa classe inoltre contiene un metodo OrganizationServiceContext.SaveChanges che si utilizza per inviare le modifiche ai dati registrati dal contesto. Questa classe è basata sullo stesso concetto della classe DataServiceContext dei servizi dati Windows Communication Foundation (WCF).

Per generare questa classe, fornire un valore per il parametro /serviceContextName durante la creazione di tipi con associazione anticipata. Lo strumento di generazione codice utilizza questo nome come nome della classe generata. Per ulteriori informazioni sull'utilizzo dello strumento di generazione codice, vedere Creare le classi di entità con associazione anticipata con lo strumento di generazione del codice (CrmSvcUtil.exe). È possibile utilizzare il contesto del servizio dell'organizzazione quando si sviluppano applicazioni, plug-in e attività di flusso di lavoro.

In questo argomento

Utilizzo della classe OrganizationServiceContext

Registrare le modifiche con la classe OrganizationServiceContext

Registrare oggetti correlati con la classe OrganizationServiceContext

Salvare le modifiche con la classe OrganizationServiceContext

Utilizzare i metodi virtuali quando il contesto viene modificato

Utilizzo della classe OrganizationServiceContext

Per creare un'istanza della classe di contesto, è necessario passare al costruttore della classe un oggetto che implementi l'interfaccia IOrganizationService. Un'opzione consiste nel passare un'istanza della classe OrganizationServiceProxy. Per ulteriori informazioni sull'interfaccia IOrganizationService, vedere la Usa il Servizio organizzazione per leggere e scrivere dati o metadati..

Nell'esempio seguente viene illustrato di codice per creare una nuova istanza della classe di contesto. In questo esempio, la classe di contesto è stata denominata AdventureWorksCycleServiceContext specificando il nome tramite il parametro /serviceContextName nello strumento per la generazione di codice:

//For early bound types to work correctly, they have to be enabled on the proxy.
_serviceProxy.EnableProxyTypes();
AdventureWorksCycleServiceContext context = new AdventureWorksCycleServiceContext(_serviceProxy);

Dopo aver creato l'oggetto contesto del servizio di organizzazione, sarà possibile iniziare a registrare la creazione, la modifica o l'eliminazione di entità. Ad esempio, nell'esempio di codice seguente viene illustrato come creare un'istanza di un nuovo contatto e quindi salvarlo in un server Microsoft Dynamics 365 utilizzando l'oggetto contesto del servizio.

//  Create a new contact record;
AdventureWorksCycleServiceContext context = new AdventureWorksCycleServiceContext (_serviceProxy);
Contact contact = new Contact() 
 {
   FirstName = "Pamela",
   LastName = "Brown",
   Address1_Line1 = "123 Easy St.",
   Address1_City = "Atlanta",
   Address1_StateOrProvince = "GA",
   Address1_PostalCode = "32254",
   Telephone1 = "425-555-5678"   };
context.AddObject(contact);
context.SaveChanges();

Diversi sono i punti da notare nell'esempio di codice precedente. Innanzitutto, dopo aver creato l'istanza di un nuovo contatto, l'oggetto contatto viene passato al metodo OrganizationServiceContext.AddObject in modo che il contesto possa iniziare la registrazione dell'oggetto. Il secondo punto da notare è che il nuovo oggetto viene salvato nel server utilizzando il metodo OrganizationServiceContext.SaveChanges.

Il contesto del servizio di organizzazione deve registrare ogni entità o relazione che si desidera inviare a Microsoft Dynamics 365. Ad esempio, è possibile recuperare un record con una query LINQ che consente al contesto di tracciare l'entità oppure si potrebbe utilizzare il metodo OrganizationServiceContext.Attach per permettere al contesto di avviare la registrazione dell'entità. È possibile utilizzare i dati dell'applicazione client e creare nuove entità, creare entità correlate e modificare le entità esistenti, ma è necessario chiamare il metodo SaveChanges sulle entità registrate per l'esecuzione del commit delle modifiche nel server Microsoft Dynamics 365.

Registrare le modifiche con la classe OrganizationServiceContext

Per determinare come un'entità viene registrata dal contesto, è possibile controllare la proprietà EntityState nell'istanza dell'entità. È necessario notificare al contesto del servizio di organizzazione di registrare un'entità da Microsoft Dynamics 365 chiamando i diversi metodi o tramite una query LINQ. Tutte le entità restituite da una query .NET Language Integrated Query (LINQ) vengono registrate nel contesto del servizio.

È possibile aggiungere oggetti al contesto del servizio chiamando uno dei metodi seguenti in OrganizationServiceContext.

Metodo

Uso

AddObject

Aggiunge un'entità al set di entità registrato dal contesto del servizio di organizzazione. Lo stato dell'entità nel contesto è impostato su Created. Se viene chiamato il metodo SaveChanges, il record verrà creato o aggiunto al server.

Attach

Aggiunge un'entità al set di entità registrato dal contesto del servizio di organizzazione. Lo stato dell'entità nel contesto è impostato su Unchanged. Se viene chiamato il metodo SaveChanges, l'entità non verrà inviata al server a meno che non cambi lo stato.

CreateQuery

Aggiunge i risultati di una query al set di entità registrato dal contesto del servizio di organizzazione.

Registrare oggetti correlati con la classe OrganizationServiceContext

In Dynamics 365 e Dynamics 365 (online), il contesto del servizio di organizzazione consente di creare e aggiornare le relazioni tra entità. Le proprietà di navigazione generate dallo strumento CrmSvcUtil e presenti nelle classi con associazione anticipata consentono di accedere e modificare le proprietà e le relazioni correlate a entità. Il contesto del servizio di organizzazione deve tenere traccia dell'entità correlata affinché questa sia disponibile per l'aggiornamento nel server.

Utilizzare i metodi seguenti in OrganizationServiceContext per utilizzare le entità correlate e aggiungere l'entità al contesto del servizio:

Metodo

Uso

AddRelatedObject

Aggiunge la destinazione al contesto. Chiama il metodo Attach nell'entità di destinazione e quindi chiama il metodo AddLink tra entità di origine e l'entità correlata di destinazione.

AttachLink

Aggiungere l'entità correlata al contesto per la registrazione. Lo stato dell'entità nel contesto è impostato su Unchanged.

AddLink

Crea una relazione tra le entità di origine e di destinazione. Aggiunge la destinazione al contesto. Lo stato dell'entità di destinazione nel contesto è impostato su Created.

LoadProperty

Carica il set di entità correlate per la relazione specificata. Fornisce l'accesso alle entità correlate tramite la proprietà di navigazione. Chiamare il metodo AddObject nell'entità correlata dopo aver eseguito l'accesso all'entità utilizzando una proprietà di navigazione nell'entità padre.

UpdateObject

Modifica lo stato dell'entità specificata in OrganizationServiceContext su Modificato.

DeleteObject

Modifica lo stato dell'entità specificata da eliminare in OrganizationServiceContext.

Caricare entità correlate tramite le proprietà di navigazione

Le entità correlate per le entità recuperate tramite LINQ saranno null finché non si utilizza LoadProperty per recuperarle. Il seguente esempio di codice illustra come accedere ai record di impegno associati a un record specifico di contatto.

Contact pam = context.ContactSet.Where(c => c.FirstName == "Pamela").FirstOrDefault();
if (pam != null)
{
// pam.Contact_Tasks is null until you use LoadProperty
    context.LoadProperty(pam, "Contact_Tasks");
    Task firstTask = pam.Contact_Tasks.FirstOrDefault();
}

Salvare le modifiche con la classe OrganizationServiceContext

Il contesto del servizio di organizzazione include un grafico delle entità che traccia. L'ordine secondo cui il contesto del servizio di organizzazione elabora le modifiche alle entità e le invia al server è importante. Vengono elaborati gli aggiornamenti dell'entità primaria e quindi vengono elaborate le entità correlate. Se un valore viene impostato sull'entità primaria dall'entità correlata, tale valore viene utilizzato quando si aggiornano i dati nel server.

Se si verifica un errore quando le informazioni sull'entità vengono salvate, viene generato un nuovo tipo di eccezione contenente SaveChangesResult dal metodo OrganizationServiceContext.SaveChanges, indipendentemente dal valore del parametro SaveChangesOptions passato al metodo.

Utilizzare i metodi virtuali quando il contesto viene modificato

Talvolta può essere necessario eseguire operazioni in base alle modifiche in OrganizationServiceContext. Per agevolare l'esecuzione, vengono forniti metodi virtuali che consentono di intercettare o di ricevere notifiche di un'operazione. Per utilizzare questi metodi, è necessario derivare da OrganizationServiceContext o modificare il contesto del servizio di organizzazione generato. Nella tabella seguente sono elencati i metodi virtuali.

Metodo

Descrizione

OnBeginEntityTracking

Chiamato dopo l'associazione di un'entità a OrganizationServiceContext.

OnBeginLinkTracking

Chiamato dopo l'associazione di un collegamento a OrganizationServiceContext.

OnEndEntityTracking

Chiamato dopo lo scollegamento di un'entità da OrganizationServiceContext.

OnEndLinkTracking

Chiamato dopo lo scollegamento di un collegamento da OrganizationServiceContext.

OnExecuting

Chiamato immediatamente prima l'invio di una richiesta a Server Microsoft Dynamics 365.

OnExecute

Chiamato immediatamente dopo l'invio di una richiesta a Server Microsoft Dynamics 365, indipendentemente dal fatto che l'eccezione sia stata generata o meno.

OnSavingChanges

Chiamato prima dell'esecuzione di qualsiasi operazione dopo una chiamata a SaveChanges.

OnSaveChanges

Chiamato quando tutte operazioni per una chiamata a SaveChanges sono state completate o se si è verificato un errore.

Vedere anche

IOrganizationService
OrganizationServiceContext
Utilizzare le classi di entità con associazione anticipata nel codice
Esempio: query LINQ complesse
Creare le classi di entità con associazione anticipata con lo strumento di generazione del codice (CrmSvcUtil.exe)
Utilizzare le classi dell'identità con associazione anticipata per la creazione, l'aggiornamento e l'eliminazione

Microsoft Dynamics 365

© 2017 Microsoft. Tutti i diritti sono riservati. Copyright