Копировать ссылку на страницу Перейти в предыдущий раздел Перейти в следующий раздел

Требуется проверить, возможно ли стартовать задачу по типовому маршруту с вложенной текущей записью справочника или документа.

Подробнее Предварительные действия

XML

 

<!-- Переопределить стандартную карточку записи справочника -->

<Extension name="MyExt" title="My_Extension" jsfile="/js/myext.js">
<Cards>
  <Card type="ReferenceRecord" refcode="AllReq" jsfile="/js/myext.js" customcardformclass="DIRECTUM.WebAccess.Extensions.MyExt.AllReqCardForm, NpoComputer.WebAccess.Components ">
  </Card>
</Cards>
</Extension>

JS

 

(function (global) {
 WA.ready(function () {
  switch (WA.getLocation()) {
    case 'reference':
      // Карточка записи справочника.
      switch (WA.CR.getReferenceCode()) {
        case 'AllReq':
          // Справочник "Все реквизиты" (AllReq).
          // Код, описанный ниже.
          break;
          //...
      }
      break;
    case 'referencerecords':
      // Список записей справочника.
      break;
  }
});

})(window);

.NET

 

Imports System.Web.Services
Imports NpoComputer.WebAccess.API
Imports System.Runtime.InteropServices
 
Public Class TaskWebService
 Inherits System.Web.Services.WebService
 
 <WebMethod()>
Public Function SendTaskByStandardRoute(ByVal RouteCode As String, ByVal RecordId As String, ByVal RefCode As String) As WebServiceResponse(Of String)
  Dim Ref As API.ReferenceRecord
  Dim Task As API.Task
   Try
    'Создать задачу.
     Task = WebSession.Context.Tasks.CreateTask()
    'Заполнить типовой маршрут.
     Task.StandardRoute = WebSession.Context.Tasks.StandardRoute(RouteCode)
    If Not String.IsNullOrEmpty(RefCode) AndAlso Not String.IsNullOrEmpty(RecordId) Then
      'Получить запись справочника по ИД и добавить ее во вложения задачи.
       Ref = WebSession.Context.References(RefCode).GetRecordByID(RecordId)
       Task.Attach(New API.Link(Ref))
    End If
     Task.ApplyStandardRoute()
    'Сохранить и стартовать задачу.
     Task.Save()
     Task.Start()
   Catch ex As Exception
    Return WebServiceResponse(Of String).Fail(ex.Message)
  End Try
  Return WebServiceResponse(Of String).OK(Task.ID)
End Function
End Class

 

Подробнее В зависимости от того, сохранена ли запись справочника

Чтобы запустить задачу только для сохраненной (не новой) записи справочника, можно использовать следующий код:

 

function createTask() {

// Добавить проверку на новую запись, так как если запись не сохранена,

// то в базе ее еще нет и могут возникнуть исключительные ситуации

// при обработке записи в типовом маршруте.

  if (!WA.CR.IsNew) {
   WA.SRV.call("/TaskWebService.asmx/SendTaskByStandardRoute", { RouteCode: "TestTM", RecordId: WA.CR.ID, RefCode: WA.current.getReferenceCode() }).done(function (res) {
    if (res) {
       window.open('task.aspx?id=' + res);
    }
  });
};
}

 

Подробнее В зависимости от значений каких-либо реквизитов, в том числе табличных

 

// Если реквизит "Подписан" (Имя = ДаНет3) имеет значение Нет,
// значение реквизита "Дата вступления договора в силу"

// (Имя = Дата3) <= текущей дате, реквизит "Комментарии по дате

// вступления в силу"

// (Имя = LongString4) не заполнен, то появится сообщение
// "Укажите комментарии по дате вступления договора в силу.",

// задача не будет создана.
// Если не выполняется хотя бы одно из данных условий,

// то задача будет стартована по типовому маршруту с кодом TestTM.
if ((WA.CR.form.requisites.Дата3.getValue() !== "") && (WA.CR.form.requisites.ДаНет3.getValue() === "Н") && (WA.CR.form.requisites.Дата3.getDate() <= new Date()) && (WA.CR.form.requisites.LongString4.getValue() === "")) {
 ShowInfo('Укажите комментарии по дате вступления договора в силу.');
}else{
 WA.SRV.call("/TaskWebService.asmx/SendTaskByStandardRoute", { RouteCode: "TestTM", RecordId: WA.CR.ID, RefCode: WA.current.getReferenceCode() }).done(function (res) {
    if (res) {
       window.open('task.aspx?id=' + res);
    }
  });
}

Для табличного реквизита:

 

function additionalCheck() {
// Получить строки табличной части "Персоны".
var rows = WA.CR.form.controls.tables.gridPersons.rows.toArray();
if (rows.count() > 0) {
  // Если в табличной части "Персоны" есть строки, в которых не заполнен

  // реквизит "Исполнитель" (Имя = UsersT2),
  // то прерывать отправку задачи с сообщением:
  // "Укажите исполнителей ролей <наименования записей,

  // указанных в реквизите "Бизнес-роль" (Имя = BusinessRoleT2),
  // в строках, в которых не заполнен реквизит "Исполнитель">."
  var emptyReqs = []
  for (var i = 0; i < rows.length; i++) {
    if ((typeof rows[i] !== 'undefined') && (typeof rows[i].requisites !== 'undefined') && (rows[i].requisites.UsersT2.getValue() === "")) {
       emptyReqs.push(rows[i].requisites.BusinessRoleT2.getDisplayValue())
    }
  }
  if (emptyReqs.length > 0) {
     ShowInfo('Укажите исполнителей ролей ' + emptyReqs.join(', ') + '.');
    return false;
  }
} else {
  // Если нет записей в табличной части "Персоны" на закладке "Роли",

  // не создавать задачу, показывать сообщение

  // "Проверьте, что закладка "Роли" заполнена."
   ShowInfo('Проверьте, что закладка "Роли" заполнена.');
  return false;
}
return true;
}
 
if (additionalCheck()) {
 WA.services.task.createTaskWithAttachments([{
  'ID': WA.current.getID(),
  'Kind': WA.current.getKind(),
  'CompCode': WA.current.getReferenceCode
}]).success(function (res) {
   window.open("Task.aspx?view=Card&mode=edit&id=" + res, "task" + res);
});
}

 

Подробнее В зависимости от режима состояния карточки

Запустить задачу в зависимости от режима состояния карточки (просмотр, изменение):

 

// Получить режим состояния карточки.
var mode = (new WA.URL()).getParam('mode');
if (mode === "edit") {
  // Если карточка находится в режиме редактирования,

  // то отправить ее вложением по типовому маршруту с кодом TestTM.
WA.SRV.call("/TaskWebService.asmx/SendTaskByStandardRoute", { RouteCode: "TestTM", RecordId: WA.CR.ID, RefCode: WA.current.getReferenceCode() }).done(function (res) {
    if (res) {
       window.open('task.aspx?id=' + res);
    }
  });
};

© Компания DIRECTUM, 2018 Сообщество пользователей DIRECTUM
.navbar > a:hover { background: #FFD73B; }