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

06/12/2014

Лёгкое программирование под Autodesk Vault Часть 46

В Vault 2015, метод PromoteFiles был удален из службы ItemService. Ранее самый быстрый способ был вызвать PromoteFiles с последующим UpdateAndCommitItems.   Конечно, более сложные случаи требуют большего количества вызовов API и проверки данных.   Во всяком случае, простая работа стала более сложной в 2015 году.   Иногда это цена, которую вы платите за большую функциональность.

Прежде, чем я разбирать в новый код, позвольте объяснить причину изменения. Во-первых, PromoteFiles был не очень эффективным.   Он пытался сделать все спецификации сразу, что плохо сказывалось на производительности и масштабируемости сервера.   Далее, он реализовывал файло-ориентированный рабочий цикл (файлы должны быть созданы до элементов).   В Vault 2015, намного лучше поддержка элементо-ориентированных рабочих процессов, которые будут описаны в других статьях.

А сейчас давайте вернемся к простому файло-ориентированному случаю. У вас есть полученная сборка Inventor и вы хотите создать спецификации в Vault.

Ниже приведен код для реализации данных действий.

Код - C#: [Выделить]
  1. ItemService itemSvc = m_conn.WebServiceManager.ItemService;
  2. itemSvc.AddFilesToPromote(fileIds, ItemAssignAll.Default, false);
  3. DateTime timestamp;
  4. GetPromoteOrderResults promoteOrder =
  5.     itemSvc.GetPromoteComponentOrder(out timestamp);
  6. itemSvc.PromoteComponents(timestamp, promoteOrder.PrimaryArray);
  7. ItemsAndFiles itemsAndFiles =
  8.     itemSvc.GetPromoteComponentsResults(timestamp);
  9. // СДЕЛАТЬ: редактировать элементы, если это необходимо
  10. itemSvc.UpdateAndCommitItems(itemsAndFiles.ItemRevArray);

Код - VBA: [Выделить]
  1. Dim itemSvc AsItemService = m_conn.WebServiceManager.ItemService
  2. itemSvc.AddFilesToPromote(fileIds, ItemAssignAll.Default, False)
  3. Dim timestamp AsDateTime
  4. Dim promoteOrder As GetPromoteOrderResults = itemSvc.GetPromoteComponentOrder(timestamp)
  5. itemSvc.PromoteComponents(timestamp, promoteOrder.PrimaryArray)
  6. Dim itemsAndFiles AsItemsAndFiles = itemSvc.GetPromoteComponentsResults(timestamp)
  7. ' СДЕЛАТЬ: редактировать элементы, если это необходимо
  8. itemSvc.UpdateAndCommitItems(itemsAndFiles.ItemRevArray)

В принципе, PromoteFiles был заменен на четыре вызова функций: AddFilesToPromote, GetPromoteComponentOrder, PromoteComponents и GetPromoteComponentsResults. Переменная "timestamp" является нитью, которая связывает воедино четыре вызова.   Если вы хотите завершить операцию, как раньше, вызовите UpdateAndCommitItems.

Да, кажется что 4 вызова функции делают вещи хуже, чем раньше. Это, безусловно, больше работы для клиента, но это дает улучшение на стороне сервера.   Меньше делается в одном вызове, что означает уменьшение и ускорение транзакций.   Это, в свою очередь, означает больше параллелизма и пропускной способности.

Источник: http://justonesandzeros.typepad.com/blog/2014/04/assigning-a-file-to-an-item.html

Обсуждение: http://adn-cis.org/forum/index.php?topic=1135

Опубликовано 06.12.2014