In this article , I am explaining how to create , update , retrieve Connection and Connection Role
Namespace need to include
Namespace need to include
using Microsoft.Xrm.Sdk; using Microsoft.Xrm.Sdk.Client; using Microsoft.Xrm.Sdk.Query; using Microsoft.Xrm.Sdk.Discovery; using Microsoft.Xrm.Sdk.Messages; using Microsoft.Crm.Sdk.Messages;Defining Connection Property
var Categories = new { Business = 1, Family = 2, Social = 3, Sales = 4, Other = 5 };Code to create Connection Role for account and contact entity
// Create the Connection Role 1 ConnectionRole newConnectionRole1 = new ConnectionRole { Name = "Example Connection Role 1", Category = new OptionSetValue(Categories.Business), }; Guid _connectionRole1Id = _serviceProxy.Create(newConnectionRole1); // Create a related Connection Role Object Type Code record for Account ConnectionRoleObjectTypeCode newAccountConnectionRole1TypeCode = new ConnectionRoleObjectTypeCode { ConnectionRoleId = new EntityReference( ConnectionRole.EntityLogicalName, _connectionRole1Id), AssociatedObjectTypeCode = Account.EntityLogicalName }; _serviceProxy.Create(newAccountConnectionRole1TypeCode); // Create a related Connection Role Object Type Code record for Contact ConnectionRoleObjectTypeCode newContactConnectionRole1TypeCode = new ConnectionRoleObjectTypeCode { ConnectionRoleId = new EntityReference( ConnectionRole.EntityLogicalName, _connectionRole1Id), AssociatedObjectTypeCode = Contact.EntityLogicalName }; _serviceProxy.Create(newContactConnectionRole1TypeCode); // Create the Connection Role 2 ConnectionRole newConnectionRole2 = new ConnectionRole { Name = "Example Connection Role 2", Category = new OptionSetValue(Categories.Business), }; Guid _connectionRole2Id = _serviceProxy.Create(newConnectionRole2); // Create a related Connection Role 2 Object Type Code record for Account ConnectionRoleObjectTypeCode newAccountConnectionRole2TypeCode = new ConnectionRoleObjectTypeCode { ConnectionRoleId = new EntityReference( ConnectionRole.EntityLogicalName, _connectionRole2Id), AssociatedObjectTypeCode = Account.EntityLogicalName }; _serviceProxy.Create(newAccountConnectionRole2TypeCode); // Create a related Connection Role 2 Object Type Code record for Contact ConnectionRoleObjectTypeCode newContactConnectionRole2TypeCode = new ConnectionRoleObjectTypeCode { ConnectionRoleId = new EntityReference( ConnectionRole.EntityLogicalName, _connectionRole2Id), AssociatedObjectTypeCode = Contact.EntityLogicalName }; _serviceProxy.Create(newContactConnectionRole2TypeCode);Code to Associate the connection roles
AssociateRequest associateConnectionRoles = new AssociateRequest { Target = new EntityReference(ConnectionRole.EntityLogicalName, _connectionRole1Id), RelatedEntities = new EntityReferenceCollection() { new EntityReference(ConnectionRole.EntityLogicalName, _connectionRole2Id) }, // The name of the relationship connection role association // relationship in MS CRM Relationship = new Relationship() { PrimaryEntityRole = EntityRole.Referencing, // Referencing or Referenced based on N:1 or 1:N reflexive relationship. SchemaName = "connectionroleassociation_association" } }; _serviceProxy.Execute(associateConnectionRoles);Code to Update the connectionrole instance
ConnectionRole connectionRole = new ConnectionRole { ConnectionRoleId = _connectionRole1Id, Name = "Updated Connection Role", Description = "This is an updated connection role.", Category = new OptionSetValue(Categories.Other) }; _serviceProxy.Update(connectionRole);Code to create a connection between the account and the contact and assign a connection role to a record
// Create an Account Account setupAccount = new Account { Name = "Example Account" }; Guid _accountId = _serviceProxy.Create(setupAccount); // Create a Contact Contact setupContact = new Contact { LastName = "Example Contact" }; Guid _contactId = _serviceProxy.Create(setupContact); // Create a connection between the account and the contact. // Assign a connection role to a record. Connection newConnection = new Connection { Record1Id = new EntityReference(Account.EntityLogicalName, _accountId), Record1RoleId = new EntityReference(ConnectionRole.EntityLogicalName, _connectionRole1Id), Record2RoleId = new EntityReference(ConnectionRole.EntityLogicalName, _connectionRole1Id), Record2Id = new EntityReference(Contact.EntityLogicalName, _contactId) }; Guid _connectionId = _serviceProxy.Create(newConnection);Code to retrieves all connections related to contact record
QueryExpression query = new QueryExpression { EntityName = Connection.EntityLogicalName, ColumnSet = new ColumnSet("connectionid"), Criteria = new FilterExpression { FilterOperator = LogicalOperator.And, Conditions = { // You can safely query against only record1id or // record2id - CRM will find all connections this // entity is a part of either way. new ConditionExpression { AttributeName = "record1id", Operator = ConditionOperator.Equal, Values = { _contactId } } } } }; EntityCollection results = _serviceProxy.RetrieveMultiple(query);Code to retrieves all connections related to specified object type code
QueryExpression allQuery = new QueryExpression { EntityName = ConnectionRole.EntityLogicalName, ColumnSet = new ColumnSet("connectionroleid", "name"), Distinct = true, LinkEntities = { new LinkEntity { LinkToEntityName = ConnectionRoleObjectTypeCode.EntityLogicalName, LinkToAttributeName = "connectionroleid", LinkFromEntityName = ConnectionRole.EntityLogicalName, LinkFromAttributeName = "connectionroleid", LinkCriteria = new FilterExpression { FilterOperator = LogicalOperator.And, // Set a condition to only get connection roles // related to all entities (object type code = 0). Conditions = { new ConditionExpression { AttributeName = "associatedobjecttypecode", Operator = ConditionOperator.Equal, Values = { 0 } } } } } } }; EntityCollection typecoderesults = _serviceProxy.RetrieveMultiple(allQuery);Code to retrieves all connection roles that have this role listed as a reciprocal role
QueryExpression reciprocalrolequery = new QueryExpression { EntityName = ConnectionRole.EntityLogicalName, ColumnSet = new ColumnSet("connectionroleid"), LinkEntities = { new LinkEntity { JoinOperator = JoinOperator.Inner, LinkFromEntityName = ConnectionRole.EntityLogicalName, LinkFromAttributeName = "connectionroleid", LinkToEntityName = "connectionroleassociation", LinkToAttributeName = "connectionroleid", LinkCriteria = new FilterExpression { FilterOperator = LogicalOperator.And, Conditions = { new ConditionExpression { AttributeName = "associatedconnectionroleid", Operator = ConditionOperator.Equal, Values = { _connectionRole2Id } } } } } } }; EntityCollection reciprocalroleresults = _serviceProxy.RetrieveMultiple(reciprocalrolequery);Complete Code
using (OrganizationServiceProxy _serviceProxy = new OrganizationServiceProxy(serverConfig.OrganizationUri, serverConfig.HomeRealmUri, serverConfig.Credentials, serverConfig.DeviceCredentials)) { _serviceProxy.ServiceConfiguration.CurrentServiceEndpoint.Behaviors.Add(new ProxyTypesBehavior()); // Define some anonymous types to define the range // of possible connection property values. var Categories = new { Business = 1, Family = 2, Social = 3, Sales = 4, Other = 5 }; // Create the Connection Role 1 ConnectionRole newConnectionRole1 = new ConnectionRole { Name = "Example Connection Role 1", Category = new OptionSetValue(Categories.Business), }; Guid _connectionRole1Id = _serviceProxy.Create(newConnectionRole1); // Create a related Connection Role Object Type Code record for Account ConnectionRoleObjectTypeCode newAccountConnectionRole1TypeCode = new ConnectionRoleObjectTypeCode { ConnectionRoleId = new EntityReference( ConnectionRole.EntityLogicalName, _connectionRole1Id), AssociatedObjectTypeCode = Account.EntityLogicalName }; _serviceProxy.Create(newAccountConnectionRole1TypeCode); // Create a related Connection Role Object Type Code record for Contact ConnectionRoleObjectTypeCode newContactConnectionRole1TypeCode = new ConnectionRoleObjectTypeCode { ConnectionRoleId = new EntityReference( ConnectionRole.EntityLogicalName, _connectionRole1Id), AssociatedObjectTypeCode = Contact.EntityLogicalName }; _serviceProxy.Create(newContactConnectionRole1TypeCode); // Create the Connection Role 2 ConnectionRole newConnectionRole2 = new ConnectionRole { Name = "Example Connection Role 2", Category = new OptionSetValue(Categories.Business), }; Guid _connectionRole2Id = _serviceProxy.Create(newConnectionRole2); // Create a related Connection Role 2 Object Type Code record for Account ConnectionRoleObjectTypeCode newAccountConnectionRole2TypeCode = new ConnectionRoleObjectTypeCode { ConnectionRoleId = new EntityReference( ConnectionRole.EntityLogicalName, _connectionRole2Id), AssociatedObjectTypeCode = Account.EntityLogicalName }; _serviceProxy.Create(newAccountConnectionRole2TypeCode); // Create a related Connection Role 2 Object Type Code record for Contact ConnectionRoleObjectTypeCode newContactConnectionRole2TypeCode = new ConnectionRoleObjectTypeCode { ConnectionRoleId = new EntityReference( ConnectionRole.EntityLogicalName, _connectionRole2Id), AssociatedObjectTypeCode = Contact.EntityLogicalName }; _serviceProxy.Create(newContactConnectionRole2TypeCode); // Associate the connection roles AssociateRequest associateConnectionRoles = new AssociateRequest { Target = new EntityReference(ConnectionRole.EntityLogicalName, _connectionRole1Id), RelatedEntities = new EntityReferenceCollection() { new EntityReference(ConnectionRole.EntityLogicalName, _connectionRole2Id) }, // The name of the relationship connection role association // relationship in MS CRM Relationship = new Relationship() { PrimaryEntityRole = EntityRole.Referencing, // Referencing or Referenced based on N:1 or 1:N reflexive relationship. SchemaName = "connectionroleassociation_association" } }; _serviceProxy.Execute(associateConnectionRoles); // Update the connectionrole instance. ConnectionRole connectionRole = new ConnectionRole { ConnectionRoleId = _connectionRole1Id, Name = "Updated Connection Role", Description = "This is an updated connection role.", Category = new OptionSetValue(Categories.Other) }; _serviceProxy.Update(connectionRole); // Create an Account Account setupAccount = new Account { Name = "Example Account" }; Guid _accountId = _serviceProxy.Create(setupAccount); // Create a Contact Contact setupContact = new Contact { LastName = "Example Contact" }; Guid _contactId = _serviceProxy.Create(setupContact); // Create a connection between the account and the contact. // Assign a connection role to a record. Connection newConnection = new Connection { Record1Id = new EntityReference(Account.EntityLogicalName, _accountId), Record1RoleId = new EntityReference(ConnectionRole.EntityLogicalName, _connectionRole1Id), Record2RoleId = new EntityReference(ConnectionRole.EntityLogicalName, _connectionRole1Id), Record2Id = new EntityReference(Contact.EntityLogicalName, _contactId) }; Guid _connectionId = _serviceProxy.Create(newConnection); // This query retrieves all connections related to contact record. QueryExpression query = new QueryExpression { EntityName = Connection.EntityLogicalName, ColumnSet = new ColumnSet("connectionid"), Criteria = new FilterExpression { FilterOperator = LogicalOperator.And, Conditions = { // You can safely query against only record1id or // record2id - CRM will find all connections this // entity is a part of either way. new ConditionExpression { AttributeName = "record1id", Operator = ConditionOperator.Equal, Values = { _contactId } } } } }; EntityCollection results = _serviceProxy.RetrieveMultiple(query); // This query retrieves all connections related to specified object type code. QueryExpression allQuery = new QueryExpression { EntityName = ConnectionRole.EntityLogicalName, ColumnSet = new ColumnSet("connectionroleid", "name"), Distinct = true, LinkEntities = { new LinkEntity { LinkToEntityName = ConnectionRoleObjectTypeCode.EntityLogicalName, LinkToAttributeName = "connectionroleid", LinkFromEntityName = ConnectionRole.EntityLogicalName, LinkFromAttributeName = "connectionroleid", LinkCriteria = new FilterExpression { FilterOperator = LogicalOperator.And, // Set a condition to only get connection roles // related to all entities (object type code = 0). Conditions = { new ConditionExpression { AttributeName = "associatedobjecttypecode", Operator = ConditionOperator.Equal, Values = { 0 } } } } } } }; EntityCollection typecoderesults = _serviceProxy.RetrieveMultiple(allQuery); // This query retrieves all connection roles that have this role // listed as a reciprocal role. QueryExpression reciprocalrolequery = new QueryExpression { EntityName = ConnectionRole.EntityLogicalName, ColumnSet = new ColumnSet("connectionroleid"), LinkEntities = { new LinkEntity { JoinOperator = JoinOperator.Inner, LinkFromEntityName = ConnectionRole.EntityLogicalName, LinkFromAttributeName = "connectionroleid", LinkToEntityName = "connectionroleassociation", LinkToAttributeName = "connectionroleid", LinkCriteria = new FilterExpression { FilterOperator = LogicalOperator.And, Conditions = { new ConditionExpression { AttributeName = "associatedconnectionroleid", Operator = ConditionOperator.Equal, Values = { _connectionRole2Id } } } } } } }; EntityCollection reciprocalroleresults = _serviceProxy.RetrieveMultiple(reciprocalrolequery); }
No comments:
Post a Comment