Beispiel #1
0
        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);
                    }
                }
            }
        }
Beispiel #3
0
        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);
                    }
                }
            }
        }