Как получить Object_Id из COM-объекта в Enterprise Architect

Я попытался найти строку в содержимом элемента Enterprise Architect с помощью python. Я читаю столбец excel за столбцом и ищу строку в EAP, используя запрос SQL.

Код

App = win32com.client.Dispatch(EAId)
for row in range(2,sheet.max_row):
  firstline = sheet['E' + str(row)].value.strip().splitlines()[0]
  reqCollection = App.Repository.GetElementSet("select Object_ID " + " from t_object where t_object.Note like '" + firstline + "*' and t_object.name like 'SRC*'", 2)

if len(reqCollection) > 0:
  print(reqCollection[0])
  #print(reqCollection[0].Object_ID) Error
  #print(reqCollection[0].Name)  Error

Я могу получить элементы из запроса, но проблема в том, что я не могу получить Object_Id или имя объекта. В результате приведенный выше код дает <COMObject <unknown>>. Как я могу получить идентификатор объекта из COMObject?


person goodman    schedule 22.07.2019    source источник


Ответы (2)


Я не думаю, что вы можете так индексировать EA.Collection.

Как всегда полезно прочитать документацию:

Вы можете получить элемент из коллекции, используя операцию GetAt(index), или вы можете выполнить foreach для итерации элементов в коллекции.

Также EA.Element не имеет свойства с именем Object_ID, которое является именем столбца в базе данных. Идентификатор объекта можно получить из свойства ElementID

person Geert Bellekens    schedule 23.07.2019
comment
Нет, не думай. Это просто невозможно. Взамен вы получаете объект, у которого есть операция GetAt. - person qwerty_so; 24.07.2019
comment
@Geert Bellekens@ qwerty_so Спасибо за ваше решение. Это сработало, я знаю, что GetElementSet возвращает значение EA.Collection, но я предположил, что это коллекция в python, поэтому использовал прямую индексацию вместо GetAt. - person goodman; 24.07.2019

Я наблюдал за Питоном. Ты можешь сделать

for elem in reqCollection:
   print (elem.name) # for example

Работает для всех коллекций (я использовал до сих пор), возвращенных EA.

person qwerty_so    schedule 10.08.2019
comment
да, это работает. На самом деле, это моя ошибка, я использовал Object_ID вместо ElementID, поэтому я получал ошибку. - person goodman; 12.08.2019