none
ayuda con este codigo cambio de propietario CRM 4.0 RRS feed

  • Pregunta

  • Hola estimados, hace un tiempo realice una migracion de cuentas y contactos con el DMM (data migration manager), el cual me dejo como propietario de los registros al administrador o la cuenta del administrador, pero ahora necesito asignarle el propietario real de la creacion de este registro, por lo que cree una rutina en C# para realizar dicho cambio, el problema es que no me arroja error alguno pero no realiza la accion, es decir no hace el cambio de propietario, alguien sabe porque o me faltara algo en el codigo, posteo el codigo:

     

    public static string CambiarPropietarioCuentas(string idcuenta, string idPropietario)
        {
          try
          {
            CrmAuthenticationToken token = new CrmAuthenticationToken();
            token.AuthenticationType = 0;
            token.OrganizationName = "xxxxxx";
    
            CrmService servicio = new CrmService();
            servicio.Url = "http://xxxxx:5555/MSCrmServices/2007/CrmService.asmx";
            servicio.CrmAuthenticationTokenValue = token;
            servicio.Credentials = System.Net.CredentialCache.DefaultCredentials;
    
            account cuentas = new account();
    
            cuentas.accountid = new Key();
            cuentas.accountid.Value = new Guid(idcuenta);
    
            cuentas.ownerid = new Owner();
            cuentas.ownerid.type = EntityName.systemuser.ToString();
            cuentas.ownerid.Value = new Guid(idPropietario);
    
            servicio.Update(cuentas);
    
            return "";
          }
          catch (System.Web.Services.Protocols.SoapException ex)
          {
            //Console.WriteLine(ex.Message + "." + ex.Detail.InnerText);
            //MessageBox.Show(ex.Message + "." + ex.Detail.InnerText);
            return ex.Message.ToString() + "." + ex.Detail.InnerText.ToString();
          }
    
          catch (Exception ex)
          {
            //throw new Exception(ex.Message);
            return ex.Message.ToString();
          }
    
        }
    

     

    cualquier ayuda es bienvenida

     

    saludos y muchas gracias!!

    jueves, 24 de marzo de 2011 21:10

Respuestas

  • Estimado,

    Para el trabajar con propietarios no funciona las actualizaciones, tu debes trabajar con asignaciones.

    Puedes probar lo siguiente:

     public static string CambiarPropietarioCuentas(string idcuenta, string idPropietario)
     {
       try
          {
            CrmAuthenticationToken token = new CrmAuthenticationToken();
            token.AuthenticationType = 0;
            token.OrganizationName = "xxxxxx";

            CrmService servicio = new CrmService();
            servicio.Url = "http://xxxxx:5555/MSCrmServices/2007/CrmService.asmx";
            servicio.CrmAuthenticationTokenValue = token;
            servicio.Credentials = System.Net.CredentialCache.DefaultCredentials;

            account cuentas = new account();

            cuentas.accountid = new Key();
            cuentas.accountid.Value = new Guid(idcuenta);

            //cuentas.ownerid = new Owner();
            //cuentas.ownerid.type = EntityName.systemuser.ToString();
            //cuentas.ownerid.Value = new Guid(idPropietario);

            servicio.Update(cuentas);   

            Reassign(

    new Guid(idPropietario), new Guid(idcuenta));

            return "";
          }
          catch (System.Web.Services.Protocols.SoapException ex)
          {
            //Console.WriteLine(ex.Message + "." + ex.Detail.InnerText);
            //MessageBox.Show(ex.Message + "." + ex.Detail.InnerText);
            return ex.Message.ToString() + "." + ex.Detail.InnerText.ToString();
          }

          catch (Exception ex)
          {
            //throw new Exception(ex.Message);
            return ex.Message.ToString();
          }
    }

    private void Reassign(Guid userId, Guid opeId) {

    assignee.Type = SecurityPrincipalType.User;
    assignee.PrincipalId = userId;
    TargetOwnedAccount target = new TargetOwnedAccount();
    target.EntityId = opeId;
    AssignRequest assign = new AssignRequest();
    assign.Assignee = assignee;
    assign.Target = target;
    AssignResponse assignResponse = (AssignResponse)CrmService.Execute(assign);

    }


    Julio

     

    jueves, 24 de marzo de 2011 22:40
  • Carlos, con respecto a tus dudas te comento lo siguiente:

    1. Con respecto a la línea servicio.Update(cuentas) lo deje por si tu deseas actualizar otros campos, en el caso que sólo desees reasignar podrías deshabilitarla.

    2. El cambio de propietario en entidades hijas dependerá del tipo de relación que exista entre ellas. Si son las que vienen por defecto en Dynamics CRM (como la relación entre empresas y personas) debe funcionar.

    Prueba y nos comentas que al te fue.


    Julio
    viernes, 25 de marzo de 2011 14:12

Todas las respuestas

  • Estimado,

    Para el trabajar con propietarios no funciona las actualizaciones, tu debes trabajar con asignaciones.

    Puedes probar lo siguiente:

     public static string CambiarPropietarioCuentas(string idcuenta, string idPropietario)
     {
       try
          {
            CrmAuthenticationToken token = new CrmAuthenticationToken();
            token.AuthenticationType = 0;
            token.OrganizationName = "xxxxxx";

            CrmService servicio = new CrmService();
            servicio.Url = "http://xxxxx:5555/MSCrmServices/2007/CrmService.asmx";
            servicio.CrmAuthenticationTokenValue = token;
            servicio.Credentials = System.Net.CredentialCache.DefaultCredentials;

            account cuentas = new account();

            cuentas.accountid = new Key();
            cuentas.accountid.Value = new Guid(idcuenta);

            //cuentas.ownerid = new Owner();
            //cuentas.ownerid.type = EntityName.systemuser.ToString();
            //cuentas.ownerid.Value = new Guid(idPropietario);

            servicio.Update(cuentas);   

            Reassign(

    new Guid(idPropietario), new Guid(idcuenta));

            return "";
          }
          catch (System.Web.Services.Protocols.SoapException ex)
          {
            //Console.WriteLine(ex.Message + "." + ex.Detail.InnerText);
            //MessageBox.Show(ex.Message + "." + ex.Detail.InnerText);
            return ex.Message.ToString() + "." + ex.Detail.InnerText.ToString();
          }

          catch (Exception ex)
          {
            //throw new Exception(ex.Message);
            return ex.Message.ToString();
          }
    }

    private void Reassign(Guid userId, Guid opeId) {

    assignee.Type = SecurityPrincipalType.User;
    assignee.PrincipalId = userId;
    TargetOwnedAccount target = new TargetOwnedAccount();
    target.EntityId = opeId;
    AssignRequest assign = new AssignRequest();
    assign.Assignee = assignee;
    assign.Target = target;
    AssignResponse assignResponse = (AssignResponse)CrmService.Execute(assign);

    }


    Julio

     

    jueves, 24 de marzo de 2011 22:40
  • Estimado, muchas gracias por tu respuesta, solo me quedan dos dudas

    1.- la linea servicio.Update(cuentas) tambien habria que deshabilitarla? o esta bien que este habilitada antes del Reassign?

    2.- cuando se realice el cambio de propietario tambien realizara el cambio de propietario de las otras entidades hijas, como contactos, productos asociados, etc..?

     

     

    saludos y muchas gracias

    viernes, 25 de marzo de 2011 13:20
  • Carlos, con respecto a tus dudas te comento lo siguiente:

    1. Con respecto a la línea servicio.Update(cuentas) lo deje por si tu deseas actualizar otros campos, en el caso que sólo desees reasignar podrías deshabilitarla.

    2. El cambio de propietario en entidades hijas dependerá del tipo de relación que exista entre ellas. Si son las que vienen por defecto en Dynamics CRM (como la relación entre empresas y personas) debe funcionar.

    Prueba y nos comentas que al te fue.


    Julio
    viernes, 25 de marzo de 2011 14:12
  • Muchas gracias por tu pronta respuesta, efectivamente funciono muy bien.

     

    Saludos

    viernes, 25 de marzo de 2011 14:58