CRM Share操作及Plugin

Share

新共享给某个用户

 // Grant the team read/write access to the lead.
            var teamReference = new EntityReference(Team.EntityLogicalName, _teamId);
            var grantAccessRequest = new GrantAccessRequest
            {
                PrincipalAccess = new PrincipalAccess
                {
                    AccessMask = AccessRights.ReadAccess | AccessRights.WriteAccess,//共享的权限
                    Principal = teamReference//共享给某个用户
                },
                Target = leadReference//要共享的对象
            };

            organizationService.Execute(grantAccessRequest);

修改共享

 // Grant the first user delete access to the lead.
            var modifyUser1AccessReq = new ModifyAccessRequest
            {
                PrincipalAccess = new PrincipalAccess
                {
                    AccessMask = AccessRights.DeleteAccess,
                    Principal = systemUser1Ref
                },
                Target = leadReference
            };

取消所有共享

// Revoke access to the lead for the second user.
            var revokeUser2AccessReq = new RevokeAccessRequest
            {
                Revokee = systemUser2Ref,
                Target = leadReference
            };

            organizationService.Execute(revokeUser2AccessReq);

对应的Plugin

class testSharePlugin : IPlugin
    {
        IOrganizationService organizationService;
        public void Execute(IServiceProvider serviceProvider)
        {
            var context = (IPluginExecutionContext)serviceProvider.GetService(typeof(IPluginExecutionContext));
            var factory = (IOrganizationServiceFactory)serviceProvider.GetService(typeof(IOrganizationServiceFactory));
            Guid userid = context.UserId;
            organizationService = factory.CreateOrganizationService(userid);

            var userName = QueryFullName("systemuser", userid);
            //GrantAccessRequest
            {
                var principalAccess = context.InputParameters["PrincipalAccess"] as PrincipalAccess;
                var power = principalAccess.AccessMask;
                var awardedER = principalAccess.Principal;
            }
            //ModifyAccessRequest
            {
                var modifyAccessRequest = context.InputParameters["ModifyAccessRequest"] as PrincipalAccess;
                var power = modifyAccessRequest.AccessMask;
                var awardedER = modifyAccessRequest.Principal;
            }
            //RevokeAccessRequest
            {
                var awardedER = context.InputParameters["Revokee"] as EntityReference;
            }

            //var awardedName = QueryFullName("systemuser", awardedER.Id);

            var entity = context.InputParameters["Target"] as EntityReference;

            var entityName = QueryFullName(entity.LogicalName, entity.Id);


            throw new InvalidPluginExecutionException(string.Format("Test : ({0},{1}) Share to ({2}, {3}).\nEntity is ({4}, {5}.\nPower is {6})", userName, userid, awardedName, awardedER.Id, entityName, entity.Id, power));
        }

        public string QueryFullName(string logicalName, Guid id)
        {
            var entity = organizationService.Retrieve(logicalName, id, new ColumnSet(true));
            return entity.GetAttributeValue<string>("fullname");
        }
    }

猜你喜欢

转载自blog.csdn.net/qq_41863100/article/details/103139071
CRM