Скрипт добавления закладки

<< Click to Display Table of Contents >>

Navigation:  Проект > Элементы дерева объектов > Палитра ФБ > Служебные > Скрипт > Руководство и примеры > Работа с трендами >

Скрипт добавления закладки

Добавление закладок в тренд производится через контекстное меню графической области. Также можно добавлять закладки из кода скрипта - например при возникновении каких то событий, которые нужно отметить на графике. При этом следует учитывать, что тренд может быть закрыт в этот момент времени, поэтому алгоритм должен уметь добавлять закладки как в закрытый, так и открытый тренд.

В этот раз мы будем добавлять закладку в тренд-документ, а не тренд расположенный на мнемосхеме.

Сделаем заготовку - создадим объект, а в нем тренд. Добавим скрипт с двумя входами - Применить и ВремяЗакладки.

sluzhebnie_skript_rukovodstvo_i_primery_rabota_s_trendami_skript_dobavleniya_zakladki

Для того чтобы добавить закладку в открытый тренд необходимо:

openTrend.OnAddBookmark(); //добавить закладку
var Bookmarks = openTrend.Settings.Objects.OfType<Bookmark>().ToList(); //получить список всех закладок
var Bookmark = Bookmarks.Last(); //взять поcледнюю
Bookmark.Position = DateTime.UtcNow.ToOADate(); //изменить ее позицию задав время
Bookmark.Comment = "Комментарий"; //задать комментарий если требуется

С закрытым трендом все несколько сложнее. У тренда есть специальный класс TrendSettingsChanger, с помощью которого можно обращаться к настройкам закрытого тренда. В данный класс необходимо загрузить настройки текущего тренда и после этого можно их менять.

using (var changer = new TrendSettingsChanger()) //создаем класс
{
 var settings= changer.Load(trend.DocFile);//загружаем параметры тренда
 var bookmark = new Bookmark(); //создаем закладку
 bookmark.Position = DateTime.UtcNow.ToOADate(); //меняем ее позицию
 settings.Objects.Add(bookmark); //добавляем закладку в объекты тренда
}

 

Теперь остается только найти в текущем объекте нужный тренд и выполнить нужный код в зависимости от того открыт он или закрыт. Итоговый код будет выглядеть так:

string ИМЯ_ТРЕНДА = "Тренды~Тренд";
bool? M = false;
public override void Execute()
{
    if (Применить == true && M == false && ВремяЗакладки.HasValue)
    {
        var Project = HostFB.TreeItemHlp.Project;
        var obj = (ITreeItemHlp)HostFB.TreeItemHlp.Parent;
        IAttributesHlp trends = obj.Attributes;
        var trend = trends.First(x => x.Attribute.Name == ИМЯ_ТРЕНДА);//поиск по имени
        if (trend == null) return; //тренд не найден
        if (trend.Opened)
        {
            RTManager.Instance.ThreadHolder.BeginInvoke(new ThreadStart(delegate
            {
                foreach (Trend openTrend in Project.GetService<TrendService>().Opened)
                {
                    if (openTrend.Attribute.Name != ИМЯ_ТРЕНДА || openTrend.Attribute.TreeItem.ID != HostFB.TreeItemHlp.ParentObject.ID) continue;
                    openTrend.OnAddBookmark(); //создаем закладку
                    var Bookmarks = openTrend.Settings.Objects.OfType<Bookmark>().ToList();
                    var Bookmark = Bookmarks.Last(); //берем последнюю
                    Bookmark.Position = ВремяЗакладки.Value.ToUniversalTime().ToOADate(); //меняем ее позицию
                    Bookmark.Comment = "Комментарий";//задаем комментарий
                }
            }));
        }
        else
        {
            using (var changer = new TrendSettingsChanger()) //создаем класс для изменений
            {
                settings = changer.Load(trend.DocFile);//загружаем параметры тренда
                var bookmark = new Bookmark(); //создаем закладку
                bookmark.Comment = "Комментарий"; //задаем комментарий
                bookmark.Position = ВремяЗакладки.Value.ToUniversalTime().ToOADate(); //меняем ее позицию
                settings.Objects.Add(bookmark); //добавляем закладку в объекты тренда
            }
        }
    }
    M = Применить;
}

Обратите внимание как задается имя тренда - string ИМЯ_ТРЕНДА = "Тренды~Тренд" таким образом указывается что ищется документ "Тренд" во вкладке "Тренды".

Запустим режим исполнения и попробуем добавить закладки, когда тренд открыт и когда тренд закрыт.

sluzhebnie_skript_rukovodstvo_i_primery_rabota_s_trendami_skript_dobavleniya_zakladki1

Готовый пример можно скачать по ссылке.

С помощью класса TrendSettingsChanger можно также и менять настройки при закрытом тренде (в том числе и в режиме разработки). Например изменение подписи бордюра:

using (var changer = new TrendSettingsChanger())
{
 //загрузка настроек         
 var настройки = changer.Load(trend.DocFile);
 //изменение настроек
 string ИМЯ_НАСТРОЙКИ_ТРЕНДА = "Бордюр.Подпись";
 string ЗНАЧЕНИЕ_НАСТРОЙКИ_ТРЕНДА = "Текст бордюра";
 var результат = настройки.SetProperty(trend, ИМЯ_НАСТРОЙКИ_ТРЕНДА, ЗНАЧЕНИЕ_НАСТРОЙКИ_ТРЕНДА);
}

Пример скрипта который меняет настройки всех трендов можно скачать по ссылке.