запись в XData

Автор Тема: запись в XData  (Прочитано 23410 раз)

0 Пользователей и 2 Гостей просматривают эту тему.

Оффлайн simson43Автор темы

  • ADN OPEN
  • ****
  • Сообщений: 411
  • Карма: 9
запись в XData
« : 08-02-2019, 02:02:33 »
что то совсем уже не понимаю

при записи в XData больше одной строчки (с учетом что первая название приложения) файл после сохранения повторно не открывается
приложение зарегистрировал.. есть еще нюансы?

пишу так
Код - C# [Выбрать]
  1.  pipe.XData = new ResultBuffer(
  2.                             new TypedValue(1001, "AppName"),
  3.                             new TypedValue(1071, 1));

строчка проходит без ошибок все работает, но файл повторно не открыть(
если убрать второй TypedValue  или вовсе строчку с XData то все работает..

я что то упускаю? с чем связано такое поведение
делаю это все в ObjectOverrule.Close()

Пока пишу попробовал отдельной командой открыть и записать то же самое в тот же объект - нормально работает

Оффлайн Александр Пекшев aka Modis

  • ADN Club
  • *****
  • Сообщений: 1658
  • Карма: 366
  • Отец modplus.org
    • ModPlus
Re: запись в XData
« Ответ #1 : 08-02-2019, 02:07:40 »
Чтобы писать в XData нужно открыть транзакцию

Оффлайн simson43Автор темы

  • ADN OPEN
  • ****
  • Сообщений: 411
  • Карма: 9
Re: запись в XData
« Ответ #2 : 08-02-2019, 07:43:26 »
Openclosetransaction не подойдет?
Важное уточнение, спасибо

Оффлайн simson43Автор темы

  • ADN OPEN
  • ****
  • Сообщений: 411
  • Карма: 9
Re: запись в XData
« Ответ #3 : 08-02-2019, 10:06:47 »
В соседней теме выясниллсь что в этом методе лучше не использовать транзакцию. С ней не работало.. а теперь выясняется что она нужна.. как совместить эти два условия?

Оффлайн Дмитрий Загорулькин

  • ADN
  • *
  • Сообщений: 2531
  • Карма: 737
Re: запись в XData
« Ответ #4 : 08-02-2019, 11:16:38 »
Чтобы писать в XData нужно открыть транзакцию
Нужно открыть объект, но не обязательно транзакцией.
строчка проходит без ошибок все работает, но файл повторно не открыть(
если убрать второй TypedValue  или вовсе строчку с XData то все работает..

я что то упускаю? с чем связано такое поведение
делаю это все в ObjectOverrule.Close()
А приложение "AppName" зарегистрировано?

Оффлайн simson43Автор темы

  • ADN OPEN
  • ****
  • Сообщений: 411
  • Карма: 9
Re: запись в XData
« Ответ #5 : 08-02-2019, 16:53:59 »
Тогда зачем в заблуждение вводить(
Да зарегистрировано! При попытке записать незарегистрированное сразу ошибка!
Я открываю объект в OpenCloseTransaction
И все работает, но повторно файл не открывается( вроде все по инструкции, не понимаю в чем ошибка
Если записать только первую строчку с названием приложения то все нормально..

Оффлайн Дмитрий Загорулькин

  • ADN
  • *
  • Сообщений: 2531
  • Карма: 737
Re: запись в XData
« Ответ #6 : 08-02-2019, 17:32:32 »
делаю это все в ObjectOverrule.Close()
Возможно, что нельзя в этом методе записывать XData.
И все работает, но повторно файл не открывается(
Как это проявляется? Восстановление помогает?

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: запись в XData
« Ответ #7 : 08-02-2019, 17:38:35 »
Если записать только первую строчку с названием приложения то все нормально..
А это означает, что расширенные данные приложения с переданным именем удаляются из объекта. Если их там нет, то этот код вообще не меняет объект.
P.S.: Ты случайно не в тот же объект пытаешься писать XData, которые пришли в Close?
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн simson43Автор темы

  • ADN OPEN
  • ****
  • Сообщений: 411
  • Карма: 9
Re: запись в XData
« Ответ #8 : 09-02-2019, 09:26:32 »
В тот же... Объект ж можно изменять в Close.. нет? Где тогда писать?

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: запись в XData
« Ответ #9 : 09-02-2019, 12:28:27 »
Я открываю объект в OpenCloseTransaction
1. Ты его повторно открываешь?
2. Ты проверяешь, что он открыт на запись?
И вообще. Показывай код. А то мы можем еще долго много чего придумывать, что не относится к проблеме в твоём коде.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн simson43Автор темы

  • ADN OPEN
  • ****
  • Сообщений: 411
  • Карма: 9
Re: запись в XData
« Ответ #10 : 09-02-2019, 19:17:38 »
Нет возможности показать код,
Да проверяю что на запись!  зачем мне его открывать если он открыт? У меня же есть объект уже.. просто пишу в Xdata

А, openCloseTransaction для других объектов,я из папаллельно изменяю

Оффлайн simson43Автор темы

  • ADN OPEN
  • ****
  • Сообщений: 411
  • Карма: 9
Re: запись в XData
« Ответ #11 : 09-02-2019, 19:30:33 »
Могу приблизительно написать что то около того что у меня в коде, без студии так что если ошибки не судите строго
Код - C# [Выбрать]
  1. Close()
  2. {
  3. if(dbObject.IsModified && !dbObject.IsNewObject && dbObject.IsWriteEnabled)
  4. {
  5. Using(transaction tr=db.transactionManager.StartOpenCloseTransaction)
  6. {
  7. Pipe pipe = dbObject as Pipe;
  8. // тут считываю данные трубы этой и создаю другие добавляю их в модель и транзакцию
  9.  pipe.XData = new ResultBuffer(
  10.                             new TypedValue(1001, "AppName"),
  11.                             new TypedValue(1071, 1));
  12. tr.commit();
  13. }
  14. }
  15. }
Региструрию приложение при активации документа если нет еще его
Что то вроде этого

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: запись в XData
« Ответ #12 : 09-02-2019, 20:53:39 »
simson43,
Убери транзакцию и добавление других труб.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: запись в XData
« Ответ #13 : 09-02-2019, 21:06:03 »
simson43,
А где у тебя:
Код - C# [Выбрать]
  1.  base.Close(dbObject);
???
У тебя же остался незакрытый объект в этом случае.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн simson43Автор темы

  • ADN OPEN
  • ****
  • Сообщений: 411
  • Карма: 9
Re: запись в XData
« Ответ #14 : 09-02-2019, 21:38:37 »
simson43,
А где у тебя:
Код - C# [Выбрать]
  1.  base.Close(dbObject);
???
У тебя же остался незакрытый объект в этом случае.

Да он есть вконце, точно