2016-09-27 10 views
1

Я создаю новые пакеты с использованием Object Model и C#. Я создаю пакеты с подпакетами рекурсивно, и это отлично работает. Тем не менее, мои изменения не отображаются в EA после того, как сценарий завершен, если я не вручную обновляю проект с помощью ctrlshiftF11, после чего мои созданные пакеты отображаются в соответствии с назначением.Новые созданные пакеты появляются только после обновления вручную

Я обновляю недавно созданный пакет newPackage.Update();, а также обновляю пакеты родительского пакета parentPackage.Packages.Refresh();.

После рекурсивно создания всех пакетов я дополнительно позвонить Model.Update(), Repository.Models.Refresh();, Model.Packages.Refresh(); Aswell в Repository.Exit().

EA, похоже, перерисовывает представление, но не отображает вновь созданные пакеты.

Не хватает ли какого-либо вызова в конце, который обновляет представление?

Я использую этот код:

eaApplication = new EA.App(); // Create interface to EA 
eaRepository = eaApplication.Repository; 
eaRepository.EnableUIUpdates = true; 
eaRepository.OpenFile(pathToEAPfile) 
EA.Package eaModel = eaRepository.Models.GetAt(0); 
EA.Package testModelPackage = (getting it via for loop); 
EA.Package newPack = testModelPackage.Packages.AddNew("foopackage", "System.__ComObject"); 
newPack.Update(); 
testModelPackage.Packages.Refresh(); 

eaRepository.RefreshModelView(0); 
eaRepository.Exit(); 

ответ

0

Я полагаю, вы называете это из внешнего приложения. Любой клиент EA не получает уведомления о базовых обновлениях базы данных. Только тогда, когда пользователь явно читает соответствующие части.

Вам необходимо либо запустить вышеуказанный код внутри EA, либо добавить его или обновить вручную.

На начальный вопрос: Следующее было ответом на исходный неопределенный вопрос. Я оставляю это для справки другими.


Вызов

Repository.RefreshModelView(0) 

перезагружать весь вид из корня на. Или передайте PackageId пакета, который вы хотите обновить.

N.B. Все ваши дополнительные вызовы являются излишними. Вызовите Update() только для объектов, которые изменились. Вызовы Refresh() нужны только в том случае, если впоследствии вы перемещаете измененную коллекцию (после добавления или удаления объектов).

+0

Спасибо за ваш быстрый ответ. Тем не менее, это все еще не делает трюк. Я также попытался передать индивидуальные идентификаторы пакетов для всех вновь созданных пакетов без успеха. – Lukas

+0

Вам необходимо передать родительский пакет. Это будет каскадом вниз. Сначала попробуйте с '0', чтобы увидеть, что он обновляет весь вид. –

+0

Передача идентификатора родительского пакета также не работает. – Lukas