веб-сервис
параметры
Sales_Creatio_enterprise_edition
7.16

Добрый день!

Требуется получить доступ к веб ресурсу, в котором для авторизации используется хэш-функция в заголовке HTTPS запроса.

Хэш функция формируется с использованием sha256 HMAC алгоритма по байтовой строке, состоящей из  текущего времени + метода запроса (POST, GET) + URI запроса + тела запроса. Значение хэш-функции должно быть записано в  заголовок веб сервиса до его вызова. 

1) Подскажите, как в задании-сценарии получить доступ к URI и телу запроса веб сервиса, чтобы сформировать хэш-функцию? Задание-сценарий вызывается перед вызовом веб сервиса, будут ли в этот момент заполнены параметры запроса веб-сервиса?

2) Второй вариант - полностью делать HTTP запрос из задании-сценарии. Как в этом случае лучше передать тело запроса, которое может иметь вложенную структуру? Тело запроса в задании-сценарии необходимо будет преобразовать в JSON формат.

Нравится

2 комментария

Добрый день!



В момент вызовом Web-сервис его параметры не заполнены, они заполняются после. При реализации описанной логики вы не ограничены возможностями C# можете использовать его классы для отправки запросов.

Алёна Доля,

Спасибо за ответ! 

Идея состояла в том, чтобы настроить и заполнить входные параметры вэб-сервиса средствами Creatio, и затем обратиться к ним, как к объекту (если это возможно), в user task. Затем в 

в user task сформировать Http запрос (PostAsync) с пользовательской подписью в заголовке. Параметры, конечно, можно добавить в самом user task, но было бы удобнее передавать их из настроек вэб-сервиса.

 

 

Показать все комментарии
Шаблоны email сообщений
параметры
картинки
картинка
ссылка
бизнес-процесс
7.14_()
marketing

Добрый день.

Через бизнес-процесс настраивается Email. При вызове бизнес-процесса передаются параметры для подстановки в Email.



Подстановка текстовых значений - работает. Вопрос в том, возможно ли подставить в URL переменный параметр. К примеру, стороннюю ссылку.

Также, возможно ли подстановка картинки из передаваемого URL в шаблон письма?

К примеру, штрих-код.

Нравится

1 комментарий

Это делается реализацией своего обработчика макроса на основе IMacrosInvokable. См. обсуждения тут, тут и особенно тут. Стандартно в системе этот механизм использован для оценок по обращениям.

Показать все комментарии
модальное окно
параметры
7.7
sales

Подскажите пожалуйста, как передать данные в модальное окно, а также как и где получить их в модальном окне?

Вызов модального окна 

 

var sandbox = this.sandbox;
var config = {
	heightPixels: 300,
	widthPixels: 700
};
var moduleName = "GrsModalModule";
var moduleId = sandbox.id + "_" + moduleName;
var renderTo = ModalBox.show(config, function() {
	sandbox.unloadModule(moduleId, renderTo);
});
sandbox.loadModule(moduleName, {
	id: moduleId,
	renderTo: renderTo,
});

 

Нравится

1 комментарий
Лучший ответ

Пример из  TagUtilitiesV2 (заполнение parameters) и вызов модуля

openTagModule: function(config) {
	var scope = config.scope;
	var sandbox = config.sandbox || scope.sandbox;
	var tagModulePageId = this.getTagModulePageId(sandbox);
	this.prepareModalBox();
	var tagModuleConfig = {
		renderTo: this.getGridContainer(),
		id: tagModulePageId,
		parameters: {
			TagSchemaName: config.entityTagSchemaName,
			InTagSchemaName: config.entityInTagSchemaName,
			RecordId: config.entityRecordId
		}
	};
	sandbox.loadModule("TagModule", tagModuleConfig);
},

Пример чтения переданных параметров в модуле TagModule 

createViewModel: function() {
	var viewModel = this.callParent(arguments);
	var parameters = this.parameters;
	if (parameters) {
		viewModel.set("TagSchemaName", parameters.TagSchemaName);
		viewModel.set("InTagSchemaName", parameters.InTagSchemaName);
		viewModel.set("RecordId", parameters.RecordId);
	}
	return viewModel;
}

 

Пример из  TagUtilitiesV2 (заполнение parameters) и вызов модуля

openTagModule: function(config) {
	var scope = config.scope;
	var sandbox = config.sandbox || scope.sandbox;
	var tagModulePageId = this.getTagModulePageId(sandbox);
	this.prepareModalBox();
	var tagModuleConfig = {
		renderTo: this.getGridContainer(),
		id: tagModulePageId,
		parameters: {
			TagSchemaName: config.entityTagSchemaName,
			InTagSchemaName: config.entityInTagSchemaName,
			RecordId: config.entityRecordId
		}
	};
	sandbox.loadModule("TagModule", tagModuleConfig);
},

Пример чтения переданных параметров в модуле TagModule 

createViewModel: function() {
	var viewModel = this.callParent(arguments);
	var parameters = this.parameters;
	if (parameters) {
		viewModel.set("TagSchemaName", parameters.TagSchemaName);
		viewModel.set("InTagSchemaName", parameters.InTagSchemaName);
		viewModel.set("RecordId", parameters.RecordId);
	}
	return viewModel;
}

 

Показать все комментарии
бизнес-процесс
параметры
Схема раздела
Бизнес-процессы
Разработка

Доброго времени суток.

Пожалуйста, подскажите ответ на следующий вопрос: как можно получить параметр bpResult строкового типа из бизнес-процесса UsrProcess1 (после его выполнения) в исходный код (JS) схемы раздела "Контрагенты" ?

То есть что-то вроде: string result = ProcessModuleUtilities.UsrProcess1.bpResult;

Нравится

1 комментарий

Какая версия Terrasoft у Вас используется?

Показать все комментарии
Активность
бизнес-процесс
параметры
Технические вопросы
7.x

Коллеги, приветствую.

В бизнес- процессе эмулируется некоторая активность, "отправка СМС".

Я хочу в заголовок записать ряд параметров, например, ФИО, сумму задолженности и пр.

Что- то вроде этого:

"Уважаемый ФИО, у Вас имеется долг в размере ДОЛГ"

Как передать параметры бизнес- процесса в заголовок активности?

Был бы весьма признателен за информацию.

Спасибо.

--
С уважением, Алексей Быков.

Нравится

3 комментария

Здравствуйте!

У элемента "Задача" есть параметр Recommendation. Вам необходимо передать значение в него.
Для передачи есть две базовые возможности (+элемент "Задание-сценарий", но это сложный способ):
1) Найти в структуре процесса элемент "Задача" и в элементе "Задача" в параметр Recommendation установить значение по умолчанию
2) Использовать элемент "Формула"

В двух вариантах параметр необходимо заполнить следующим значением:
"Уважаемый "+[#ФИО#]+", у Вас имеется долг в размере "+[#ДОЛГ#]

(отдельный параметры необходимо разделять знаком "+", текст необходимо писать в двойных кавычках, перенос на новую строку осуществляется последовательностью символов \\n

Алексей, спасибо большое! Сейчас попробую.

Супер, работает. Спасибо!

Показать все комментарии
1C 8.3
параметры
Интеграция и импорт данных
Разработка

Здравствуйте!

Интегрируеся с 1С 8.3, нужно динамически установить Договор для Счёта.

Для этого нужно

1. Получить контрагента 1С (т.к. договор его)
2. Получить Основной договор этого контрагента

Контрагента получить легко:
var Contragent = Param.Obj1C.Справочники.Контрагенты.НайтиПо[...];

А вот со вторым вариантом становится веселее. Есть следующая функция:

Param.Obj1C.Справочники.ДоговорыКонтрагентов.НайтиПоНаименованию

Она принимает 4 аргумента: Название, точное совпадение, родителя и владельца

Первое, второе и четвёртое нам известно - это "Основной договор", false и контрагент, которого мы получили выше. Но третьего не дано (sic!). Язык 1С позволяет опускать ненужные параметры, но компилятор Террасофта этого сделать не даёт, так что нужно что-то туда вставить.

Вопрос: что?

Я пробовал null, false, 0, {}, Справочники.Контрагенты.ПустаяСсылка(), ""

Всё время жалуется на несоответствие типов.

Нравится

1 комментарий

В разных местах предлагают вроде:

ЗНАЧЕНИЕ(Справочник.Контрагенты.ПустаяСсылка())

Не знаю, можно ли вызвать эту функцию из TS.

Показать все комментарии
бизнес-процесс
параметры
скрипт
элемент
Технические вопросы
7.x

Добрый день!
В бизнес-процессе есть автогенерируемая страница , в которой в качестве элементов созданы два поля типа дата: дата начала(NeedStartDate) и дата окончания(NeedEndDate).
Соответственно на данной странице необходимо будет заполнить эти два поля.

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

Нравится

1 комментарий

Добрый вечер, Дарья!

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

В случае, если Вы хотите использовать введенные пользователем параметры в элементе "Задание-сценарий", тогда обратиться к параметру Вы можете следующим образом:
AutoGeneratedPageUserTask[N].FieldName,
где AutoGeneratedPageUserTask[N] - название автогенерируемой страницы в процессе (именно название, а не заголовок), а FieldName - код элемента на автогенерируемой странице (задается при создании).

Показать все комментарии
бизнес-процесс
вызов
параметры
Хранимая процедура
Технические вопросы
7.x

Добрый день!
В разделе создано действие, при нажатии на которое запускается бизнес-процесс.
Смысл бизнес-процесса состоит в том, что в нем необходимо вызвать хранимую процедуру.
Т.е. бизнес-процесс состоит из трех элементов:
начальное простое событие
задание-сценарий
завершающее событие.

Вопросы:
1) как правильно вызвать хранимую процедуру
StoredProcedure storedProcedure = new StoredProcedure(UserConnection, "tsp_test") as StoredProcedure;
storedProcedure.PackageName = UserConnection.DBEngine.SystemPackageName;
storedProcedure.Execute();
return true;

подобный скрипт вызывает ошибки синтаксиса..
как правильно оформить вызов хранимой процедуры

2) как правильно передавать параметры входящие в процедуру(вызывать процедуру с параметрами)
и как правильно получить исходящие параметры хранимой процедуры

3) как правильно передавать в скрипте параметры БП во входящие параметры хранимой процедуры

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

Нравится

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

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

1) Правильный вызов процедуры (пример):

DataValueTypeManager dataValueTypeManager = UserConnection.DataValueTypeManager; 
var dateTimeValue = new DateTime(2009, 01, 02, 22, 12, 0);
                    Stream stream = new MemoryStream(Encoding.Unicode.GetBytes("Тест большого бинарного объекта"));
                    var textDataValueType = new TextDataValueType(dataValueTypeManager);
                    var guidDataValueType = new GuidDataValueType(dataValueTypeManager);
                    var integerDataValueType = new IntegerDataValueType(dataValueTypeManager);
                    var floatDataValueType = new Float2DataValueType(dataValueTypeManager);
                    var booleanDataValueType = new BooleanDataValueType(dataValueTypeManager);
                    var dateTimeDataValueType = new DateTimeDataValueType(dataValueTypeManager);
                    var idValue = new Guid("{BCDB8392-55BC-472A-A49D-22A975E0BEF6}");
 
                    StoredProcedure storedProcedure =
                           new StoredProcedure(Page.UserConnection, "tsp_TestStoredProcedure")
                           .WithParameter("IdParameter", idValue)
                           .WithVarParameter("VarIdParameter", idValue, guidDataValueType)
                           .WithParameter("TextParameter", "Украина")
                           .WithVarParameter("VarTextParameter", "Украина", textDataValueType)
                           .WithParameter("IntegerParameter", 10)
                           .WithVarParameter("VarIntegerParameter", 10, integerDataValueType)
                           .WithParameter("FloatParameter", 3.14)
                           .WithVarParameter("VarFloatParameter", 3.14, floatDataValueType)
                           .WithParameter("BooleanParameter", true)
                           .WithVarParameter("VarBooleanParameter", false, booleanDataValueType)
                           .WithParameter("DateTimeParameter", dateTimeValue)
                           .WithVarParameter("VarDateTimeParameter", dateTimeValue, dateTimeDataValueType)
                           .WithParameter("BinaryParameter", stream)
                           .WithVarParameter("VarBinaryParameter", stream)
                           .WithOutputParameter("ResultParameter", textDataValueType) as StoredProcedure;
storedProcedure.PackageName = Page.UserConnection.DBEngine.SystemPackageName;
storedProcedure.Execute();

2. Исходящий параметр .WithOutputParameter
3. Передача параметров в хранимую процедуру описана в первом пункте.
4. Вызов хранимой процедуры, Вы можете посмотреть в BaseAdministrativeGridPage

Спасибо.

по поводу пункта № 1- как правильно вызвать процедуру.

) Вызываю по аналогии в сценарии в БП
(процедура пока без параметров)

StoredProcedure storedProcedure = new StoredProcedure(UserConnection, "tsp_test") as StoredProcedure;
storedProcedure.PackageName = UserConnection.DBEngine.SystemPackageName;
storedProcedure.Execute();
return true;

Выходит ошибка при публикации (см. вложение).
Что не так?

2) по поводу пункта № 3 - не поняла.
Как передать просто параметры входящие - понятно.
Но как в скрипте правильно обратить к параметру бизнес-процесса, чтобы его уже значение передать в параметр хранимой процедуры ?

3) где именно искать вызов хранимой процедуры в BaseAdministrativeGridPage?

1. Код помещенный в БП в ScriptTask:

StoredProcedure storedProcedure = new StoredProcedure(UserConnection, "tsp_test") as StoredProcedure;
storedProcedure.PackageName = UserConnection.DBEngine.SystemPackageName;
storedProcedure.Execute();
return true;
не вызывает ошибки компиляции. Возможно у Вас есть еще какой-то код, который приводит к ошибке?

2. По имени параметра
var temp = ProcessSchemaParameter1

3. Поиском в исходных кодах
Открыть схему. Кнопка «Дополнительно» пункт меню «Открыть исходный код»

Спасибо, я посмотрю

Применение конструкции
.WithOutputParameter("ResultParameter", textDataValueType)
позволяет вызвать процедуру с исходящими параметрами.

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

Добрый день, Дарья!
Вы можете обратиться к значению, используя следующий пример кода:

var resultParameter = (string) storedProcedure.Parameters.FindByName("ResultParameter ").Value;

Добрый день еще раз!
Пытаюсь опять вызвать процедуру согласно инструкции (в БП в задании-сценарии)

DataValueTypeManager dataValueTypeManager = UserConnection.DataValueTypeManager;
var textDataValueType = new TextDataValueType(dataValueTypeManager);

StoredProcedure storedProcedure = new StoredProcedure(UserConnection, "tsp_test")
.WithOutputParameter("res_msg",textDataValueType) as StoredProcedure;

storedProcedure.PackageName = UserConnection.DBEngine.SystemPackageName;
storedProcedure.Execute();
return true;

Текст процедуры выглядит так:

CREATE procedure [dbo].[tsp_test]
as declare @res_msg nvarchar(250);
select @res_msg='1'
select @res_msg as res_msg

Процесс компилируется, но при запуске процесса элемент сценарий завершается с ошибкой

"System.Data.SqlClient.SqlException (0x80131904): Процедуре tsp_test не переданы параметры и аргументы"

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

Причем если вызвать процедуру без исходящего параметра
StoredProcedure storedProcedure = new StoredProcedure(UserConnection, "tsp_test")
as StoredProcedure;

то такой ошибки нет, сценарий выполняется.

Что-то не так с получением исходящего параметра процедуры?

Поняла в чем дело:
чтобы использовать конструкцию .WithOutputParameter("ResultParameter", textDataValueType) as StoredProcedure в скрипте,
необходимо в тексте самой процедуры прописывать параметр как OUTPUT:

CREATE procedure [dbo].[tsp_test]
(@res_msg nvarchar(250) OUTPUT)
as
select @res_msg='1'
select @res_msg as res_msg
return @res_msg

Но скажите тогда, как получить результат процедуры, если ее результатом будет какая-то выборка?
например, если результат ее выполнения - это результат выполнения какого-то запроса, возвращающего набор данных.

OUT | OUTPUT
Показывает, что параметр процедуры является выходным. Используйте параметры OUTPUT для возврата значений в вызвавший процедуру код.
В.Использование выходных параметров (OUTPUT)
В следующем примере создается процедура uspGetList. Эта процедура возвращает список товаров, цена на которые не превышает указанный предел. Данный пример поясняет использование нескольких инструкций SELECT и нескольких параметров OUTPUT. Параметры OUTPUT предоставляют внешней процедуре, пакету или нескольким инструкциям Transact-SQL доступ к значениям, заданным во время выполнения процедуры.

IF OBJECT_ID ( 'Production.uspGetList', 'P' ) IS NOT NULL 
    DROP PROCEDURE Production.uspGetList;
GO
CREATE PROCEDURE Production.uspGetList @Product varchar(40) 
    , @MaxPrice money 
    , @ComparePrice money OUTPUT
    , @ListPrice money OUT
AS
    SET NOCOUNT ON;
    SELECT p.[Name] AS Product, p.ListPrice AS 'List Price'
    FROM Production.Product AS p
    JOIN Production.ProductSubcategory AS s 
      ON p.ProductSubcategoryID = s.ProductSubcategoryID
    WHERE s.[Name] LIKE @Product AND p.ListPrice < @MaxPrice;
-- Populate the output variable @ListPprice.
SET @ListPrice = (SELECT MAX(p.ListPrice)
        FROM Production.Product AS p
        JOIN  Production.ProductSubcategory AS s 
          ON p.ProductSubcategoryID = s.ProductSubcategoryID
        WHERE s.[Name] LIKE @Product AND p.ListPrice < @MaxPrice);
-- Populate the output variable @compareprice.
SET @ComparePrice = @MaxPrice;
GO

Источник: https://msdn.microsoft.com/ru-ru/library/ms187926.aspx#Parameters

Спасибо, но вопрос не в этом заключался. Процедура, которую вы привели, просто возвращает два параметра выходных, а не выборку данных
А меня интересовало получение результатов выполнения процедуры в скрипте в bpmonline.
Например, процедура возвращает результат выполнения запроса select * from tbl_city
(это просто пример, выборка может быть сложнее), интересовало получение результата выполнения процедуры в bpmonline.
Но, наверное, мой вопрос уже не связан с темой бизнес-процессов - озвучу его в другой теме.
Спасибо

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

Для получения результата запроса из процедуры необходимо в процессе добавить в Usings:
Пространство имен: System.Data.IDataReader
Псевдоним: IDataReader

Вызов процедуры:

StoredProcedure storedProcedure = new StoredProcedure(UserConnection, "Test") as StoredProcedure;
storedProcedure.PackageName = UserConnection.DBEngine.SystemPackageName;
using (var dbExecutor = UserConnection.EnsureDBConnection()) {
            using (IDataReader dataReader = storedProcedure.ExecuteReader(dbExecutor)) {
                        while (dataReader.Read()) {
                                   var valueColumn1 = dataReader.GetValue(0);
                                   var operation = dataReader.GetColumnValue<int>("Operation");
                        }
            }
}
Показать все комментарии
ADODataset
параметры
Фильтры
Разработка

Добрый день!
Необходимо применить условие в тексте SQL сервиса ADODataset, который в свою очередь подключается к внешней БД Oracle 8.1. В качестве значения для условия использую параметр.

Значение самому параметру передаю в скрипте до открытия ADODataset:
ADODataset.Parameters.ItemsByName('testparam').ValAsStr = 'WEBDB';

При открытии ADODataset выскакивает ошибка:
"0x8000ffff - TSObjectLibrary.ADODataset: Ошибка открытия источника данных "adods_Test".
Оригинальное сообщение об ошибке: Не удается вновь задать положение в наборе строк"

При этом, если в тексте SQL явно указать значение поля для фильтрации,

то ADODataset открывается и фильтр отрабатывает.

Может кто подскажет, в чём проблема?

Нравится

2 комментария

Игорь, какой курсор указан (в свойствах ADODataset)? Если указан серверный, попробуйте заменить на клиентский.

Наталия, огромное спасибо! Помогло!

Показать все комментарии
Word отчет
xml
параметры
Переменные
Отчёты
Разработка

Добрый день!
Пытаюсь тут сделать очень хитрую штучку и никак не получается пока что
Очень нужно сформировать Word-отчет, в который нужно передать переменные и параметры, которые нужно вывести в отчете
Как бы это сделать?
Сам запрос, к сожалению, в виде XML передается в отчет
Движок уже сам разбирает его и формирует результирующий какой-то набор для отчета

Подскажите, пожалуйста, если кто сталкивался

Нравится

4 комментария

Иван, здравствуйте.

Можете попробовать вклиниться в метод ShowWordReport() в сервисе scr_UserReportCommon, там вызывается ProcessWordReportDataFill() в который передаются значения колонок для макросов, можете добавить необходимые значения и использовать их в качестве макросов в шаблоне отчета.

К сожалению, подобного опыта в поддержке не было, поэтому и примеров предоставить не сможем.

Иван, здравствуйте.

Можете попробовать вклиниться в метод ShowWordReport() в сервисе scr_UserReportCommon, там вызывается ProcessWordReportDataFill() в который передаются значения колонок для макросов, можете добавить необходимые значения и использовать их в качестве макросов в шаблоне отчета.

К сожалению, подобного опыта в поддержке не было, поэтому и примеров предоставить не сможем.

Передать параметры действительно получилось через ProcessWordReportDataFill
Там была написана еще процедура, которая подменяла определенные макросы в тексте на переданные элементы из массива

А не подскажите еще? хотелось бы попробовать как-то нарисовать таблицу в Word из террасофта
Но пока не получается
Может кто-то пробовал рисовать в ворде из террасофта ?

Заранее благодарен за ответы

Иван, посмотрите здесь.

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