예제 #1
0
        public bool CreateManyToMany(IOrganizationService service, XRMSpeedyRelationship relationship, string prefix, int languageCode)
        {
            try
            {
                CreateManyToManyRequest createManyToManyRelationshipRequest = new CreateManyToManyRequest
                {
                    IntersectEntitySchemaName = relationship.SchemaName,
                    ManyToManyRelationship    = new ManyToManyRelationshipMetadata
                    {
                        SchemaName         = relationship.SchemaName,
                        Entity1LogicalName = relationship.Entity1,
                        Entity1AssociatedMenuConfiguration =
                            new AssociatedMenuConfiguration
                        {
                            Behavior = AssociatedMenuBehavior.UseLabel,
                            Group    = AssociatedMenuGroup.Details,
                            Label    = new Label(relationship.Entity1Display, languageCode),
                            Order    = 10000
                        },
                        Entity2LogicalName = relationship.Entity2,
                        Entity2AssociatedMenuConfiguration =
                            new AssociatedMenuConfiguration
                        {
                            Behavior = AssociatedMenuBehavior.UseLabel,
                            Group    = AssociatedMenuGroup.Details,
                            Label    = new Label(relationship.Entity2Display, languageCode),
                            Order    = 10000
                        }
                    }
                };

                CreateManyToManyResponse createManytoManyRelationshipResponse =
                    (CreateManyToManyResponse)service.Execute(createManyToManyRelationshipRequest);

                return(true);
            }
            catch (FaultException <OrganizationServiceFault> )
            {
                throw;
            }
        }
예제 #2
0
        /// <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;
            }
        }