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

 

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 Типы файлов