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, оставленный пустым для вашей пользовательской реализации.
- public class ModelDerivativeController : ApiController
- {
- /// <summary>
- /// Запуск задания преобразования для данного bucketKey/objectName
- /// </summary>
- /// <param name="objModel"></param>
- /// <returns></returns>
- [HttpPost]
- [Route("api/forge/modelderivative/jobs")]
- public async Task<dynamic> TranslateObject([FromBody]TranslateObjectModel objModel)
- {
- dynamic oauth = await OAuthController.GetInternalAsync();
- // подготовить полезную нагрузку
- List<JobPayloadItem> outputs = new List<JobPayloadItem>()
- {
- new JobPayloadItem(
- JobPayloadItem.TypeEnum.Svf,
- new List<JobPayloadItem.ViewsEnum>()
- {
- JobPayloadItem.ViewsEnum._2d,
- JobPayloadItem.ViewsEnum._3d
- })
- };
- string workflow = "forgesampleworkflow";
- JobPayload job = new JobPayload(new JobPayloadInput(objModel.objectName), new JobPayloadOutput(outputs), new JobPayloadMisc(workflow));
- DerivativeWebhooksApi webhook = new DerivativeWebhooksApi();
- webhook.Configuration.AccessToken = oauth.access_token;
- dynamic existingHooks = await webhook.GetHooksAsync(DerivativeWebhookEvent.ExtractionFinished);
- // получить обратный вызов из настроек (например, web.config)
- string callbackUlr = WebConfigurationManager.AppSettings["FORGE_DERIVATIVE_CALLBACK_URL"];
- bool createHook = true; // нужно создавать, мы не знаем, есть ли наш webhook уже там...
- foreach (KeyValuePair<string, dynamic> hook in new DynamicDictionaryItems(existingHooks.data))
- {
- if (hook.Value.scope.workflow.Equals(workflow))
- {
- // ok, найден один крючок с тем же рабочим процессом, нет необходимости создавать...
- createHook = false;
- if (!hook.Value.callbackUrl.Equals(callbackUlr))
- {
- await webhook.DeleteHookAsync(DerivativeWebhookEvent.ExtractionFinished, new System.Guid(hook.Value.hookId));
- createHook = true; // ой, URL-адрес обратного вызова устарел, поэтому удаляем и готовимся к созданию заново
- }
- }
- }
- // нужно (пере)создать крючок?
- if (createHook) await webhook.CreateHookAsync(DerivativeWebhookEvent.ExtractionFinished, callbackUlr, workflow);
- // начать преобразование
- DerivativesApi derivative = new DerivativesApi();
- derivative.Configuration.AccessToken = oauth.access_token;
- dynamic jobPosted = await derivative.TranslateAsync(job, true /* принудительное преобразование? */);
- return jobPosted;
- }
- [HttpPost]
- [Route("api/forge/callback/derivative")]
- public async Task Webhook([FromBody]JObject body)
- {
- // Сделать в дальнейшем
- return;
- }
- /// <summary>
- /// Модель для метода TranslateObject
- /// </summary>
- public class TranslateObjectModel
- {
- public string bucketKey { get; set; }
- public string objectName { get; set; }
- }
- }
Источник: 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