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

При разработке обложек придерживайтесь правил:

если на обложку нужно добавить новую картинку, добавьте ее в папку images. При этом название файла с картинкой должно совпадать с именем соответствующего значка в системе DIRECTUM. Чтобы определить имя значка:
откройте произвольную компоненту, с которой выполняются действия, например, тип справочника Организации;
нажмите на кнопку Действия и методы;
в редакторе выберите любое действие и через параметр Изображение откройте список значков системы:

Щелкните для увеличения изображения

файлы с расширением *.htm и *.css сохраняйте в формате UTF-8, чтобы при отображении обложки не возникало проблем с кодировкой;
не удаляйте стандартные изображения из \images. Они используются для формирования области заголовка модуля;
выносите на обложку ссылку для создания записей в основном справочнике модуля. Для этого используйте объектную модель IS-Builder или настройте ссылку на мастер действий, специально разработанный для создания записей в справочниках.

Например, через объектную модель с обложки модуля «Канцелярия» можно Создать поручение, а через мастер действий с обложки «Управление договорами» – Создать договор.

Исключение составляют справочники, в которых перед добавлением записи нужно ознакомится с имеющимся списком записей или в справочник нужно добавить сразу несколько записей. Допустим, в начале каждого месяца в справочнике Ввод плановых значений показателей эффективности заполняют записи сразу по многим показателям;

чтобы обеспечить работу обложек без доработок в разных базах DIRECTUM, на ссылках пишите вычисления для запуска или открытия компонент, которые используют объектную модель IS-Builder;
компоненты, открываемые с обложки, не должны блокировать проводник, т.е. запускаться в модальном режиме. Для открытия справочников используйте метод ShowNoModal.

Отчеты и сценарии можно запустить не модально только в новом процессе, для этого используйте сценарий Запуск компоненты в новом процессе;

вычисления, необходимые для выполнения определенного метода с обложки в веб-клиенте и в десктоп-клиенте различны. Поэтому необходимо определить контекст, откуда выполняется запуск обложки:

 

 var parent = window.parent.WA;
if (parent) {

 

для реализации функциональности необходимо писать, а затем вызывать свои методы.

Методы для работы с часто используемыми компонентами, например, открытие справочника, запуск отчета, видеоролика, описаны в примерах:

Щелкните для отображения или скрытия подробной информации Открыть список записей справочника

 

function ReferenceOpen(name,viewname) {
try {
  // Получить объект IReference.
   var ref = window.external.Folder.Application.ReferencesFactory.ReferenceFactory(name).GetComponent()
   viewname = viewname || 'Главное'
  // Задать нужное представление справочника.
   var view = ref.CreateView(viewname)
  // Показать форму-список справочника.
   view.MainForm.ShowNoModal()
  ref.ReleaseView();
   view = null;
  ref = null;
 }
catch(ex) {
  // Если при открытии справочника возникла ошибка, отобразить ее.
   var str = ex.message;
  if (str.indexOf('4AFB2AB8-BDFD-4094-B27E-D105C8A89EFB')== -1) {
     alert(ex.message.replace('^', ''))
   }
 }
}

Пример открытия списка записей справочника Совещания и заседания:

ReferenceOpen('СВЩ','Главное')

 

Щелкните для отображения или скрытия подробной информации Запустить компоненту в новом процессе

Функция используется, если после запуска компоненты необходимо отобразить форму, блокирующую проводник, например, запрос параметров сценария.

 

function ComponentExecuteInNewProcess(type,name,params,unit) {      
try {
  // Получить объект-сценарий «Запуск компоненты в новом процессе».
   var script = window.external.Folder.Application.ScriptFactory.GetObjectByName('ComponentExecuteInNewProcess')
  // Получить параметры сценария.
   var objParams = script.Params
  // Передать в параметрах тип компоненты.
   objParams.Add('ComponentType',type)
  // Передать имя компоненты.
   objParams.Add('ComponentName',name)
  params = params || ''
  // Передать параметры.
   objParams.Add('Params',params)
  // Передать имя модуля (для открытия списка отчетов модуля).
   unit = unit || ''  
   objParams.Add('Unit',unit)
  // Запустить сценарий.
   script.Execute()
 }
catch(ex) {
  // Если при открытии компоненты возникла ошибка, отобразить ее.
   var str = ex.message;
  if (str.indexOf('4AFB2AB8-BDFD-4094-B27E-D105C8A89EFB')== -1) {
     alert(ex.message.replace('^', ''))
   }
 }
}

Пример запуска сценария Открыть фильтруемый справочник:

ComponentExecuteInNewProcess('Script','LaunchFilteredReference','NeedRepeatFilter=-1|ReferenceName=RRCAssignments')

Пример запуска отчета Контроль исполнения поручений:

ComponentExecuteInNewProcess('Report','AssignmentExecutionControl',")

Пример открытия списка всех отчетов модуля «Канцелярия»:

ComponentExecuteInNewProcess('Reference','ОТЧЕТЫ',",'Канцелярия')

 

Щелкните для отображения или скрытия подробной информации Запустить сценарий

Функция используется, если в сценарии нет форм, блокирующих проводник.

 

function ScriptExecute(name,params) {      
try {
  // Получить IScript по имени.
   var script = window.external.Folder.Application.ScriptFactory.GetObjectByName(name)
  // Получить параметры сценария.
   var objParams = script.Params
  // Передать параметры сценария.
   var arrParams = params.split('|')
  for (var i=0,len=arrParams.length;i<len;i++) {
     var arrNameAndValue = arrParams[i].split('=');
     objParams.Add(arrNameAndValue[0],arrNameAndValue[1]);
   }
  // Запустить сценарий.
   script.Execute()
 }
catch(ex) {

 

 

 
  // Если при открытии формы сценария возникла ошибка, отобразить ее.
   var str = ex.message;
  if (str.indexOf('4AFB2AB8-BDFD-4094-B27E-D105C8A89EFB')== -1) {
     alert(ex.message.replace('^', ''))
   }
 }
}

 

Пример запуска сценария Создать запись справочника:

ScriptExecute('CreateRecord','ReferenceName=РКК|ViewName=РККВх|SetOurOrgContext=-1')

 

Щелкните для отображения или скрытия подробной информации Запустить мастер действий

 

function WizardExecute(code) {      
try {
  // Получить объект IWizard по коду.
   var wizard = window.external.Folder.Application.WizardFactory.GetObjectByCode(code)
  // Запустить мастер действий.
   wizard.Execute()          
 }
catch(ex) {
  // Если при открытии формы мастера действий возникла ошибка, отобразить ее.
   var str = ex.message;
  if (str.indexOf('4AFB2AB8-BDFD-4094-B27E-D105C8A89EFB')== -1) {
     alert(ex.message.replace('^', ''))
   }
 }
}

 

Пример запуска мастера Создание договорных документов:

WizardExecute('СДД')

 

Щелкните для отображения или скрытия подробной информации Запустить видеоролик

 

function PlayVideo(NameConst) {
try {
   var script = window.external.Folder.Application.ScriptFactory.GetObjectByName('GetConstantValue')
   var objParams = script.Params
   objParams.Add('ConstName', NameConst)
   var VideoName = script.Execute()
   var video = window.external.Folder.Application.ServiceFactory.PlayVideo(VideoName)
 }
catch (ex) {
  // Если при открытии видеоролика возникла ошибка, отобразить ее
   var str = ex.message;
  if (str.indexOf('4AFB2AB8-BDFD-4094-B27E-D105C8A89EFB') == -1) {
     alert(ex.message.replace('^', ''))
   }
 }
}

 

Пример запуска видеоролика:

PlayVideo('VideoConst')

 

для запуска документов или справочника с фильтрацией записей рекомендуется использовать механизм быстрых поисков. На HTML-страницу добавьте поля для ввода запрашиваемых параметров и кнопку поиска:

 

<div class="block search">
<img class="icon" alt="" src="./images/icon_2.gif" />
<h2> Поиск РКК </h2>
<div class="content">
  <p>
  <table class="table">
    <tr>
      <td class="ParameterName">
         Вид РКК:
      </td>
      <td class="ParameterValue">
        <select id="RRCType" style="width: 100%">
          <option value="incoming">Входящий</option>
          <option value="outcoming">Исходящий</option>
          <option value="internal">Внутренний</option>
        </select>
      </td>
    </tr>
    <tr>
      <td class="ParameterName">
         Рег.номер:
      </td>
      <td class="ParameterValue">
        <input type="text" id="RegNumber" />
      </td>
    </tr>
    <tr>
      <td class="ParameterName">
         Корреспондент:
      </td>
      <td class="ParameterValue">
        <input type="text" id="Correspondent" />
      </td>
    </tr>
    <tr>
       // Вызвать функцию поиска по нажатию кнопки.
      <td colspan="2" style="text-align: right">
        <input type="button" id="Find" onclick="RecordSearch()" value="   Поиск   " />
      </td>
    </tr>
  </table>
</div>
</div>

 

Для передачи вводимых параметров используйте функцию RecordSearch:

 

function RecordSearch(UserID) {
// Получить параметры поиска.
 var RRCType = document.getElementById("RRCType").value;
 var RegNumber = document.getElementById("RegNumber").value;
 var Correspondent = document.getElementById("Correspondent").value;
// Запустить сценарий в новом процессе.
 ComponentExecuteInNewProcess("Script", "RRCSearch", "RRCType=" + RRCType + "|RegNumber="    + RegNumber + "|Correspondent=" + Correspondent + "|UserID=" +  UserID, "COMMON");

 

чтобы динамически формировать содержимое обложки, напишите:
сценарий IS-Builder, который передает данные;
JS-скрипт, который при открытии HTML-страницы запускает сценарий, обрабатывает полученные данные и выводит их на форму. Рекомендуется использовать JQuery – библиотеку JavaScript.

 

var coverData;
var cover = new Object();
var ID;
// Получить данные для отображения.
var script = window.external.Folder.Application.ScriptFactory.GetObjectByName("MeetingsCalendar");
coverData = script.Execute();
 
$(function(){
// Обработать строку с JSON-объектом.
 cover = $.parseJSON(coverData);
 cover = cover.MeetingToDate;
});
 
// Вывести данные в определение место на обложке.
function myMeetings(ID) {
 var place = $("#myMeetings");
 var Meetings = new Object();
 var aTemp = '<a class="title" href="javascript:OpenMeeting(\'{1}\');">{0}</a>';
 Meetings = cover.Meeting;
 $(Meetings).each(function (i) {
   var Meeting = this;
   place.append(format(aTemp, Meeting.Info, Meeting.ID))
   });
 }
 
$(document).ready(function() {
 myMeetings();
});

 

В HTML-файле определите место для вставки динамического содержимого:

 

<div class="content">
<div id="myMeetings">
   Динамически формируемое содержимое.
</div>
</div>

 

при работе с объектной моделью IS-Builder ссылки на объекты освобождайте вручную. Например, браузер Internet Explorer может освобождать их не в том порядке, в каком нужно. Это может привести к ошибке системы.

См. также

 

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