コード例 #1
0
ファイル: CustomUrlProvider.cs プロジェクト: jy4618272/Common
        /// <summary>
        /// Parses specified host and returns the organization and instance.
        /// </summary>
        /// <param name="host">Host component of the URL.</param>
        /// <param name="organization">An organization.</param>
        /// <param name="instance">An instance.</param>
        public static void ParseHost(string host, ref Organization organization, ref Instance instance)
        {
            Guid[] values = GetCustomUrlFromCache(host);
            if (values != null)
            {
                organization = OrganizationProvider.GetOrganizationFromCache(values[0], true);

                if (values.Length > 1)
                {
                    instance = InstanceProvider.GetInstanceFromCache(values[1], values[0], true);
                }

                return;
            }

            MasterDataSet.CustomUrlRow row = GetCustomUrl(host);
            if (row != null)
            {
                organization = OrganizationProvider.GetOrganizationFromCache(row.OrganizationId, true);

                if (instance == null)
                {
                    if (!row.IsInstanceIdNull())
                    {
                        instance = InstanceProvider.GetInstanceFromCache(row.InstanceId, row.OrganizationId, true);
                    }
                }
            }
            else
            {
                string[] segments = host.ToLowerInvariant().Split('.');

                if (segments.Length < 2)
                {
                    return;
                }

                string segment = segments[0];

                if (string.Compare(segment, FrameworkConfiguration.Current.WebApplication.CustomUrl.AuthenticationTicketDomain, StringComparison.OrdinalIgnoreCase) == 0)
                {
                    return;
                }

                MasterDataSet.CustomUrlRow customUrlRow = null;
                string   instPseudoId = null;
                string[] pseudos      = segment.Split('-');

                if (pseudos.Length > 1)
                {
                    organization = OrganizationProvider.GetOrganizationByPseudoIdFromCache(pseudos[0]);
                    instPseudoId = pseudos[1];

                    if (organization == null)
                    {
                        customUrlRow = GetCustomUrl(pseudos[0]);
                        if (customUrlRow != null)
                        {
                            organization = OrganizationProvider.GetOrganizationFromCache(customUrlRow.OrganizationId, true);
                        }
                    }
                }
                else
                {
                    organization = OrganizationProvider.GetOrganizationByPseudoIdFromCache(segment);
                }

                if (organization == null)
                {
                    customUrlRow = GetCustomUrl(segment);
                    if (customUrlRow != null)
                    {
                        organization = OrganizationProvider.GetOrganizationFromCache(customUrlRow.OrganizationId, true);

                        if (instance == null)
                        {
                            if (!customUrlRow.IsInstanceIdNull())
                            {
                                instance = InstanceProvider.GetInstanceFromCache(customUrlRow.InstanceId, customUrlRow.OrganizationId, true);
                            }
                        }
                    }
                }

                if (organization != null)
                {
                    if (instance == null)
                    {
                        if (!string.IsNullOrEmpty(instPseudoId))
                        {
                            instance = InstanceProvider.GetInstanceByPseudoIdFromCache(instPseudoId, organization.OrganizationId);
                        }
                    }
                }
            }

            if (organization != null)
            {
                if (instance == null)
                {
                    values = new Guid[] { organization.OrganizationId }
                }
                ;
                else
                {
                    values = new Guid[] { organization.OrganizationId, instance.InstanceId }
                };
                PutCustomUrlToCache(host, values);
            }
        }
コード例 #2
0
ファイル: CustomUrlProvider.cs プロジェクト: jy4618272/Common
        /// <summary>
        /// Gets Custom url by organizationId and instanceId. If need only by organization use instanceId == Guid.Empty
        /// </summary>
        /// <param name="organizationId">Organization Id</param>
        /// <param name="instanceId">Instance Id</param>
        /// <returns>Custom Url</returns>
        public static string GetVanityUrl(Guid organizationId, Guid instanceId)
        {
            string customUrl = null;

            if (instanceId != Guid.Empty)
            {
                customUrl = GetInstanceCustomUrlFromCache(instanceId);
            }

            if (string.IsNullOrEmpty(customUrl))
            {
                customUrl = GetOrganizationCustomUrlFromCache(organizationId);
            }

            if (!string.IsNullOrEmpty(customUrl))
            {
                return(customUrl);
            }

            Organization org = OrganizationProvider.GetOrganizationFromCache(organizationId, true);

            if (org != null)
            {
                Instance inst = null;
                MasterDataSet.CustomUrlRow row = null;

                if (instanceId != Guid.Empty)
                {
                    row  = GetCustomUrl(organizationId, instanceId);
                    inst = InstanceProvider.GetInstanceFromCache(instanceId, organizationId, true);
                }

                if (row == null)
                {
                    row = GetCustomUrlByOrganizationId(organizationId);
                }

                CustomUrlElement customUrlSettings = FrameworkConfiguration.Current.WebApplication.CustomUrl;

                if (row != null)
                {
                    if (row.IsInstanceIdNull() && (inst != null))
                    {
                        customUrl = row.PartialCustomUrl + "-" + inst.PseudoId + "." + customUrlSettings.PartialCustomUrlRootAddressesFirst;

                        PutInstanceCustomUrlToCache(instanceId, customUrl);
                    }
                    else
                    {
                        if (customUrlSettings.PartialCustomUrlIsPrimary)
                        {
                            customUrl = row.PartialCustomUrl + "." + customUrlSettings.PartialCustomUrlRootAddressesFirst;
                        }
                        else
                        {
                            customUrl = (!string.IsNullOrEmpty(row.FullCustomUrl))
                                ? row.FullCustomUrl
                                : row.PartialCustomUrl + "." + customUrlSettings.PartialCustomUrlRootAddressesFirst;
                        }

                        if (row.IsInstanceIdNull())
                        {
                            PutOrganizationCustomUrlToCache(organizationId, customUrl);
                        }
                        else
                        {
                            PutInstanceCustomUrlToCache(row.InstanceId, customUrl);
                        }
                    }
                }
                else
                {
                    if (inst != null)
                    {
                        customUrl = org.PseudoId + "-" + inst.PseudoId + "." + customUrlSettings.PartialCustomUrlRootAddressesFirst;
                    }
                    else
                    {
                        customUrl = org.PseudoId + "." + customUrlSettings.PartialCustomUrlRootAddressesFirst;
                    }
                }
            }

            return(string.IsNullOrEmpty(customUrl) ? string.Empty : customUrl);
        }