Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
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