Здравствуйте!
Ситуация у меня такая: существует задача "Создание документа Авторизация проекта". Этот документ создала как шаблон. Т.к. у меня в бизнес-процессе очень много документов, которые участвуют в бизнес-процессе. Идея возникла такая. Мы знаем какой нам нужно открыть документ. Можно создать функцию при диаграмме (присвоить задаче), которая будет открывать именно тот отчет, который нам нужен, после выполнения задачи.
Для осуществления совершила следующие шаги:
1. Создала задачу
2. В событиях, выбрала событие OnAfterExecute
3. Прописала этому событию следующее
function OtchetOnAfterExecute(ActionItem, IsComplete){
var QueryID = 'b7f37de9-cfe5-4dae-8757-c31e30ffce0a';
var ReportID = '835f79b0-e4df-4f33-94ab-734164c991c3';
var WorkspaceWindow = Self.ParentContainer.ParentWindow;
ProcessPrepareWordReport(ReportID, QueryID, WorkspaceWindow);
}
Поясню:
запрос QueryID - тот ID запроса, который был сформирован, с целью создания шаблона
отчет ReportID - ID отчета
вот возникла тут проблема: var WorkspaceWindow = Self.ParentContainer.ParentWindow;
Подскажите в чем моя ошибка и что можно сделать, чтобы осуществить эту функцию?
Заранее благодарю за помощью.
Валентина.
Нравится
Посмотрите, пожалуйста, ветку форума http://community.terrasoft.ru/forum/topic/3093
Если останутся проблемы, прикрепите к своему посту экспортированный сервис бизнес-процесса (и скрипта если есть), укажите точную версию Террасофт. Попробую на Вашем примере.
А как же скрипт бизнес-процесса? Это сервис wd_ConclusionOfaContractScript.
Можно обойти ошибку, делая вызов функции построения отчета таким образом:
var FakeWindow = Connector.Attributes('MainWindow');
if (!Assigned(FakeWindow)) {
FakeWindow = GetSingleItemByCode('wnd_FakeWindow');
}
ProcessPrepareWordReport(ReportID, QueryID, FakeWindow);
где ReportID и QueryID - заполенные Вами перед этим.
Обработчик OnAfterExecute вызывается, но у Вас же в нем объявлены еще две функции, а в самом теле функции только один закомментированный дебаггер. Нужно код, который Вы хотите выполнять, поставить сразу же после первой открывающей скобки в функции wda_ContractFillingOnAfterExecute. А еще лучше для понимания кода - удалить фрагмент
function Main(){ CreateWordReport(); } function CreateWordReport(){
и одну закрывающую скобку в конце.
Спасибо большое, помогло. Возникла другая проблема.
function wda_ContractFillingOnAfterExecute(ActionItem, IsComplete) {
var QueryID = 'b7f37de9-cfe5-4dae-8757-c31e30ffce0a';
var ReportID = '835f79b0-e4df-4f33-94ab-734164c991c3';
var FakeWindow = Connector.Attributes('MainWimdow');<----'MainWimdow' - пишем название отчета? Я так понимаю что это служебное окно?
if (!Assigned(FakeWindow)){
FakeWindow = GetSingleItemByCode('wnd_FakeWindow');<----'wnd_FakeWindow' - не очень понимаю, какое тут должно быть окно.
}
ProcessPrepareWordReport(ReportID, QueryID, FakeWindow);<----возникает тут ошибка "Ошибка выполнения Microsoft JScript: Предполагается наличие объекта"
Из атрибутов нужно брать MainWindow
wnd_FakeWindow - это окно-"пустышка", подставное окно, передаваемое в функцию построения отчета.
для выполнения функции нужно подключить scr_ReportUtils, так как она там определена. Без этого возникает указанная ошибка.
Открывается отчет, но во время открытия появляется ошибка вот тут:
// scr_WordUtils
function OpenWordTemplate(TemplateCodeName) {
WordUtils = new Object();
var FileInfo = FindFileInfoInLibraryByCode(TemplateCodeName);<---"Ошибка выполнения Microsoft JScript: Предполагается наличие объекта"
var FileName = LoadFileFromDatabase(FileInfo.FileID, FileInfo.FileName, true);
WordUtils.word = new ActiveXObject("Word.Application");
WordUtils.WordDoc = WordUtils.word.Documents.Add(FileName);
WordUtils.FileName = FileName;
return WordUtils;
Да, действительно. В этом случае Вам нужно в скрипте scr_WordUtils подключить скрипт scr_LibraryUtils, функция FindFileInfoInLibraryByCode определена именно там, а без подключения скрипта она не определена.
Здравствуйте!
Решила использовать эту функцию в Бизнес-процессе. Но у меня шаблон загружает как в начале активации элемента задачи, так и в конце после завершения задачи в состоянии:"Выполнена".
Хотелось бы чтобы после того, как задача была выполнена, активировался шаблон.
function ActionOnAfterExecute(ActionItem, IsComplete) { var QueryID = '1fa6815c-9a52-4942-abd8-1cc7d53e8b0d'; var ReportID = 'a7a9ba04-7359-42ea-93d7-012b182e1ff0'; var FakeWindow = Connector.Attributes('MainWimdow'); if (!Assigned(FakeWindow)){ FakeWindow = GetSingleItemByCode('wnd_FakeWindow'); } ProcessPrepareWordReport(ReportID, QueryID, FakeWindow); var WordRecord = new Object(); }
Валентина, попробуйте написать следующим образом
function ActionOnAfterExecute(ActionItem, IsComplete) { if (IsComplete) { var QueryID = '1fa6815c-9a52-4942-abd8-1cc7d53e8b0d'; var ReportID = 'a7a9ba04-7359-42ea-93d7-012b182e1ff0'; var FakeWindow = Connector.Attributes('MainWimdow'); if (!Assigned(FakeWindow)){ FakeWindow = GetSingleItemByCode('wnd_FakeWindow'); } ProcessPrepareWordReport(ReportID, QueryID, FakeWindow); var WordRecord = new Object(); } }
т.е использовать параметр IsComplete (Выполнена) добавить ваш код в условие
if (IsComplete) { ... }