Лёгкое программирование под Autodesk Vault Часть 46
В Vault 2015, метод PromoteFiles был удален из службы ItemService. Ранее самый быстрый способ был вызвать PromoteFiles с последующим UpdateAndCommitItems. Конечно, более сложные случаи требуют большего количества вызовов API и проверки данных. Во всяком случае, простая работа стала более сложной в 2015 году. Иногда это цена, которую вы платите за большую функциональность.
Прежде, чем я разбирать в новый код, позвольте объяснить причину изменения. Во-первых, PromoteFiles был не очень эффективным. Он пытался сделать все спецификации сразу, что плохо сказывалось на производительности и масштабируемости сервера. Далее, он реализовывал файло-ориентированный рабочий цикл (файлы должны быть созданы до элементов). В Vault 2015, намного лучше поддержка элементо-ориентированных рабочих процессов, которые будут описаны в других статьях.
А сейчас давайте вернемся к простому файло-ориентированному случаю. У вас есть полученная сборка Inventor и вы хотите создать спецификации в Vault.
Ниже приведен код для реализации данных действий.
- ItemService itemSvc = m_conn.WebServiceManager.ItemService;
- itemSvc.AddFilesToPromote(fileIds, ItemAssignAll.Default, false);
- DateTime timestamp;
- GetPromoteOrderResults promoteOrder =
- itemSvc.GetPromoteComponentOrder(out timestamp);
- itemSvc.PromoteComponents(timestamp, promoteOrder.PrimaryArray);
- ItemsAndFiles itemsAndFiles =
- itemSvc.GetPromoteComponentsResults(timestamp);
- // СДЕЛАТЬ: редактировать элементы, если это необходимо
- itemSvc.UpdateAndCommitItems(itemsAndFiles.ItemRevArray);
- Dim itemSvc AsItemService = m_conn.WebServiceManager.ItemService
- itemSvc.AddFilesToPromote(fileIds, ItemAssignAll.Default, False)
- Dim timestamp AsDateTime
- Dim promoteOrder As GetPromoteOrderResults = itemSvc.GetPromoteComponentOrder(timestamp)
- itemSvc.PromoteComponents(timestamp, promoteOrder.PrimaryArray)
- Dim itemsAndFiles AsItemsAndFiles = itemSvc.GetPromoteComponentsResults(timestamp)
- ' СДЕЛАТЬ: редактировать элементы, если это необходимо
- 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