Идентификаторы элементов в Revit. Часть 2
Продолжаем серию статей об идентификаторах в Revit
Часть 1: Уникальный идентификатор (UniqueId) или числовой (Element.Id)
Уникальность уникального идентификатора UniqueId
Вопрос: Некоторые думают, что все уникальные идентификаторы Element.UniqueId являются GUID, а, следовательно, они должны быть уникальными для каждого файла. ElementId генерируется в момент создания и для разработчика это довольно удобно использовать для идентификации элементов и проектов. НО, проекты, которые создаются на основе шаблона, просто копируются содержимое этого шаблона вместе с имеющимися в нем элементами и их идентификаторами. Таким образом, уникальные идентификаторы повторяются в различных файлах.
Я думаю, что это поведение можно рассматривать как баг, и очевидно, что его нужно исправить. К примеру, можно менять GUID во время выполнения команды Сохранить Как… Копирование же файла в файловой системе стоит рассматривать как нежелательное действие.
Ответ: Мы не можем считать это багом. Revit никогда не гарантировал уникальность элемента между различными файлами. Более того, это фактически невозможно сделать: Revit не может следить за всеми действиями с файлами, которые были сделаны не в Revit (например, копирование или переименование файла). Основная цель и преимущество уникального идентификатора состоит в том, чтобы гарантировать уникальность и постоянство идентификатора элемента при совместной работе надо проектом. В то время как числовой идентификатор ElementId может быть изменен при синхронизации локального файла с центральным хранилищем, уникальный идентификатор остается неизменным с момента его создания. Это значит, что если пользователь хранит идентификатор элемента перед синхронизацией с центральным файлом, то после синхронизации, этот же идентификатор будет ссылаться на тот же самый элемент. В то время как обычный числовой идентификатор после синхронизации с центральным фалом будет ссылаться на совершенно другой элемент.
Ответ: Это и является для нас проблемой, так как изначально мы решили использовать GUID как уникальный идентификатор в базе данных. А проблема в том, что эти GUID’ы не меняются при создании проекта из шаблона. Поэтому, все наши проекты имеют один и тот же уникальный идентификатор. По крайней мере насколько я помню. Все же они могли бы меняться при Сохранить как…
Если же это невозможно, то хотя бы создание проекта из шаблона должно менять идентификаторы.
Ответ: Извините за это недоразумение, но как я сказал, мы никогда не гарантировали абсолютную уникальность элементов среди различных документов. Изменение идентификаторов при создании нового проекта из шаблона было бы вполне разумным решением с нашей стороны, однако, даже если мы это реализуем, то все равно это не может гарантировать абсолютную уникальность всех элементов среди нескольких документов.
Можно рассмотреть вариант, что вместо создания проекта из шаблона, нужно с помощью API копирования и вставки, скопировать элементы из шаблона и вставить их в чистый проект.
В этом случае будут сгенерированы новые идентификаторы.
Обсуждение: http://adn-cis.org/forum/index.php?topic=735
Опубликовано 15.05.2014