Как удалить соединитель в диаграмме архитектора предприятия через c # addin

c# add-in enterprise enterprise-architect connector

312 просмотра

2 ответа

Я использую специальный соединитель C для подключения к источнику element Aи target element Bв Enterprise Architect.

Если пользователь использует этот соединитель между различными элементами источника и назначения, я хочу отобразить предупреждающее сообщение и удалить соединитель с помощью c#кода надстройки:

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

public void ToDeleteConnectorByID(int connectorID)
        {
            try
            {

                EA.Connector addedConnector = Session.Repository.GetConnectorByID(Convert.ToInt32(connectorID));
                 EA.Element cuurentobjectconnectorele = Session.Repository.GetElementByID(addedConnector.ClientID);

                        for (short m = 0; m < cuurentobjectconnectorele.Connectors.Count - 1; m++)
                        {
                            cuurentobjectconnectorele.Connectors.Delete(m);
                            cuurentobjectconnectorele.Update();
                        }

                    }

            catch (Exception ex)
            {
                MessageBox.Show("no connector deleted-exception");
            }

        }
Автор: rashmi Источник Размещён: 08.11.2019 11:13

Ответы (2)


0 плюса

Решение

Приведенный ниже метод можно использовать для добавления соединителя между элементами на основе условия. Он будет срабатывать, когда пользователь перетаскивает новый соединитель из окна «Панель инструментов» или «Ресурсы» на диаграмму. Уведомление предоставляется непосредственно перед созданием соединителя, так что надстройка может отключить добавление соединителя.

    /// <summary>
    /// EA_OnPreNewConnector notifies Add-Ins that a new connector is about to be created on a diagram. 
    /// It enables Add-Ins to permit or deny creation of a new connector.
    /// </summary>
    /// <param name="Repository"></param>
    /// <param name="Info"></param>
    /// <returns>Return True to enable addition of the new connector to the model. Return False to disable addition of the new connector.</returns>

public bool EA_OnPreNewConnector(EA.Repository Repository, EA.EventProperties Info)
{
    try
    {
            //To get added Connector Type
            string connectorType = "";
            EA.EventProperty connectorTypePropID;
            connectorTypePropID = Info.Get(0);
            connectorType = connectorTypePropID.Value;

            //To get added Connector stereotype
            string connectorStereotype = "";
            EA.EventProperty connectorStereotypePropID;
            connectorStereotypePropID = Info.Get(2);
            connectorStereotype = connectorStereotypePropID.Value;

            //To get added Connector client ID
            int clientID = 0;
            EA.EventProperty clientIDPropID;
            clientIDPropID = Info.Get(3);
            clientID = Convert.ToInt32(clientIDPropID.Value);

            //To get added Connector Supplier ID
            int supplierID = 0;
            EA.EventProperty supplierIDPropID;
            supplierIDPropID = Info.Get(4);
            supplierID = Convert.ToInt32(supplierIDPropID.Value);

            //To get added Connector diagram
            int diagramID = 0;
            EA.EventProperty diagramIDPropID;
            diagramIDPropID = Info.Get(5);
            diagramID = Convert.ToInt32(diagramIDPropID.Value);

            EA.Element sourceElemnet = Session.Repository.GetElementByID(clientID);
            EA.Element destinationElemnet = Session.Repository.GetElementByID(supplierID);

            if (sourceElemnet != null && destinationElemnet != null)
            {
               //Your condition based on when the connector needs to be created.



                return true;
            }

           MessageBox.Show("This connection is not possible.");
            return false;
        }
        catch (Exception ex)
        {
            MessageBox.Show("This connection is not possible.");
           return false;
        }
    }

Returninbg TRUE, соединитель будет создан. Возвращая FALSE, коннектор не будет создан

Надеюсь, это поможет вам удалить соединитель при создании самого себя.

Автор: Dah Sra Размещён: 02.09.2016 10:42

1 плюс

Попробуйте этот кусок кода:

public void ToDeleteConnectorByID(int connectorID) {
  try {
    EA.Connector addedConnector = Session.Repository.GetConnectorByID(Convert.ToInt32(connectorID));
    EA.Element currentobjectconnectorele = Session.Repository.GetElementByID(addedConnector.ClientID);

    for (short m = 0; m < currentobjectconnectorele.Connectors.Count; m++) {
      if (addConnector.ConnectorID == currentobjectconnectorele.ConnectorID) {
        currentobjectconnectorele.Connectors.Delete(m);
      }
    }
  }

  catch (Exception ex) {
    MessageBox.Show("no connector deleted-exception");
  }
}

Вы Updateпросто лишние, и вы удаляете все разъемы, а не только тот, который вы ищете. Плюс у тебя слишком короткая петля.

NB: я не знаю C #, но внутри ifвы можете выйти из цикла. Я предполагаю, что breakэто ключевое слово.

Автор: qwerty_so Размещён: 20.08.2016 08:46
Вопросы из категории :
32x32