запись в XData

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

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

Оффлайн 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
  • Карма: 735
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
  • Карма: 735
Re: запись в XData
« Ответ #6 : 08-02-2019, 17:32:32 »
делаю это все в ObjectOverrule.Close()
Возможно, что нельзя в этом методе записывать XData.
И все работает, но повторно файл не открывается(
Как это проявляется? Восстановление помогает?

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

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

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

  • Administrator
  • *****
  • Сообщений: 13830
  • Карма: 1784
  • Рыцарь 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);
???
У тебя же остался незакрытый объект в этом случае.

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

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

  • ADN OPEN
  • ****
  • Сообщений: 411
  • Карма: 9
Re: запись в XData
« Ответ #15 : 09-02-2019, 21:40:05 »
simson43,
Убери транзакцию и добавление других труб.

А где использовать полученные данные?
Может работа с трубой за пределами транзакции.. скорее всего. Но вряд ли это влияет же да?

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

  • Administrator
  • *****
  • Сообщений: 13830
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: запись в XData
« Ответ #16 : 09-02-2019, 21:43:47 »
simson43,
simson43,
Убери транзакцию и добавление других труб.

А где использовать полученные данные?
Пока убедись, что можно модифицировать XData объекта, который попадает в ObjectOverulle.Close
P.S.: Разговор с тобой происходит на уровне "я вам ничего не скажу, но вы мне помогите". Кроме того, что непонятно как помочь, так еще и пропадает желание помогать. Имей в виду.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN OPEN
  • ****
  • Сообщений: 411
  • Карма: 9
Re: запись в XData
« Ответ #17 : 09-02-2019, 21:49:19 »
Хорошо, проверю скину код как доберусь до него
Спасибо

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

  • ADN
  • *
  • Сообщений: 2531
  • Карма: 735
Re: запись в XData
« Ответ #18 : 11-02-2019, 15:23:22 »
Я советую не делать никаких модификаций в методе Close(). Как-то я уже натыкался на проблемы с этим для сивильных объектов. Они все взаимосвязаны. Когда открыт один - нет никакой гарантии, что не открыт другой, связанный с ним. Код при этом работает через раз. Никогда не знаешь, когда "выстрелит" очередная проблема.
В итоге, сейчас я только смотрю данные открываемых и закрываемых объектов. Собираю их в коллекцию и потом уже обрабатываю, когда приложение переходит в состояние "ожидаю действий от пользователя" или "бездействую". Есть соответствующие этому события Editor.EnteringQuiescentState и Application.Idle.

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

  • ADN OPEN
  • ****
  • Сообщений: 411
  • Карма: 9
Re: запись в XData
« Ответ #19 : 14-02-2019, 21:04:42 »
теста ради сократил до такого состояния

Код - C# [Выбрать]
  1. public override void Close(DS.DBObject dbObject)
  2. {
  3.     if (IsApplicable(dbObject) && dbObject.IsNewObject && !dbObject.IsCancelling && !dbObject.IsErased)
  4.     {
  5.         Pipe pipe = dbObject as Pipe;
  6.  
  7.         pipe.XData = new ResultBuffer(
  8.             new TypedValue((int)DxfCode.ExtendedDataRegAppName, appName"),
  9.            new TypedValue((int)DxfCode.ExtendedDataInteger32, 1));
  10.    }
  11.    base.Close(dbObject);
  12. }

эффект тот же
видимо нельзя в Close это делать

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

записываю в только добавленные объекты, в которых еще нет моего приложения
Код - C# [Выбрать]
  1. private static void Editor_EnteringQuiescentState(object sender, EventArgs e)
  2.         {
  3.             using (DocumentLock dl = AcadDoc.LockDocument())
  4.             {
  5.                 for (int i = pipeSegments.Count - 1; i >= 0; i--)
  6.                 {
  7.                     PipeSegment pipeSeg = pipeSegments[i];
  8.                     using (Pipe pipe = pipeSeg.Id.Open(OpenMode.ForWrite) as Pipe)
  9.                     {
  10.                         if (pipe.GetXDataForApplication(appName) == null)
  11.                         {
  12.                             pipe.XData = new ResultBuffer(
  13.                                 new TypedValue((int)DxfCode.ExtendedDataRegAppName, appName),
  14.                                 new TypedValue((int)DxfCode.ExtendedDataInteger32, 1));
  15.                         }
  16.                         else return;
  17.                     }
  18.                 }
  19.             }
  20.         }

что самое странное эффект тот же(
pipeSegments это список объектов содержащий Id существующих в текущем документе труб и другую информацию

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

  • Administrator
  • *****
  • Сообщений: 13830
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: запись в XData
« Ответ #20 : 14-02-2019, 22:58:16 »
что самое странное эффект тот же(
Эффект то какой?
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN OPEN
  • ****
  • Сообщений: 411
  • Карма: 9
Re: запись в XData
« Ответ #21 : 14-02-2019, 22:59:54 »
файл после сохранения повторно не открывается
« Последнее редактирование: 14-02-2019, 23:02:18 от Александр Ривилис »

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

  • Administrator
  • *****
  • Сообщений: 13830
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: запись в XData
« Ответ #22 : 14-02-2019, 23:02:41 »
файл после сохранения повторно не открывается
Где файл для проверки?
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN OPEN
  • ****
  • Сообщений: 411
  • Карма: 9
Re: запись в XData
« Ответ #23 : 14-02-2019, 23:09:06 »
civil просто зависает при попытке открыть этот файл

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

  • Administrator
  • *****
  • Сообщений: 13830
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: запись в XData
« Ответ #24 : 14-02-2019, 23:20:30 »
civil просто зависает при попытке открыть этот файл
Recover восстанавливает файл, но что-то конечно порушено:
Reading handle 6AC3 object type AeccDbPipe
      Error 34 (eWrongObjectType)                       Object discarded
Reading handle 6ACE object type AeccDbPipe
      Error 34 (eWrongObjectType)                       Object discarded
Но у меня чистый AutoCAD. Проверь у себя команду _RECOVER и выложи результаты её работы.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN OPEN
  • ****
  • Сообщений: 411
  • Карма: 9
Re: запись в XData
« Ответ #25 : 14-02-2019, 23:27:26 »
очевидно две трубы, в XData которых записал "1"

при чем если записываю то же самое просто командой, то нормально записывает/сохраняется/закрывается/открывается

а вот по событию что-то не работает(

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

  • ADN OPEN
  • ****
  • Сообщений: 411
  • Карма: 9
Re: запись в XData
« Ответ #26 : 14-02-2019, 23:30:32 »
Выложить почищенный файл или что написал в командной строке?

в чертеже просто удалил две трубы
а написал то же самое, что и у вас

    База данных чертежа спасена.
Reading handle 6AC3 object type AeccDbPipe
      Error 34 (eWrongObjectType)                       Object discarded
Reading handle 6ACE object type AeccDbPipe
      Error 34 (eWrongObjectType)                       Object discarded

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

  • Administrator
  • *****
  • Сообщений: 13830
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: запись в XData
« Ответ #27 : 14-02-2019, 23:32:10 »
Выложить почищенный файл или что написал в командной строке?
Не нужно выкладывать. Я увидел то, что хотел. Уточни какое значение appName
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN OPEN
  • ****
  • Сообщений: 411
  • Карма: 9
Re: запись в XData
« Ответ #28 : 14-02-2019, 23:33:45 »
"PavlovXApp"

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

  • Administrator
  • *****
  • Сообщений: 13830
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: запись в XData
« Ответ #29 : 14-02-2019, 23:37:11 »
"PavlovXApp"
Такое приложение в этом файле не зарегистрировано. Картинку прикладывать не буду - ты и сам при помощи ARXDBG или MGDDBG это увидишь.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN OPEN
  • ****
  • Сообщений: 411
  • Карма: 9
Re: запись в XData
« Ответ #30 : 14-02-2019, 23:40:04 »
я регистрирую его при открытии файла. даже ради интереса перед записью в XData проверил существует ли оно - существует.
говорю же записав это приложение по команде - работает

в очищенном файле может быть его уже не стало? может такое быть?

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

  • Administrator
  • *****
  • Сообщений: 13830
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: запись в XData
« Ответ #31 : 14-02-2019, 23:41:21 »
в очищенном файле может быть его уже не стало? может такое быть?
Нет. _RECOVER говорит что именно оно удаляет.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • Administrator
  • *****
  • Сообщений: 13830
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: запись в XData
« Ответ #32 : 14-02-2019, 23:43:45 »
я регистрирую его при открытии файла
В каком событии? С этим нужно быть еще более осторожным, чем с Close.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN OPEN
  • ****
  • Сообщений: 411
  • Карма: 9
Re: запись в XData
« Ответ #33 : 14-02-2019, 23:46:32 »
Собираю их в коллекцию и потом уже обрабатываю, когда приложение переходит в состояние "ожидаю действий от пользователя" или "бездействую". Есть соответствующие этому события Editor.EnteringQuiescentState и Application.Idle.

я пробовал в EnteringQuiescentState

а регистрирую в DocumentActivated

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

  • Administrator
  • *****
  • Сообщений: 13830
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: запись в XData
« Ответ #34 : 14-02-2019, 23:48:25 »
я пробовал в EnteringQuiescentState
Ты показал код, в котором этого нет. Зарегистрируй своё приложение, убедись что оно зарегистрировалось и сохрани чертеж. Закрой его и открой по новой. Затем уже запускай в работу свой модуль и проверяй портится чертеж или нет. Учись тестировать и находить из-за чего возникает ошибка.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN OPEN
  • ****
  • Сообщений: 411
  • Карма: 9
Re: запись в XData
« Ответ #35 : 14-02-2019, 23:50:41 »
я пробовал в EnteringQuiescentState
Ты показал код, в котором этого нет.
в 19 сообщении

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

  • Administrator
  • *****
  • Сообщений: 13830
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: запись в XData
« Ответ #36 : 14-02-2019, 23:52:59 »
я пробовал в EnteringQuiescentState
Ты показал код, в котором этого нет.
в 19 сообщении

В 19 сообщении нет ни кода, где ты собираешь ObjectId, ни кода регистрации своего приложения.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN OPEN
  • ****
  • Сообщений: 411
  • Карма: 9
Re: запись в XData
« Ответ #37 : 14-02-2019, 23:58:46 »
Зарегистрируй своё приложение, убедись что оно зарегистрировалось и сохрани чертеж. Закрой его и открой по новой. Затем уже запускай в работу свой модуль и проверяй портится чертеж или нет.
все это проверял. приложение зарегистрировано. и без происшествий пишется по команде - значит с приложением все нормально...
по событию отладчиком прохожусь - приложение существует, в XData пишется, но после сохранения уже не открывается файл
попробую как нибудь иначе записать

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

  • ADN
  • *
  • Сообщений: 2531
  • Карма: 735
Re: запись в XData
« Ответ #38 : 15-02-2019, 10:42:06 »
что самое странное эффект тот же(
Ну я не знаю. У меня уже очень давно XData редактируются именно так - никаких проблем не возникает.
Единственное, что можно было бы попробовать сделать - ResultBuffer поместить в конструкцию using. Так правильнее. Вот как в примере: https://knowledge.autodesk.com/search-result/caas/CloudHelp/cloudhelp/2015/ENU/AutoCAD-NET/files/GUID-92D663FA-0452-44F4-BDAC-0EEF0AF3BD88-htm.html

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

  • ADN OPEN
  • ****
  • Сообщений: 411
  • Карма: 9
Re: запись в XData
« Ответ #39 : 15-02-2019, 14:53:00 »
Такое приложение в этом файле не зарегистрировано.
Вы были правы.
Ошибка оказалась очень глупой - не сохранил приложение в транзакции.

странно что regAppTable.Has(appName) выдавал true у меня... и командой данные записывались..

после исправления этой ошибки в методе Close пишется без ошибок и прочего криминала!

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

  • Administrator
  • *****
  • Сообщений: 13830
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: запись в XData
« Ответ #40 : 15-02-2019, 16:12:47 »
Вы были правы.
Ошибка оказалась очень глупой - не сохранил приложение в транзакции.
Почему-то меня это не удивляет. :) Хорошо что докопался до причины.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN OPEN
  • ****
  • Сообщений: 411
  • Карма: 9
Re: запись в XData
« Ответ #41 : 25-02-2019, 13:39:47 »
а можно ведь без транзакции регистрировать приложение?
как то так
Код - C# [Выбрать]
  1. using (RegAppTable rat = db.RegAppTableId.Open(OpenMode.ForWrite) as RegAppTable)
  2.                     {
  3.                         if (!rat.Has(nameApp))
  4.                             using (RegAppTableRecord regApp = new RegAppTableRecord() { Name = nameApp })
  5.                                 rat.Add(regApp);
  6.                     }

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

  • Administrator
  • *****
  • Сообщений: 13830
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: запись в XData
« Ответ #42 : 25-02-2019, 13:51:35 »
simson43,
Можно.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN
  • *
  • Сообщений: 2531
  • Карма: 735
Re: запись в XData
« Ответ #43 : 25-02-2019, 17:04:38 »
как то так
Лучше сперва открыть таблицу приложений просто для чтения, и если приложение не зарегистрировано - тогда уже UpgradeOpen для записи.

P.S. Вот в таких случаях я очень сожалею, что разработчики языка C# дали возможность использовать конструкции if и using без явного указания блока. И ещё эта убогая инициализация значения полей! Код ужасно читается! Ещё до кучи, тогда уж, надо было в одну строчку записать, чтобы совсем тяжко было разбираться  ;):
Код - C# [Выбрать]
  1. using (RegAppTable rat = db.RegAppTableId.Open(OpenMode.ForWrite) as RegAppTable) if (!rat.Has(nameApp)) using (RegAppTableRecord regApp = new RegAppTableRecord() { Name = nameApp }) rat.Add(regApp);