Compartir a través de


Programación en tiempo de ejecución y en tiempo de compilación con SDK para .NET

Cuando trabaje con los ensamblados del SDK para .NET tiene dos estilos de programación que puede usar: enlace en tiempo de ejecución y enlace en tiempo de compilación.

La diferencia clave entre el enlace temprano y el enlace tardío tiene que ver con la conversión de tipos. Mientras que el enlace anticipado ofrece la comprobación de todos los tipos en tiempo de compilación de modo que no se produzcan conversiones implícitas, el enlace en tiempo de ejecución comprueba los tipos solo cuando se crea el objeto o se realiza una acción en el tipo. La Entity clase requiere que los tipos se especifiquen explícitamente para evitar conversiones implícitas.

El enlace tardío permite trabajar con tablas personalizadas (entidades) o columnas (atributos) que no estuvieron disponibles cuando se compiló el código.

Enlazado en tiempo de ejecución

La programación de enlace en tiempo de ejecución usa la clase Entity donde necesita hacer referencia a las filas de tablas y columnas (entidades y los atributos) que utilizan sus valores de propiedad LogicalName:

Las relaciones no tienen una LogicalNamepropiedad, por lo que se usa la propiedad RelationshipMetadataBase.SchemaName

La ventaja principal para la programación de enlace en tiempo de ejecución es que no necesita generar las clases ni incluir el archivo generado en los proyectos. El archivo generado puede ser grande.

Las principales desventajas son:

  • No se obtiene validación del enlace en tiempo de compilación de los nombres de las entidades, los atributos y las relaciones.
  • Debe conocer los nombres de los atributos y las relaciones de los metadatos.

Sugerencia

Una herramienta que puede usar para encontrar esta información fácilmente es el Explorador de metadatos. Se trata de una aplicación que puede descargar e instalar en su organización. Más información: Examinar los metadatos de su entorno

Example

El siguiente ejemplo crea una cuenta con el estilo de enlace en tiempo de ejecución.

//Use Entity class specifying the entity logical name
var account = new Entity("account");

// set attribute values
    // string primary name
    account["name"] = "Contoso";            
    // Boolean (Two option)
    account["creditonhold"] = false;
    // DateTime
    account["lastonholdtime"] = new DateTime(2017, 1, 1);
    // Double
    account["address1_latitude"] = 47.642311;
    account["address1_longitude"] = -122.136841;
    // Int
    account["numberofemployees"] = 500;
    // Money
    account["revenue"] = new Money(new decimal(5000000.00));
    // Picklist (Option set)
    account["accountcategorycode"] = new OptionSetValue(1); //Preferred customer
                
//Create the account
Guid accountid = svc.Create(account);

Enlace en tiempo de compilación

La programación de enlace en tiempo de compilación requiere que primero genere un conjunto de clases basadas en las definiciones de tabla y columna (metadatos de entidad y atributo) para un entorno específico mediante la herramienta de generación de código comando de compilación pac modelbuilder de Power Platform CLI. Más información: Generar clases para programación de enlace en tiempo de compilación con el SDK para .NET

Tras generar tipos de clases en tiempo de compilación con la herramienta de generación de código disfrutará de una mejor experiencia cuando escriba código gracias a las clases y las propiedades usan sus respectivos valores de propiedad SchemaName:

Simplemente cree una instancia de la clase y deje que Visual Studio IntelliSense proporcione los nombres de las propiedades y las relaciones.

Las clases generadas para la programación de enlace en tiempo de compilación también pueden incluir las definiciones para cualquier acción personalizada que se definan para el entorno. Esto proporciona un par de clases de solicitud y respuesta para usarlas con estas acciones personalizadas. Más información: Acciones personalizadas

Las clases se generan mediante definiciones de tabla de una instancia de entorno específica y cada instancia puede tener tablas y columnas diferentes en las que pueden cambiar con el tiempo. Es posible que tenga que escribir código que funcione con tablas que no estén presentes cuando genera clases con establecimiento inflexible de tipos.

Importante

Si usa OrganizationServiceProxy para proporcionar los métodos IOrganizationService que utilizará, debe llamar al método OrganizationServiceProxy.EnableProxyTypes() para habilitar los tipos de enlace de tiempo de compilación.

Example

El siguiente ejemplo crea una cuenta con el estilo de enlace en tiempo de compilación.

var account = new Account();
// set attribute values
    // string primary name
    account.Name = "Contoso";
    // Boolean (Two option)
    account.CreditOnHold = false;
    // DateTime
    account.LastOnHoldTime = new DateTime(2017, 1, 1);
    // Double
    account.Address1_Latitude = 47.642311;
    account.Address1_Longitude = -122.136841;
    // Int
    account.NumberOfEmployees = 500;
    // Money
    account.Revenue = new Money(new decimal(5000000.00));
    // Picklist (Option set)
    account.AccountCategoryCode = new OptionSetValue(1); //Preferred customer

//Create the account
Guid accountid = svc.Create(account);

Elegir el estilo

El estilo de programación que elija usar es para usted. En la tabla siguiente se proporcionan las ventajas y desventajas de cada uno.

Enlace en tiempo de compilación Enlace en tiempo de ejecución
Puede comprobar los nombres de entidad, atributo y relación en tiempo de compilación. No puede compilar la comprobación de los nombres de entidad, atributo y relación
Debe generar clases de entidades. No es necesario generar clases de entidad
Mejor compatibilidad con IntelliSense Menos compatibilidad con IntelliSense
Menos código que escribir; el código es más legible Más código para escribir; el código es menos legible
Muy ligeramente menos eficaz Muy ligeramente más eficaz

Combinación de enlace en tiempo de ejecución y en tiempo de compilación

Dado que todas las clases generadas heredan de la clase Entity usada con programación de enlace tardío, se puede trabajar con entidades, atributos y relaciones no definidas dentro de las clases.

Examples

En el ejemplo siguiente se muestra una manera de mezclar métodos de enlace temprano y tardío mediante OrganizationServiceContext.

// Create an context object  
AWCServiceContext context = new AWCServiceContext(_serviceProxy);  
  
// Instantiate an account object using the Entity class.  
Entity testaccount = new Entity("account");  
  
// Set several attributes. For account, only the name is required.   
testaccount["name"] = "Fourth Coffee";  
testaccount["emailaddress1"] = "marshd@contoso.com";  
  
// Save the entity using the context object.  
context.AddToAccountSet(testaccount);  
context.SaveChanges();  
  

Si un atributo personalizado no se incluyó en las clases generadas, todavía puede usarlo.

var account = new Account();
// set attribute values
    // string primary name
    account.Name = "Contoso";
    // A custom boolean attribute not included in the generated classes.
    account["sample_customboolean"] = false;


//Create the account
Guid accountid = svc.Create(account);

Asignar una instancia vinculada temprana a una instancia vinculada tardía.

A continuación se muestra cómo asignar una instancia de enlace temprano a una instancia de enlace tardío.

Entity incident = ((Entity)context.InputParameters[ParameterName.Target]).ToEntity<Incident>();  
Task relatedEntity = new Task() { Id = this.TaskId };  
  
incident.RelatedEntities[new Relationship("Incident_Tasks")] =   
new EntityCollection(new Entity[] { relatedEntity.ToEntity<Entity>() });  

Consulte también

Operaciones de entidad mediante el SDK para .NET
Crear filas de tabla con SDK para .NET
Recuperar una fila de tabla usando SDK para .NET
Consulta de datos mediante el SDK para .NET
Actualizar y eliminar filas de tablas usando el SDK para .NET
Asociar y anular la asociación de filas de tabla mediante la SDK para .NET
IOrganizationService (interfaz)
Uso de OrganizationServiceContext