2015-11-06 6 views
2

У меня есть ряд «ad-hoc» стереотипов в модели Sparx EA. То есть, я просто набрал имя стереотипа в свойствах элемента, затем использовал одно и то же имя в других элементах, к которым он применяется ... без использования профилей.Как изменить название рекламного стереотипа в Sparx EA

Каждый из них затем отображается в Project --> Settings --> UML Types --> Stereotypes.

В конце концов, я добавил иконки сценария формы, и т.д.

Однако, я создал некоторую путаницу с одним именем стереотипного. Я использовал «Табличное пространство» как концепцию дизайна, чтобы указать «группу связанных таблиц базы данных». Наша команда базы данных считает это запутанным из-за физической концепции «табличного пространства» в Oracle.

Итак, я хочу переименовать.

Если я делаю это с UML Types --> Stereotypes, все существующие элементы сохраняют исходное имя (например, табличное пространство) и возвращаются к виду формы без скрипта. Если я нахожусь в элементе и изменяюсь на новое имя, появляется скрипт формы и т. Д.

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

Пришло ли время для изучения EA Scripting или есть другой способ?

ответ

3

Ваш единственный выход - это автоматизация (или собственный доступ к БД). Если ваш стереотип используется только в объектах, вы можете перебирать результат

Repository.SQLQuery("SELECT object_id FROM t_object WHERE stereotype='oldStereo'")

, чтобы получить все идентификаторы объектов. Тогда вам нужно

elem = Repository.GetElementByID(theId)

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

elem.stereotype = "newStereo" 
elem.update() 

Вы также можете запустить прямой SQL с

Repository.Execute("UPDATE t_object SET stereotype='new' WHERE stereotype='old'") 

Обратите внимание, что последний использует один из функций наземных мин не поддерживается официально.

Редактировать: Вы также можете запустить последний SQL-код в собственном RDBMS-клиенте. При использовании EAP вам может потребоваться временно переименовать его в .mdb, чтобы притвориться, что это база данных MS Access (на самом деле это).

+0

Сделал, как вы сказали, и разместил мой (JScript, использует сценарии EA Lib DB) в отдельном ответе. Принимая ваш ответ, так как это привело меня к решению. ОДНАКО ... когда я повторно запрашиваю новое имя стереотипа, я нахожу объекты. НО, когда я печатаю свой '.stereotype', появляется старое имя. Аналогично, если я дважды нажму на один на диаграмме exsiting. Диаграмма показывает старое имя, двойной щелчок и текст показывает новое имя стереотипа в свойствах, но при нажатии «...» у него есть старое имя стереотипа, а не новое. Это похоже на то, что обновление недостаточно «глубокое». Идеи? –

+0

Отключен, до тех пор, пока он полностью не разрешен ... дошел до конца с RTFM, что привело к атрибуту stereotypeEx, который, казалось, был недостающим звеном. –

+0

Принимал ответ, так как реальный вопрос заключался в том, «нужно ли мне писать сценарий для этого», и вы ответили на это. Предоставление «как» является бонусом. Я просто не был уверен, как справиться с этим, так как лучший «как» ответит на мой со стереотипомEx ... и поэтому должен надеяться, что кто-то, пришедший сюда с такой же проблемой, прочитает все комментарии и подберет это. –

2

Вы можете использовать этот VBScript для переименования стереотипов в EA.

Он был протестирован в файле .eap, и это сложно из-за отсутствия replace() в синтаксисе MS Access SQL.

Просто зайдите в представление сценариев, добавьте новый VBScript и вставьте этот код в свой новый скрипт. Затем измените его, чтобы указать от и до стереотипов.

option explicit 

!INC Local Scripts.EAConstants-VBScript 

' 
' Script Name: Rename Stereotypes 
' Author: Geert Bellekens 
' Purpose: Rename stereotypes on all types of elements 
' Environment: Tested on .eap file. 
' Date: 13/10/2015 
' 
sub main 
    renameElementStereotypes "FromStereo", "ToStereo" 
    renameAttributeStereotypes "FromStereo", "ToStereo" 
    renameConnectorStereotypes "FromStereo", "ToStereo" 
    renameOperationStereotypes "FromStereo", "ToStereo" 
    renameDiagramStereotypes "FromStereo", "ToStereo" 
    Repository.RefreshModelView(0) 
    msgbox "Finished renaming stereotypes" 
end sub 

sub renameElementStereotypes(fromStereo, toStereo) 
    renameStereotypes "t_object", fromStereo, toStereo 
end sub 
sub renameAttributeStereotypes(fromStereo, toStereo) 
    renameStereotypes "t_attribute", fromStereo, toStereo 
end sub 
sub renameConnectorStereotypes(fromStereo, toStereo) 
    renameStereotypes "t_connector", fromStereo, toStereo 
end sub 
sub renameOperationStereotypes(fromStereo, toStereo) 
    renameStereotypes "t_operation", fromStereo, toStereo 
end sub 
sub renameDiagramStereotypes(fromStereo, toStereo) 
    renameStereotypes "t_diagram", fromStereo, toStereo 
end sub 

sub renameStereotypes (baseTable, fromStereo, toStereo) 
    dim updateSQL 
    'first the second part of of t_xref description 
    updateSQL = "update (" & baseTable & " o inner join t_xref x on o.[ea_guid] = x.[Client]) "&_ 
       " set x.Description = MID(x.Description, 1, INSTR( x.Description, ':" & fromStereo & "') - 1) "&_ 
         " + ':" & toStereo & "' "&_ 
         " + MID(x.Description,INSTR( x.Description, ':" & fromStereo & "') "&_ 
           " + LEN(':" & fromStereo & "'), LEN(x.Description) "&_ 
           " - INSTR( x.Description, ':" & fromStereo & "') "&_ 
           " - LEN(':" & fromStereo & "')+ 1) "&_ 
       " where o.Stereotype = '" & fromStereo & "' "&_ 
       " and x.Name = 'Stereotypes' "&_ 
       " and INSTR( x.Description, ':" & fromStereo & "') > 0 "    
    Repository.Execute updateSQL 
    'then the first part of t_xref description 
    updateSQL = "update (" & baseTable & " o inner join t_xref x on o.[ea_guid] = x.[Client]) "&_ 
       " set x.Description = MID(x.Description, 1, INSTR( x.Description, '=" & fromStereo & "') - 1) "&_ 
         " + '=" & toStereo & "' "&_ 
         " + MID(x.Description,INSTR( x.Description, '=" & fromStereo & "') "&_ 
           " + LEN('=" & fromStereo & "'), LEN(x.Description) "&_ 
           " - INSTR( x.Description, '=" & fromStereo & "') "&_ 
           " - LEN('=" & fromStereo & "')+ 1) "&_ 
       " where o.Stereotype = '" & fromStereo & "' "&_ 
       " and x.Name = 'Stereotypes' "&_    
       " and INSTR( x.Description, '=" & fromStereo & "') > 0 " 
    Repository.Execute updateSQL     
    'then the stereotype itself 
    updateSQL = " update " & baseTable & " o "&_ 
       " set o.[Stereotype] = '" & toStereo & "' "&_ 
       " where o.Stereotype = '" & fromStereo & "' " 
    Repository.Execute updateSQL 
end sub 

main 
+0

Мне нравится, что этот ответ более всеобъемлющий и включает в себя все типы. Как кто-то новый для EA Scripting, я нашел задачу работать с моделью, непосредственно полезной для обучения, поэтому я принял ответ @Thomas Killian. В то же время обратите внимание на мои комментарии к его ответу. Этот прямой SQL избегает этих проблем? –

+0

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

+0

Я обновил свой ответ re/StereotypeEx. Не уверен, что это должно быть отражено в прямом SQL. –

1

Вот сценарий, который я создал на основе ответа @Thomas Killian.

Улучшение:

  1. использует функцию базы данных EAScriptLib, чтобы получить результат.
  2. Правильный случай при использовании метода Update() (но не обязательно)
  3. Также задает атрибут StereotypeEx объекта/элемента. Это кажется критическим ... В противном случае, изменение либо игнорируется, либо новый стереотип просто добавляется в список стереотипов для объекта

Кроме того, не зная, насколько это важно, но не открыть компонентов через Project Browser перед запуском скрипта во время окончательного тестирования. Это похоже на вуду.

!INC Local Scripts.EAConstants-JScript 
!INC EAScriptLib.JScript-Database 

function RenameStereotypes() 
{ 
    Repository.EnsureOutputVisible("Script"); 

    var objectIDs = DBGetFieldValueArrayString("object_id" /* : String */, "t_object" /* : String */, "stereotype='DBTables'" /* : String */); /* : Array */ 

    Session.Output(objectIDs); 

    for (var i = 0; i < objectIDs.length; i++) { 
     var theId = objectIDs[i]; 
     var elem = Repository.GetElementByID(theId); 
     Session.Output("Id: " + theId + " Name: " + elem.name + " Stereotype: " + elem.stereotype); 
     elem.stereotype = "DBTables"; /* FIRST VISIBLE STEREOTYPE */ 
     elem.stereotypeEx = "DBTables"; /* CRITICAL - DEEPER LIST OF STEREOTYPES */ 
     elem.Update(); /* CASE CHANGED, NOT SURE IT MATTERS */ 
     elem.Refresh(); /* JUST IN CASE */ 
    } 
} 

RenameStereotypes(); 

 Смежные вопросы

  • Нет связанных вопросов^_^