/// <summary> /// Cuando se está creando el producto y se hace clic en guardar, se ejecuta una consulta /// al servicio web donde consulta la puntuación del vino y actualiza el campo en el CRM. /// </summary> /// <param name="serviceProvider"></param> public void Execute(IServiceProvider serviceProvider) { // Se declara el contexto que hace referencia al plugin utilizado var context = (IPluginExecutionContext) serviceProvider.GetService(typeof(IPluginExecutionContext)); if (!context.InputParameters.Contains("Target") || !(context.InputParameters["Target"] is Entity)) { return; } var entity = (Entity)context.InputParameters["Target"]; if (!entity.Attributes.Contains("productnumber")) { return; } // "productnumber" es el nombre físico del campo a trabajar en el crm var codigo = entity.GetAttributeValue <string>("productnumber"); // consultar la puntuación del vino var puntuacion = Puntuacion.Obtener(token, codigo); string[] valores = puntuacion.Split(';'); var wine = valores[1]; var score = Convert.ToDouble(valores[0]); entity["evd_puntuacion"] = score; entity["name"] = wine; }
protected override void Execute(CodeActivityContext context) { var contextWorkflow = context.GetExtension <IWorkflowContext>(); var serviceFactory = context.GetExtension <IOrganizationServiceFactory>(); var user = contextWorkflow.InitiatingUserId; var organizationService = serviceFactory.CreateOrganizationService(user); var product = Product.Get <EntityReference>(context); var token = Token.Get <string>(context); if (product == null || token == null) { return; } // Es equivalente a un select var entity = organizationService.Retrieve("product", product.Id, new ColumnSet(true)); var codigo = entity.GetAttributeValue <string>("productnumber"); var puntuacion = Puntuacion.Obtener(token, codigo); string[] valores = puntuacion.Split(';'); var wine = valores[1]; var score = Convert.ToDouble(valores[0]); entity["evd_puntuacion"] = score; entity["name"] = wine; organizationService.Update(entity); }
/// <summary> /// En caso de que se actualice la entidad, para este caso el producto, se vuelve a consultar el servicio para /// asegurar que la puntuación corresponda al vino, ejemplo si se cambia el código del vino. /// </summary> /// <param name="serviceProvider"></param> public void Execute(IServiceProvider serviceProvider) { var context = (IPluginExecutionContext)serviceProvider.GetService(typeof(IPluginExecutionContext)); // Evitar que se ejecute por segunda o más veces, debido a que este método se ejecuta // después de una actualización en crm y en este código se le está indicando que vuelva // a actualizar se controla la profundidad de actualizaciones para que no se ejecute más de una vez if (context.Depth > 2) { return; } if (!context.PreEntityImages.Contains("PreImage") || !(context.PreEntityImages["PreImage"] is Entity)) { return; } var entityPre = (Entity)context.PreEntityImages["PreImage"]; if (!context.InputParameters.Contains("Target") || !(context.InputParameters["Target"] is Entity)) { return; } var entity = (Entity)context.InputParameters["Target"]; if (entity["productnumber"] != entityPre["productnumber"]) { // "productnumber" es el nombre físico del campo a trabajar en el crm var codigo = entity.GetAttributeValue <string>("productnumber"); var name = entity.GetAttributeValue <string>("name"); // consultar la puntuación del vino mediante servicio web var puntuacion = Puntuacion.Obtener(token, codigo); string[] valores = puntuacion.Split(';'); var wine = valores[1]; var score = Convert.ToDouble(valores[0]); // return new KeyValuePair<string, double?>(items.results[0].wine, score); // var wine = Puntuacion.Obtener(token, codigo).; // Asignar el valor obtenido al campo correpondiente en el CRM /* * entity["evd_puntuacion"] = puntuacion.Value; * entity["name"] = puntuacion.Value; */ entity["evd_puntuacion"] = score; entity["name"] = wine; var serviceFactory = (IOrganizationServiceFactory)serviceProvider.GetService(typeof(IOrganizationServiceFactory)); var service = serviceFactory.CreateOrganizationService(context.UserId); service.Update(entity); } }