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 |
---|---|
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. |
|
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. |
|
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 |
---|---|
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). |
|
Agrega la entidad relacionada al contexto para realizar el seguimiento. El estado de la entidad en el contexto se establece en Unchanged. |
|
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. |
|
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. |
|
Cambia el estado de la entidad especificada en el OrganizationServiceContext a editado. |
|
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 |
---|---|
Llamado después de que una entidad se asocie a OrganizationServiceContext. |
|
Llamado después de que un vínculo se asocie a OrganizationServiceContext. |
|
Llamado después de que una entidad se desasocie de OrganizationServiceContext. |
|
Llamado después de que un vínculo se desasocie de OrganizationServiceContext. |
|
Llamado inmediatamente antes de que una solicitud se envíe a Microsoft Dynamics 365 Server. |
|
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. |
|
Llamado antes de que ocurra una operación tras una llamada a SaveChanges. |
|
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