none
es posible compartir registros de forma masiva via .net c#? RRS feed

  • Pregunta

  • Hola estimados, tengo la siguiente duda, tengo un listado de usuarios en excel y cuentas, a las cuales deseo compartir con ciertos atributos, tales como read, write, delete, etc.., mi pregunta es esto se puede hacer mediante un .net codigo c#? si es asi alguien tiene alguna referencia para poder mirar que instrucciones usar? y lo segundo cuando comparto datos de una cuenta tambien se compartiran los registros de contactos de esa cuenta? es similar al assign?

     

     

    saludos y muchas gracias por su ayuda!!

     

    martes, 31 de mayo de 2011 16:36

Respuestas

  • Hola Carlos,

    Te comento que sí es posible realizar lo que tú deseas.

    Te comparto los métodos que se emplean (los mismos que lo pudieras revisar en el SDK)

    Para compartir los registros sería algo similar a esto:

    private void ShareRecord(Guid recordId, Guid asistId)
        {
            SecurityPrincipal principal = new SecurityPrincipal();
            principal.Type = SecurityPrincipalType.User;
            principal.PrincipalId = asistId;
            PrincipalAccess principalAccess = new PrincipalAccess();
            principalAccess.Principal = principal;
            principalAccess.AccessMask |= AccessRights.ReadAccess;
            principalAccess.AccessMask |= AccessRights.WriteAccess;
            TargetOwned[Entidad] target = new TargetOwned[Entidad]();
            target.EntityId = recordId;
            GrantAccessRequest grant = new GrantAccessRequest();
            grant.PrincipalAccess = principalAccess;
            grant.Target = target;
            GrantAccessResponse granted = (GrantAccessResponse)objCrmService.Execute(grant);
        }

    recordId: El GUID del registro a compartir
    asistId : EL GUID del usuario al que deseas compartir
    TargetOwned[Entidad]: La entidad destino que deseas compartir. Por ejemplo si fuera Cuentas: TargetOwnedAccount

    Otro punto a considerar es que si vas a agregar más de un permiso se debe emplear este símbolo "|="
    Ejemplo:
            principalAccess.AccessMask |= AccessRights.ReadAccess;
            principalAccess.AccessMask |= AccessRights.WriteAccess;

    En caso quisieras descompartir sería algo similar a esto:

    private void UnShareRecord(Guid recordId, Guid asistId)
        {
            SecurityPrincipal principal = new SecurityPrincipal();
            principal.Type = SecurityPrincipalType.User;
            principal.PrincipalId = asistId;
            TargetOwned[Entidad] target = new TargetOwned[Entidad]();
            target.EntityId = recordId;
            RevokeAccessRequest revoke = new RevokeAccessRequest();
            revoke.Revokee = principal;
            revoke.Target = target;
            RevokeAccessResponse revoked = (RevokeAccessResponse)objCrmService.Execute(revoke);
        }
     


    Julio
    martes, 31 de mayo de 2011 17:17

Todas las respuestas

  • Hola Carlos,

    Te comento que sí es posible realizar lo que tú deseas.

    Te comparto los métodos que se emplean (los mismos que lo pudieras revisar en el SDK)

    Para compartir los registros sería algo similar a esto:

    private void ShareRecord(Guid recordId, Guid asistId)
        {
            SecurityPrincipal principal = new SecurityPrincipal();
            principal.Type = SecurityPrincipalType.User;
            principal.PrincipalId = asistId;
            PrincipalAccess principalAccess = new PrincipalAccess();
            principalAccess.Principal = principal;
            principalAccess.AccessMask |= AccessRights.ReadAccess;
            principalAccess.AccessMask |= AccessRights.WriteAccess;
            TargetOwned[Entidad] target = new TargetOwned[Entidad]();
            target.EntityId = recordId;
            GrantAccessRequest grant = new GrantAccessRequest();
            grant.PrincipalAccess = principalAccess;
            grant.Target = target;
            GrantAccessResponse granted = (GrantAccessResponse)objCrmService.Execute(grant);
        }

    recordId: El GUID del registro a compartir
    asistId : EL GUID del usuario al que deseas compartir
    TargetOwned[Entidad]: La entidad destino que deseas compartir. Por ejemplo si fuera Cuentas: TargetOwnedAccount

    Otro punto a considerar es que si vas a agregar más de un permiso se debe emplear este símbolo "|="
    Ejemplo:
            principalAccess.AccessMask |= AccessRights.ReadAccess;
            principalAccess.AccessMask |= AccessRights.WriteAccess;

    En caso quisieras descompartir sería algo similar a esto:

    private void UnShareRecord(Guid recordId, Guid asistId)
        {
            SecurityPrincipal principal = new SecurityPrincipal();
            principal.Type = SecurityPrincipalType.User;
            principal.PrincipalId = asistId;
            TargetOwned[Entidad] target = new TargetOwned[Entidad]();
            target.EntityId = recordId;
            RevokeAccessRequest revoke = new RevokeAccessRequest();
            revoke.Revokee = principal;
            revoke.Target = target;
            RevokeAccessResponse revoked = (RevokeAccessResponse)objCrmService.Execute(revoke);
        }
     


    Julio
    martes, 31 de mayo de 2011 17:17
  • Muchas Gracias es justamente lo que necesitaba saber, lo que aun no se si al compartir un registro de cuenta los datos que cuelgan de ella por ejemplo contactos tambien se comparten por defecto? es asi o no?

     

    saludos y gracias

    martes, 31 de mayo de 2011 18:43
  • No, también es necesario compartir los registros asociados.
    Julio
    martes, 31 de mayo de 2011 18:53
  • funciono de maravilla!! tengo otra pregunta pero abrire otro link

     

    saludos

     

     

    miércoles, 1 de junio de 2011 13:38
  • Me alegro que te haya servido, pero no olvides marcar como respuesta correcta. De esta manera muchas más personas te apoyarán a resolver tus dudas.
    Julio
    miércoles, 1 de junio de 2011 14:16