WedX - журнал о программировании и компьютерных науках

Ограничение дочернего элемента в Enterprise Architect с помощью надстройки C#

Я работаю над надстройками С# в Enterprise Architect, чтобы дать пользователю ограничение, чтобы к определенному родительскому элементу можно было добавить только определенный дочерний элемент.

Например, если дочерний элемент A должен быть перенесен на родительский элемент B, он удаляется, если дочерний элемент A перетаскивается на родительский элемент C. Я использую метод EA_OnPostNewElement и метод удаления для одного и того же, и он работает нормально.

Я сомневаюсь, что после того, как пользователь поместил дочерний элемент на конкретный родитель, через некоторое время он сможет перетащить дочерний элемент за пределы родительского элемента и добавить его в качестве дочернего к любому другому элементу на диаграмме.

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


  • до сих пор не нашел обходной путь для этого ..? 08.09.2016
  • @dahsra.. Спасибо за код. Когда я перетаскиваю дочерний элемент на неправильный родитель, родительское имя дочернего элемента обновляется с фактическим родительским именем, но остается в том же неправильном родительском местоположении. Возможно ли вернуть дочерний элемент под правильным родителем. 08.09.2016
  • Обновили ответ.! 08.09.2016

Ответы:


1

Вам нужно использовать как EA_OnContextItemChanged, так и EA_OnNotifyContextItemModified, чтобы добиться этого.

объявить диктонрию

 public Dictionary<int, int> lstChildElements = new Dictionary<int, int>();

и вот пример кода

public void EA_OnContextItemChanged(EA.Repository Repository, string GUID, EA.ObjectType ot)
    {

        EA.Element addedElement = Repository.GetElementByGuid(GUID);
        if (addedElement == null)
            return;
        int identifiedParentID = 0;
        bool isAvailable = lstChildElements.TryGetValue(addedElement.ElementID, out identifiedParentID);
        if (!isAvailable)
        {
            if (addedElement.Stereotype == "Child" && addedElement.ParentID != 0)
            {
                EA.Element parentElemnt = Session.Repository.GetElementByID(addedElement.ParentID);
                if (parentElemnt != null)
                    if (parentElemnt.Stereotype == "anyCustomDefined")
                        lstChildElements.Add(addedElement.ElementID, addedElement.ParentID);
            }
        }


    }

    public void EA_OnNotifyContextItemModified(EA.Repository Repository, string GUID, EA.ObjectType ot)
    {

        EA.Element addedElement = Repository.GetElementByGuid(GUID);
        if (addedElement == null)
            return;
        int identifiedParentID = 0;
        bool isAvailable = lstChildElements.TryGetValue(addedElement.ElementID, out identifiedParentID);
        if (isAvailable)
        {
            if (addedElement.Stereotype == "Child" && addedElement.ParentID != 0)
            {
                EA.Element parentElemnt = Repository.GetElementByID(addedElement.ParentID);
                if (parentElemnt != null)
                    if (parentElemnt.Stereotype != "anyCustomDefined")
                    {
                        addedElement.ParentID = identifiedParentID != 0 ? identifiedParentID : addedElement.ParentID;
                        addedElement.Update();
                        lstChildElements[addedElement.ElementID] = addedElement.ParentID;
                    }
            }
            else if (addedElement.Stereotype == "Child" && addedElement.ParentID == 0)
            {
                addedElement.ParentID = identifiedParentID;
                addedElement.Update();
            }
        }



    }

Надеюсь, поможет..!

и для обновления диаграммы необходимо перезагрузить ее.

EA.Diagram activeDiagram = Session.Repository.GetCurrentDiagram();
        if (activeDiagram != null)
            Session.Repository.ReloadDiagram(activeDiagram.DiagramID);

or

Repository.RefreshOpenDiagrams();

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

01.09.2016
  • @dahsra..Спасибо..Сейчас попробую..скоро обновлю 08.09.2016

  • 2

    Вы можете использовать события контекста, чтобы отслеживать выбранный элемент и его владельца.

    Я не уверен, что событие EA_OnNotifyContextItemModified запускается, когда вы меняете владельца элемента. Но даже если это не так, вы можете проверить, есть ли у него тот же владелец после выбора нового элемента.

    29.08.2016
    Новые материалы

    Я хотел выучить язык программирования MVC4, но не мог выучить его раньше, потому что это выглядит сложно…
    Просто начните и учитесь самостоятельно Я хотел выучить язык программирования MVC4, но не мог выучить его раньше, потому что он кажется мне сложным, и я бросил его. Это в основном инструмент..

    Лицензии с открытым исходным кодом: руководство для разработчиков и создателей
    В динамичном мире разработки программного обеспечения открытый исходный код стал мощной парадигмой, способствующей сотрудничеству, инновациям и прогрессу, движимому сообществом. В основе..

    Объяснение документов 02: BERT
    BERT представил двухступенчатую структуру обучения: предварительное обучение и тонкая настройка. Во время предварительного обучения модель обучается на неразмеченных данных с помощью..

    Как проанализировать работу вашего классификатора?
    Не всегда просто знать, какие показатели использовать С развитием глубокого обучения все больше и больше людей учатся обучать свой первый классификатор. Но как только вы закончите..

    Работа с цепями Маркова, часть 4 (Машинное обучение)
    Нелинейные цепи Маркова с агрегатором и их приложения (arXiv) Автор : Бар Лайт Аннотация: Изучаются свойства подкласса случайных процессов, называемых дискретными нелинейными цепями Маркова..

    Crazy Laravel Livewire упростил мне создание электронной коммерции (панель администратора и API) [Часть 3]
    Как вы сегодня, ребята? В этой части мы создадим CRUD для данных о продукте. Думаю, в этой части я не буду слишком много делиться теорией, но чаще буду делиться своим кодом. Потому что..

    Использование машинного обучения и Python для классификации 1000 сезонов новичков MLB Hitter
    Чему может научиться машина, глядя на сезоны новичков 1000 игроков MLB? Это то, что исследует это приложение. В этом процессе мы будем использовать неконтролируемое обучение, чтобы..


    Для любых предложений по сайту: [email protected]