Добрый день!



Возникла необходимость указания значений кастомных колонок при создании активности элементом "Выполнить задачу". Нужно, чтобы сразу при открытии пользователю карточки этой активности там уже были нужные значения в пользовательских колонках (На основе их будет приниматься решение о состоянии активности). Как я понял, пользовательскими средствами это сделать нельзя, нужно использовать мини-сценарий "После сохранения активности" в расширенном режиме. После этого я столкнулся с проблемой, которую описывает Михаил в посте 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();

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

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