Архив

Пересчет цены на валюту в Datacol (автоматически)

Приведу пример динамического плагина, который поможет получить курс указанной валюты с сайта ЦБ РФ и пересчитать вашу цену.

Базовая информация о работе с ценой в поле есть в этом материале.

Вот код плагина:

using System;
using System.Collections.Generic;
using System.Net;
using System.Text;
using System.Xml;
using DynamicPluginData;

namespace DatacolDynamicPluginNS
{
    public class DynamicPluginClass
    {
        public static string processDataFieldValue(string s, ItemInfo itemInfo, GlobalInfo globalInfo)
        {
            double usd = GetUsdRate();
            double inusd;
            inusd = Math.Round(Convert.ToDouble(s) / usd, 2);
            return inusd.ToString();
        }

        private static double GetUsdRate()
        {
            string url = "https://www.cbr.ru/scripts/XML_daily.asp";

            using (WebClient client = new WebClient())
            {
                client.Encoding = Encoding.GetEncoding("windows-1251");
                string xmlContent = client.DownloadString(url);

                XmlDocument xmlDoc = new XmlDocument();
                xmlDoc.LoadXml(xmlContent);

                XmlNodeList valuteNodes = xmlDoc.GetElementsByTagName("Valute");

                foreach (XmlNode node in valuteNodes)
                {
                    XmlNode charCodeNode = node.SelectSingleNode("CharCode");
                    if (charCodeNode != null && charCodeNode.InnerText == "USD")
                    {
                        XmlNode valueNode = node.SelectSingleNode("Value");
                        if (valueNode != null)
                        {
                            string value = valueNode.InnerText;
                            return Convert.ToDouble(value.Replace('.', ','));
                        }
                    }
                }
            }

            throw new Exception("Rate not found");
        }
    }
}

Важные моменты, если вы получаете цену с десятыми, сотыми … то разделитель должен быть «,». Если у вас точка, то делайте замену. Также в цене не должно быть посторонних знаков и символов, например пробелы. Это должно быть число или число с разделителем «,». Например, 999,99.

Если Вам нужно другая валюта, в примере USD, тогда открывайте страницу https://www.cbr.ru/scripts/XML_daily.asp и смотрите код нужной вам. Например, Вам нужен китайский юань, тогда меняйте USD на CNY в строке

if (charCodeNode != null && charCodeNode.InnerText == "USD")

Также если нужно округлить до десятых, или округлить до целого, тогда меняйте 2 на 1 или 0 (до целого) в строке

inusd = Math.Round(Convert.ToDouble(s) / usd, 2);

После добавления динамического плагина, нужно будет подключить 2 библиотеки:

  • System.Net;
  • System.Xml;

Это делается на вкладке Библиотеки в редакторе динамических плагинов

Нужна доработка или готовое решение?

Опишите задачу — отвечу в течение дня и назову сроки и стоимость.

Оставить комментарий