private static async Task <IOrganizationServiceExtented> Connect(ConnectionData connectionData) { bool withDiscoveryRequest = !connectionData.OrganizationInformationExpirationDate.HasValue || connectionData.OrganizationInformationExpirationDate.Value < DateTime.Now; try { var service = ConnectInternal( connectionData , withDiscoveryRequest , out OrganizationDetail organizationDetail ); if (service != null) { var result = new OrganizationServiceExtentedProxy(service, connectionData); await LoadOrganizationDataAsync(result, organizationDetail); return(result); } connectionData.OrganizationInformationExpirationDate = null; return(null); } catch (Exception) { connectionData.OrganizationInformationExpirationDate = null; throw; } }
private static async Task <bool> TestConnect(ConnectionData connectionData, IWriteToOutput iWriteToOutput) { iWriteToOutput.ActivateOutputWindow(connectionData); iWriteToOutput.WriteToOutput(connectionData, Properties.OutputStrings.ConnectingToCRM); iWriteToOutput.WriteToOutput(connectionData, connectionData.GetConnectionDescription()); try { var service = ConnectInternal( connectionData , true , out OrganizationDetail organizationDetail ); if (service != null) { { WhoAmIResponse whoresponse = (WhoAmIResponse)service.Execute(new WhoAmIRequest()); iWriteToOutput.WriteToOutput(connectionData, Properties.OutputStrings.WhoAmIRequestExecutedSuccessfully); iWriteToOutput.WriteToOutput(connectionData, Properties.OutputStrings.QuickConnectionOrganizationIdFormat1, whoresponse.OrganizationId); iWriteToOutput.WriteToOutput(connectionData, Properties.OutputStrings.QuickConnectionBusinessUnitIdFormat1, whoresponse.BusinessUnitId); iWriteToOutput.WriteToOutput(connectionData, Properties.OutputStrings.QuickConnectionUserIdFormat1, whoresponse.UserId); } var result = new OrganizationServiceExtentedProxy(service, connectionData); await LoadOrganizationDataAsync(result, organizationDetail); iWriteToOutput.WriteToOutput(connectionData, Properties.OutputStrings.CurrentServiceEndpointFormat1, result.CurrentServiceEndpoint); iWriteToOutput.WriteToOutput(connectionData, Properties.OutputStrings.SuccessfullyConnectedFormat1, connectionData.Name); return(true); } else { iWriteToOutput.WriteToOutput(connectionData, Properties.OutputStrings.ConnectionFailedFormat1, connectionData.Name); return(false); } } catch (Exception ex) { iWriteToOutput.WriteErrorToOutput(connectionData, ex); iWriteToOutput.WriteToOutput(connectionData, Properties.OutputStrings.ConnectionFailedFormat1, connectionData.Name); return(false); } }
private static async Task <bool> TestConnect(ConnectionData connectionData, IWriteToOutput iWriteToOutput, System.Windows.Window window) { iWriteToOutput.ActivateOutputWindow(connectionData, window); iWriteToOutput.WriteToOutput(connectionData, Properties.OutputStrings.ConnectingToCRM); iWriteToOutput.WriteToOutput(connectionData, connectionData.GetConnectionDescription()); try { var connectionResult = await ConnectInternal(connectionData, true); OrganizationServiceProxy serviceProxy = connectionResult.Item1; OrganizationDetail organizationDetail = connectionResult.Item2; string currentServiceEndpoint = GetServiceManagementEndpoint(connectionData.ConnectionId); if (serviceProxy != null) { using (var serviceProxyExt = new OrganizationServiceExtentedProxy(serviceProxy, connectionData, currentServiceEndpoint)) { var whoAmIResponse = await serviceProxyExt.ExecuteAsync <WhoAmIResponse>(new WhoAmIRequest()); iWriteToOutput.WriteToOutput(connectionData, Properties.OutputStrings.WhoAmIRequestExecutedSuccessfully); iWriteToOutput.WriteToOutput(connectionData, Properties.OutputStrings.QuickConnectionOrganizationIdFormat1, whoAmIResponse.OrganizationId); iWriteToOutput.WriteToOutput(connectionData, Properties.OutputStrings.QuickConnectionBusinessUnitIdFormat1, whoAmIResponse.BusinessUnitId); iWriteToOutput.WriteToOutput(connectionData, Properties.OutputStrings.QuickConnectionUserIdFormat1, whoAmIResponse.UserId); await LoadOrganizationDataAsync(serviceProxyExt, organizationDetail, whoAmIResponse); iWriteToOutput.WriteToOutput(connectionData, Properties.OutputStrings.CurrentServiceEndpointFormat1, serviceProxyExt.CurrentServiceEndpoint); } iWriteToOutput.WriteToOutput(connectionData, Properties.OutputStrings.SuccessfullyConnectedFormat1, connectionData.Name); return(true); } else { iWriteToOutput.WriteToOutput(connectionData, Properties.OutputStrings.ConnectionFailedFormat1, connectionData.Name); return(false); } } catch (Exception ex) { iWriteToOutput.WriteErrorToOutput(connectionData, ex); iWriteToOutput.WriteToOutput(connectionData, Properties.OutputStrings.ConnectionFailedFormat1, connectionData.Name); return(false); } }
private static async Task <IOrganizationServiceExtented> Connect(ConnectionData connectionData) { bool withDiscoveryRequest = !connectionData.OrganizationInformationExpirationDate.HasValue || connectionData.OrganizationInformationExpirationDate.Value < DateTime.Now; try { OrganizationServiceProxy serviceProxy = null; OrganizationDetail organizationDetail = null; if (!connectionData.TryGetServiceFromConnectionPool(out serviceProxy)) { var connectionResult = await ConnectInternal(connectionData, withDiscoveryRequest); serviceProxy = connectionResult.Item1; organizationDetail = connectionResult.Item2; } string currentServiceEndpoint = GetServiceManagementEndpoint(connectionData.ConnectionId); if (serviceProxy != null) { var result = new OrganizationServiceExtentedProxy(serviceProxy, connectionData, currentServiceEndpoint); await LoadOrganizationDataAsync(result, organizationDetail); return(result); } connectionData.OrganizationInformationExpirationDate = null; return(null); } catch (Exception) { connectionData.OrganizationInformationExpirationDate = null; throw; } }
private static async Task LoadOrganizationDataAsync(OrganizationServiceExtentedProxy service, OrganizationDetail organizationDetail, WhoAmIResponse whoAmIResponse = null) { try { Guid?idOrganization = null; if (organizationDetail != null) { idOrganization = organizationDetail.OrganizationId; service.ConnectionData.OrganizationInformationExpirationDate = DateTime.Now.AddHours(_hoursOrganizationInformation); service.ConnectionData.FriendlyName = organizationDetail.FriendlyName; service.ConnectionData.OrganizationId = organizationDetail.OrganizationId; service.ConnectionData.OrganizationVersion = organizationDetail.OrganizationVersion; service.ConnectionData.OrganizationState = organizationDetail.State.ToString(); service.ConnectionData.UniqueOrgName = organizationDetail.UniqueName; service.ConnectionData.UrlName = organizationDetail.UrlName; if (organizationDetail.Endpoints.ContainsKey(EndpointType.OrganizationService)) { var organizationUrlEndpoint = organizationDetail.Endpoints[EndpointType.OrganizationService]; if (string.IsNullOrEmpty(service.ConnectionData.OrganizationUrl) && !string.IsNullOrEmpty(organizationUrlEndpoint) ) { service.ConnectionData.OrganizationUrl = organizationUrlEndpoint; } } if (organizationDetail.Endpoints.ContainsKey(EndpointType.WebApplication)) { var publicUrl = organizationDetail.Endpoints[EndpointType.WebApplication]; if (string.IsNullOrEmpty(service.ConnectionData.PublicUrl) && !string.IsNullOrEmpty(publicUrl) ) { service.ConnectionData.PublicUrl = publicUrl; } } } if (!idOrganization.HasValue) { if (whoAmIResponse == null) { whoAmIResponse = await service.ExecuteAsync <WhoAmIResponse>(new WhoAmIRequest()); } idOrganization = whoAmIResponse.OrganizationId; } service.ConnectionData.DefaultLanguage = string.Empty; service.ConnectionData.BaseCurrency = string.Empty; service.ConnectionData.DefaultLanguage = string.Empty; service.ConnectionData.InstalledLanguagePacks = string.Empty; if (idOrganization.HasValue) { var organization = await service .RetrieveAsync <Organization>(Organization.EntityLogicalName, idOrganization.Value, new ColumnSet(Organization.Schema.Attributes.languagecode, Organization.Schema.Attributes.basecurrencyid)) ; if (organization.BaseCurrencyId != null) { service.ConnectionData.BaseCurrency = organization.BaseCurrencyId.Name; } var request = new RetrieveInstalledLanguagePacksRequest(); var response = await service.ExecuteAsync <RetrieveInstalledLanguagePacksResponse>(request); var rep = new EntityMetadataRepository(service); var isEntityExists = rep.IsEntityExists(LanguageLocale.EntityLogicalName); if (isEntityExists) { var repository = new LanguageLocaleRepository(service); if (organization.LanguageCode.HasValue) { var lang = (await repository.GetListAsync(organization.LanguageCode.Value)).FirstOrDefault(); if (lang != null) { service.ConnectionData.DefaultLanguage = lang.ToString(); } else { service.ConnectionData.DefaultLanguage = LanguageLocale.GetLocaleName(organization.LanguageCode.Value); } } if (response.RetrieveInstalledLanguagePacks != null && response.RetrieveInstalledLanguagePacks.Any()) { var list = await repository.GetListAsync(response.RetrieveInstalledLanguagePacks); service.ConnectionData.InstalledLanguagePacks = string.Join(",", list.OrderBy(s => s.LocaleId.Value, LocaleComparer.Comparer).Select(l => l.ToString())); } } else { if (organization.LanguageCode.HasValue) { service.ConnectionData.DefaultLanguage = LanguageLocale.GetLocaleName(organization.LanguageCode.Value); } if (response.RetrieveInstalledLanguagePacks != null && response.RetrieveInstalledLanguagePacks.Any()) { service.ConnectionData.InstalledLanguagePacks = string.Join(",", response.RetrieveInstalledLanguagePacks.OrderBy(s => s, LocaleComparer.Comparer).Select(l => LanguageLocale.GetLocaleName(l))); } } } if (string.IsNullOrEmpty(service.ConnectionData.PublicUrl) && !string.IsNullOrEmpty(service.ConnectionData.OrganizationUrl) ) { var orgUrl = service.ConnectionData.OrganizationUrl.TrimEnd('/'); if (orgUrl.EndsWith("/XRMServices/2011/Organization.svc", StringComparison.InvariantCultureIgnoreCase)) { var lastIndex = orgUrl.LastIndexOf("/XRMServices/2011/Organization.svc", StringComparison.InvariantCultureIgnoreCase); var publicUrl = orgUrl.Substring(0, lastIndex + 1).TrimEnd('/'); service.ConnectionData.PublicUrl = publicUrl; } } } catch (Exception ex) { DTEHelper.WriteExceptionToOutput(service.ConnectionData, ex); } }