예제 #1
0
        //--------------------------called by excel just after entering formula RTD(xxxxx)-----------------------------------------//
        protected override object ConnectData(Topic topic, IList<string> topicInfo, ref bool newValues)
        {
            var alias = topicInfo[AliasPos];
            var tab = topicInfo[TabPos];
            var sym = topicInfo[SymPos];
            var col = topicInfo[ColPos];
            var his = topicInfo.Count > 4 ? topicInfo[HisPos] : null;
            var subscriptionId = 0;
            if (topicInfo.Count != 6 && sym.Equals(BackTick))
            {
                return "Missing required parameters if using with back tick.";
            }
            if (topicInfo.Count == 6)
            {
                try
                {
                    subscriptionId = Convert.ToInt32(topicInfo[SymbolIndetifier]);
                }
                catch (FormatException)
                {
                    return "Input string is not a sequence of digits (last parameter).";
                }
            }

            if (string.IsNullOrEmpty(tab))
            {
                return "Table is missing.";
            }
            if (string.IsNullOrEmpty(sym))
            {
                return "Symbol is missing.";
            }
            if (string.IsNullOrEmpty(col))
            {
                return "Column is missing.";
            }

            if (sym.Equals(BackTick))
            {
                if (Connections.ContainsKey(alias))
                {
                    if (!WildCardMapping.ContainsKey(alias) ||
                        (WildCardMapping.ContainsKey(alias) && !WildCardMapping[alias].GetTables().Contains(tab)))
                    {
                        RtdSubscribeTable(alias, tab);
                    }
                }

                //add id to symbol's map
                AddEmptyId(alias, tab, subscriptionId.ToString(CultureInfo.InvariantCulture));
                if (!WildCardMapping.ContainsKey(alias))
                {
                    var tm = new TopicMap();
                    WildCardMapping[alias] = tm;
                }

                WildCardMapping[alias].AddTopic(new TopicInfo(topic, alias, tab,
                    subscriptionId.ToString(CultureInfo.InvariantCulture), col, his));

                TryToFillFromCache(alias, tab, subscriptionId, col);
            }
            else
            {
                if (!Mapping.ContainsKey(alias) || !Mapping[alias].ContainsSymbol(tab, sym))
                {
                    if (Connections.ContainsKey(alias) &&
                        (!WildCardMapping.ContainsKey(alias) ||
                         (WildCardMapping.ContainsKey(alias) && !WildCardMapping[alias].GetTables().Contains(tab))))
                    {
                        RtdSubscribe(alias, tab, sym);
                    }
                }

                if (Mapping.ContainsKey(alias))
                {
                    Mapping[alias].AddTopic(new TopicInfo(topic, alias, tab, sym, col, his));
                }
                else
                {
                    var tm = new TopicMap();
                    tm.AddTopic(new TopicInfo(topic, alias, tab, sym, col, his));
                    Mapping[alias] = tm;
                }
            }
            newValues = true;
            return ExcelEmpty.Value;
        }
예제 #2
0
        //--------------------------called by excel just after entering formula RTD(xxxxx)-----------------------------------------//
        protected override object ConnectData(Topic topic, IList <string> topicInfo, ref bool newValues)
        {
            var alias          = topicInfo[AliasPos];
            var tab            = topicInfo[TabPos];
            var sym            = topicInfo[SymPos];
            var col            = topicInfo[ColPos];
            var his            = topicInfo.Count > 4 ? topicInfo[HisPos] : null;
            var subscriptionId = 0;

            if (topicInfo.Count != 6 && sym.Equals(BackTick))
            {
                return("Missing required parameters if using with back tick.");
            }
            if (topicInfo.Count == 6)
            {
                try
                {
                    subscriptionId = Convert.ToInt32(topicInfo[SymbolIndetifier]);
                }
                catch (FormatException)
                {
                    return("Input string is not a sequence of digits (last parameter).");
                }
            }

            if (string.IsNullOrEmpty(tab))
            {
                return("Table is missing.");
            }
            if (string.IsNullOrEmpty(sym))
            {
                return("Symbol is missing.");
            }
            if (string.IsNullOrEmpty(col))
            {
                return("Column is missing.");
            }

            if (sym.Equals(BackTick))
            {
                if (Connections.ContainsKey(alias))
                {
                    if (!WildCardMapping.ContainsKey(alias) ||
                        (WildCardMapping.ContainsKey(alias) && !WildCardMapping[alias].GetTables().Contains(tab)))
                    {
                        RtdSubscribeTable(alias, tab);
                    }
                }

                //add id to symbol's map
                AddEmptyId(alias, tab, subscriptionId.ToString(CultureInfo.InvariantCulture));
                if (!WildCardMapping.ContainsKey(alias))
                {
                    var tm = new TopicMap();
                    WildCardMapping[alias] = tm;
                }

                WildCardMapping[alias].AddTopic(new TopicInfo(topic, alias, tab,
                                                              subscriptionId.ToString(CultureInfo.InvariantCulture), col, his));

                TryToFillFromCache(alias, tab, subscriptionId, col);
            }
            else
            {
                if (!Mapping.ContainsKey(alias) || !Mapping[alias].ContainsSymbol(tab, sym))
                {
                    if (Connections.ContainsKey(alias) &&
                        (!WildCardMapping.ContainsKey(alias) ||
                         (WildCardMapping.ContainsKey(alias) && !WildCardMapping[alias].GetTables().Contains(tab))))
                    {
                        RtdSubscribe(alias, tab, sym);
                    }
                }

                if (Mapping.ContainsKey(alias))
                {
                    Mapping[alias].AddTopic(new TopicInfo(topic, alias, tab, sym, col, his));
                }
                else
                {
                    var tm = new TopicMap();
                    tm.AddTopic(new TopicInfo(topic, alias, tab, sym, col, his));
                    Mapping[alias] = tm;
                }
            }
            newValues = true;
            return(ExcelEmpty.Value);
        }