Compartir a través de


Usar la clase OrganizationServiceContext

 

Publicado: enero de 2017

Se aplica a: Dynamics 365 (online), Dynamics 365 (on-premises), Dynamics CRM 2016, Dynamics CRM Online

En Microsoft Dynamics 365 (en línea y local), puede usar la clase de OrganizationServiceProxy para tener acceso a servicios web. Como alternativa, puede usar el OrganizationServiceContext generado por la herramienta de generación de código para acceder a la funcionalidad adicional. La clase de OrganizationServiceContext permite controlar los cambios, administrar identidades y relaciones, y proporciona acceso al proveedor LINQ de Microsoft Dynamics 365. Esta clase también contiene un método de OrganizationServiceContext.SaveChanges que se usa para enviar los cambios a los datos que el contexto está siguiendo. Esta clase se basa en el mismo concepto que la clase DataServiceContext en los servicios de datos de Windows Communication Foundation (WCF).

Para generar esta clase, proporcione un valor para el parámetro de /serviceContextName cuando genere enlaces en tiempo de compilación. La herramienta de generación de código usa este nombre como nombre de la clase generada. Para obtener más información sobre cómo ejecutar la herramienta de generación de código, consulte Crear las clases de entidad con enlace en tiempo de compilación con la herramienta de generación de código (CrmSvcUtil.exe). Puede usar el contexto del servicio de la organización cuando desarrolle aplicaciones, complementos y actividades de flujo de trabajo.

En este tema

Cómo usar la clase OrganizationServiceContext

Cambios de seguimiento con la clase OrganizationServiceContext

Seguir objetos relacionados con la clase OrganizationServiceContext

Guardar cambios con la clase OrganizationServiceContext

Usar métodos virtuales cuando cambia el contexto

Cómo usar la clase OrganizationServiceContext

Para crear una instancia de la clase de contexto, debe pasar al constructor de clases un objeto que implemente la interfaz de IOrganizationService. Una opción es pasar una instancia de la clase OrganizationServiceProxy. Para obtener más información acerca de la interfaz de IOrganizationService, consulte Usar el servicio de organización para leer y escribir datos o metadatos.

El siguiente ejemplo de código muestra cómo crear una nueva instancia de la clase de contexto. En este ejemplo, a la clase de contexto se le dio el nombre AdventureWorksCycleServiceContext especificando el nombre mediante el parámetro /serviceContextName en la herramienta de generación de código:

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

Tras crear el objeto del contexto del servicio de la organización, puede iniciar el seguimiento para crear, editar o eliminar entidades. Por ejemplo, el siguiente código de ejemplo muestra cómo crear una instancia de un nuevo contacto y después guardarlo en un servidor de Microsoft Dynamics 365 mediante el objeto del contexto del servicio.

//  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();

Existen varios puntos a tener en cuenta en el código de ejemplo anterior. Primero, una vez creada una instancia de un nuevo contacto, pasa el objeto de contacto al método de OrganizationServiceContext.AddObject para que el contexto pueda empezar a seguir al objeto. El segundo punto es que el nuevo objeto se guarda en el servidor mediante el método de OrganizationServiceContext.SaveChanges.

El contexto del servicio de la organización debe seguir cualquier entidad o relación que desee enviar a Microsoft Dynamics 365. Por ejemplo, puede recuperar un registro con una consulta de LINQ y el contexto seguiría esa entidad o podría usar el método de OrganizationServiceContext.Attach para hacer que el contexto empiece a seguir la entidad. Puede trabajar con datos en una aplicación cliente y crear entidades nuevas, crear entidades relacionadas, y modificar las entidades existentes, pero debe llamar al método de SaveChanges en las entidades seguidas para confirmar los cambios en el servidor de Microsoft Dynamics 365.

Cambios de seguimiento con la clase OrganizationServiceContext

Para determinar cómo el contexto sigue a una entidad, puede comprobar la propiedad de EntityState en la instancia de entidad. Debe notificar al contexto del servicio de la organización que siga a una entidad de Microsoft Dynamics 365 llamando a varios métodos o utilizando una consulta de LINQ. El contexto de servicio sigue a todas las entidades devueltas por una consulta de Consulta integrada del lenguaje .NET (LINQ).

Puede agregar objetos al contexto de servicio llamando a uno de los siguientes métodos en OrganizationServiceContext.

Método

Usar

AddObject

Agrega una entidad al conjunto de entidades que el contexto del servicio de la organización está siguiendo. El estado de la entidad en el contexto se establece en Created. Si se llama al método de SaveChanges, este registro se creará o agregará al servidor.

Attach

Agrega una entidad al conjunto de entidades que el contexto del servicio de la organización está siguiendo. El estado de la entidad en el contexto se establece en Unchanged. Si se llama al método de SaveChanges, no se enviará esta entidad al servidor a menos que su estado cambie.

CreateQuery

Agrega los resultados de una consulta al conjunto de entidades que el contexto del servicio de la organización está siguiendo.

Seguir objetos relacionados con la clase OrganizationServiceContext

En Dynamics 365 y Dynamics 365 (online), el contexto del servicio de la organización permite crear y actualizar relaciones entre entidades. Las propiedades de navegación generadas por la herramienta CrmSvcUtil y ubicadas en las clases de enlace en tiempo de compilación permiten acceder y cambiar propiedades y relaciones relacionadas con la entidad. El contexto del servicio de la organización debe seguir la entidad relacionada para que la entidad relacionada esté disponible para actualizarse en el servidor.

Use los siguientes métodos en el OrganizationServiceContext para trabajar con entidades relacionadas y agregar la entidad al contexto del servicio:

Método

Usar

AddRelatedObject

Agrega el destino al contexto. Llama al método de Attach en la entidad de destino y luego llama al método de AddLink entre la entidad de origen y la entidad de destino (relacionada).

AttachLink

Agrega la entidad relacionada al contexto para realizar el seguimiento. El estado de la entidad en el contexto se establece en Unchanged.

AddLink

Crea una relación entre las entidades de origen y de destino. Agrega el destino al contexto. El estado de la entidad de destino en el contexto se establece en Created.

LoadProperty

Carga el conjunto de la entidad relacionada para la relación especificada. Da acceso a las entidades relacionadas mediante la propiedad de navegación. Llame al método de AddObject en la entidad relacionada tras acceder a la entidad usando una propiedad de navegación en la entidad primaria.

UpdateObject

Cambia el estado de la entidad especificada en el OrganizationServiceContext a editado.

DeleteObject

Cambia el estado de la entidad especificada que se va a eliminar en el OrganizationServiceContext.

Cargar entidades relacionadas mediante propiedades de navegación

Las entidades relacionadas para las entidades que ha recuperado mediante LINQ serán nulas hasta que se use LoadProperty para recuperarlas. El siguiente ejemplo de código muestra cómo tener acceso a registros de tarea asociados a un registro de contacto específico.

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();
}

Guardar cambios con la clase OrganizationServiceContext

El contexto del servicio de la organización organiza un gráfico de las entidades que está siguiendo. El orden en que el contexto del servicio de la organización procesa cambios en la entidad y los envía al servidor es importante. Las actualizaciones de la entidad primaria se procesan y luego se procesan las entidades relacionadas. Si un valor se establece en la entidad primaria por la entidad relacionada, se usa ese valor al actualizar los datos en el servidor.

Si se produce un error al guardar la información de entidad, se lanza un nuevo tipo de excepción que contiene el SaveChangesResult por parte del método de OrganizationServiceContext.SaveChanges, independientemente del valor del parámetro SaveChangesOptions que se pasa al método.

Usar métodos virtuales cuando cambia el contexto

A veces puede ser necesario realizar acciones en función de los cambios en el OrganizationServiceContext. Para facilitar esto, se proporcionan métodos virtuales para permitirle interceptar o que se le notifique una operación. Para aprovechar estos métodos, tiene que derivar de OrganizationServiceContext o cambiar el contexto generado de servicios de la organización. La siguiente tabla enumera los métodos virtuales.

Método

Descripción

OnBeginEntityTracking

Llamado después de que una entidad se asocie a OrganizationServiceContext.

OnBeginLinkTracking

Llamado después de que un vínculo se asocie a OrganizationServiceContext.

OnEndEntityTracking

Llamado después de que una entidad se desasocie de OrganizationServiceContext.

OnEndLinkTracking

Llamado después de que un vínculo se desasocie de OrganizationServiceContext.

OnExecuting

Llamado inmediatamente antes de que una solicitud se envíe a Microsoft Dynamics 365 Server.

OnExecute

Llamado inmediatamente después de que una solicitud se envíe a Microsoft Dynamics 365 Server, independientemente de si se produjo una excepción o no.

OnSavingChanges

Llamado antes de que ocurra una operación tras una llamada a SaveChanges.

OnSaveChanges

Llamado cuando todas las operaciones de una llamada a SaveChanges se han completado, o si hay un error.

Ver también

IOrganizationService
OrganizationServiceContext
Usar las clases de entidad con enlace en tiempo de compilación en código
Ejemplo: consultas complejas de LINQ
Crear las clases de entidad con enlace en tiempo de compilación con la herramienta de generación de código (CrmSvcUtil.exe)
Usar las clases de entidad con enlace en tiempo de compilación para crear, actualizar y eliminar

Microsoft Dynamics 365

© 2017 Microsoft. Todos los derechos reservados. Copyright