private async Task UpdateExchangeRates(LocalPluginContext localcontext) { var currencyList = (from c in new XrmSvc(localcontext.OrganizationService) .CreateQuery <TransactionCurrency>() select new TransactionCurrency { CurrencySymbol = c.CurrencySymbol, TransactionCurrencyId = c.TransactionCurrencyId }).ToArray(); var baseCurrency = "EUR"; var currentISOCodes = string.Join(",", currencyList .Select(x => x.CurrencySymbol) .Where(x => x != baseCurrency) .ToArray()); using (HttpClient client = new HttpClient()) { var webApiUrl = "http://data.fixer.io/api/latest?access_key="; var accessKey = "43eb1b0960d03281d3b0da30693df254&symbols="; var suffix = "&format=1"; var requestUri = new Uri(webApiUrl + accessKey + currentISOCodes + suffix); var request = new HttpRequestMessage(HttpMethod.Get, requestUri); var response = await client.SendAsync(request); if (!response.IsSuccessStatusCode) { throw new InvalidPluginExecutionException("Exchangerate service returned: " + response); } var json = response.Content.ReadAsStringAsync().Result; var setting = new DataContractJsonSerializerSettings() { UseSimpleDictionaryFormat = true }; ExchangeRateResult result = new ExchangeRateResult(); using (var ms = new MemoryStream(Encoding.Unicode.GetBytes(json))) { var serializer = new DataContractJsonSerializer(typeof(ExchangeRateResult), setting); result = (ExchangeRateResult)serializer.ReadObject(ms); } foreach (var currency in currencyList.Where(x => x.CurrencySymbol != baseCurrency)) { if (result.rates.Keys.Contains(currency.CurrencySymbol)) { var update = new TransactionCurrency { TransactionCurrencyId = currency.TransactionCurrencyId, ExchangeRate = (decimal?)result.rates[currency.CurrencySymbol] }; localcontext.OrganizationService.Update(update); } } } }
private async Task UpdateExchangRates(LocalPluginContext localcontext) { var currencyList = (from c in new XrmSvc(localcontext.OrganizationService).CreateQuery <TransactionCurrency>() select new TransactionCurrency { CurrencySymbol = c.CurrencySymbol, TransactionCurrencyId = c.TransactionCurrencyId }).ToArray(); var baseCurrency = "EUR"; var currencyISOCodes = string.Join(",", currencyList.Select(c => c.CurrencySymbol).Where(c => c != baseCurrency).ToArray()); using (HttpClient client = new HttpClient()) { //Try this API https://free.currconv.com/api/v7/convert?q=USD_PHP&compact=ultra&apiKey=705271941c489685a770 var requestUri = new Uri("https://api.fixer.io/latest?symbols=" + String.Join(",", currencyISOCodes)); var request = new HttpRequestMessage(HttpMethod.Get, requestUri); var response = await client.SendAsync(request); if (!response.IsSuccessStatusCode) { throw new InvalidPluginExecutionException("Exchangerate service returned " + response); } var json = response.Content.ReadAsStringAsync().Result; var setting = new DataContractJsonSerializerSettings() { UseSimpleDictionaryFormat = true }; ExchangeRateResult result = null; using (var ms = new MemoryStream(Encoding.Unicode.GetBytes(json))) { var serializer = new DataContractJsonSerializer(typeof(ExchangeRateResult), setting); result = (ExchangeRateResult)serializer.ReadObject(ms); } foreach (var currency in currencyList.Where(c => c.CurrencySymbol != baseCurrency)) { if (result.Rates.Keys.Contains(currency.CurrencySymbol)) { var update = new TransactionCurrency { TransactionCurrencyId = currency.TransactionCurrencyId, ExchangeRate = (decimal?)result.Rates[currency.CurrencySymbol] }; localcontext.OrganizationService.Update(update); } } } }
private async Task UpdateExchangRates(LocalPluginContext localcontext) { ITracingService tracer = localcontext.TracingService; var currencyList = (from c in new XrmSvc(localcontext.OrganizationService).CreateQuery <TransactionCurrency>() select new TransactionCurrency { ISOCurrencyCode = c.ISOCurrencyCode, TransactionCurrencyId = c.TransactionCurrencyId }).ToArray(); var baseCurrency = "CAD"; var currencyISOCodes = string.Join(",", currencyList.Select(c => c.ISOCurrencyCode).Where(c => c != baseCurrency).ToArray()); tracer.Trace(currencyISOCodes.ToString()); //WebProxy oWebProxy = new System.Net.WebProxy("net-inspect-1.dhltd.corp:8080",true); //oWebProxy.Credentials = System.Net.CredentialCache.DefaultCredentials; //var httpClientHandler = new HttpClientHandler() //{ // Proxy = oWebProxy, //}; //if (true) //{ // httpClientHandler.PreAuthenticate = true; // httpClientHandler.UseDefaultCredentials = false; // // *** These creds are given to the web server, not the proxy server *** // //httpClientHandler.Credentials = new NetworkCredential( // // userName: serverUserName, // // password: serverPassword); //} using (HttpClient client = new HttpClient(/*handler:httpClientHandler, disposeHandler: true*/)) { //var requestUri = new Uri("https://api.fixer.io/latest?symbols=" + String.Join(",", currencyISOCodes)); var requestUri = new Uri("https://exchangeratesapi.io/api/latest?base=CAD&symbols=" + String.Join(",", currencyISOCodes)); //var requestUri = new Uri("http://free.currencyconverterapi.com/api/v5/convert?q=" + String.Join("_", currencyISOCodes)+ "&compact=y"); tracer.Trace(requestUri.ToString()); var request = new HttpRequestMessage(HttpMethod.Get, requestUri); var response = await client.SendAsync(request); if (!response.IsSuccessStatusCode) { throw new InvalidPluginExecutionException("Exchangerate service returned " + response); } var json = response.Content.ReadAsStringAsync().Result; var setting = new DataContractJsonSerializerSettings() { UseSimpleDictionaryFormat = true }; ExchangeRateResult result = null; using (var ms = new MemoryStream(Encoding.Unicode.GetBytes(json))) { var serializer = new DataContractJsonSerializer(typeof(ExchangeRateResult), setting); result = (ExchangeRateResult)serializer.ReadObject(ms); } foreach (var currency in currencyList.Where(c => c.ISOCurrencyCode != baseCurrency)) { if (result.rates.Keys.Contains(currency.ISOCurrencyCode)) { var update = new TransactionCurrency { TransactionCurrencyId = currency.TransactionCurrencyId, ExchangeRate = (decimal?)result.rates[currency.ISOCurrencyCode] }; localcontext.OrganizationService.Update(update); } } } }