Прикрепление неверсионного объекта

Автор oracle, 25.01.11, 09:00:59

« назад - далее »

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

oracle

Здравствуйте.
Версия Лоцмана 8.5 SP2.

Я прикрепляю объект с помощью метода InsertObject. В этом методе есть параметр - Номер версии объекта-потомка. Если объекта нет в базе то я указываю #32 и тогда объект создается и прикрепляется успешно. Если это версионный объект, тогда я указываю нужную версию объекта, например '2'. А что делать если объект уже есть в базе и он неверсионный? Я указывал '', '1', '0', 0, 1 но все время вылетает ошибка.

Maxxx

А пустое значение '' не пробывали?

oracle


teplinskiy

Цитата: oracle от 25.01.11, 09:00:59
Я указывал '', ... но все время вылетает ошибка.
совершенно верно, в метод нужно передавать "пустую строку".

причина ошибки похоже в другом. для ответа, примините к методу "обработку исключений".

oracle

Я делаю так

inNewLinkId := RunMethod('InsertObject', [
                     ParentVersion.stType, ParentVersion.stProduct, ParentVersion.stVersion,
                     'Прочее изделие', 'Конденсатор GRM', '', 'Состоит из ...', 'Проектирование',
                     True]);

Где:
ParentVersion: TVersion;

Если в этом методе вместо '' поставить #32 и указать несуществующий в базе объект то создание пройдет успешно.
Например:

inNewLinkId := RunMethod('InsertObject', [
                     ParentVersion.stType, ParentVersion.stProduct, ParentVersion.stVersion,
                     'Прочее изделие', 'Конденсатор GRM2', #32, 'Состоит из ...', 'Проектирование',
                     True]);

oracle

Какую обработку исключений применить?

Maxxx

Имеется ввиду конструкция try...except...end
try
inNewLinkId := RunMethod('InsertObject', [
                     ParentVersion.stType, ParentVersion.stProduct, ParentVersion.stVersion,
                     'Прочее изделие', 'Конденсатор GRM', '', 'Состоит из ...', 'Проектирование',
                     True]);
except
  //тут код, который выполнится при возникновении ошибки
On E:Exception do
  begin
    ShowMessage(E.message); //выводим текст ошибки
  end;
end

oracle

При использовании обработки исключений выводится сообщение

Объект [Кондесатор GRM ] не существует или создан в другом рабочем проекте и не может быть использован до сохранения в базе данных.

LDL

попробуйте вместо параметра #32 подставить nil или null

teplinskiy

Цитата: oracle от 25.01.11, 13:51:49
При использовании обработки исключений выводится сообщение

Объект [Кондесатор GRM ] не существует или создан в другом рабочем проекте и не может быть использован до сохранения в базе данных.
Ошибка (исходя из текста) происходит потому, что объект создан в другом чекауте и еще не сохранен в БД.
Проверьте вкладку "В работе". Откажитесь или сохраните лишние чекауты.

Проверить в каком чекауте существует объект можно через CheckUniqueName.

LDL

Или просто воспользоваться поиском в ЛОЦМАН

oracle

Всем большое спасибо. Разобрался.
В базе был похожий объект отличающийся пробелом от создаваемого. С помощью метода CheckUniqueName я это обнаруживал. Но при создании объекта все равно указывал ключевой атрибут без пробела (первоначальный) и видимо Лоцман не дает создавать похожие объекты, поэтому вылетала ошибка.
Когда я указал в качестве ключевого атрибута, при создании нового объекта, ключевой атрибут полученный из метода CheckUniqueName то все получилось