Загрузка данных


function restartWorkflow() { SP.SOD.executeFunc( 'sp.workflowservices.js', 'SP.WorkflowServices.WorkflowServicesManager', function () { restartWorkflowInternal(); } ); } function restartWorkflowInternal() { var ctx = SP.ClientContext.get_current(); // ID текущего элемента var itemId = GetUrlKeyValue("ID"); if (!itemId) { alert("Не удалось определить ID элемента."); return; } itemId = parseInt(itemId, 10); // ID текущего списка var listId = _spPageContextInfo.listId; // Subscription ID нужного Workflow 2013 var workflowSubscriptionId = "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX"; if (!confirm( "Вы действительно хотите перезапустить workflow?" )) { return; } var web = ctx.get_web(); var workflowManager = new SP.WorkflowServices.WorkflowServicesManager( ctx, web ); var instanceService = workflowManager.getWorkflowInstanceService(); /* * -------------------------------------------------- * ШАГ 1. * Получаем запущенные экземпляры workflow * -------------------------------------------------- */ var instances = instanceService.enumerateInstancesForListItem( listId, itemId ); ctx.load(instances); ctx.executeQueryAsync( function () { var enumerator = instances.getEnumerator(); var workflowToTerminate = null; /* * Ищем конкретный workflow */ while (enumerator.moveNext()) { var instance = enumerator.get_current(); var subscriptionId = instance.get_workflowSubscriptionId(); if ( subscriptionId.toString().toLowerCase() === workflowSubscriptionId.toLowerCase() ) { workflowToTerminate = instance; break; } } /* * Workflow не найден */ if (!workflowToTerminate) { alert( "Запущенный workflow не найден." ); return; } /* * -------------------------------------------------- * ШАГ 2. * Останавливаем workflow * -------------------------------------------------- */ instanceService.terminateWorkflow( workflowToTerminate ); /* * Очень важно: * сначала реально отправляем TerminateWorkflow */ ctx.executeQueryAsync( function () { /* * -------------------------------------------------- * ШАГ 3. * После успешной остановки запускаем заново * -------------------------------------------------- */ startWorkflowAgain( ctx, workflowManager, itemId, workflowSubscriptionId ); }, function (sender, args) { alert( "Не удалось остановить workflow:\n\n" + args.get_message() ); } ); }, function (sender, args) { alert( "Не удалось получить запущенные workflow:\n\n" + args.get_message() ); } ); } /* * ====================================================== * Запуск workflow заново * ====================================================== */ function startWorkflowAgain( ctx, workflowManager, itemId, workflowSubscriptionId ) { var subscriptionService = workflowManager.getWorkflowSubscriptionService(); /* * Получаем Subscription */ var subscription = subscriptionService.getSubscription( workflowSubscriptionId ); ctx.load(subscription); ctx.executeQueryAsync( function () { /* * Параметры запуска workflow. * * Если у workflow есть initiation form * с обязательными параметрами, сюда нужно * передать соответствующие значения. */ var initiationParameters = {}; var instanceService = workflowManager.getWorkflowInstanceService(); /* * Запускаем новый экземпляр * на том же элементе */ instanceService.startWorkflowOnListItem( subscription, itemId, initiationParameters ); /* * Отправляем StartWorkflow */ ctx.executeQueryAsync( function () { alert( "Workflow успешно перезапущен." ); /* * Обновляем Display Form */ window.location.reload(); }, function (sender, args) { alert( "Workflow был остановлен, " + "но запустить его заново не удалось:\n\n" + args.get_message() ); } ); }, function (sender, args) { alert( "Workflow остановлен, " + "но не удалось получить его Subscription:\n\n" + args.get_message() ); } ); }