Сообщество программистов Autodesk в СНГ

ADN Club => Vault API => Тема начата: Bazinga от 02-03-2020, 10:05:39

Название: Создание редакции файла
Отправлено: Bazinga от 02-03-2020, 10:05:39
Пытаюсь создать новую редакцию файла через метод .WebServiceManager.DocumentServiceExtensions.UpdateRevisionDefinitionAndNumbers, но выдает исключение 1137 (CannotCheckoutNontipFileVersion)
Код - C# [Выбрать]
  1. connection.WebServiceManager.DocumentServiceExtensions.UpdateRevisionDefinitionAndNumbers(new long[] { file.Id }, new long[] { s.First().Id (определение схемы редакции) }, new string[] { r (номер редакции)}, "revision");
Название: Re: Создание редакции файла
Отправлено: Александр Ривилис от 02-03-2020, 11:57:32
Bazinga,
Нужен нормальный кусок кода, который я мог бы отправить в ADN DevHelp для анализа.
Название: Re: Создание редакции файла
Отправлено: Bazinga от 02-03-2020, 12:51:49
Код - C# [Выбрать]
  1.             Connection connection = e.Context.Application.Connection;
  2.             long _need = e.Context.CurrentSelectionSet.First().Id;
  3.  
  4.             //try revision file
  5.             File file = connection.WebServiceManager.DocumentService.GetFilesByMasterId(_need).First();
  6.             var s = connection.WebServiceManager.RevisionService.GetAllRevisionDefinitionInfo().RevDefArray.Where(itm => itm.Descr.Contains("Последовательная нумерация, начиная с 1"));
  7.  
  8.             if (s.Any())
  9.             {
  10.                 //get next revisison
  11.                 var rev1 = connection.WebServiceManager.RevisionService.GetNextRevisionNumbersByMasterIds(new long[] { file.MasterId }, new long[] { s.First().Id });
  12.                 var rev = rev1.First();//уровни вложенности
  13.                 var r = rev.Items.First();//первый уровень
  14.  
  15.                 //connection.WebServiceManager.DocumentServiceExtensions.UpdateFileRevisionNumbers(new long[] { file.Id }, new string[] { r }, "revision");
  16.                 connection.WebServiceManager.DocumentServiceExtensions.UpdateRevisionDefinitionAndNumbers(new long[] { file.Id }, new long[] { s.First().Id }, new string[] { r }, "revision");
  17.             }
Название: Re: Создание редакции файла
Отправлено: Александр Ривилис от 02-03-2020, 13:43:01
Bazinga,
Версия Vault?
Название: Re: Создание редакции файла
Отправлено: Bazinga от 02-03-2020, 13:49:40
Александр Ривилис, 2019
Название: Re: Создание редакции файла
Отправлено: Александр Ривилис от 02-03-2020, 14:32:49
Bazinga,
А метод UpdateFileRevisionNumbers не подошёл?

Название: Re: Создание редакции файла
Отправлено: Bazinga от 02-03-2020, 15:07:10
Нет, на него тоже ругается. Если жестко не задавать схему, он  null возвращает в var rev = rev1.First();
Если
Код - C# [Выбрать]
  1. file.FileRev.RevDefId = s.First().Id;
  2.                 connection.WebServiceManager.DocumentServiceExtensions.UpdateFileRevisionNumbers(new long[] { file.Id }, new string[] { r }, "revision");
1092 падает
Если просто
Код - C# [Выбрать]
  1. connection.WebServiceManager.DocumentServiceExtensions.UpdateFileRevisionNumbers(new long[] { file.Id }, new string[] { r }, "revision");
1092 тоже
Название: Re: Создание редакции файла
Отправлено: Александр Ривилис от 02-03-2020, 15:15:42
1092 падает
(https://live.staticflickr.com/65535/49609073827_f8cee104cf_o.png)

Интересно что за ограничения?
Название: Re: Создание редакции файла
Отправлено: Bazinga от 03-03-2020, 10:30:26
Александр Ривилис, https://justonesandzeros.typepad.com/blog/2009/11/errors-and-restrictions.html
trictions are types of exceptions with extra data documenting why an operation failed.  If the error code is 1092, 1387, or 1633, then there is restriction information, otherwise there is no restriction information.  An exception can have multiple restriction. - Это из документации.
SoapException xml не дает, чтобы посмотреть ошибку
(https://i.postimg.cc/7JMqmCK5/image.png) (https://postimg.cc/7JMqmCK5)
Название: Re: Создание редакции файла
Отправлено: Bazinga от 03-03-2020, 10:34:56
Александр Ривилис,DocumentServiceExtensions.UpdateFileLifeCycleDefinitions( ) для изменения редакции, но у метода на вход состояния жизненного цикла :-\
Название: Re: Создание редакции файла
Отправлено: Александр Ривилис от 03-03-2020, 12:03:28
Александр Ривилис,DocumentServiceExtensions.UpdateFileLifeCycleDefinitions( ) для изменения редакции, но у метода на вход состояния жизненного цикла :-\
Я так понимаю, что вся та тема связана не с изменением ревизии, а с загрузкой файла на сервер (Upload). В вашем случае, как я понял, нужно только изменить ревизию. Или не так?
Название: Re: Создание редакции файла
Отправлено: Bazinga от 03-03-2020, 13:14:30
Александр Ривилис, только изменить ревизию ( запустить через API команду "Изменить редакцию").
Название: Re: Создание редакции файла
Отправлено: Александр Ривилис от 03-03-2020, 13:26:03
Александр Ривилис, только изменить ревизию ( запустить через API команду "Изменить редакцию").
Я отправил запрос в ADN DevHelp. Будем надеяться на их помощь.
Название: Re: Создание редакции файла
Отправлено: Bazinga от 03-03-2020, 14:09:36
Александр Ривилис, я его победила всё-таки. Проблема была с id файла.
В File.id не содержится последняя версия файла.
Необходимо выполнить
Код - C# [Выбрать]
  1. var id = connection.WebServiceManager.DocumentService.GetLatestFileByMasterId(file.MasterId).Id;
и у него уже взять id. Тогда всё получает и меняет.

Название: Re: Создание редакции файла
Отправлено: Александр Ривилис от 03-03-2020, 14:12:19
Bazinga,
Поздравляю! Достаточно отправить вопрос в ADN DevHelp, как находится решение.   ;D
Название: Re: Создание редакции файла
Отправлено: Bazinga от 03-03-2020, 15:22:55
Александр Ривилис, спасибо! Так всегда зачастую бывает :D
Название: Re: Создание редакции файла
Отправлено: Александр Ривилис от 06-03-2020, 10:19:17
Bazinga,

А вот и подоспел ответ от ADN DevHelp:

Цитировать
Dear Alexander Rivilis,
Thanks for contacting ADN support.
From the error, it seems that the code is trying to check out a file which is not the tip version.
So in your code instead of the below line:

File file = connection.WebServiceManager.DocumentService.GetFilesByMasterId(_need).First();

Try using:

File file = connection.WebServiceManager.DocumentService.GetLatestFileByMasterId(_need);

Hope this helps. Do let me know if it doesn't.


Т.е. именно тоже самое решение...