private void btnGetTeams_Click(object sender, EventArgs e) { WorkAsync(new WorkAsyncInfo { Message = "Loading Access Teams", Work = (worker, args) => { var q = new QueryExpression("team"); q.ColumnSet = new ColumnSet(true); q.AddCriteria("teamtype", 1); //q.AddCriteria("teamtemplateid", teamTemplateId); q.AddCriteria("regardingobjectid", new Guid(txtEntityId.Text)); var l = q.AddLink("teamtemplate", "teamtemplateid", "teamtemplateid"); l.Columns = new ColumnSet("teamtemplatename"); l.EntityAlias = "tt"; args.Result = Service.GetMultiple(q); foreach (var team in (args.Result as List <Entity>)) { var accessRequest = new RetrieveSharedPrincipalsAndAccessRequest { Target = new EntityReference((cBoxEntities.SelectedItem as EntityInfo).LogicalName, new Guid(txtEntityId.Text)) }; var accessResponse = (RetrieveSharedPrincipalsAndAccessResponse)Service.Execute(accessRequest); var p = accessResponse.PrincipalAccesses.SingleOrDefault(x => x.Principal.Id == team.Id); if (p != null) { team["accessrights"] = p.AccessMask; } } }, PostWorkCallBack = (args) => { if (args.Error != null) { MessageBox.Show(args.Error.ToString(), "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); } lvTeams.Items.Clear(); lvTeamMembers.Items.Clear(); var result = args.Result as List <Entity>; if (result != null) { foreach (var team in result) { var item = new ListViewItem { Text = team.GetValue <string>("tt.teamtemplatename"), Tag = team }; item.SubItems.Add(team["accessrights"].ToString()); lvTeams.Items.Add(item); } } } }); }
public void Test_That_Existing_Permissions_Can_Be_Modified() { XrmFakedContext context = new XrmFakedContext(); IOrganizationService service = context.GetOrganizationService(); List <Entity> initialEntities = new List <Entity>(); Entity contact = new Entity("contact"); contact.Id = Guid.NewGuid(); initialEntities.Add(contact); Entity user = new Entity("systemuser"); user.Id = Guid.NewGuid(); initialEntities.Add(user); context.Initialize(initialEntities); GrantAccessRequest grantRequest = new GrantAccessRequest() { Target = contact.ToEntityReference(), PrincipalAccess = new PrincipalAccess() { Principal = user.ToEntityReference(), AccessMask = AccessRights.ReadAccess } }; service.Execute(grantRequest); RetrieveSharedPrincipalsAndAccessRequest getPermissions = new RetrieveSharedPrincipalsAndAccessRequest() { Target = contact.ToEntityReference(), }; var permissionsResponse = (RetrieveSharedPrincipalsAndAccessResponse)service.Execute(getPermissions); // Make sure things are correct before I start changing things Assert.Equal(user.Id, permissionsResponse.PrincipalAccesses[0].Principal.Id); Assert.Equal(AccessRights.ReadAccess, permissionsResponse.PrincipalAccesses[0].AccessMask); ModifyAccessRequest modifyRequest = new ModifyAccessRequest() { Target = contact.ToEntityReference(), PrincipalAccess = new PrincipalAccess() { Principal = user.ToEntityReference(), AccessMask = AccessRights.ReadAccess | AccessRights.DeleteAccess } }; service.Execute(modifyRequest); permissionsResponse = (RetrieveSharedPrincipalsAndAccessResponse)service.Execute(getPermissions); // Check permissions Assert.Equal(user.Id, permissionsResponse.PrincipalAccesses[0].Principal.Id); Assert.Equal(AccessRights.ReadAccess | AccessRights.DeleteAccess, permissionsResponse.PrincipalAccesses[0].AccessMask); }
public IEnumerable <PrincipalAccess> GetSharedPrincipals(EntityReference target) { var req = new RetrieveSharedPrincipalsAndAccessRequest() { Target = target }; var resp = (RetrieveSharedPrincipalsAndAccessResponse)this.Execute(req); return(resp.PrincipalAccesses); }
public void Principal_Granted_Access_Multiple_Times_Only_Appears_Once() { var context = new XrmFakedContext(); var contact1 = new Contact { Id = Guid.NewGuid() }; var user1 = new SystemUser { Id = Guid.NewGuid() }; context.Initialize(new List <Entity> { contact1, user1 }); var service = context.GetFakedOrganizationService(); GrantAccessRequest gar1 = new GrantAccessRequest { PrincipalAccess = new PrincipalAccess { AccessMask = AccessRights.ReadAccess | AccessRights.WriteAccess, Principal = user1.ToEntityReference() }, Target = contact1.ToEntityReference() }; service.Execute(gar1); GrantAccessRequest gar2 = new GrantAccessRequest { PrincipalAccess = new PrincipalAccess { AccessMask = AccessRights.ReadAccess | AccessRights.WriteAccess, Principal = user1.ToEntityReference() }, Target = contact1.ToEntityReference() }; service.Execute(gar2); RetrieveSharedPrincipalsAndAccessRequest req = new RetrieveSharedPrincipalsAndAccessRequest { Target = contact1.ToEntityReference() }; RetrieveSharedPrincipalsAndAccessResponse resp = (RetrieveSharedPrincipalsAndAccessResponse)service.Execute(req); Assert.Equal(1, resp.PrincipalAccesses.Length); }
/// <summary> /// Retrieve all shared principal (user or team) and <c>AccessRights</c> information (such as Read, Write etc). /// <para> /// For more information look at https://msdn.microsoft.com/en-us/library/microsoft.crm.sdk.messages.retrievesharedprincipalsandaccessrequest.aspx /// </para> /// </summary> /// <param name="recordId">Record Id</param> /// <param name="entityLogicalName">Record's entity logical name</param> /// <returns> /// <seealso cref="PrincipalAccess"/> list for data /// </returns> public List <PrincipalAccess> GetSharedPrincipalsAndAccess(Guid recordId, string entityLogicalName) { ExceptionThrow.IfGuidEmpty(recordId, "recordId"); ExceptionThrow.IfNullOrEmpty(entityLogicalName, "entityLogicalName"); List <PrincipalAccess> result = new List <PrincipalAccess>(); RetrieveSharedPrincipalsAndAccessRequest request = new RetrieveSharedPrincipalsAndAccessRequest() { Target = new EntityReference(entityLogicalName, recordId) }; var serviceResponse = (RetrieveSharedPrincipalsAndAccessResponse)this.OrganizationService.Execute(request); if (serviceResponse != null && serviceResponse.PrincipalAccesses != null && serviceResponse.PrincipalAccesses.Length > 0) { result = serviceResponse.PrincipalAccesses.ToList(); } return(result); }
private void RetrieveAndDisplayLeadAccess(EntityReference leadReference) { var accessRequest = new RetrieveSharedPrincipalsAndAccessRequest { Target = leadReference }; // The RetrieveSharedPrincipalsAndAccessResponse returns an entity reference // that has a LogicalName of "user" when returning access information for a // "team." var accessResponse = (RetrieveSharedPrincipalsAndAccessResponse) _serviceProxy.Execute(accessRequest); Console.WriteLine("The following have the specified granted access to the lead."); foreach (var principalAccess in accessResponse.PrincipalAccesses) { Console.WriteLine("\t{0}:\r\n\t\t{1}", GetEntityReferenceString(principalAccess.Principal), principalAccess.AccessMask); } Console.WriteLine(); }
//Contains the data that is needed to retrieve the access rights of the specified security principal (team or user) to the specified record. public RetrievePrincipalAccessResponse RetrieveRights(Guid userId, Guid objectId, string entityName) { try { // Requête d'accès var request = new RetrievePrincipalAccessRequest(); request.Principal = new EntityReference("systemuser", userId); request.Target = new EntityReference(entityName, objectId); return((RetrievePrincipalAccessResponse)service.Execute(request)); //Contains the data that is needed to retrieve all security principals (users or teams) that have access to, and access rights for, the specified record. var accessRequest = new RetrieveSharedPrincipalsAndAccessRequest { Target = leadReference }; // The RetrieveSharedPrincipalsAndAccessResponse returns an entity reference // that has a LogicalName of "user" when returning access information for a // "team." var accessResponse = (RetrieveSharedPrincipalsAndAccessResponse) svc.Execute(accessRequest); Console.WriteLine("The following have the specified granted access to the lead."); foreach (var principalAccess in accessResponse.PrincipalAccesses) { Console.WriteLine("\t{0}:\r\n\t\t{1}", GetEntityReferenceString(principalAccess.Principal), principalAccess.AccessMask); } Console.WriteLine(); } catch (Exception error) { throw new Exception("Error while checking rigths: " + error.Message); } }
/// <summary> /// Retrieve and display entity access information. /// </summary> /// <param name="entityReference"></param> private static void RetrieveAndDisplayEntityAccess(CrmServiceClient service, EntityReference entityReference) { var accessRequest = new RetrieveSharedPrincipalsAndAccessRequest { Target = entityReference }; // The RetrieveSharedPrincipalsAndAccessResponse returns an entity reference // that has a LogicalName of "user" when returning access information for a // team. var accessResponse = (RetrieveSharedPrincipalsAndAccessResponse) service.Execute(accessRequest); Console.WriteLine("The following have the specified granted access to the entity."); foreach (var principalAccess in accessResponse.PrincipalAccesses) { Console.WriteLine("\t{0}:\r\n\t\t{1}", String.Format("{0} with GUID {1}", principalAccess.Principal.LogicalName, principalAccess.Principal.Id), principalAccess.AccessMask); } Console.WriteLine(); }
private void RetrieveAndDisplayLeadAccess(EntityReference leadReference) { //<snippetUserAccess5> var accessRequest = new RetrieveSharedPrincipalsAndAccessRequest { Target = leadReference }; // The RetrieveSharedPrincipalsAndAccessResponse returns an entity reference // that has a LogicalName of "user" when returning access information for a // "team." var accessResponse = (RetrieveSharedPrincipalsAndAccessResponse) _serviceProxy.Execute(accessRequest); Console.WriteLine("The following have the specified granted access to the lead."); foreach (var principalAccess in accessResponse.PrincipalAccesses) { Console.WriteLine("\t{0}:\r\n\t\t{1}", GetEntityReferenceString(principalAccess.Principal), principalAccess.AccessMask); } Console.WriteLine(); //</snippetUserAccess5> }
/// <summary> /// Demonstrates sharing records by exercising various access messages including: /// Grant, Modify, Revoke, RetrievePrincipalAccess, and /// RetrievePrincipalsAndAccess. /// </summary> /// <param name="serverConfig">Contains server connection information.</param> /// <param name="promptforDelete">When True, the user will be prompted to delete all /// created entities.</param> 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)) { // This statement is required to enable early-bound type support. _serviceProxy.EnableProxyTypes(); _service = (IOrganizationService)_serviceProxy; CreateRequiredRecords(); #region GrantAccess Message // Create the request object and set the target and principal access // object. GrantAccessRequest grantRequest = new GrantAccessRequest() { Target = new EntityReference(Account.EntityLogicalName, _accountId), PrincipalAccess = new PrincipalAccess() { Principal = new EntityReference(SystemUser.EntityLogicalName, _userId), AccessMask = AccessRights.WriteAccess | AccessRights.ReadAccess | AccessRights.ShareAccess } }; // Execute the request. GrantAccessResponse grantResponse = (GrantAccessResponse)_service.Execute(grantRequest); Console.Write("Access Granted "); #endregion #region ModifyAccess Message // Create the request object and set the target and principal access // object. ModifyAccessRequest modifyRequest = new ModifyAccessRequest() { Target = new EntityReference(Account.EntityLogicalName, _accountId), PrincipalAccess = new PrincipalAccess() { Principal = new EntityReference(SystemUser.EntityLogicalName, _userId), AccessMask = AccessRights.ReadAccess | AccessRights.ShareAccess } }; // Execute the request. ModifyAccessResponse modifyResponse = (ModifyAccessResponse)_service.Execute(modifyRequest); Console.Write("and Modified. "); #endregion #region RetrievePrincipalAccess Message // Create the request object and set the target and principal. RetrievePrincipalAccessRequest retrieveRequest = new RetrievePrincipalAccessRequest() { Target = new EntityReference(Account.EntityLogicalName, _accountId), Principal = new EntityReference(SystemUser.EntityLogicalName, _userId) }; // Execute the request. RetrievePrincipalAccessResponse retrieveResponse = (RetrievePrincipalAccessResponse)_service.Execute(retrieveRequest); Console.Write("Retrieved principal access. "); #endregion #region RetrieveSharedPrincipalsAndAccess Message // Create the request object and set the target. RetrieveSharedPrincipalsAndAccessRequest retrieveSharedRequest = new RetrieveSharedPrincipalsAndAccessRequest() { Target = new EntityReference(Account.EntityLogicalName, _accountId) }; // Execute the request. RetrieveSharedPrincipalsAndAccessResponse retrieveSharedResponse = (RetrieveSharedPrincipalsAndAccessResponse)_service.Execute(retrieveSharedRequest); Console.Write("Retrieved principals and access. "); #endregion #region RevokeAccess Message // Create the request object and set the target and revokee. RevokeAccessRequest revokeRequest = new RevokeAccessRequest() { Target = new EntityReference(Account.EntityLogicalName, _accountId), Revokee = new EntityReference(SystemUser.EntityLogicalName, _userId) }; // Execute the request. RevokeAccessResponse revokeResponse = (RevokeAccessResponse)_service.Execute(revokeRequest); Console.Write("Revoked Access."); #endregion 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; } }
/// <summary> /// Retrieve and display entity access information. /// </summary> /// <param name="entityReference"></param> private void RetrieveAndDisplayEntityAccess(EntityReference entityReference) { var accessRequest = new RetrieveSharedPrincipalsAndAccessRequest { Target = entityReference }; // The RetrieveSharedPrincipalsAndAccessResponse returns an entity reference // that has a LogicalName of "user" when returning access information for a // team. var accessResponse = (RetrieveSharedPrincipalsAndAccessResponse) _serviceProxy.Execute(accessRequest); Console.WriteLine("The following have the specified granted access to the entity."); foreach (var principalAccess in accessResponse.PrincipalAccesses) { Console.WriteLine("\t{0}:\r\n\t\t{1}", String.Format("{0} with GUID {1}", principalAccess.Principal.LogicalName, principalAccess.Principal.Id), principalAccess.AccessMask); } Console.WriteLine(); }
public OrganizationResponse Execute(OrganizationRequest request, XrmFakedContext ctx) { RetrieveSharedPrincipalsAndAccessRequest req = (RetrieveSharedPrincipalsAndAccessRequest)request; return(ctx.AccessRightsRepository.RetrieveSharedPrincipalsAndAccess(req.Target)); }
public void RetrieveSharedPrincipalsAndAccess_Test() { var context = new XrmFakedContext(); var contact1 = new Contact { Id = Guid.NewGuid() }; var contact2 = new Contact { Id = Guid.NewGuid() }; var user1 = new SystemUser { Id = Guid.NewGuid() }; var user2 = new SystemUser { Id = Guid.NewGuid() }; var user3 = new SystemUser { Id = Guid.NewGuid() }; context.Initialize(new List <Entity> { contact1, user1, contact2, user2, user3 }); var service = context.GetFakedOrganizationService(); GrantAccessRequest gar1 = new GrantAccessRequest { PrincipalAccess = new PrincipalAccess { AccessMask = AccessRights.ReadAccess | AccessRights.WriteAccess, Principal = user1.ToEntityReference() }, Target = contact1.ToEntityReference() }; service.Execute(gar1); GrantAccessRequest gar2 = new GrantAccessRequest { PrincipalAccess = new PrincipalAccess { AccessMask = AccessRights.ReadAccess | AccessRights.CreateAccess | AccessRights.DeleteAccess | AccessRights.ShareAccess, Principal = user1.ToEntityReference() }, Target = contact2.ToEntityReference() }; service.Execute(gar2); GrantAccessRequest gar3 = new GrantAccessRequest { PrincipalAccess = new PrincipalAccess { AccessMask = AccessRights.ReadAccess | AccessRights.CreateAccess | AccessRights.DeleteAccess | AccessRights.ShareAccess, Principal = user2.ToEntityReference() }, Target = contact1.ToEntityReference() }; service.Execute(gar3); GrantAccessRequest gar4 = new GrantAccessRequest { PrincipalAccess = new PrincipalAccess { AccessMask = AccessRights.ReadAccess | AccessRights.WriteAccess, Principal = user2.ToEntityReference() }, Target = contact2.ToEntityReference() }; service.Execute(gar4); RetrieveSharedPrincipalsAndAccessRequest req = new RetrieveSharedPrincipalsAndAccessRequest { Target = contact1.ToEntityReference() }; RetrieveSharedPrincipalsAndAccessResponse resp = (RetrieveSharedPrincipalsAndAccessResponse)service.Execute(req); foreach (PrincipalAccess pa in resp.PrincipalAccesses) { if (pa.Principal.Id == user1.Id) { Assert.NotEqual(AccessRights.None, pa.AccessMask); Assert.True(pa.AccessMask.HasFlag(AccessRights.ReadAccess)); Assert.False(pa.AccessMask.HasFlag(AccessRights.AppendAccess)); Assert.False(pa.AccessMask.HasFlag(AccessRights.AppendToAccess)); Assert.False(pa.AccessMask.HasFlag(AccessRights.AssignAccess)); Assert.False(pa.AccessMask.HasFlag(AccessRights.CreateAccess)); Assert.False(pa.AccessMask.HasFlag(AccessRights.DeleteAccess)); Assert.False(pa.AccessMask.HasFlag(AccessRights.ShareAccess)); Assert.True(pa.AccessMask.HasFlag(AccessRights.WriteAccess)); } else if (pa.Principal.Id == user2.Id) { Assert.NotEqual(AccessRights.None, pa.AccessMask); Assert.True(pa.AccessMask.HasFlag(AccessRights.ReadAccess)); Assert.False(pa.AccessMask.HasFlag(AccessRights.AppendAccess)); Assert.False(pa.AccessMask.HasFlag(AccessRights.AppendToAccess)); Assert.False(pa.AccessMask.HasFlag(AccessRights.AssignAccess)); Assert.True(pa.AccessMask.HasFlag(AccessRights.CreateAccess)); Assert.True(pa.AccessMask.HasFlag(AccessRights.DeleteAccess)); Assert.True(pa.AccessMask.HasFlag(AccessRights.ShareAccess)); Assert.False(pa.AccessMask.HasFlag(AccessRights.WriteAccess)); } else if (pa.Principal.Id == user3.Id) { Assert.Equal(AccessRights.None, pa.AccessMask); } } req = new RetrieveSharedPrincipalsAndAccessRequest { Target = contact2.ToEntityReference() }; resp = (RetrieveSharedPrincipalsAndAccessResponse)service.Execute(req); foreach (PrincipalAccess pa in resp.PrincipalAccesses) { if (pa.Principal.Id == user2.Id) { Assert.NotEqual(AccessRights.None, pa.AccessMask); Assert.True(pa.AccessMask.HasFlag(AccessRights.ReadAccess)); Assert.False(pa.AccessMask.HasFlag(AccessRights.AppendAccess)); Assert.False(pa.AccessMask.HasFlag(AccessRights.AppendToAccess)); Assert.False(pa.AccessMask.HasFlag(AccessRights.AssignAccess)); Assert.False(pa.AccessMask.HasFlag(AccessRights.CreateAccess)); Assert.False(pa.AccessMask.HasFlag(AccessRights.DeleteAccess)); Assert.False(pa.AccessMask.HasFlag(AccessRights.ShareAccess)); Assert.True(pa.AccessMask.HasFlag(AccessRights.WriteAccess)); } else if (pa.Principal.Id == user1.Id) { Assert.NotEqual(AccessRights.None, pa.AccessMask); Assert.True(pa.AccessMask.HasFlag(AccessRights.ReadAccess)); Assert.False(pa.AccessMask.HasFlag(AccessRights.AppendAccess)); Assert.False(pa.AccessMask.HasFlag(AccessRights.AppendToAccess)); Assert.False(pa.AccessMask.HasFlag(AccessRights.AssignAccess)); Assert.True(pa.AccessMask.HasFlag(AccessRights.CreateAccess)); Assert.True(pa.AccessMask.HasFlag(AccessRights.DeleteAccess)); Assert.True(pa.AccessMask.HasFlag(AccessRights.ShareAccess)); Assert.False(pa.AccessMask.HasFlag(AccessRights.WriteAccess)); } else if (pa.Principal.Id == user3.Id) { Assert.Equal(AccessRights.None, pa.AccessMask); } } }
/// <summary> /// Demonstrates sharing records by exercising various access messages including: /// Grant, Modify, Revoke, RetrievePrincipalAccess, and /// RetrievePrincipalsAndAccess. /// </summary> /// <param name="serverConfig">Contains server connection information.</param> /// <param name="promptforDelete">When True, the user will be prompted to delete all /// created entities.</param> public void Run(ServerConnection.Configuration serverConfig, bool promptforDelete) { try { //<snippetSharingRecords1> // 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)) { // This statement is required to enable early-bound type support. _serviceProxy.EnableProxyTypes(); _service = (IOrganizationService)_serviceProxy; CreateRequiredRecords(); #region GrantAccess Message // Create the request object and set the target and principal access // object. GrantAccessRequest grantRequest = new GrantAccessRequest() { Target = new EntityReference(Account.EntityLogicalName, _accountId), PrincipalAccess = new PrincipalAccess() { Principal = new EntityReference(SystemUser.EntityLogicalName, _userId), AccessMask = AccessRights.WriteAccess | AccessRights.ReadAccess | AccessRights.ShareAccess } }; // Execute the request. GrantAccessResponse grantResponse = (GrantAccessResponse)_service.Execute(grantRequest); Console.Write("Access Granted "); #endregion #region ModifyAccess Message // Create the request object and set the target and principal access // object. ModifyAccessRequest modifyRequest = new ModifyAccessRequest() { Target = new EntityReference(Account.EntityLogicalName, _accountId), PrincipalAccess = new PrincipalAccess() { Principal = new EntityReference(SystemUser.EntityLogicalName, _userId), AccessMask = AccessRights.ReadAccess | AccessRights.ShareAccess } }; // Execute the request. ModifyAccessResponse modifyResponse = (ModifyAccessResponse)_service.Execute(modifyRequest); Console.Write("and Modified. "); #endregion #region RetrievePrincipalAccess Message // Create the request object and set the target and principal. RetrievePrincipalAccessRequest retrieveRequest = new RetrievePrincipalAccessRequest() { Target = new EntityReference(Account.EntityLogicalName, _accountId), Principal = new EntityReference(SystemUser.EntityLogicalName, _userId) }; // Execute the request. RetrievePrincipalAccessResponse retrieveResponse = (RetrievePrincipalAccessResponse)_service.Execute(retrieveRequest); Console.Write("Retrieved principal access. "); #endregion #region RetrieveSharedPrincipalsAndAccess Message // Create the request object and set the target. RetrieveSharedPrincipalsAndAccessRequest retrieveSharedRequest = new RetrieveSharedPrincipalsAndAccessRequest() { Target = new EntityReference(Account.EntityLogicalName, _accountId) }; // Execute the request. RetrieveSharedPrincipalsAndAccessResponse retrieveSharedResponse = (RetrieveSharedPrincipalsAndAccessResponse)_service.Execute(retrieveSharedRequest); Console.Write("Retrieved principals and access. "); #endregion #region RevokeAccess Message // Create the request object and set the target and revokee. RevokeAccessRequest revokeRequest = new RevokeAccessRequest() { Target = new EntityReference(Account.EntityLogicalName, _accountId), Revokee = new EntityReference(SystemUser.EntityLogicalName, _userId) }; // Execute the request. RevokeAccessResponse revokeResponse = (RevokeAccessResponse)_service.Execute(revokeRequest); Console.Write("Revoked Access."); #endregion DeleteRequiredRecords(promptforDelete); } //</snippetSharingRecords1> } // 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; } }