objetivo:
En el desarrollo de Dynamics CRM, el más común se logra Crear Plugin Plugin de actualización y una variedad de opciones de personalización, por supuesto, también hay casos de uso Eliminar Plugin en el presente documento, esto simplemente hablar acerca de cómo usar Borrar Plugin.
escena:
En el desarrollo de CRM, entre la mesa y la mesa establecido por campo de búsqueda, ahora en cuenta las necesidades escenario siguiente:
Un producto como la existencia de la Tabla A Tabla B y un sub-producto, para establecer un campo en la tabla de consulta Una Tabla B, y la Tabla A, hay un campo para contar el número de sub-productos (es decir, el número de registro que señala en la Tabla B propia), entonces este tiempo, cuando se elimina el borrado) un sub-producto de registro (, las estadísticas necesidad de ser un padre correspondientes actualizaciones del producto, a continuación, se puede utilizar el plugin de eliminación para lograr esta demanda.
implementación:
Código es relativamente simple, se determina si o Mensaje contexto Borrar lata cuando se ejecuta:
1 público void Ejecutar (IServiceProvider ServiceProvider) 2 { 3 ITracingService trazador = (ITracingService) serviceProvider.GetService ( typeof (ITracingService)); 4 contexto IPluginExecutionContext = (IPluginExecutionContext) serviceProvider.GetService ( typeof (IPluginExecutionContext)); 5 IOrganizationServiceFactory fábrica = (IOrganizationServiceFactory) serviceProvider.GetService ( typeof (IOrganizationServiceFactory)); 6 servicio IOrganizationService = factory.CreateOrganizationService (context.UserId); 7 8 tratar 9 { 10 // TODO: hacer cosas 11 si (context.MessageName.Equals ( " Crear " )) 12 { 13 tracer.Trace ( " fase " + context.Stage); 14 interruptor (context.Stage) 15 { 16 caso 20 : 17 CreatePlugin (trazador, el contexto, el servicio, de fábrica); 18 descanso ; 19 caso 40 : 20 romper ; 21 por defecto : 22 descanso ; 23 } 24 } 25 otra cosa si (context.MessageName.Equals ( " Actualización " )) 26 { 27 interruptor (context.Stage) 28 { 29 casos 20 : 30 UpdatePlugin (trazador, contexto, el servicio, la fábrica); 31 descanso ; 32 caso 40 : 33 descanso; 34 por defecto : 35 descanso ; 36 } 37 } 38 más si (context.MessageName.Equals ( " Borrar " )) // Para Delete Plugin 39 { 40 interruptor (context.Stage) 41 { 42 caso 10 : 43 DeletePlugin (trazador, el contexto, el servicio, de fábrica) ; 44 descanso ; 45 } 46 } 47 48 } 49 capturas (Exception e) 50 { 51 tiro nueva InvalidPluginExecutionException (e.Message); 52 } 53 54 }
Cómo obtener toda la información en el actual registro de solicitud de detele, el código es el siguiente, primero en llegar EntityReference el objeto, y luego a través del objeto de encontrar el registro correspondiente:
1 privada vacío DeletePlugin (trazador ITracingService, IPluginExecutionContext contexto, el servicio IOrganizationService, fábrica IOrganizationServiceFactory) 2 { 3 tracer.Trace ( " Start DeletePlugin () " ); 4 try 5 { 6 entidad EntityReference = ((EntityReference) context.InputParameters [ " objetivo " ]); 7 Entities.new_entity = service.Retrieve (entity.LogicalName, entity.Id, nuevo ColumnSet ( verdadero )) ToEntity <Entities.new_entity>. ();// obtener el registro de toda la información de la corriente, y luego se puede encontrar el producto padre de acuerdo campo de búsqueda . 8 } . 9 la captura (Exception ex) 10 { . 11 SI (ex.GetType (). El nombre == " InvalidPluginExecutionException " ) 12 es { 13 es de banda nueva nueva InvalidPluginExecutionException (ex.Message + Environment.NewLine); 14 } 15 el otro 16 { 17. cadena la errorText = ex.Message.ToString (); 18 es . 19 el tiempo (ex.InnerException =!
nulo ) 20 { 21 errorText + = ex.InnerException.Message; 22 ex = ex.InnerException; 23 } 24 arrojan nueva Excepción ( " Error: " + textoError + " \ n " ); 25 } 26 } 27 tracer.Trace ( " End DeletePlugin () " ); 28 }
Nota: CRM en la petición de supresión aplicación, y la Solicitud de Creación / actualización es diferente de la actual Registro de la Entidad objeto de obtener el Contexto de eliminación, pero EntityReference objeto, si elenco de objetos Entity se quejará, a fin de recordar al método Execute en este código de borrado:
Entidad Entidad = (entidad) context.InputParameters [ " Target " ];
Finalmente, registrado con el mensaje Delete puede utilizar 10 Etapa (Pre-validación) o 20 Etapa (Pre-operación) están generalmente se recomienda utilizar 10 Etapa, porque en la etapa 20 que haya eliminado alguna relación, tal como el tipo de partylist campo, mientras que el 20 obtener valor.