В качестве скрипта может использоваться любая процедура вида

 

Sub TestRunMacro(TCSActiveModule, TCSExecutionParams)
' do something
End sub

 

где

 

TCSActiveModule - ссылка на активный модуль

TCSExecutionParams - ссылка на интерфейс IExecutionParams

 

  IExecutionParams = interface(IModule)
    ['{35290570-1196-4981-BB36-1055B58741C6}']
    property ReturnCode: Integer read|write;
    property ReturnMessage: String read|write;
    property DocExecutionParams: IDocExecutionParams read;
  end;

 

на входе TCSExecutionParams.ReturnCode = -1 , TCSExecutionParams.ReturnMessage = "".

 

·         Успешным кодом возвратом является 0. При этом если ReturnMessage содержит не пустую строку, то выводится информационное сообщение с данным текстом;

·         Если код возврата <>0, выводится сообщение об ошибке. Если ReturnMessage содержит не пустую строку, то выводится данное сообщение.

 

Макрос должен сам выставить эти параметры для успешного завершения действия, иначе действие считается не совершенным.

 

DocExecutionParams - ссылка на интерфейс IDocExecutionParams

 

IDocExecutionParams = interface(IModule)
    ['{A95D7620-9CBB-48F8-B872-2FDF487AD873}']
    property ActiveFileNamePath: String read;
    property FileList: ICSDNStrings read;
    property DocVerID: Integer read;
    property DocTypeNote: String read;
    property CurrentEvent: EnumDocExecutionEvent read;
    property CmdID: integer read;
    property CmdClass: integer read;      
  end;

 

EnumDocExecutionEvent отображает текущее событие при котором выполняется макрос

 

type
  EnumDocExecutionEvent = TOleEnum;
const
  dceBeforeUnload = $00000001
  dceAfterUnload = $00000002
  dceBeforeLoad = $00000003
  dceAfterLoad = $00000004

 

ActiveFileNamePath - содержит полный путь к файлу над которым выполняется команда.

FileList - ссылка на интерфейс ICSDNStrings. Содержит список выгруженных файлов, если выгружен только один файл - FileList = nothing.

DocVerID - версия документа.

DocTypeNote - вид документа.

CmdID - команда над типом файла для основного документа

CmdClass - класс команды над типом файла для основного документа. Значения: 0 - просмотр, 1 - редактирование, 2 - комментирование.

 

Стадия выполнения макроса

 

Для управления работой макроса используется свойство EnumDocExecutionEvent интерфейса

IDocExecutionEvent.

 

Значения свойства:

dceBeforeUnload - Макрос выполняется перед выгрузкой файлового состава.

dceAfterUnload - Макрос выполняется после выгрузки файлового состава.

dceBeforeLoad - Макрос выполняется перед обновлением файлового состава.

dceAfterLoad - Макрос выполняется после обновления файлового состава.

 

Свойство позволяет определить во время какого события работает макрос, и корректно обработать это событие.

 

Если на какое-либо событие обработка не нужна, необходимо присвоить параметру TCSExecutionParams.ReturnCode значение 0.

 

Пример использования

 

Sub TestMacro(TCSActiveModule, TCSExecutionParams)
  Set Event = TCSExecutionParams.DocExecutionParams.EnumDocExecutionEvent
 
  Select case Event  
    case dceBeforeUnload 
      ' Код который необходимо выполнить до выгрузки файлового состава
    case dceAfterLoad 
      ' Код который необходимо выполнить перед обновлением файлового                        
      ' состава
    case Else ' Другие события не обрабатываем, поэтому ReturnCode = 0
       TCSExecutionParams.ReturnCode = 0
  End Select
...
End Sub

 

Выполнение макроса при выгрузке файлового состава

 

Выполняется макрос с параметрами

 

  ( 
   CurrentEvent = dceBeforeUnload
   ReturnCode = -1
   ReturnMessage = ""
   ActiveFileNamePath = <полный путь к файлу над которым выполняется команда>
   DocVerID = <версия документа>
   DocTypeNote = <вид документа>
   FileList = ""
   CmdID = <Id команды>
   CmdClass = <класс команды>
  )

 

Если макрос завершается с ошибкой:

·         Выводится сообщение с текстом ошибки;

·         Выгрузка файлового состава отменяется;

·         Работа прекращается.

 

Если макрос выполняется успешно:

·         Выгрузка файлового состава.

 

Если тип операции ''Редактирование'' или ''Комментирование'' то документ блокируется.

 

 

Выполняется макрос с параметрами

 

  ( 
   CurrentEvent = dceAfterUnload
   ReturnCode = -1
   ReturnMessage = ""
   ActiveFileName = <полный путь к файлу над которым выполняется команда>
   DocVerID = <версия документа>
   DocTypeNote = <вид документа>
   FileList = <список выгруженных файлов>
   CmdID = <Id команды>
   CmdClass = <класс команды>
  )

 

Если макрос завершается с ошибкой:

·         Выводится сообщение с текстом ошибки;

·         Если документ заблокирован то блокировка снимается.

 

Выполнение макроса при обновлении файлового состава

 

  Выполняется макрос с параметрами

 

  (
   CurrentEvent = dceBeforeLoad
   ReturnCode = -1
   ReturnMessage = ""
   ActiveFileName = ""
   DocVerID = <версия документа>
   DocTypeNote = <вид документа>
   FileList = ""
   CmdID = <Id команды>
   CmdClass = <класс команды>
  )

 

Если макрос завершается с ошибкой:

·         Выводится сообщение с текстом ошибки;

·         Отменяется обновление файлового состава;

·         Работа прекращается.

 

Если макрос завершается успешно:

·         Обновляется файловый состав на сервере.

 

После обновления файлового состава выполняется макрос с параметрами

 

  (
   CurrentEvent = dceAfterLoad
   ReturnCode = -1
   ReturnMessage = ""
   ActiveFileName = ""
   DocVerID = <версия документа>
   DocTypeNote = <вид документа>
   FileList = ""
   CmdID = <Id команды>
   CmdClass = <класс команды>
  )

 

Если макрос завершается с ошибкой:

·         Выводится сообщение с текстом ошибки.

 

! См. также:

2.5.2 Типы файлов