none
Plugins en CRM 2011 RRS feed

  • Pregunta

  • hola amigos como estan.. alguien me puede ayudar con est.

    estoy creando un plugin en una entidad personalizada.. dentro de esta entidad se pide como dato la cedula. lo que requiero hacer es coger esa cedula y buscarla en la entidad contacto si esta me regrese un true si no me regrese un false..

    la verdad no se ocmo ahcerlo alguien me peude ayudar?

    jueves, 7 de marzo de 2013 18:53

Respuestas

  • Hola Cristian, un ejemplo para hacer esto sería mas o menos así:

    Entity entity = (Entity)context.InputParameters["Target"];
    QueryByAttribute querybyattribute = new QueryByAttribute("contact");
    querybyattribute.ColumnSet = new ColumnSet("contactid");
    querybyattribute.Attributes.AddRange("new_cedula");
    querybyattribute.Values.AddRange(entity.Attributes["new_cedulaintroducida"]);
    EntityCollection retrieved = _service.RetrieveMultiple(querybyattribute);
    if (retrieved.Entities.Count>=0) {return true;}

    un saludo,


    Demian Adolfo Raschkovan Blog: http://crmtoall.blogspot.com If this post answers your question, please click "Mark As Answer" on the post and "Mark as Helpful"

    • Marcado como respuesta Cristian Guapi lunes, 11 de marzo de 2013 17:31
    viernes, 8 de marzo de 2013 13:43
    Moderador
  • Hola, tienes un ejemplo que he hecho con otro objetivo, pero te puede servir como "base" para arracar con tu plugin:

    http://crm2011guidfinder.codeplex.com/SourceControl/changeset/view/15414

    es un plugin completo que hace varias busquedas en CRM:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    // Microsoft Dynamics CRM namespace(s)
    using Microsoft.Xrm.Sdk;
    using Microsoft.Xrm.Sdk.Messages;
    using Microsoft.Xrm.Sdk.Metadata;
    using Microsoft.Xrm.Sdk.Query;
    
    
    namespace GuidFinder_Plugin
    {
        public class GuidFinder_Plugin : IPlugin
        {
            public void Execute(IServiceProvider serviceProvider)
            {
    
                ITracingService tracingService =(ITracingService)serviceProvider.GetService(typeof(ITracingService));
                IPluginExecutionContext context = (IPluginExecutionContext)serviceProvider.GetService(typeof(IPluginExecutionContext));
                IOrganizationServiceFactory serviceFactory = (IOrganizationServiceFactory)serviceProvider.GetService(typeof(IOrganizationServiceFactory));
                IOrganizationService service = serviceFactory.CreateOrganizationService(context.UserId);
    
    
                if (context.InputParameters.Contains("Target") && context.InputParameters["Target"] is Entity)
                {
                    Entity entity = (Entity)context.InputParameters["Target"];
                    if (entity.LogicalName != "new_guidfinder")
                        return;
    
                    string new_guidtofind = (string)entity["new_guidtofind"];
                    OptionSetValue new_entitiestoquery=(OptionSetValue)entity["new_entitiestoquery"];
                    string new_filterentities = "";
                    if (entity.Contains("new_filterentities")){
                        new_filterentities =(string)entity["new_filterentities"];
                    }
    
                    if (new_entitiestoquery.Value == 100000000)//All. i need to retrieve all entities...
                    {
                        RetrieveAllEntitiesRequest request = new RetrieveAllEntitiesRequest()
                        {
                              EntityFilters = EntityFilters.Entity,
                              RetrieveAsIfPublished = true
                        };
                        RetrieveAllEntitiesResponse response = (RetrieveAllEntitiesResponse)service.Execute(request);
                        new_filterentities = ""; StringBuilder strEnts=new StringBuilder();
                        foreach (EntityMetadata met in response.EntityMetadata)
                        {
                            if (strEnts.Length > 0) strEnts.Append(",");
                            strEnts.Append(met.SchemaName.ToLower());
                        }
                        new_filterentities = strEnts.ToString();
                    }
    
                    //Quey for each entity to try to find the Guid.
                    StringBuilder strLog = new StringBuilder(); string new_foundentity = "";
                    string[] arrnew_filterentities=new_filterentities.Split(",".ToCharArray());
                    
                    for (int i = 0; i < arrnew_filterentities.Length; i++)
                    {
                        string entityfilter = arrnew_filterentities[i].ToString();
                        Entity oEntidad = null;
                        try
                        {
                            oEntidad = service.Retrieve(entityfilter, new Guid(new_guidtofind), new ColumnSet(allColumns: true));
                        }
                        catch (System.Exception ex)
                        {
     
                        }
    
                        if (strLog.Length > 0) strLog.Append(Environment.NewLine);
                        strLog.Append(i.ToString());strLog.Append(": ");
                        if (oEntidad != null)
                        {
                            strLog.Append(entityfilter); strLog.Append(" ---> FOUND!");
                            new_foundentity = entityfilter;
                            break;
                        }
                        else 
                        {
                            strLog.Append(entityfilter); strLog.Append(" ---> NONE");
                        }
                    }
    
                    //add attributes
                    entity.Attributes.Add("new_foundentity", new_foundentity);
                    entity.Attributes.Add("new_executionlog", strLog.ToString());
    
                }
    
            }
        }
    }
    

    espero te sirva.

    un abrazo!


    Demian Adolfo Raschkovan Blog: http://crmtoall.blogspot.com If this post answers your question, please click "Mark As Answer" on the post and "Mark as Helpful"

    • Marcado como respuesta Cristian Guapi lunes, 11 de marzo de 2013 17:31
    sábado, 9 de marzo de 2013 7:36
    Moderador

Todas las respuestas

  • Hola Cristian, un ejemplo para hacer esto sería mas o menos así:

    Entity entity = (Entity)context.InputParameters["Target"];
    QueryByAttribute querybyattribute = new QueryByAttribute("contact");
    querybyattribute.ColumnSet = new ColumnSet("contactid");
    querybyattribute.Attributes.AddRange("new_cedula");
    querybyattribute.Values.AddRange(entity.Attributes["new_cedulaintroducida"]);
    EntityCollection retrieved = _service.RetrieveMultiple(querybyattribute);
    if (retrieved.Entities.Count>=0) {return true;}

    un saludo,


    Demian Adolfo Raschkovan Blog: http://crmtoall.blogspot.com If this post answers your question, please click "Mark As Answer" on the post and "Mark as Helpful"

    • Marcado como respuesta Cristian Guapi lunes, 11 de marzo de 2013 17:31
    viernes, 8 de marzo de 2013 13:43
    Moderador
  • Demian.. hola mil gracias voy a probarlo y te cuento.

    oye me puedes regalar tu correo para estar en contacto.. el mio es caog22@hotmail.com

    viernes, 8 de marzo de 2013 14:06
  • Hola, tienes un ejemplo que he hecho con otro objetivo, pero te puede servir como "base" para arracar con tu plugin:

    http://crm2011guidfinder.codeplex.com/SourceControl/changeset/view/15414

    es un plugin completo que hace varias busquedas en CRM:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    // Microsoft Dynamics CRM namespace(s)
    using Microsoft.Xrm.Sdk;
    using Microsoft.Xrm.Sdk.Messages;
    using Microsoft.Xrm.Sdk.Metadata;
    using Microsoft.Xrm.Sdk.Query;
    
    
    namespace GuidFinder_Plugin
    {
        public class GuidFinder_Plugin : IPlugin
        {
            public void Execute(IServiceProvider serviceProvider)
            {
    
                ITracingService tracingService =(ITracingService)serviceProvider.GetService(typeof(ITracingService));
                IPluginExecutionContext context = (IPluginExecutionContext)serviceProvider.GetService(typeof(IPluginExecutionContext));
                IOrganizationServiceFactory serviceFactory = (IOrganizationServiceFactory)serviceProvider.GetService(typeof(IOrganizationServiceFactory));
                IOrganizationService service = serviceFactory.CreateOrganizationService(context.UserId);
    
    
                if (context.InputParameters.Contains("Target") && context.InputParameters["Target"] is Entity)
                {
                    Entity entity = (Entity)context.InputParameters["Target"];
                    if (entity.LogicalName != "new_guidfinder")
                        return;
    
                    string new_guidtofind = (string)entity["new_guidtofind"];
                    OptionSetValue new_entitiestoquery=(OptionSetValue)entity["new_entitiestoquery"];
                    string new_filterentities = "";
                    if (entity.Contains("new_filterentities")){
                        new_filterentities =(string)entity["new_filterentities"];
                    }
    
                    if (new_entitiestoquery.Value == 100000000)//All. i need to retrieve all entities...
                    {
                        RetrieveAllEntitiesRequest request = new RetrieveAllEntitiesRequest()
                        {
                              EntityFilters = EntityFilters.Entity,
                              RetrieveAsIfPublished = true
                        };
                        RetrieveAllEntitiesResponse response = (RetrieveAllEntitiesResponse)service.Execute(request);
                        new_filterentities = ""; StringBuilder strEnts=new StringBuilder();
                        foreach (EntityMetadata met in response.EntityMetadata)
                        {
                            if (strEnts.Length > 0) strEnts.Append(",");
                            strEnts.Append(met.SchemaName.ToLower());
                        }
                        new_filterentities = strEnts.ToString();
                    }
    
                    //Quey for each entity to try to find the Guid.
                    StringBuilder strLog = new StringBuilder(); string new_foundentity = "";
                    string[] arrnew_filterentities=new_filterentities.Split(",".ToCharArray());
                    
                    for (int i = 0; i < arrnew_filterentities.Length; i++)
                    {
                        string entityfilter = arrnew_filterentities[i].ToString();
                        Entity oEntidad = null;
                        try
                        {
                            oEntidad = service.Retrieve(entityfilter, new Guid(new_guidtofind), new ColumnSet(allColumns: true));
                        }
                        catch (System.Exception ex)
                        {
     
                        }
    
                        if (strLog.Length > 0) strLog.Append(Environment.NewLine);
                        strLog.Append(i.ToString());strLog.Append(": ");
                        if (oEntidad != null)
                        {
                            strLog.Append(entityfilter); strLog.Append(" ---> FOUND!");
                            new_foundentity = entityfilter;
                            break;
                        }
                        else 
                        {
                            strLog.Append(entityfilter); strLog.Append(" ---> NONE");
                        }
                    }
    
                    //add attributes
                    entity.Attributes.Add("new_foundentity", new_foundentity);
                    entity.Attributes.Add("new_executionlog", strLog.ToString());
    
                }
    
            }
        }
    }
    

    espero te sirva.

    un abrazo!


    Demian Adolfo Raschkovan Blog: http://crmtoall.blogspot.com If this post answers your question, please click "Mark As Answer" on the post and "Mark as Helpful"

    • Marcado como respuesta Cristian Guapi lunes, 11 de marzo de 2013 17:31
    sábado, 9 de marzo de 2013 7:36
    Moderador
  • Demian.

    primero que nada gracias por tu ayuda..

    segundo para guardar un registro y apra modificar uno ya existente como se podría hacer?

    lunes, 11 de marzo de 2013 17:32
  • Hola no se bien a que te refieres, pero para crear y guardar un registro el código lo tienes en la SDK (http://msdn.microsoft.com/en-us/library/gg328416.aspx):

    //crear account
    Entity account = new Entity("account");
    account["name"] = "Fourth Coffee";
    _accountId = _service.Create(account);
    
    //recoger account creada
    ColumnSet attributes = new ColumnSet(new string[] { "name", "ownerid" });
    account = _service.Retrieve(account.LogicalName, _accountId, attributes);
    
    //actualizar account
    account["address1_postalcode"] = "98052";
    account["address2_postalcode"] = null;
    account["revenue"] = new Money(5000000);
    account["creditonhold"] = false;
    _service.Update(account);
    
    //eliminar account
    _service.Delete("account", _accountId);

    espero te sirva, un saludo


    Demian Adolfo Raschkovan Blog: http://crmtoall.blogspot.com If this post answers your question, please click "Mark As Answer" on the post and "Mark as Helpful"

    martes, 12 de marzo de 2013 7:52
    Moderador
  • si lo estoy haciendo asi pero me sale un error que dice

     Invalid Argument

    martes, 12 de marzo de 2013 13:29