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

02/07/2018

Derivative Webhooks .NET SDK

Только что была выпущена версия 1.2.NET SDK на Nuget с поддержкой derivative webhooks! |||UNTRANSLATED_CONTENT_START|||Special thanks to Fredrik Larsen for submitting the code for it!|||UNTRANSLATED_CONTENT_END|||

Следующий пример кода основан на учебном пособии forge, для WebAPI (наследуется от ApiController). Сначала он определяет рабочий процесс для JobPayload. Поскольку webhook уже может быть определен, давайте возьмем существующие, проверим имя рабочего процесса и проверим правильность URL-адреса обратного вызова. Если он неправильный, то удаляем webhook. Обратите внимание, что URL-адрес обратного вызова в локальной среде обычно создается с помощью инструмента ngrok  (или аналогичного), поэтому он может быть устаревшим. С этим, опубликуем работу. Следующая функция прослушивает вызов webhook, оставленный пустым для вашей пользовательской реализации. 

Код - C#: [Выделить]
  1. public class ModelDerivativeController : ApiController
  2. {
  3.   /// <summary>
  4.   /// Запуск задания преобразования для данного bucketKey/objectName
  5.   /// </summary>
  6.   /// <param name="objModel"></param>
  7.   /// <returns></returns>
  8.   [HttpPost]
  9.   [Route("api/forge/modelderivative/jobs")]
  10.   public async Task<dynamic> TranslateObject([FromBody]TranslateObjectModel objModel)
  11.   {
  12.     dynamic oauth = await OAuthController.GetInternalAsync();
  13.  
  14.     // подготовить полезную нагрузку
  15.     List<JobPayloadItem> outputs = new List<JobPayloadItem>()
  16.     {
  17.       new JobPayloadItem(
  18.         JobPayloadItem.TypeEnum.Svf,
  19.         new List<JobPayloadItem.ViewsEnum>()
  20.         {
  21.           JobPayloadItem.ViewsEnum._2d,
  22.           JobPayloadItem.ViewsEnum._3d
  23.         })
  24.     };
  25.  
  26.     string workflow = "forgesampleworkflow";
  27.     JobPayload job = new JobPayload(new JobPayloadInput(objModel.objectName), new JobPayloadOutput(outputs), new JobPayloadMisc(workflow));
  28.  
  29.     DerivativeWebhooksApi webhook = new DerivativeWebhooksApi();
  30.     webhook.Configuration.AccessToken = oauth.access_token;
  31.     dynamic existingHooks = await webhook.GetHooksAsync(DerivativeWebhookEvent.ExtractionFinished);
  32.  
  33.     // получить обратный вызов из настроек (например, web.config)
  34.     string callbackUlr = WebConfigurationManager.AppSettings["FORGE_DERIVATIVE_CALLBACK_URL"];
  35.  
  36.     bool createHook = true; // нужно создавать, мы не знаем, есть ли наш webhook уже там...
  37.     foreach (KeyValuePair<string, dynamic> hook in new DynamicDictionaryItems(existingHooks.data))
  38.     {
  39.       if (hook.Value.scope.workflow.Equals(workflow))
  40.       {
  41.         // ok, найден один крючок с тем же рабочим процессом, нет необходимости создавать...
  42.         createHook = false;
  43.         if (!hook.Value.callbackUrl.Equals(callbackUlr))
  44.         {
  45.           await webhook.DeleteHookAsync(DerivativeWebhookEvent.ExtractionFinished, new System.Guid(hook.Value.hookId));
  46.           createHook = true; // ой, URL-адрес обратного вызова устарел, поэтому удаляем и готовимся к созданию заново
  47.         }
  48.       }
  49.     }
  50.  
  51.     // нужно (пере)создать крючок?
  52.     if (createHook) await webhook.CreateHookAsync(DerivativeWebhookEvent.ExtractionFinished, callbackUlr, workflow);
  53.  
  54.     // начать преобразование
  55.     DerivativesApi derivative = new DerivativesApi();
  56.     derivative.Configuration.AccessToken = oauth.access_token;
  57.     dynamic jobPosted = await derivative.TranslateAsync(job, true /* принудительное преобразование? */);
  58.     return jobPosted;
  59.   }
  60.  
  61.   [HttpPost]
  62.   [Route("api/forge/callback/derivative")]
  63.   public async Task Webhook([FromBody]JObject body)
  64.   {
  65.     // Сделать в дальнейшем
  66.  
  67.  
  68.     return;
  69.   }
  70.  
  71.   /// <summary>
  72.   /// Модель для метода TranslateObject
  73.   /// </summary>
  74.   public class TranslateObjectModel
  75.   {
  76.     public string bucketKey { get; set; }
  77.     public string objectName { get; set; }
  78.   }
  79. }

Источник: https://forge.autodesk.com/blog/derivative-webhooks-net-sdk

 

Автор перевода: Дмитрий Емельянов

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

Опубликовано 02.07.2018
Отредактировано 02.07.2018 в 18:09:50