Активность
бизнес-процесс
Выполнение скрипта
элемент БП
7.11
studio

 Добрый день!



Возникла необходимость указания значений кастомных колонок при создании активности элементом "Выполнить задачу". Нужно, чтобы сразу при открытии пользователю карточки этой активности там уже были нужные значения в пользовательских колонках (На основе их будет приниматься решение о состоянии активности). Как я понял, пользовательскими средствами это сделать нельзя, нужно использовать мини-сценарий "После сохранения активности" в расширенном режиме. После этого я столкнулся с проблемой, которую описывает Михаил в посте https://community.terrasoft.ru/questions/vypolnit-zadacu-i-dobavit-dann…;то есть ограниченность контекста выполнения этого скрипта. На данный момент у меня не получается заставить работать даже простой



 

var userConnection = Get<UserConnection>("UserConnection");

Потому как "Get" не существует в данном контексте. Мне же хотелось использовать параметры процесса и запросы в базу в этом сценарии. По совету Михаила передал в текстовом виде параметр процесса в Переменную "Контекст выполнения" элемента, но не понимаю на данном этапе, как получить из него значение в сценарии и распарсить в GUID.



Подскажите, пожалуйста, кто побеждал эту проблему, как работать с ESQ, переменными самого элемента "Выполнить задачу" и параметрами процесса в сценарии "После сохранения активности"? 

Нравится

5 комментариев

Олег, добрый день.

Не совсем понятно, зачем выполнять все эти действия, если можно просто добавить связи для Ваших колонок, как описано в комментарии, и предзаполнять поля в самом элементе.

При небольшом количестве кастомных полей такой подход мне кажется более оптимальным.

Логвин Андрей Витальевич,

Добрый день, Андрей!



Дело в том, что, как вы сами написали, в таком случае нужно будет использовать добавление активности, а затем открытие страницы редактирования, что не одно и то же с вызовом элемента "Выполнить задачу".

Андронов Олег Алексеевич,

В последнем комментарии  и в посте, на который ссылаюсь,описан подход добавления колонки в деталь Связи, после чего Вы сможете проставлять значение для этого  поля и в элементе "Выполнить задачу".

Но если Вы всё же хотите именно в рамках сценария После сохранения Активности, то алгоритм примерно следующий:

Создать параметр процесса, заполнить, передать его в Контекст выполнения в Выполнить задачу, а в сценарии обращаться напрямую к параметру:

var TitleFromExecutionContext = ExecutionContext;//Здесь в ExecutionContext передали ранее параметр процесса

var update = new Update(UserConnection, "Activity")

        .Set("Title", Column.Parameter(TitleFromExecutionContext)).

        Where("Id").IsEqual(Column.Parameter(CurrentActivityId));

        update.Execute();

 

Удачи в реализации.

Андронов Олег Алексеевич,

Доброго дня, скажите, получилось ли решить Вашу задачу? Каким способом?

У меня сейчас такая же, и это совсем беда))

Наверно, лучше писать такие вопросы Олегу в личку. Никто, кроме Вас, не знает подробностей задачи и чем не подходят советы Андрея.

Показать все комментарии
Выполнение скрипта
глобальные переменные
тестирование кода
Скрипты
Разработка

Buenos Dias, Amigos!

Господа, я человек новый, и ранее опыта работы с системой Terrasoft не имел, поэтому вопрос может быть через чур тривиальный (не судите строго).

Дано:
Таблица + select query + dataset
Скрипт

Найти:
Из скрипта хочу получить доступ к dataset'у через метод глобального объекта Services.GetNewItemByUSI('')*, дабы в нём поковыряться и в конечном итоге запустить код прямо из Дизайнера скрипта.

Имеем: ошибку выполнения jscript 5009 Undefined identifier в строке с инструкцией * (переменная Services в которой априори является глобальной) при сохранении файла.

Прошу пролить луч света и поделиться опытом в данных вопросах.

С уважением
Ваш коллега.

Нравится

17 комментариев

"Litvyakov Yegor Vladimirovich" написал:пролить луч света

http://msdn.microsoft.com/en-us/library/vstudio/6a8k3cz9

"Litvyakov Yegor Vladimirovich" написал:поделиться опытом

проверьте код. если не сохраняет сервис - 99% ошибка в синтаксисе кода

Благодарю, но первая ссылка в никуда. О чём говорит ошибка я знаю - переменная не объявлена а точнее равна undefined. Services - является глобальной переменной, сравни window в DOM верно? Соответственно, по логике, объявляться не должна. Вопрос был в этом.

"Андросов Дмитрий" написал:проверьте код. если не сохраняет сервис - 99% ошибка в синтаксисе кода

Это тоже ясно, я же написал что за ошибка.

Вопрос в том, как получить доступ из скрипта к глобальной переменной. (Возможно необходимо подключать дополнительные модули, или какие либо иные манипуляции с настройками сервиса скрипта?)

"Litvyakov Yegor Vladimirovich" написал:первая ссылка в никуда

приведите проблемный код с контекстом

Покажите фрагмент кода, на который ругается.

В информативном плане, на вопрос ссылка не отвечает.

var Dataset = Services.GetNewItemByUSI('<Здесь код моего dataset>'); // как раз на этой строчке компилятор выдаёт ошибку 5009
...

А что вместо многоточия?

"Зверев Александр" написал:А что вместо многоточия?

Может быть ошибаюсь, интерпретатору JS должно быть всё равно.

    Dataset.Open(); 
    Dataset.Edit();
    var Name = 'Hello World';
    Dataset('String') = Name;
    Dataset.Close();

Возможно здесь собака не глубоко зарыта. В большей степени я взаимодействовал с клиентским JS (ECMAScript).
В terrasoft объектная модель, стандартные функции и переменные, плохо документированы, хорошее представление сложно получить.
Поэтому рассчитываю на Вашу квалифицированную помощь, господа.

вообще-то компилятор может и неправильно строчку указывать

ради интереса попробуйте подключить скрипт scr_Utils и попробуйте использовать

var Dataset = GetSingleItemByCode('Здесь код моего dataset', 'любая строка (в т.ч. пустая)');

а еще - укажите версию бинарников

"Litvyakov Yegor Vladimirovich" написал:В большей степени я взаимодействовал с клиентским JS

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

"Андросов Дмитрий" написал:вообще-то компилятор может и неправильно строчку указывать
тоже верно
"Андросов Дмитрий" написал:а вы где пишете код, если не секрет?

В приложении Terrasoft CRM Administrator.

"Андросов Дмитрий" написал:ради интереса попробуйте подключить скрипт scr_Utils и попробуйте использовать var Dataset = GetSingleItemByCode('Здесь код моего dataset', 'любая строка (в т.ч. пустая)');

Выдаёт другую ошибку 5007 Объект отсутствует.(

если вы это сделали

"Litvyakov Yegor Vladimirovich" написал:попробуйте подключить скрипт scr_Utils

тогда не знаю - видимо у вас какая-то проблема все-таки с Services.

Попробуйте перерегистрировать библиотеки
если не знаете как:
http://www.community.terrasoft.ru/forum/topic/8497#comment-35568
http://www.community.terrasoft.ru/forum/topic/6512
http://www.community.terrasoft.ru/forum/topic/10311

ДА И СКАЖИТЕ ВЕРСИЮ БИНАРНИКОВ - это может быть важно

Благодарю за внимание и помощь господа!
Луч света упал на глобальные переменные - обращение к ним должно идти из функции, не как у меня.

"Андросов Дмитрий" написал:ДА И СКАЖИТЕ ВЕРСИЮ БИНАРНИКОВ - это может быть важно

Был бы признателен за подсказку, где, что и для чего и как)
Из дизайнера скрипт не запустил пока( на другой камень наткнулся.
Очень благодарен за поддержку!

запустить скрипт прямо в TSAdmin (и в его контексте), причем можно и не сохранять сам сервис
добавить function Main() {} и нажать

да, вне функций глобальные переменные не работают (не знаю уж почему)

версии бинарников (но они все же тут ни при чем):

Понял, больше спасибо!

Кстати, чтобы данные сохранились в БД, надо перед

 Dataset.Close(); 

делать

Dataset.Post();

Да, спасибо. Это тоже проследил.

Показать все комментарии