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

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