Перейти к публикации

обход дерева на java


Рекомендованные сообщения

имеется TCComponentItemRevision объект какой-то сборки. Как получить ссылку на его BOMViewRevision и далее на айтемы компонент?

Ссылка на сообщение
Поделиться на других сайтах


имеется TCComponentItemRevision объект какой-то сборки. Как получить ссылку на его BOMViewRevision и далее на айтемы компонент?

getRelatedComponents("structure_revisions"). Получишь массив BOMViewRevisions.Дальше думаю разберешься
Ссылка на сообщение
Поделиться на других сайтах

getRelatedComponents("structure_revisions"). Получишь массив BOMViewRevisions.Дальше думаю разберешься

спасибо. Т.е. продолжать дальше спускаться по свойствам, ища их через getPropertyNames().

мне предложили еще другой вариант, судя по обилию функций в этих классах, сименс рекомендует идти этим путем,

но, похоже, тут больше памяти сжирается.

TCComponentBOMWindowType bowWinType = (TCComponentBOMWindowType )getSession().getTypeComponent("BOMWindow");

bomWin = bowWinType.create(null); // create bom window configured with the default revision rule

TCComponentBOMLine bl= bomWin.setWindowTopLine(_tcItem, itemRev, null, null);

// get children if any

if (bl.hasChildren()){

AIFComponentContext[] childContext = bl.getChildren();

for(int i = 0; i < childContext.length; i++){

TCComponentBOMLine child = (TCComponentBOMLine)childContext.getComponent();

TCComponentItem item = child.getItem();

}

Ссылка на сообщение
Поделиться на других сайтах

спасибо. Т.е. продолжать дальше спускаться по свойствам, ища их через getPropertyNames().

мне предложили еще другой вариант, судя по обилию функций в этих классах, сименс рекомендует идти этим путем,

но, похоже, тут больше памяти сжирается.

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

TCComponentBOMWindowType bowWinType = (TCComponentBOMWindowType )getSession().getTypeComponent("BOMWindow");

bomWin = bowWinType.create(null); // create bom window configured with the default revision rule

TCComponentBOMLine bl= bomWin.setWindowTopLine(_tcItem, itemRev, null, null);

сименс рекомендует не зря, потому что так можно смотреть разные составы в зависимости от правила выбора модификации (например).... порой это важно
Ссылка на сообщение
Поделиться на других сайтах
  • 5 месяцев спустя...

А как имея только TCComponentItem найти его сборку, и вытащить ее состав виде TCComponentBOMLine. Трудность в том, что компоненты BOMLine только в менеджере структуры, в других случаях (без загрузки менеджера структуры) они даже явно не приводятся к нужному типу.

Ссылка на сообщение
Поделиться на других сайтах

А как имея только TCComponentItem найти его сборку, и вытащить ее состав виде TCComponentBOMLine. Трудность в том, что компоненты BOMLine только в менеджере структуры, в других случаях (без загрузки менеджера структуры) они даже явно не приводятся к нужному типу.

У TCComponent есть метод whereUsed.

О какой загрузке менеджера структуры речь? код приведенный выше работает

Ссылка на сообщение
Поделиться на других сайтах

Удалось выдернуть этот bomline:

private ISelection m_selection;

...

Object data = ((IStructuredSelection)m_selection).getFirstElement();

AIFComponentContext Ir = ((AIFComponentContext)data).getComponent().getChildren()[((AIFComponentContext)data).getComponent().getChildren().length - 1];//ревизия

TCComponentItemRevision ic = (TCComponentItemRevision)Ir.getComponent();

TCComponentBOMWindowType bowWinType = (TCComponentBOMWindowType)ic.getSession().getTypeComponent("BOMWindow");

TCComponentBOMWindow bomWin = bowWinType.create(null);

TCComponentBOMLine bl = bomWin.setWindowTopLine(null, ic, null, null);

только как нормально ревизию получить (в переменную Ir->ic)?

Изменено пользователем VadEr
Ссылка на сообщение
Поделиться на других сайтах

Откуда берется m_selection? выбирается пользователем в портале? у объекта application есть функции getTargetComponents(), getSelectedComponents() результат которых прямо приводится к нужному типу.

Ссылка на сообщение
Поделиться на других сайтах

Откуда берется m_selection? выбирается пользователем в портале? у объекта application есть функции getTargetComponents(), getSelectedComponents() результат которых прямо приводится к нужному типу.

Скорей всего ISelection - это и есть аналог InterfaceAIFComponent
Ссылка на сообщение
Поделиться на других сайтах

Скорей всего ISelection - это и есть аналог InterfaceAIFComponent

да, (AIFComponentContext)data).getComponent() возвращает InterfaceAIFComponent, от которых я беру getChildren(). последний мне возвращает массив из AIFComponentContext:

1) TCComponentForm

2) TCComponentBOMView

3) TCComponentItemRevision - вот его как последний элемент массива я и беру, но обращаться к последнему элементу массива считаю не совсем корректно, есть ли способ напрямую получить ревизию из InterfaceAIFComponent?

Ссылка на сообщение
Поделиться на других сайтах

да, (AIFComponentContext)data).getComponent() возвращает InterfaceAIFComponent, от которых я беру getChildren(). последний мне возвращает массив из AIFComponentContext:

1) TCComponentForm

2) TCComponentBOMView

3) TCComponentItemRevision - вот его как последний элемент массива я и беру, но обращаться к последнему элементу массива считаю не совсем корректно, есть ли способ напрямую получить ревизию из InterfaceAIFComponent?

а что трудного делать проверки в массиве выбранных объектов вида:

if(object instanceof TCComponentItemRevision)

Ссылка на сообщение
Поделиться на других сайтах
  • 2 недели спустя...

А как имея только TCComponentItem найти его сборку, и вытащить ее состав виде TCComponentBOMLine

если я правильно поняла вопрос, то вот так наверное лучше бы:

TCComponent[] structureRev = null;

TCComponentItemRevision targetSbRev = null;

structureRev = targetSbRev.getRelatedComponents("structure_revisions");

.....

.....

среди всех разных типов составов находите нужный тип и как сказано было выше отправляете его в

TCComponentBOMLine bomTopLine = bw.setWindowTopLine( null, targetSbRev, null, bomViewRev );

......

ну и так далее

Изменено пользователем Wise_Owl
Ссылка на сообщение
Поделиться на других сайтах
  • 1 год спустя...

Присоединяйтесь к обсуждению

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

Гость
Ответить в тему...

×   Вставлено в виде отформатированного текста.   Вставить в виде обычного текста

  Разрешено не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отобразить как ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

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

  • Сейчас на странице   0 пользователей

    Нет пользователей, просматривающих эту страницу.




×
×
  • Создать...