示例#1
0
        private void AddUsersToTeam(Guid idTeam, IEnumerable <Guid> userList)
        {
            if (userList == null || !userList.Any())
            {
                return;
            }

            var teamUsers = GetTeamUsers(idTeam, userList.ToArray());

            var hashSet = new HashSet <Guid>(teamUsers);

            var usersToAdd = userList.Where(r => !hashSet.Contains(r)).ToArray();

            if (!usersToAdd.Any())
            {
                return;
            }

            var request = new AddMembersTeamRequest()
            {
                TeamId    = idTeam,
                MemberIds = usersToAdd,
            };

            var response = (AddMembersTeamResponse)_service.Execute(request);
        }
示例#2
0
        public void When_a_non_existing_member_is_added_to_an_existing_list_exception_is_thrown()
        {
            var ctx     = new XrmFakedContext();
            var service = ctx.GetOrganizationService();

            var team = new Team
            {
                Id   = Guid.NewGuid(),
                Name = "Some team"
            };

            ctx.Initialize(new List <Entity>
            {
                team
            });

            AddMembersTeamRequest addMembersTeamRequest = new AddMembersTeamRequest
            {
                MemberIds = new[]
                {
                    Guid.NewGuid()
                },
                TeamId = team.ToEntityReference().Id
            };

            Assert.Throws <FaultException <OrganizationServiceFault> >(() => service.Execute(addMembersTeamRequest));
        }
示例#3
0
        private void AddUserFromTeams(Guid idUser, IEnumerable <Guid> teamList)
        {
            if (teamList == null || !teamList.Any())
            {
                return;
            }

            var userTeams = GetUserTeams(idUser, teamList.ToArray());

            var hashSet = new HashSet <Guid>(userTeams);

            var teamsToAdd = teamList.Where(r => !hashSet.Contains(r)).ToArray();

            if (!teamsToAdd.Any())
            {
                return;
            }

            var userArray = new[] { idUser };

            foreach (var idTeam in teamsToAdd)
            {
                var request = new AddMembersTeamRequest()
                {
                    TeamId    = idTeam,
                    MemberIds = userArray,
                };

                var response = (AddMembersTeamResponse)_service.Execute(request);
            }
        }
        public static void AddMembersToTeam(Guid teamId, Guid[] membersId, IOrganizationService service)
        {
            AddMembersTeamRequest addRequest = new AddMembersTeamRequest();

            addRequest.TeamId    = teamId;
            addRequest.MemberIds = membersId;
            service.Execute(addRequest);
        }
示例#5
0
        public void GetAllSecurityteam()
        {
            IOrganizationService service = CRMHelper.ConnectToMSCRM();

            /*
             *
             * Select AccountId, AccountName
             * From Account
             * Where AccountStatus= 'Customer'
             * Order by AccountName Asec
             * */

            string          teamName = "FinanceTeam";
            QueryExpression query    = new QueryExpression("systemuser");

            query.ColumnSet = new ColumnSet(new string[] { "fullname", "domainname" });
            LinkEntity TeamOwnerShipLinkEntity = new LinkEntity("systemusuer", "teammembership", "systemuserid", "systemuserid", JoinOperator.Inner);
            LinkEntity TeamLinkEnitty          = new LinkEntity("teammembership", "team", "teamid", "teamid", JoinOperator.Inner);

            TeamLinkEnitty.LinkCriteria.AddCondition("name", ConditionOperator.Equal, teamName);
            TeamOwnerShipLinkEntity.LinkEntities.Add(TeamLinkEnitty);
            query.LinkEntities.Add(TeamOwnerShipLinkEntity);


            EntityCollection accountEntityList = service.RetrieveMultiple(query);



            // Create the AddMembersTeamRequest object.
            AddMembersTeamRequest addRequest = new AddMembersTeamRequest();

            // Set the AddMembersTeamRequest TeamID property to the object ID of
            // an existing team.
            addRequest.TeamId = new Guid("A9DE5707-7D0D-E811-A958-000D3AF083FD");

            // Set the AddMembersTeamRequest MemberIds property to an
            // array of GUIDs that contains the object IDs of one or more system users.
            Guid[] memberIds = new[] { new Guid("C68F0F3F-680D-E811-A95B-000D3AF07CE4") };
            addRequest.MemberIds = memberIds;

            // Execute the request.
            service.Execute(addRequest);

            RemoveMembersTeamRequest removeRequest = new RemoveMembersTeamRequest();

            removeRequest.TeamId = new Guid("A9DE5707-7D0D-E811-A958-000D3AF083FD");

            // Set the AddMembersTeamRequest MemberIds property to an
            // array of GUIDs that contains the object IDs of one or more system users.

            removeRequest.MemberIds = memberIds;

            // Execute the request.
            service.Execute(removeRequest);


            //service.Associate("team", new Guid("A9DE5707-7D0D-E811-A958-000D3AF083FD"), new Relationship("teamroles_association"),)
        }
        private void AddUserToTeam(Entity user, Guid teamId)
        {
            var addUserRequest = new AddMembersTeamRequest();

            addUserRequest.MemberIds = new[] { user.Id };
            addUserRequest.TeamId    = teamId;

            _client.Execute(addUserRequest);
        }
 public void AddToTeam(Guid userId, Guid teamId)
 {
     if (!IsInTeam(userId, teamId))
     {
         var request = new AddMembersTeamRequest();
         request.TeamId    = teamId;
         request.MemberIds = new[] { userId };
         XrmService.Execute(request);
     }
 }
示例#8
0
        /// <summary>
        /// Add users to a team
        /// </summary>
        /// <param name="team"></param>
        /// <param name="users"></param>
        public void AddUsersToTeam(EntityReference team, params EntityReference[] users)
        {
            var req = new AddMembersTeamRequest
            {
                TeamId    = team.Id,
                MemberIds = users.Select(x => x.Id).ToArray()
            };

            Core.Execute(req, AdminUser);
        }
示例#9
0
        public static void AddTeamMember(Guid teamId, Guid userId, IOrganizationService service)
        {
            var addToTeamRequest = new AddMembersTeamRequest
            {
                TeamId    = teamId,
                MemberIds = new[] { userId }
            };

            service.Execute(addToTeamRequest);
        }
示例#10
0
        public void AddUsersToTeam(EntityReference teamRef, params EntityReference[] userRefs)
        {
            var request = new AddMembersTeamRequest
            {
                MemberIds = userRefs.Select(u => u.Id).ToArray(),
                TeamId    = teamRef.Id
            };

            AdminOrganizationService.Execute(request);
        }
示例#11
0
        /// <summary>
        /// Executes the workflow activity.
        /// </summary>
        /// <param name="executionContext">The execution context.</param>
        protected override void Execute(CodeActivityContext executionContext)
        {
            // Create the tracing service
            ITracingService tracingService = executionContext.GetExtension <ITracingService>();

            if (tracingService == null)
            {
                throw new InvalidPluginExecutionException("Failed to retrieve tracing service.");
            }

            tracingService.Trace("Entered AddMemberTeamActivity.Execute(), Activity Instance Id: {0}, Workflow Instance Id: {1}",
                                 executionContext.ActivityInstanceId,
                                 executionContext.WorkflowInstanceId);

            // Create the context
            IWorkflowContext context = executionContext.GetExtension <IWorkflowContext>();

            if (context == null)
            {
                throw new InvalidPluginExecutionException("Failed to retrieve workflow context.");
            }

            tracingService.Trace("AddMemberTeamActivity.Execute(), Correlation Id: {0}, Initiating User: {1}",
                                 context.CorrelationId,
                                 context.InitiatingUserId);

            IOrganizationServiceFactory serviceFactory = executionContext.GetExtension <IOrganizationServiceFactory>();
            IOrganizationService        service        = serviceFactory.CreateOrganizationService(context.UserId);

            try
            {
                EntityReference user = this.User.Get(executionContext);
                EntityReference team = this.Team.Get(executionContext);

                if (!IsMemberInTeam(service, team.Id, user.Id))
                {
                    OrganizationRequest request = new AddMembersTeamRequest {
                        MemberIds = new Guid[] { user.Id }, TeamId = team.Id
                    };

                    var response = service.Execute(request) as AddMembersTeamResponse;
                }
            }
            catch (FaultException <OrganizationServiceFault> e)
            {
                tracingService.Trace("Exception: {0}", e.ToString());

                // Handle the exception.
                throw;
            }

            tracingService.Trace("Exiting AddMemberTeamActivity.Execute(), Correlation Id: {0}", context.CorrelationId);
        }
示例#12
0
        /// <summary>
        /// Add bulk <c>System User</c> data into to the <c>Team</c>.
        /// <para>
        /// For more information look at https://msdn.microsoft.com/en-us/library/microsoft.crm.sdk.messages.addmembersteamrequest(v=crm.8).aspx
        /// </para>
        /// </summary>
        /// <param name="teamId"><c>Team</c> Id</param>
        /// <param name="systemuserIdList"><c>System User</c> Id list</param>
        /// <returns><see cref="AddMembersTeamResponse"/></returns>
        public AddMembersTeamResponse AddMember(Guid teamId, List <Guid> systemuserIdList)
        {
            ExceptionThrow.IfGuidEmpty(teamId, "teamId");
            ExceptionThrow.IfNullOrEmpty(systemuserIdList.ToArray(), "systemuserIdList");

            AddMembersTeamRequest request = new AddMembersTeamRequest()
            {
                TeamId    = teamId,
                MemberIds = systemuserIdList.ToArray()
            };

            return((AddMembersTeamResponse)this.OrganizationService.Execute(request));
        }
示例#13
0
        public void When_a_request_is_called_with_a_null_memberid_parameter_exception_is_thrown()
        {
            var ctx     = new XrmFakedContext();
            var service = ctx.GetOrganizationService();

            AddMembersTeamRequest addMembersTeamRequest = new AddMembersTeamRequest
            {
                MemberIds = null,
                TeamId    = Guid.NewGuid()
            };

            // Execute the request.
            Assert.Throws <FaultException <OrganizationServiceFault> >(() => service.Execute(addMembersTeamRequest));
        }
        public async Task ExecuteAsync_AddMembersTeamRequest_When_OneUsersAdded_Then_Ok()
        {
            var unitTestsUserId = CrmClient.GetMyCrmUserId();

            var userRef = new EntityReference(SystemUserEntityName, unitTestsUserId);
            var teamId  = new Guid("a640a425-a463-ea11-aae8-005056b42cd8");

            var action = new AddMembersTeamRequest(teamId)
            {
                Members = { userRef }
            };

            await CrmClient.ExecuteAsync(action);
        }
示例#15
0
        public void AddUsersToTeam(Microsoft.Xrm.Sdk.EntityReference teamRef, params Microsoft.Xrm.Sdk.EntityReference[] userRefs)
        {
            if (userRefs.Length == 0)
            {
                return;
            }

            var request = new AddMembersTeamRequest
            {
                MemberIds = userRefs.Select(u => u.Id).ToArray(),
                TeamId    = teamRef.Id
            };

            AdminOrganizationService.Execute(request);
        }
示例#16
0
        private static void AddUserToTeam(IOrganizationService service, Entity team, Guid userId)
        {
            AddMembersTeamRequest addRequest = new AddMembersTeamRequest();

            // Set the AddMembersTeamRequest TeamID property to the object ID of
            // an existing team.
            addRequest.TeamId = team.Id;

            // Set the AddMembersTeamRequest MemberIds property to an
            // array of GUIDs that contains the object IDs of one or more system users.
            addRequest.MemberIds = new Guid[] { userId };

            // Execute the request.
            service.Execute(addRequest);
        }
        private void AddMember(LocalPluginContext localContext)
        {
            var orgService = localContext.OrganizationService;

            var retrievedSystemUser = orgService.Retrieve("systemuser", localContext.PluginExecutionContext.PrimaryEntityId, new ColumnSet("businessunitid"));

            var team = GetBusinessUnitDefaultTeam(orgService, retrievedSystemUser);

            var request = new AddMembersTeamRequest
            {
                TeamId    = team.Id,
                MemberIds = new[] { retrievedSystemUser.Id }
            };

            orgService.Execute(request);
        }
示例#18
0
        private void AddMembersToTeam(Guid?TeamId, EntityReferenceCollection Users, IOrganizationService service)
        {
            Guid[] UserIds;
            //get user
            AddMembersTeamRequest addRequest = new AddMembersTeamRequest();

            if (TeamId.HasValue)
            {
                addRequest.TeamId    = TeamId.Value;
                UserIds              = Users.Select(x => x.Id).ToArray();
                addRequest.MemberIds = UserIds;
                tracingService.Trace("before updating ");
                service.Execute(addRequest);
                tracingService.Trace("after updating ");
            }
        }
        public async Task ExecuteAsync_AddMembersTeamRequest_When_MultipleUsersAdded_Then_Ok()
        {
            var unitTestsUserId = new Guid("{9A8A23B4-07DB-EA11-AAF0-005056B42CD8}");
            var otherUserId     = new Guid("a988c6a2-5236-ea11-aadc-005056b42cd8");
            var testTeamId      = new Guid("a640a425-a463-ea11-aae8-005056b42cd8");

            var userRef  = new EntityReference(SystemUserEntityName, unitTestsUserId);
            var userRef1 = new EntityReference(SystemUserEntityName, otherUserId);
            var teamId   = testTeamId;

            var action = new AddMembersTeamRequest(teamId)
            {
                Members = { userRef, userRef1 }
            };

            var resp = await CrmClient.ExecuteAsync(action);
        }
示例#20
0
        public void When_a_member_is_added_to_a_non_existing_team_exception_is_thrown()
        {
            var ctx     = new XrmFakedContext();
            var service = ctx.GetOrganizationService();

            AddMembersTeamRequest addMembersTeamRequest = new AddMembersTeamRequest
            {
                MemberIds = new[]
                {
                    Guid.NewGuid()
                },
                TeamId = Guid.NewGuid()
            };

            // Execute the request.
            Assert.Throws <FaultException <OrganizationServiceFault> >(() => service.Execute(addMembersTeamRequest));
        }
示例#21
0
        /// <summary>
        /// If there is a separate user connection for the XrmService connection used for scripting limited security
        /// sets that connections user as a member of the teamId and removes them from any other team
        /// </summary>
        /// <param name="teamId">id of the team to set the test script user in</param>
        public void SetTestUserAsTeamMember(Guid teamId)
        {
            var testUserId  = XrmService.WhoAmI();
            var adminUserId = XrmServiceAdmin.WhoAmI();

            //if the same user for both the admin and standard connection then don't bother
            if (testUserId == adminUserId)
            {
                return;
            }

            //get the non-default teams th4e test user a member of
            var teamQuery = XrmServiceAdmin.BuildQuery(Entities.team,
                                                       fields: new string[0],
                                                       conditions: new[] { new ConditionExpression(Fields.team_.isdefault, ConditionOperator.NotEqual, true) });
            var memberJoin = teamQuery.AddLink(Relationships.team_.teammembership_association.EntityName, Fields.team_.teamid, Fields.team_.teamid);

            memberJoin.LinkCriteria.AddCondition(new ConditionExpression(Fields.systemuser_.systemuserid, ConditionOperator.Equal, testUserId));
            var teamsMemberships = XrmServiceAdmin.RetrieveAll(teamQuery);

            //if they are already only a member of the team then return
            if (teamsMemberships.Count() == 1 && teamsMemberships.First().Id == teamId)
            {
                return;
            }

            //remove them from the teams they are a member of
            foreach (var team in teamsMemberships)
            {
                if (!team.GetBoolean(Fields.team_.isdefault))
                {
                    var removeRequest = new RemoveMembersTeamRequest();
                    removeRequest.TeamId    = team.Id;
                    removeRequest.MemberIds = new[] { testUserId };
                    XrmService.Execute(removeRequest);
                }
            }

            //add them to the team
            var addRequest = new AddMembersTeamRequest();

            addRequest.TeamId    = teamId;
            addRequest.MemberIds = new[] { testUserId };
            XrmService.Execute(addRequest);
        }
        protected override void Execute(CodeActivityContext executionContext)
        {
            #region "Load CRM Service from context"

            Common objCommon = new Common(executionContext);
            objCommon.tracingService.Trace("Load CRM Service from context --- OK");
            #endregion

            #region "Read Parameters"
            EntityReference userReference = this.User.Get(executionContext);
            EntityReference teamReference = this.Team.Get(executionContext);

            objCommon.tracingService.Trace(String.Format("UserID: {0} - TeamID: {1} ", userReference.Id.ToString(), teamReference.Id.ToString()));
            #endregion

            AddMembersTeamRequest req = new AddMembersTeamRequest();
            req.TeamId    = teamReference.Id;
            req.MemberIds = new[] { userReference.Id };
            AddMembersTeamResponse res = (AddMembersTeamResponse)objCommon.service.Execute(req);
        }
示例#23
0
        public void When_a_member_is_added_to_an_existing_list_member_is_added_successfully()
        {
            var ctx     = new XrmFakedContext();
            var service = ctx.GetOrganizationService();

            var team = new Team
            {
                Id   = Guid.NewGuid(),
                Name = "Some team"
            };

            var systemuser = new SystemUser
            {
                Id = Guid.NewGuid()
            };

            ctx.Initialize(new List <Entity>
            {
                team,
                systemuser
            });

            AddMembersTeamRequest addMembersTeamRequest = new AddMembersTeamRequest
            {
                MemberIds = new[]
                {
                    systemuser.Id
                },
                TeamId = team.ToEntityReference().Id
            };

            service.Execute(addMembersTeamRequest);

            using (var context = new XrmServiceContext(service))
            {
                var member = context.CreateQuery <TeamMembership>().FirstOrDefault(tm => tm.TeamId == team.Id && tm.SystemUserId == systemuser.Id);

                Assert.NotNull(member);
            }
        }
        /// <summary>
        /// Creates any entity records that this sample requires.
        /// </summary>
        public void CreateRequiredRecords()
        {
            #region create users

            Console.WriteLine("  Creating users");
            var ldapPath = "";
            _users =
                SystemUserProvider.RetrieveSalespersons(_serviceProxy, ref ldapPath);
            _users.Add(SystemUserProvider.RetrieveSystemUser(
                           "dparker", "Darren", "Parker", "Salesperson",
                           _serviceProxy, ref ldapPath));

            #endregion

            #region fetch root business unit

            // Retrieve the root business unit to use for creating the team for the
            // sample.
            var businessUnitQuery = new QueryExpression
            {
                EntityName = BusinessUnit.EntityLogicalName,
                ColumnSet  = new ColumnSet("businessunitid"),
                Criteria   = new FilterExpression()
            };

            businessUnitQuery.Criteria.AddCondition("parentbusinessunitid",
                                                    ConditionOperator.Null);
            var businessUnitResult = _serviceProxy.RetrieveMultiple(businessUnitQuery);
            _rootBusinessUnit = businessUnitResult.Entities[0].ToEntity <BusinessUnit>();

            #endregion

            #region create new business unit

            Console.WriteLine("  Creating new business unit");
            _businessUnit = new BusinessUnit()
            {
                Name = "A Sample Business Unit",
                ParentBusinessUnitId = _rootBusinessUnit.ToEntityReference()
            };
            _businessUnit.Id = _serviceProxy.Create(_businessUnit);

            #endregion

            #region create team

            Console.WriteLine("  Creating a user team");
            _team = new Team
            {
                AdministratorId =
                    new EntityReference(SystemUser.EntityLogicalName, _users[0]),
                Name           = "Sample team",
                BusinessUnitId = _rootBusinessUnit.ToEntityReference()
            };
            _team.Id = _serviceProxy.Create(_team);

            var salespersonRole = (from role in _context.RoleSet
                                   where role.Name == "Salesperson" &&
                                   role.BusinessUnitId.Id == _rootBusinessUnit.Id
                                   select role).First();

            // assign role to the team
            _serviceProxy.Associate(
                Team.EntityLogicalName,
                _team.Id,
                new Relationship("teamroles_association"),
                new EntityReferenceCollection()
            {
                salespersonRole.ToEntityReference()
            }
                );

            // wait for the async job to finish
            for (int i = 1; i <= 30; i++)
            {
                Console.WriteLine("  Checking to see if the async job has finished {0}/30", i);
                var teamPrivileges = (RetrieveTeamPrivilegesResponse)
                                     _serviceProxy.Execute(new RetrieveTeamPrivilegesRequest
                {
                    TeamId = _team.Id
                });
                if (teamPrivileges.RolePrivileges.Any((rp) =>
                                                      rp.PrivilegeId ==
                                                      new Guid("A8ECAC53-09E8-4A13-B598-8D8C87BC3D33"))) // prvReadLead
                {
                    break;
                }
                System.Threading.Thread.Sleep(1000);
            }
            #endregion

            #region add users to team

            Console.WriteLine("  Adding users to the team");
            AddMembersTeamRequest addMembers = new AddMembersTeamRequest()
            {
                TeamId    = _team.Id,
                MemberIds = new Guid[] { _users[0], _users[1] }
            };
            _serviceProxy.Execute(addMembers);

            #endregion

            #region create leads

            Console.WriteLine("  Creating leads");
            _leads[0] = new Lead
            {
                CompanyName = "A. Datum Corporation",
                FirstName   = "Joe",
                LastName    = "Andreshak",
            };
            _leads[0].Id = _serviceProxy.Create(_leads[0]);

            _leads[1] = new Lead
            {
                CompanyName = "Wingtip Toys",
                FirstName   = "Diogo",
                LastName    = "Andrade"
            };
            _leads[1].Id = _serviceProxy.Create(_leads[1]);

            _leads[2] = new Lead
            {
                CompanyName = "The Phone Company",
                FirstName   = "Ronaldo",
                LastName    = "Smith Jr."
            };
            _leads[2].Id = _serviceProxy.Create(_leads[2]);

            _leads[3] = new Lead
            {
                CompanyName = "Tailspin Toys",
                FirstName   = "Andrew",
                LastName    = "Sullivan",
            };
            _leads[3].Id = _serviceProxy.Create(_leads[3]);

            #endregion

            #region assign leads

            Console.WriteLine("  Assigning leads to users and teams");
            _serviceProxy.Execute(new AssignRequest()
            {
                Assignee = new EntityReference(SystemUser.EntityLogicalName, _users[0]),
                Target   = _leads[0].ToEntityReference()
            });

            _serviceProxy.Execute(new AssignRequest()
            {
                Assignee = new EntityReference(SystemUser.EntityLogicalName, _users[1]),
                Target   = _leads[1].ToEntityReference()
            });

            _serviceProxy.Execute(new AssignRequest()
            {
                Assignee = new EntityReference(SystemUser.EntityLogicalName, _users[2]),
                Target   = _leads[2].ToEntityReference()
            });

            // give the team access to the record so that it can be assigned to it
            _serviceProxy.Execute(new GrantAccessRequest()
            {
                Target          = _leads[3].ToEntityReference(),
                PrincipalAccess = new PrincipalAccess()
                {
                    AccessMask = AccessRights.ReadAccess | AccessRights.WriteAccess,
                    Principal  = _team.ToEntityReference()
                }
            });

            // assign the lead to the team
            _serviceProxy.Execute(new AssignRequest()
            {
                Assignee = _team.ToEntityReference(),
                Target   = _leads[3].ToEntityReference()
            });

            #endregion
        }
示例#25
0
        /// <summary>
        /// Creates any entity records that this sample requires.
        /// </summary>
        public void CreateRequiredRecords()
        {
            // Create a unique identifier for this sample for preventing name conflicts.
            var sampleIdentifier = Guid.NewGuid();

            // Retrieve/create the system users to use for the sample.
            var ldapPath = String.Empty;
            _systemUserIds = SystemUserProvider.RetrieveDelegates(
                _serviceProxy, ref ldapPath);

            // Retrieve the root business unit to use for creating the team for the
            // sample.
            var businessUnitQuery = new QueryExpression
            {
                EntityName = BusinessUnit.EntityLogicalName,
                ColumnSet = new ColumnSet("businessunitid"),
                Criteria = new FilterExpression()
            };

            businessUnitQuery.Criteria.AddCondition("parentbusinessunitid",
                ConditionOperator.Null);
            var businessUnitResult = _serviceProxy.RetrieveMultiple(businessUnitQuery);
            var businessUnit = businessUnitResult.Entities[0].ToEntity<BusinessUnit>();

            // Get the GUID of the current user.
            var who = new WhoAmIRequest();
            var whoResponse = (WhoAmIResponse)_serviceProxy.Execute(who);
            _currentUserId = whoResponse.UserId;

            // Create a team for use in the sample.
            var team = new Team
            {
                AdministratorId = new EntityReference(
                    "systemuser", _currentUserId),
                Name = String.Format("User Access Sample Team {0}", sampleIdentifier),
                BusinessUnitId = businessUnit.ToEntityReference()
            };
            _teamId = _serviceProxy.Create(team);

            // Add the second user to the newly created team.
            var addToTeamRequest = new AddMembersTeamRequest
            {
                TeamId = _teamId,
                MemberIds = new[] { _systemUserIds[1] }
            };
            _serviceProxy.Execute(addToTeamRequest);

            // Create a lead for use in the sample.
            var lead = new Lead
            {
                CompanyName = "User Access Sample Company",
                FirstName = "Sample",
                LastName = "Lead",
                Subject = "User Access Sample Lead",
            };
            _leadId = _serviceProxy.Create(lead);

            // Create a task to associate to the lead.
            var leadReference = new EntityReference(Lead.EntityLogicalName, _leadId);
            var task = new Task
            {
                Subject = "User Access Sample Task",
                RegardingObjectId = leadReference
            };
            _taskId = _serviceProxy.Create(task);

            // Create a letter to associate to the lead.
            var letter = new Letter
            {
                Subject = "User Access Sample Letter",
                RegardingObjectId = leadReference
            };
            _serviceProxy.Create(letter);
        }
示例#26
0
        public void Run(ServerConnection.Configuration serverConfig, bool promptForDelete)
        {
            try
            {
                // Connect to the Organization service.
                // The using statement assures that the service proxy will be properly disposed.
                using (_serviceProxy = new OrganizationServiceProxy(serverConfig.OrganizationUri, serverConfig.HomeRealmUri,
                                                                    serverConfig.Credentials, serverConfig.DeviceCredentials))
                {
                    String ldapPath = String.Empty;
                    Guid   businessUnitId;

                    // This statement is required to enable early-bound type support.
                    _serviceProxy.EnableProxyTypes();

                    // Call this method to create any data that this sample requires.
                    CreateRequiredRecords();

                    // Retrieve the sales people that will be added to the team.
                    salesPersons = SystemUserProvider.RetrieveSalespersons(_serviceProxy, ref ldapPath);

                    // Get the ID's of the current user and business unit.
                    var who         = new WhoAmIRequest();
                    var whoResponse = (WhoAmIResponse)_serviceProxy.Execute(who);
                    _currentUserId = whoResponse.UserId;
                    businessUnitId = whoResponse.BusinessUnitId;

                    // Create a access team.
                    var team = new Team
                    {
                        AdministratorId = new EntityReference(
                            "systemuser", _currentUserId),
                        Name           = "UserAccess Test Team",
                        BusinessUnitId = new EntityReference(
                            "businessunit", businessUnitId),
                        TeamType = new OptionSetValue((int)TeamTeamType.Access),
                    };

                    _teamId = _serviceProxy.Create(team);
                    Console.WriteLine("Created an access team named '{0}'.", team.Name);

                    // Add two sales people to the access team.
                    var addToTeamRequest = new AddMembersTeamRequest
                    {
                        TeamId    = _teamId,
                        MemberIds = new[] { salesPersons[0], salesPersons[1] }
                    };
                    _serviceProxy.Execute(addToTeamRequest);
                    Console.WriteLine("Added two sales people to the team.");

                    // Grant the team read/write access to an account.
                    var accountReference   = new EntityReference(Account.EntityLogicalName, _accountId);
                    var teamReference      = new EntityReference(Team.EntityLogicalName, _teamId);
                    var grantAccessRequest = new GrantAccessRequest
                    {
                        PrincipalAccess = new PrincipalAccess
                        {
                            AccessMask = AccessRights.ReadAccess | AccessRights.WriteAccess,
                            Principal  = teamReference
                        },
                        Target = accountReference
                    };
                    _serviceProxy.Execute(grantAccessRequest);
                    Console.WriteLine("Granted read/write access on the account record to the team.");

                    // Retrieve and display access information for the account.
                    RetrieveAndDisplayEntityAccess(accountReference);

                    // Display the account access for the team and its members.
                    var currentUserReference = new EntityReference(
                        SystemUser.EntityLogicalName, _currentUserId);
                    RetrieveAndDisplayPrincipalAccess(accountReference, currentUserReference,
                                                      "Current User");
                    var firstSalesPersonReference = new EntityReference(
                        SystemUser.EntityLogicalName, salesPersons[0]);
                    RetrieveAndDisplayPrincipalAccess(accountReference, firstSalesPersonReference,
                                                      "Sales Person");
                    var secondSalesPersonReference = new EntityReference(
                        SystemUser.EntityLogicalName, salesPersons[1]);
                    RetrieveAndDisplayPrincipalAccess(accountReference, secondSalesPersonReference,
                                                      "Sales Person");

                    // Delete all records created by this sample.
                    DeleteRequiredRecords(promptForDelete);
                }
            }

            // Catch any service fault exceptions that Microsoft Dynamics CRM throws.
            catch (FaultException <Microsoft.Xrm.Sdk.OrganizationServiceFault> )
            {
                // You can handle an exception here or pass it back to the calling method.
                throw;
            }
        }
        private void ImportAndAddButton_Click(object sender, EventArgs e)
        {
            ResultTextBox.Text = string.Empty;
            if (TeamBusinessUnitSelectionOptionset.SelectedIndex == -1)//Nothing selected
            {
                MessageBox.Show("Please select Team ", "Error");
                return;
            }
            progressBar1.Minimum = 0;
            progressBar1.Maximum = 100;


            progressBar1.Value = 10;


            List <ProcessCSV> listA = new List <ProcessCSV>();

            string Location = FileLocationTextBox.Text;

            using (var reader = new System.IO.StreamReader(Location))
            {
                while (!reader.EndOfStream)
                {
                    var line   = reader.ReadLine();
                    var values = line.Split(',');
                    listA.Add(new ProcessCSV {
                        emailuser = values[0]
                    });
                    progressBar1.Value = 20;
                }

                progressBar1.Value = 30;
            }



            string text      = string.Empty;
            int    userCount = 0;

            progressBar1.Minimum = 0;
            progressBar1.Maximum = 100;
            EntityCollection UserEmails = new EntityCollection();

            var fetchXml = "<fetch>"
                           + "<entity name='systemuser'>"
                           + "<filter>"
                           + "<condition attribute='domainname' operator='in'>";

            foreach (ProcessCSV email in listA)
            {
                userCount++;

                progressBar1.Value = 40;

                if (userCount > 200)
                {
                    MessageBox.Show("This tool can process only first 200 Records");
                    //System.Web.HttpContext.Current.Response.Write("<SCRIPT LANGUAGE=""JavaScript"">alert("Hello this is an Alert")</SCRIPT>");
                    goto BreakLoop;
                }
                fetchXml += "<value>" + email.emailuser + "</value>";
            }



BreakLoop:

            //timer1.Interval = userCount;

            fetchXml += "</condition>"
                        + "</filter>"
                        + "</entity>"
                        + "</fetch> ";

            EntityCollection userCollection = new EntityCollection();

            try
            {
                userCollection = Service.RetrieveMultiple(new FetchExpression(fetchXml));
            }
            catch (Exception ex)
            {
                progressBar1.Value = 10;
                throw new InvalidPluginExecutionException(ex.Message + "As you have provided Invalid CSV file");
            }

            try
            {
                progressBar1.Value = 50;
                // MessageBox.Show(userCollection.Entities.Count.ToString());

                string ResultedString = "Below Users are Added Sucessfully to " + TeamBusinessUnitSelectionOptionset.Text + " " + System.Environment.NewLine;
                Guid[] members        = new Guid[userCollection.Entities.Count];

                if (AssignmentcomboBox.SelectedIndex == 0)
                {
                    if (checkbox == true && userCollection.Entities.Count > 0)
                    {
                        progressBar1.Value = 70;
                        // Instantiate QueryExpression QEsystemuser
                        var QEsystemuser = new QueryExpression("systemuser");

                        // Add columns to QEsystemuser.ColumnSet
                        QEsystemuser.ColumnSet.AddColumns("systemuserid");

                        // Add link-entity QEsystemuser_teammembership
                        var QEsystemuser_teammembership = QEsystemuser.AddLink("teammembership", "systemuserid", "systemuserid");

                        // Define filter QEsystemuser_teammembership.LinkCriteria
                        QEsystemuser_teammembership.LinkCriteria.AddCondition("teamid", ConditionOperator.Equal, teamToBeassign);


                        EntityCollection usersToBeremoveCollection = Service.RetrieveMultiple(QEsystemuser);

                        Guid[] removeMembers = new Guid[usersToBeremoveCollection.Entities.Count];
                        for (int i = 0; i < usersToBeremoveCollection.Entities.Count; i++)
                        {
                            removeMembers[i] = (Guid)usersToBeremoveCollection.Entities[i].Attributes["systemuserid"];
                        }


                        // Create the AddMembersTeamRequest object.
                        RemoveMembersTeamRequest addRequest2 = new RemoveMembersTeamRequest();


                        // Set the AddMembersTeamRequest TeamID property to the object ID of
                        // an existing team.
                        addRequest2.TeamId = EntityToBeassign;

                        // Set the AddMembersTeamRequest MemberIds property to an
                        // array of GUIDs that contains the object IDs of one or more system users.
                        addRequest2.MemberIds = removeMembers;

                        // Execute the request.
                        Service.Execute(addRequest2);
                    }



                    //timer1.Start();

                    if (userCount == userCollection.Entities.Count || userCount == 201)
                    {
                        for (int i = 0; i < userCollection.Entities.Count; i++)
                        {
                            progressBar1.Value = 60;

                            //MessageBox.Show(userCollection.Entities[i].Id.ToString());
                            members[i] = (Guid)userCollection.Entities[i].Attributes["systemuserid"];
                            //MessageBox.Show(i.ToString());


                            ResultedString += (userCollection.Entities[i].Attributes["fullname"]).ToString().ToUpper() + "" + System.Environment.NewLine;

                            // textBox1.Text += (Guid)userCollection.Entities[i].Attributes["systemuserid"];
                        }
                        if (EntityToBeassign != Guid.Empty && members.Length != 0)
                        {
                            progressBar1.Value = 90;
                            // Create the AddMembersTeamRequest object.
                            AddMembersTeamRequest addRequest = new AddMembersTeamRequest();

                            // Set the AddMembersTeamRequest TeamID property to the object ID of
                            // an existing team.

                            addRequest.TeamId = EntityToBeassign;

                            // Set the AddMembersTeamRequest MemberIds property to an
                            // array of GUIDs that contains the object IDs of one or more system users.
                            addRequest.MemberIds = members;

                            // Execute the request.
                            Service.Execute(addRequest);

                            progressBar1.Value = 100;
                            ResultTextBox.Text = ResultedString;
                            MessageBox.Show("Task completed Sucessfully", "sucess");
                            // progressBar1.ForeColor = Color.Black;
                        }
                    }
                    else
                    {
                        progressBar1.Value = 10;
                        MessageBox.Show("Task Could Not Be completed (Please check csv file)", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);

                        //progressBar1.ForeColor= Color.Black;
                    }
                }
                else
                {
                    if (userCount == userCollection.Entities.Count || userCount == 201)
                    {
                        if (EntityToBeassign != Guid.Empty && members.Length != 0)
                        {
                            foreach (Entity user in userCollection.Entities)
                            {
                                progressBar1.Value = 90;
                                SetBusinessSystemUserRequest changeUserBURequest = new SetBusinessSystemUserRequest();
                                changeUserBURequest.BusinessId        = EntityToBeassign;
                                changeUserBURequest.UserId            = user.Id;
                                changeUserBURequest.ReassignPrincipal = new EntityReference("systemuser", user.Id);
                                Service.Execute(changeUserBURequest);
                            }
                            for (int i = 0; i < userCollection.Entities.Count; i++)
                            {
                                progressBar1.Value = 60;

                                //MessageBox.Show(userCollection.Entities[i].Id.ToString());
                                members[i] = (Guid)userCollection.Entities[i].Attributes["systemuserid"];
                                //MessageBox.Show(i.ToString());


                                ResultedString += (userCollection.Entities[i].Attributes["fullname"]).ToString().ToUpper() + "" + System.Environment.NewLine;
                            }
                            progressBar1.Value = 100;
                            ResultTextBox.Text = ResultedString;
                            MessageBox.Show("Task completed Sucessfully", "sucess");
                            // progressBar1.ForeColor = Color.Black;
                        }
                    }
                    else
                    {
                        progressBar1.Value = 10;
                        MessageBox.Show("Task Could Not Be completed (Please check csv file)", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);

                        //progressBar1.ForeColor= Color.Black;
                    }
                }

                //timer1.Start();


                // MessageBox.Show("TaskCompleted total "+userCount+" users are added to "+TeamSelectorOptionset.Text);
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }
示例#28
0
        /// <summary>
        /// Creates any entity records that this sample requires.
        /// </summary>
        public void CreateRequiredRecords()
        {
            // Create a unique identifier for this sample for preventing name conflicts.
            var sampleIdentifier = Guid.NewGuid();

            // Retrieve/create the system users to use for the sample.
            var ldapPath = String.Empty;

            _systemUserIds = SystemUserProvider.RetrieveDelegates(
                _serviceProxy, ref ldapPath);

            // Retrieve the root business unit to use for creating the team for the
            // sample.
            var businessUnitQuery = new QueryExpression
            {
                EntityName = BusinessUnit.EntityLogicalName,
                ColumnSet  = new ColumnSet("businessunitid"),
                Criteria   = new FilterExpression()
            };

            businessUnitQuery.Criteria.AddCondition("parentbusinessunitid",
                                                    ConditionOperator.Null);
            var businessUnitResult = _serviceProxy.RetrieveMultiple(businessUnitQuery);
            var businessUnit       = businessUnitResult.Entities[0].ToEntity <BusinessUnit>();

            // Get the GUID of the current user.
            var who         = new WhoAmIRequest();
            var whoResponse = (WhoAmIResponse)_serviceProxy.Execute(who);

            _currentUserId = whoResponse.UserId;

            // Create a team for use in the sample.
            var team = new Team
            {
                AdministratorId = new EntityReference(
                    "systemuser", _currentUserId),
                Name           = String.Format("User Access Sample Team {0}", sampleIdentifier),
                BusinessUnitId = businessUnit.ToEntityReference()
            };

            _teamId = _serviceProxy.Create(team);

            // Add the second user to the newly created team.
            var addToTeamRequest = new AddMembersTeamRequest
            {
                TeamId    = _teamId,
                MemberIds = new[] { _systemUserIds[1] }
            };

            _serviceProxy.Execute(addToTeamRequest);

            // Create a lead for use in the sample.
            var lead = new Lead
            {
                CompanyName = "User Access Sample Company",
                FirstName   = "Sample",
                LastName    = "Lead",
                Subject     = "User Access Sample Lead",
            };

            _leadId = _serviceProxy.Create(lead);

            // Create a task to associate to the lead.
            var leadReference = new EntityReference(Lead.EntityLogicalName, _leadId);
            var task          = new Task
            {
                Subject           = "User Access Sample Task",
                RegardingObjectId = leadReference
            };

            _taskId = _serviceProxy.Create(task);

            // Create a letter to associate to the lead.
            var letter = new Letter
            {
                Subject           = "User Access Sample Letter",
                RegardingObjectId = leadReference
            };

            _serviceProxy.Create(letter);
        }
        public void Run(ServerConnection.Configuration serverConfig, bool promptForDelete)
        {
            try
            {
                // Connect to the Organization service. 
                // The using statement assures that the service proxy will be properly disposed.
                using (_serviceProxy = new OrganizationServiceProxy(serverConfig.OrganizationUri, serverConfig.HomeRealmUri,
                                                                     serverConfig.Credentials, serverConfig.DeviceCredentials))
                {
                    String ldapPath = String.Empty;
                    Guid businessUnitId;

                    // This statement is required to enable early-bound type support.
                    _serviceProxy.EnableProxyTypes();

                    // Call this method to create any data that this sample requires.
                    CreateRequiredRecords();

                    // Retrieve the sales people that will be added to the team.
                    salesPersons = SystemUserProvider.RetrieveSalespersons(_serviceProxy, ref ldapPath);

                    // Get the ID's of the current user and business unit.
                    var who = new WhoAmIRequest();
                    var whoResponse = (WhoAmIResponse)_serviceProxy.Execute(who);
                    _currentUserId = whoResponse.UserId;
                    businessUnitId = whoResponse.BusinessUnitId;

                    //<snippetCreateAndShareAccessTeam1>
                    // Create a access team.
                    var team = new Team
                    {
                        AdministratorId = new EntityReference(
                            "systemuser", _currentUserId),
                        Name = "UserAccess Test Team",
                        BusinessUnitId = new EntityReference(
                            "businessunit", businessUnitId),
                        TeamType = new OptionSetValue((int)TeamTeamType.Access),
                    };

                    _teamId = _serviceProxy.Create(team);
                    Console.WriteLine("Created an access team named '{0}'.", team.Name);

                    // Add two sales people to the access team.
                    var addToTeamRequest = new AddMembersTeamRequest
                    {
                        TeamId = _teamId,
                        MemberIds = new[] { salesPersons[0], salesPersons[1] }
                    };
                    _serviceProxy.Execute(addToTeamRequest);
                    Console.WriteLine("Added two sales people to the team.");
                    
                    // Grant the team read/write access to an account.
                    var accountReference = new EntityReference(Account.EntityLogicalName, _accountId);
                    var teamReference = new EntityReference(Team.EntityLogicalName, _teamId);
                    var grantAccessRequest = new GrantAccessRequest
                    {
                        PrincipalAccess = new PrincipalAccess
                        {
                            AccessMask = AccessRights.ReadAccess | AccessRights.WriteAccess,
                            Principal = teamReference
                        },
                        Target = accountReference
                    };
                    _serviceProxy.Execute(grantAccessRequest);
                    Console.WriteLine("Granted read/write access on the account record to the team.");
                    //</snippetCreateAndShareAccessTeam1>

                    // Retrieve and display access information for the account.
                    RetrieveAndDisplayEntityAccess(accountReference);

                    // Display the account access for the team and its members.
                    var currentUserReference = new EntityReference(
                        SystemUser.EntityLogicalName, _currentUserId);
                    RetrieveAndDisplayPrincipalAccess(accountReference, currentUserReference,
                        "Current User");
                    var firstSalesPersonReference = new EntityReference(
                        SystemUser.EntityLogicalName, salesPersons[0]);
                    RetrieveAndDisplayPrincipalAccess(accountReference, firstSalesPersonReference,
                        "Sales Person");
                    var secondSalesPersonReference = new EntityReference(
                        SystemUser.EntityLogicalName, salesPersons[1]);
                    RetrieveAndDisplayPrincipalAccess(accountReference, secondSalesPersonReference,
                        "Sales Person");
                    
                    // Delete all records created by this sample.
                    DeleteRequiredRecords(promptForDelete);
                }
            }

            // Catch any service fault exceptions that Microsoft Dynamics CRM throws.
            catch (FaultException<Microsoft.Xrm.Sdk.OrganizationServiceFault>)
            {
                // You can handle an exception here or pass it back to the calling method.
                throw;
            }
        }
        [STAThread] // Added to support UX
        static void Main(string[] args)
        {
            CrmServiceClient service = null;

            try
            {
                service = SampleHelpers.Connect("Connect");
                if (service.IsReady)
                {
                    #region Sample Code
                    //////////////////////////////////////////////
                    #region Set up
                    SetUpSample(service);
                    #endregion Set up
                    #region Demonstrate

                    // Retrieve the sales people that will be added to the team.
                    salesPersons = SystemUserProvider.RetrieveSalespersons(service, ref ldapPath);

                    // Get the ID's of the current user and business unit.
                    var who         = new WhoAmIRequest();
                    var whoResponse = (WhoAmIResponse)service.Execute(who);
                    _currentUserId = whoResponse.UserId;
                    businessUnitId = whoResponse.BusinessUnitId;

                    // Create a access team.
                    var team = new Team
                    {
                        AdministratorId = new EntityReference(
                            "systemuser", _currentUserId),
                        Name           = "UserAccess Test Team",
                        BusinessUnitId = new EntityReference(
                            "businessunit", businessUnitId),
                        TeamType = new OptionSetValue((int)TeamTeamType.Access),
                    };

                    _teamId = service.Create(team);
                    Console.WriteLine("Created an access team named '{0}'.", team.Name);

                    // Add two sales people to the access team.
                    var addToTeamRequest = new AddMembersTeamRequest
                    {
                        TeamId    = _teamId,
                        MemberIds = new[] { salesPersons[0], salesPersons[1] }
                    };
                    service.Execute(addToTeamRequest);
                    Console.WriteLine("Added two sales people to the team.");

                    // Grant the team read/write access to an account.
                    var accountReference   = new EntityReference(Account.EntityLogicalName, _accountId);
                    var teamReference      = new EntityReference(Team.EntityLogicalName, _teamId);
                    var grantAccessRequest = new GrantAccessRequest
                    {
                        PrincipalAccess = new PrincipalAccess
                        {
                            AccessMask = AccessRights.ReadAccess | AccessRights.WriteAccess,
                            Principal  = teamReference
                        },
                        Target = accountReference
                    };
                    service.Execute(grantAccessRequest);
                    Console.WriteLine("Granted read/write access on the account record to the team.");

                    // Retrieve and display access information for the account.
                    RetrieveAndDisplayEntityAccess(service, accountReference);

                    // Display the account access for the team and its members.
                    var currentUserReference = new EntityReference(
                        SystemUser.EntityLogicalName, _currentUserId);
                    RetrieveAndDisplayPrincipalAccess(service, accountReference, currentUserReference,
                                                      "Current User");
                    var firstSalesPersonReference = new EntityReference(
                        SystemUser.EntityLogicalName, salesPersons[0]);
                    RetrieveAndDisplayPrincipalAccess(service, accountReference, firstSalesPersonReference,
                                                      "Sales Person");
                    var secondSalesPersonReference = new EntityReference(
                        SystemUser.EntityLogicalName, salesPersons[1]);
                    RetrieveAndDisplayPrincipalAccess(service, accountReference, secondSalesPersonReference,
                                                      "Sales Person");

                    #region Clean up
                    CleanUpSample(service);
                    #endregion Clean up
                }
                #endregion Demonstrate
                else
                {
                    const string UNABLE_TO_LOGIN_ERROR = "Unable to Login to Common Data Service";
                    if (service.LastCrmError.Equals(UNABLE_TO_LOGIN_ERROR))
                    {
                        Console.WriteLine("Check the connection string values in cds/App.config.");
                        throw new Exception(service.LastCrmError);
                    }
                    else
                    {
                        throw service.LastCrmException;
                    }
                }
            }
            #endregion Sample Code

            catch (Exception ex)
            {
                SampleHelpers.HandleException(ex);
            }

            finally
            {
                if (service != null)
                {
                    service.Dispose();
                }

                Console.WriteLine("Press <Enter> to exit.");
                Console.ReadLine();
            }
        }
        /// <summary>
        /// Creates any entity records that this sample requires.
        /// </summary>
        public void CreateRequiredRecords()
        {
            #region create users

            Console.WriteLine("  Creating users");
            var ldapPath = "";
            _users = 
                SystemUserProvider.RetrieveSalespersons(_serviceProxy, ref ldapPath);
            _users.Add(SystemUserProvider.RetrieveSystemUser(
                "dparker", "Darren", "Parker", "Salesperson", 
                _serviceProxy, ref ldapPath));

            #endregion

            #region fetch root business unit

            // Retrieve the root business unit to use for creating the team for the
            // sample.
            var businessUnitQuery = new QueryExpression
            {
                EntityName = BusinessUnit.EntityLogicalName,
                ColumnSet = new ColumnSet("businessunitid"),
                Criteria = new FilterExpression()
            };

            businessUnitQuery.Criteria.AddCondition("parentbusinessunitid",
                ConditionOperator.Null);
            var businessUnitResult = _serviceProxy.RetrieveMultiple(businessUnitQuery);
            _rootBusinessUnit = businessUnitResult.Entities[0].ToEntity<BusinessUnit>();

            #endregion

            #region create new business unit

            Console.WriteLine("  Creating new business unit");
            _buisnessUnit = new BusinessUnit()
            {
                Name = "A Sample Business Unit",
                ParentBusinessUnitId = _rootBusinessUnit.ToEntityReference()
            };
            _buisnessUnit.Id = _serviceProxy.Create(_buisnessUnit);

            #endregion

            #region create team

            Console.WriteLine("  Creating a user team");
            _team = new Team
            {
                AdministratorId = 
                    new EntityReference(SystemUser.EntityLogicalName, _users[0]),
                Name = "Sample team",
                BusinessUnitId = _rootBusinessUnit.ToEntityReference()
            };
            _team.Id = _serviceProxy.Create(_team);

            var salespersonRole = (from role in _context.RoleSet
                                   where role.Name == "Salesperson" 
                                   && role.BusinessUnitId.Id == _rootBusinessUnit.Id
                                   select role).First();

            // assign role to the team
            _serviceProxy.Associate(
                Team.EntityLogicalName,
                _team.Id,
                new Relationship("teamroles_association"),
                new EntityReferenceCollection() { 
                    salespersonRole.ToEntityReference()
                }
            );

            // wait for the async job to finish
            for (int i = 1; i <= 30; i++)
            {
                Console.WriteLine("  Checking to see if the async job has finished {0}/30", i);
                var teamPrivileges = (RetrieveTeamPrivilegesResponse)
                    _serviceProxy.Execute(new RetrieveTeamPrivilegesRequest
                    {
                        TeamId = _team.Id
                    });
                if (teamPrivileges.RolePrivileges.Any((rp) =>
                    rp.PrivilegeId == 
                        new Guid("A8ECAC53-09E8-4A13-B598-8D8C87BC3D33"))) // prvReadLead
                {
                    break;
                }
                System.Threading.Thread.Sleep(1000);
            }
            #endregion

            #region add users to team

            Console.WriteLine("  Adding users to the team");
            AddMembersTeamRequest addMembers = new AddMembersTeamRequest()
            {
                TeamId = _team.Id,
                MemberIds = new Guid[] { _users[0], _users[1] }
            };
            _serviceProxy.Execute(addMembers);

            #endregion

            #region create leads

            Console.WriteLine("  Creating leads");
            _leads[0] = new Lead
            {
                CompanyName = "A. Datum Corporation",
                FirstName = "Joe",
                LastName = "Andreshak",
            };
            _leads[0].Id = _serviceProxy.Create(_leads[0]);

            _leads[1] = new Lead
            {
                CompanyName = "Wingtip Toys",
                FirstName = "Diogo",
                LastName = "Andrade"
            };
            _leads[1].Id = _serviceProxy.Create(_leads[1]);

            _leads[2] = new Lead
            {
                CompanyName = "The Phone Company",
                FirstName = "Ronaldo",
                LastName = "Smith Jr."
            };
            _leads[2].Id = _serviceProxy.Create(_leads[2]);

            _leads[3] = new Lead
            {
                CompanyName = "Tailspin Toys",
                FirstName = "Andrew",
                LastName = "Sullivan",
            };
            _leads[3].Id = _serviceProxy.Create(_leads[3]);

            #endregion

            #region assign leads

            Console.WriteLine("  Assigning leads to users and teams");
            _serviceProxy.Execute(new AssignRequest()
            {
                Assignee = new EntityReference(SystemUser.EntityLogicalName, _users[0]),
                Target = _leads[0].ToEntityReference()
            });

            _serviceProxy.Execute(new AssignRequest()
            {
                Assignee = new EntityReference(SystemUser.EntityLogicalName, _users[1]),
                Target = _leads[1].ToEntityReference()
            });

            _serviceProxy.Execute(new AssignRequest()
            {
                Assignee = new EntityReference(SystemUser.EntityLogicalName, _users[2]),
                Target = _leads[2].ToEntityReference()
            });

            // give the team access to the record so that it can be assigned to it
            _serviceProxy.Execute(new GrantAccessRequest()
            {
                Target = _leads[3].ToEntityReference(),
                PrincipalAccess = new PrincipalAccess()
                {
                    AccessMask = AccessRights.ReadAccess|AccessRights.WriteAccess,
                    Principal = _team.ToEntityReference()
                }
            });

            // assign the lead to the team
            _serviceProxy.Execute(new AssignRequest()
            {
                Assignee = _team.ToEntityReference(),
                Target = _leads[3].ToEntityReference()
            });

            #endregion
        }
示例#32
0
        public void ExecuteTest()
        {
            //
            // Arrange
            //
            Guid actualUserId             = Guid.NewGuid();
            Guid actualTeamId             = Guid.NewGuid();
            var  workflowUserId           = Guid.NewGuid();
            var  workflowCorrelationId    = Guid.NewGuid();
            var  workflowInitiatingUserId = Guid.NewGuid();

            // IOrganizationService
            var service = new Microsoft.Xrm.Sdk.Fakes.StubIOrganizationService();

            service.ExecuteOrganizationRequest = r =>
            {
                AddMembersTeamRequest request = r as AddMembersTeamRequest;
                actualUserId = request.MemberIds[0];
                actualTeamId = request.TeamId;
                return(new AddMembersTeamResponse());
            };

            // IWorkflowContext
            var workflowContext = new Microsoft.Xrm.Sdk.Workflow.Fakes.StubIWorkflowContext();

            workflowContext.UserIdGet = () =>
            {
                return(workflowUserId);
            };
            workflowContext.CorrelationIdGet = () =>
            {
                return(workflowCorrelationId);
            };
            workflowContext.InitiatingUserIdGet = () =>
            {
                return(workflowInitiatingUserId);
            };

            // ITracingService
            var tracingService = new Microsoft.Xrm.Sdk.Fakes.StubITracingService();

            tracingService.TraceStringObjectArray = (f, o) =>
            {
                Debug.WriteLine(f, o);
            };

            // IOrganizationServiceFactory
            var factory = new Microsoft.Xrm.Sdk.Fakes.StubIOrganizationServiceFactory();

            factory.CreateOrganizationServiceNullableOfGuid = id =>
            {
                return(service);
            };

            var expectedUserId = Guid.NewGuid();
            var expectedTeamId = Guid.NewGuid();

            AddMemberTeamActivity target = new AddMemberTeamActivity();

            using (ShimsContext.Create())
            {
                var fakeTarget = new DynamicsCRMUnitTest.Workflow.Fakes.ShimAddMemberTeamActivity(target);
                fakeTarget.IsMemberInTeamIOrganizationServiceGuidGuid = (svc, teamId, memberId) =>
                {
                    return(false);
                };

                var invoker = new WorkflowInvoker(target);
                invoker.Extensions.Add <ITracingService>(() => tracingService);
                invoker.Extensions.Add <IWorkflowContext>(() => workflowContext);
                invoker.Extensions.Add <IOrganizationServiceFactory>(() => factory);

                var inputs = new Dictionary <string, object>
                {
                    { "User", new EntityReference("systemuser", expectedUserId) },
                    { "Team", new EntityReference("team", expectedTeamId) }
                };

                //
                // Act
                //
                var outputs = invoker.Invoke(inputs);
            }

            //
            // Assert
            //
            Assert.AreEqual(expectedUserId, actualUserId);
            Assert.AreEqual(expectedTeamId, actualTeamId);
        }