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

Получить TCComponentBOMLine


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

День добрый. А есть ли возможность получить текущий выделенный TCComponentBOMLine. Для компонента работает так:

 

InterfaceAIFComponent comps [] = application.getTargetComponents();

TCComponentItem object = (TCComponentItem) comps[0];

 

Думал, что можно просто привести к нужному мне, но не работает. Падает:

 

TCComponentBOMLine boml = (TCComponentBOMLine) comps[0];

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


      
public class Handler extends AbstractHandler
{
    public Object execute(ExecutionEvent event) throws ExecutionException 
    {
ISelection m_selection = HandlerUtil.getCurrentSelection(event);
AIFComponentContext aifComp[] = SelectionHelper.getTargetContexts(m_selection);
TCComponentBOMLine boml = (TCComponentBOMLine) aifComp[0].getComponent() ;

   }

}

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

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

 

... extends AbstractAIFAction

 

public void run()

{

// тут

...

}

 

Не могу выйти на event или найти ему замену

Попробовал еще так

 

ISelection m_selection = this.getSelection();

AIFComponentContext aifComp[] = SelectionHelper.getTargetContexts(m_selection);
TCComponentBOMLine boml = (TCComponentBOMLine) aifComp[0].getComponent() ;

 

также на последней строке падает((

А может вообще бомлайн из главной рабочей области получить нельзя?

Ссылка на сообщение
Поделиться на других сайтах
53 минуты назад, cppGhost сказал:

День добрый. А есть ли возможность получить текущий выделенный TCComponentBOMLine. Для компонента работает так:

 

TCComponentBOMLine boml = (TCComponentBOMLine) comps[0];

вообще это должно работать.ищите в другом месте. или дайте кусок кода целиком.

 

так как у вас AIFAction и вы в методе run() работаете - то в это в принципе и причина скорей всего. В разных потоках получается. Что именно отладчик выдает ?

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

Вот прямо сначала метода:

 

public void run()
    {
        try
        {
            InterfaceAIFComponent comps [] = application.getTargetComponents();
            if((comps != null) && (comps.length > 0) && (comps[0] != null))
            {                

                ErrorMsg_1("before");
                TCComponentBOMLine boml = (TCComponentBOMLine) comps[0] ;
                ErrorMsg_1("after");

             }

}

 

Есть только сообщение "before". Сообщение уже не появляется. Вызываю данную команду из рабочей области тимцентра кнопкой на тулбаре.

P.S. отладчика нет(( приходится делать код и смотреть фактически на машине клиента

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

Еще заметил проблему, которая, как мне кажется, такая же. Есть у меня команда "вставить" в своем виде. Для вставки я беру элемент из буфера обмена и также приведением получаю бомлайн. Так вот если зайти в менеджер структуры и оттуда скопировать элемент, то всё ок. А если прямо из рабочей области тимцентра, то приведение типа 

 

TCComponentBOMLine boml = (TCComponentBOMLine) comps[0];

 

также валится.

Ссылка на сообщение
Поделиться на других сайтах
1 час назад, cppGhost сказал:

 

Есть только сообщение "before". Сообщение уже не появляется. Вызываю данную команду из рабочей области тимцентра кнопкой на тулбаре.

P.S. отладчика нет(( приходится делать код и смотреть фактически на машине клиента

а в чем вы пишите?не в эклипсе разве?какая версия ТС?

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

Эклипс. ТС10. И всё больше мне кажется, что бомлайны начинаются только при работа с менеджером структуры.

Ссылка на сообщение
Поделиться на других сайтах
2 часа назад, cppGhost сказал:

Еще заметил проблему, которая, как мне кажется, такая же. Есть у меня команда "вставить" в своем виде. Для вставки я беру элемент из буфера обмена и также приведением получаю бомлайн. Так вот если зайти в менеджер структуры и оттуда скопировать элемент, то всё ок. А если прямо из рабочей области тимцентра, то приведение типа 

 

TCComponentBOMLine boml = (TCComponentBOMLine) comps[0];

 

также валится.

хм, ну а разве не так должно работать...
в одном месте бомлайны в другом айтемы

Ссылка на сообщение
Поделиться на других сайтах
46 минут назад, cppGhost сказал:

Эклипс. ТС10. И всё больше мне кажется, что бомлайны начинаются только при работа с менеджером структуры.

так какие проблемы с отладкой в эклипсе?у вас может отладка не настроена?там все прекрасно отлаживается

 

 

46 минут назад, cppGhost сказал:

Эклипс. ТС10. И всё больше мне кажется, что бомлайны начинаются только при работа с менеджером структуры.

ну вам правильно кажется. как уже сказали - айтемы(мухи) отдельно, бомлайны(котлеты) - отдельно.

 

айтем в навигаторе тимцентра  != бомлайн выделенный в менеджере структуры. Это объекты двух разных классов.И это должно быть очевидно

 

У бомлайна есть методы getItem или getItemRevision

Изменено пользователем lexx174
Ссылка на сообщение
Поделиться на других сайтах
2 часа назад, cppGhost сказал:

И всё больше мне кажется, что бомлайны начинаются только при работа с менеджером структуры.

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

И откуда ещё взяться бомлайну, если для его определения нужно правило ревизии, дата и т.д.?

Вообще я не специалист, но это же специфичный рантайм класс, по сути то.

Тимцентру его сначала "вычислить" надо на основе какой-то структуры и дополнительных данных(правила, айтемы или ревизии айтемов (в случае точной структуры)), а потом уже использовать.

И вычислением как раз менеджеры стуктур занимаются (ну или какой-то общий класс-движок в этих менеджерах работает).

 

Изменено пользователем Алексей256
Ссылка на сообщение
Поделиться на других сайтах
В 24.07.2017 в 11:54, cppGhost сказал:

Еще заметил проблему, которая, как мне кажется, такая же. Есть у меня команда "вставить" в своем виде. Для вставки я беру элемент из буфера обмена и также приведением получаю бомлайн. Так вот если зайти в менеджер структуры и оттуда скопировать элемент, то всё ок. А если прямо из рабочей области тимцентра, то приведение типа 

 

TCComponentBOMLine boml = (TCComponentBOMLine) comps[0];

 

также валится.

так и должно быть, BOMLine - runtime объект, он есть только в менеджере стуркутры.

В 24.07.2017 в 16:39, Алексей256 сказал:

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

И откуда ещё взяться бомлайну, если для его определения нужно правило ревизии, дата и т.д.?

Вообще я не специалист, но это же специфичный рантайм класс, по сути то.

Тимцентру его сначала "вычислить" надо на основе какой-то структуры и дополнительных данных(правила, айтемы или ревизии айтемов (в случае точной структуры)), а потом уже использовать.

И вычислением как раз менеджеры стуктур занимаются (ну или какой-то общий класс-движок в этих менеджерах работает).

 

именно

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

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

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

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

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

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

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

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

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

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

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




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