Aunque parece que se ha pedido hace algún tiempo (¡y supongo que el OP ya ha encontrado su solución!) Lo encontré buscando una respuesta similar recientemente. Tomó más investigación para descubrir lo que necesitaba, así que por esta razón lo agregaré aquí también para cualquier otra persona que lo encuentre.
En primer lugar, si lo estás buscando, esta propiedad se ha quedado obsoleta. Supuestamente porque no era confiable, pero había algunas razones por las cuales necesitábamos el CallerOrigin en MSCRM 4.0. Por otro lado, hay formas de evitar esto se convierta en obsoleto demasiado:
Evitar bucles infinitos (más de 2 plugins)
Esta fue la razón por la que estaba buscando el CallerOrigin y cómo me encontré con esta pregunta. Solo quería que el complemento se activara si proviene de un usuario en el formulario, no de otro complemento (es decir, un proceso asyc/servicio web). En mi caso, la distinción de que es "más de 2 complementos" es bastante importante, porque no puedo usar InputParameters para resolver el problema. Mi ejemplo fue similar a la siguiente:
Actualización Plugin para "Padre" Entidad. Si el conjunto de opciones llamado "Estado" en la entidad padre se estableció en "Aprobado", posteriormente quise establecer también un estado en todas las entidades secundarias en "Aprobado".
Plugin de actualización para Entidad "infantil". Si el conjunto de opciones llamado "Estado" en la entidad hijo se configuró en "aprobado", y todos los demás hijos del mismo padre tienen este conjunto en "Aprobado", también tuve que actualizar el estado en el padre para que fuera aprobado.
Esto causa un bucle infinito si no se protege de él. Tampoco puede usar los parámetros de entrada para resolverlo.Una solución básica es utilizar la comprobación de la profundidad:
context.PluginExecutionContext.Depth
Si esta es mayor que 1 que ha sido llamado por otro plugin/flujo de trabajo. Nota: Si tiene un flujo de trabajo que desencadena la actualización inicial, es posible que desee tener cuidado con el valor que está buscando.
evitar problemas de sincronización de un cliente sin conexión
se nos ha dado diferentes propiedades para ayudar a distinguir estos. Utilizar estos en su lugar:
context.PluginExecutionContext.IsExecutingOffline
context.PluginExecutionContext.IsOfflinePlayback
reaccionar de manera diferente dependiendo de lo que es el origen
Ok, por lo que este es el único escenario en el que realmente necesitamos la CallerOrigin. La única forma en que creo que podrás hacerlo es verificando el tipo de PluginExecutionContext. Sé que es asíncrono es del tipo:
Microsoft.Crm.Asynchronous.AsyncExecutionContext
y para los plugins que parece ser:
Microsoft.Crm.Extensibility.PipelineExecutionContext
No está seguro de lo que es cuando se viene de una fuente externa, que por desgracia no tengo ningún código disponible en este momento para probar y resolver esto. Fuera de todo lo que es probable que tenga que comprobar:
PluginExecutionContext.ParentContext
El único otro método que he encontrado para detectar cuando la actualización de vino de está utilizando una marca personalizada en el formulario. Por lo que podría crear un optionset llamado "OriginOfChange" (o algo similar) con las opciones
- Formulario de CRM (Javascript onsave)
- flujo de trabajo
- Plugin
- etc.
Entonces lo que sea que actualice la entidad establece este campo durante la actualización. De esta forma, puede verificar los parámetros de entrada cada vez para ver de dónde viene la actualización.
Este último método es muy probablemente el más seguro emplear si es necesario reaccionar de manera diferente dependiendo de la fuente. solución
que podría tener que no actualizar si el cambio fue iniciado por un usuario especificado, ya que no habrá cambios por parte de la herramienta de sincronización. Estoy tratando de evitar la doble sincronización en lugar del bucle infinito :) ya que puedo detener el ciclo en la herramienta de sincronización – csjohnst
context.InitiatingUserId te da la ID de guía. En mi caso, quiero excluir a un solo usuario del complemento de activación y esto funcionó. – kmria