private static void CreateOneToManyAttribute(OrganizationServiceProxy service, string referencedEntityName, string referencingEntityName, string referencedEntityDisplayName, string attributeSchemaName, string attributeDisplayName, string attributeDescription) { CreateOneToManyRequest createOneToManyRelationshipRequest = new CreateOneToManyRequest { OneToManyRelationship = new OneToManyRelationshipMetadata { ReferencedEntity = referencingEntityName, ReferencingEntity = referencedEntityName, SchemaName = publisherPrefix + referencedEntityName + "_" + referencingEntityName + "_" + attributeSchemaName, AssociatedMenuConfiguration = new AssociatedMenuConfiguration { Behavior = AssociatedMenuBehavior.UseLabel, Group = AssociatedMenuGroup.Details, Label = new Label(referencedEntityDisplayName, 1033), Order = 10000 }, CascadeConfiguration = new CascadeConfiguration { Assign = CascadeType.NoCascade, Delete = CascadeType.RemoveLink, Merge = CascadeType.NoCascade, Reparent = CascadeType.NoCascade, Share = CascadeType.NoCascade, Unshare = CascadeType.NoCascade } }, Lookup = new LookupAttributeMetadata { SchemaName = publisherPrefix + attributeSchemaName, DisplayName = new Label(attributeDisplayName, 1033), RequiredLevel = new AttributeRequiredLevelManagedProperty(AttributeRequiredLevel.None), Description = new Label(attributeDescription, 1033) } }; CreateOneToManyResponse createOneToManyRelationshipResponse = (CreateOneToManyResponse)service.Execute( createOneToManyRelationshipRequest); Console.WriteLine( "The one-to-many relationship has been created between {0} and {1}.", referencedEntityName, referencingEntityName); }
public bool CreateOneToMany(IOrganizationService service, XRMSpeedyRelationship relationship, string prefix, int languageCode) { try { CreateOneToManyRequest createOneToManyRelationshipRequest = new CreateOneToManyRequest { OneToManyRelationship = new OneToManyRelationshipMetadata { ReferencedEntity = relationship.Entity1, ReferencingEntity = relationship.Entity2, SchemaName = relationship.SchemaName, AssociatedMenuConfiguration = new AssociatedMenuConfiguration { Behavior = AssociatedMenuBehavior.UseLabel, Group = AssociatedMenuGroup.Details, Label = new Label(relationship.Entity1.Substring(0, 1).ToUpper() + relationship.Entity1.Substring(1), languageCode), Order = 10000 }, CascadeConfiguration = new CascadeConfiguration { Assign = CascadeType.NoCascade, Delete = CascadeType.RemoveLink, Merge = CascadeType.Cascade, Reparent = CascadeType.NoCascade, Share = CascadeType.NoCascade, Unshare = CascadeType.NoCascade } }, Lookup = relationship.PrimaryField }; CreateOneToManyResponse createOneToManyRelationshipResponse = (CreateOneToManyResponse)service.Execute(createOneToManyRelationshipRequest); return(true); } catch (FaultException <OrganizationServiceFault> ) { throw; } }
/// <summary> /// Create and configure the organization service proxy. /// Create one-to-many relationship. /// Create many-to-many relationship. /// Optionally delete any entity records that were created for this sample. /// </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(); //<snippetWorkWithRelationships1> bool eligibleCreateOneToManyRelationship = EligibleCreateOneToManyRelationship("account", "campaign"); if (eligibleCreateOneToManyRelationship) { CreateOneToManyRequest createOneToManyRelationshipRequest = new CreateOneToManyRequest { OneToManyRelationship = new OneToManyRelationshipMetadata { ReferencedEntity = "account", ReferencingEntity = "campaign", SchemaName = "new_account_campaign", AssociatedMenuConfiguration = new AssociatedMenuConfiguration { Behavior = AssociatedMenuBehavior.UseLabel, Group = AssociatedMenuGroup.Details, Label = new Label("Account", 1033), Order = 10000 }, CascadeConfiguration = new CascadeConfiguration { Assign = CascadeType.NoCascade, Delete = CascadeType.RemoveLink, Merge = CascadeType.NoCascade, Reparent = CascadeType.NoCascade, Share = CascadeType.NoCascade, Unshare = CascadeType.NoCascade } }, Lookup = new LookupAttributeMetadata { SchemaName = "new_parent_accountid", DisplayName = new Label("Account Lookup", 1033), RequiredLevel = new AttributeRequiredLevelManagedProperty(AttributeRequiredLevel.None), Description = new Label("Sample Lookup", 1033) } }; CreateOneToManyResponse createOneToManyRelationshipResponse = (CreateOneToManyResponse)_serviceProxy.Execute( createOneToManyRelationshipRequest); _oneToManyRelationshipId = createOneToManyRelationshipResponse.RelationshipId; _oneToManyRelationshipName = createOneToManyRelationshipRequest.OneToManyRelationship.SchemaName; Console.WriteLine( "The one-to-many relationship has been created between {0} and {1}.", "account", "campaign"); } //</snippetWorkWithRelationships1> //<snippetWorkWithRelationships2> bool accountEligibleParticipate = EligibleCreateManyToManyRelationship("account"); bool campaignEligibleParticipate = EligibleCreateManyToManyRelationship("campaign"); if (accountEligibleParticipate && campaignEligibleParticipate) { CreateManyToManyRequest createManyToManyRelationshipRequest = new CreateManyToManyRequest { IntersectEntitySchemaName = "new_accounts_campaigns", ManyToManyRelationship = new ManyToManyRelationshipMetadata { SchemaName = "new_accounts_campaigns", Entity1LogicalName = "account", Entity1AssociatedMenuConfiguration = new AssociatedMenuConfiguration { Behavior = AssociatedMenuBehavior.UseLabel, Group = AssociatedMenuGroup.Details, Label = new Label("Account", 1033), Order = 10000 }, Entity2LogicalName = "campaign", Entity2AssociatedMenuConfiguration = new AssociatedMenuConfiguration { Behavior = AssociatedMenuBehavior.UseLabel, Group = AssociatedMenuGroup.Details, Label = new Label("Campaign", 1033), Order = 10000 } } }; CreateManyToManyResponse createManytoManyRelationshipResponse = (CreateManyToManyResponse)_serviceProxy.Execute( createManyToManyRelationshipRequest); _manyToManyRelationshipId = createManytoManyRelationshipResponse.ManyToManyRelationshipId; _manyToManyRelationshipName = createManyToManyRelationshipRequest.ManyToManyRelationship.SchemaName; Console.WriteLine( "The many-to-many relationship has been created between {0} and {1}.", "account", "campaign"); } //</snippetWorkWithRelationships2> // Publish the customization changes. _serviceProxy.Execute(new PublishAllXmlRequest()); //<snippetWorkWithRelationships.RetrieveRelationship> //You can use either the Name or the MetadataId of the relationship. //Retrieve the One-to-many relationship using the MetadataId. RetrieveRelationshipRequest retrieveOneToManyRequest = new RetrieveRelationshipRequest { MetadataId = _oneToManyRelationshipId }; RetrieveRelationshipResponse retrieveOneToManyResponse = (RetrieveRelationshipResponse)_serviceProxy.Execute(retrieveOneToManyRequest); Console.WriteLine("Retrieved {0} One-to-many relationship by id", retrieveOneToManyResponse.RelationshipMetadata.SchemaName); //Retrieve the Many-to-many relationship using the Name. RetrieveRelationshipRequest retrieveManyToManyRequest = new RetrieveRelationshipRequest { Name = _manyToManyRelationshipName }; RetrieveRelationshipResponse retrieveManyToManyResponse = (RetrieveRelationshipResponse)_serviceProxy.Execute(retrieveManyToManyRequest); Console.WriteLine("Retrieved {0} Many-to-Many relationship by Name", retrieveManyToManyResponse.RelationshipMetadata.MetadataId); //</snippetWorkWithRelationships.RetrieveRelationship> 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; } }
public void Run() { objCRMHelper = new CRMHelper(); _serviceProxy = objCRMHelper.setSrvice(); try { //<snippetWorkWithRelationships1> bool eligibleCreateOneToManyRelationship = EligibleCreateOneToManyRelationship("rah_country", "rah_territory"); Console.WriteLine("fileName" + fileName); if (eligibleCreateOneToManyRelationship) { CreateOneToManyRequest createOneToManyRelationshipRequest = new CreateOneToManyRequest { OneToManyRelationship = new OneToManyRelationshipMetadata { ReferencedEntity = "rah_country", ReferencingEntity = "rah_territory", SchemaName = "rah_country_rah_territory", AssociatedMenuConfiguration = new AssociatedMenuConfiguration { // Behavior = AssociatedMenuBehavior.UseLabel, Behavior = AssociatedMenuBehavior.UseLabel, Group = AssociatedMenuGroup.Details, Label = new Label("MASTER Country", 1033), Order = 10000 }, CascadeConfiguration = new CascadeConfiguration { Assign = CascadeType.NoCascade, Delete = CascadeType.Restrict, Merge = CascadeType.NoCascade, Reparent = CascadeType.NoCascade, Share = CascadeType.NoCascade, Unshare = CascadeType.NoCascade } }, Lookup = new LookupAttributeMetadata { SchemaName = "rah_parent_rah_countryid", DisplayName = new Label("Country Lookup", 1033), RequiredLevel = new AttributeRequiredLevelManagedProperty(AttributeRequiredLevel.None), Description = new Label("MASTer Sample rah_country Lookup", 1033) } }; CreateOneToManyResponse createOneToManyRelationshipResponse = (CreateOneToManyResponse)_serviceProxy.Execute( createOneToManyRelationshipRequest); _oneToManyRelationshipId = createOneToManyRelationshipResponse.RelationshipId; _oneToManyRelationshipName = createOneToManyRelationshipRequest.OneToManyRelationship.SchemaName; Console.WriteLine( "The One-to-Many relationship has been created between {0} and {1}.", "rah_country", "rah_territory"); } } catch (FaultException <OrganizationServiceFault> ex) { Console.WriteLine("The application terminated with an error."); Console.WriteLine("Timestamp: {0}", ex.Detail.Timestamp); Console.WriteLine("Code: {0}", ex.Detail.ErrorCode); Console.WriteLine("Message: {0}", ex.Detail.Message); Console.WriteLine("Plugin Trace: {0}", ex.Detail.TraceText); Console.WriteLine("Inner Fault: {0}", null == ex.Detail.InnerFault ? "No Inner Fault" : "Has Inner Fault"); } catch (System.TimeoutException ex) { Console.WriteLine("The application terminated with an error."); Console.WriteLine("Message: {0}", ex.Message); Console.WriteLine("Stack Trace: {0}", ex.StackTrace); Console.WriteLine("Inner Fault: {0}", null == ex.InnerException.Message ? "No Inner Fault" : ex.InnerException.Message); } catch (System.Exception ex) { Console.WriteLine("The application terminated with an error."); Console.WriteLine(ex.Message); // Display the details of the inner exception. if (ex.InnerException != null) { Console.WriteLine(ex.InnerException.Message); FaultException <OrganizationServiceFault> fe = ex.InnerException as FaultException <Microsoft.Xrm.Sdk.OrganizationServiceFault>; if (fe != null) { Console.WriteLine("Timestamp: {0}", fe.Detail.Timestamp); Console.WriteLine("Code: {0}", fe.Detail.ErrorCode); Console.WriteLine("Message: {0}", fe.Detail.Message); Console.WriteLine("Plugin Trace: {0}", fe.Detail.TraceText); Console.WriteLine("Inner Fault: {0}", null == fe.Detail.InnerFault ? "No Inner Fault" : "Has Inner Fault"); } } } }