Добрий день. Чи можна автоматизувати SQL Запит так, щоб він відпрацьовував кожного дня вночі та очищував дані з таблиці за певну дату створення по формулі "Сьогоднішня дата-10 днів"? Можливо можна зробити такий БП?

 

DELETE FROM "BtcErrorQueue1C"

WHERE

  "CreatedOn" > '2023-10-14'

    AND "CreatedOn" < '2023-10-15';

Нравится

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

Доброго дня,

 

Так, це можливо зробити через БП. Процес треба запускати через Start timer - рекомендуємо робити такі операції виключно в неробочий час. Сам sql-скрипт (в середині елементу script-task) матиме наступний вигляд: 

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

string sql = "DELETE FROM BtcErrorQueue1C WHERE CreatedOn <= DATEADD(day, -9, DATEDIFF(dd, 0, GETDATE())) AND CreatedOn >= DATEADD(day, -10, DATEDIFF(dd, 0, GETDATE()))";

CustomQuery myQuery = new CustomQuery(userConnection);

myQuery.SqlText = sql;

using (DBExecutor dbExecutor = userConnection.EnsureDBConnection())

{

    dbExecutor.CommandTimeout = 0;

    myQuery.Execute();

}

return true;

Доброго дня, 

Дані можно напряму видалити використовуючи елемент БП задача-сценарій, де додати клас який створить такий Delete запит, і додати запуск БП по таймеру на необхідний час. Як саме створити запит через клас описано тут https://academy.terrasoft.ua/docs/developer/back_end_razrabotka/operatsii_s_dannymi_back_end/pryamoj_dostup/obzor#case-2150. Дату теж можно розраховувати отримавши дату що зараз через DateTime localDate = DateTime.Now 

Доброго дня,

 

Так, це можливо зробити через БП. Процес треба запускати через Start timer - рекомендуємо робити такі операції виключно в неробочий час. Сам sql-скрипт (в середині елементу script-task) матиме наступний вигляд: 

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

string sql = "DELETE FROM BtcErrorQueue1C WHERE CreatedOn <= DATEADD(day, -9, DATEDIFF(dd, 0, GETDATE())) AND CreatedOn >= DATEADD(day, -10, DATEDIFF(dd, 0, GETDATE()))";

CustomQuery myQuery = new CustomQuery(userConnection);

myQuery.SqlText = sql;

using (DBExecutor dbExecutor = userConnection.EnsureDBConnection())

{

    dbExecutor.CommandTimeout = 0;

    myQuery.Execute();

}

return true;

Artem Smyrnov,

Добрий день. Дякую, у вашому коді використовуються функції DATEADD і DATEDIFF, які використовуються тільки для Microsoft SQL Server, вірно? Мені потрібен код для PostgreSQL, там використовуються функції INTERVAL та EXTRACT? Тобто код буде виглядати ось так?

var userConnection = Get&lt;UserConnection&gt;("UserConnection");
string sql = "DELETE FROM BtcErrorQueue1C WHERE CreatedOn &lt;= current_date - interval '9 days' AND CreatedOn &gt;= current_date - interval '10 days'";
 
CustomQuery myQuery = new CustomQuery(userConnection);
myQuery.SqlText = sql;
 
using (DBExecutor dbExecutor = userConnection.EnsureDBConnection())
{
    dbExecutor.CommandTimeout = 0;
    myQuery.Execute();
}
 
return true;

 

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

Добрый день!

Подскажите пожалуйста, как длбавить подсказку для кнопки с условием?

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

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

Нравится

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

Добрый день!

 

Для встроенного элемента кнопки базово нет возможности добавить подсказку. Но вы можете сделать следующее:

1. Использовать текстовый элемент как подсказку под кнопкой. 

2. Создать бизнес правило которое при невыбранных полях из списка делает видимой подсказку из пункта 1. 

3. Создать бизнес правило которое при выбранных полях из списка скрывает подсказку из пункта 1.

 

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

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

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

Есть бизнес-процесс, в нём добавлен элемент Wait for signal. Из бэкенда хочу триггерить этот элемент, чтобы процесс шёл дальшё. Делаю это так:

 

Process process = UserConnection.ProcessEngine.FindProcessByUId("12345", true);
if (process != null) {
	UserConnection.ProcessEngine.ThrowSignal(process.InternalContext, "testSignal");
}

Код отрабатывает и процесс идёт дальше. Но проблема в том, что если запущено 2 или более процессов с этим ожиданием сигнала, то дальше пойдут все, а не только тот, что был найден через FindProcessByUId(). Почему так? Я же по конктреному processId нахожу процесс, и именно его передаю в параметры.



Была мысль, что может надо для каждой инстанции своё уникальное название для сигнала иметь. Тот же processId можно было бы положить, ну или что-то своё сгенерировать, но у элемента Wait for signal при выборе названия сигнала нельзя выбрать формулу\переменную процесса, только текстовое значение ввести. Это никак не обойти?

Нравится

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

Добрый день.

 

ThrowSignal триггерит все процессы - это ожидаемое поведение.

Существует 2 варианта решения вашей задачи: 

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

2. В процессе в элементе Wait for signal вместо Custom Signal использовать Record signal, который будет триггериться при изменении записи с конкретным Id

Artem Smyrnov, добрый день.

Мы как раз начали пытаться делать по второму варианту, добавили новое boolean поле на страницу объекта, в сигнале поставили триггер на изменения этого поля + значение в нём True. Далее в бекенде пробовали менять значение поля через Update на True - триггер не срабатывал. После этого стали вместо Update запускать бизнес-процесс, передавая ему в переменную айдишку нужного объекта. Процесс отрабатывает, значение переменной меняет, но сигнал не триггерится на это изменения. Не знаете, какие могут быть у этого причины?

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

Доброго дня!

Чи може хтось дати детальну інструкцію як додати ще один CSS стиль до якогось конкретного елемента на сторінці?

Нравится

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

Добрий день,

 

Надав приклад із нашого ком'юніті: 

https://community.creatio.com/questions/detail-styles-css

Orkhan, Дякую, а чи можна це зробити через diff , в елементі сторінки який я додав через майстер розділу? Як ось тут наприклад:

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

Скажем, есть необходиомсть простроить бизнес-процесс и бэкэнд часть так, чтобы процесс в определённый момент вставал на паузу и ждал пока бэкэнд его продвинет дальше. Может, можно в процесс ожидание сигнала добавить и потом его триггернуть? Нужно так же, чтобы бэкэнд мог положить значения в переменные процесса. Знаю, что можно запустить процесс через UserConnection.ProcessEngine.ProcessExecutor.Execute(), а вот можно ли влезть в сущестующий - не могу найти.

Нравится

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

Добрый день!



Да, можно использовать промежуточное событие:



https://academy.terrasoft.ua/docs/user/biznes_processy/spravka_po_eleme…



Владимир

Владимир Соколов,

 а как его из бекнда потом триггерить?

Добрый день,

вот есть перечень методов в ProcessEngine, конкретно этот можно использовать для отправки сигнала я так понимаю, но лично использоать не пробовала

https://academy.terrasoft.ua/api/netcoreapi/8.0.0/api/Terrasoft.Core.ProcessEngine.html#Terrasoft_Core_ProcessEngine_ThrowSignal_Terrasoft_Core_Process_ProcessExecutingContext_System_String_ 

Так же можно вызывать другой БП и от туда отправлять сигнал, а параметры вычитывать из колонок объекта. Для передачи параметров так же возможно сущестуют методы в интерфейсе по ссылке выше

Aleksandrs A пишет:

Это промежуточное событие как раз ожидает изменения чего-то в системе (например, смену статуса счёта), и после этого процесс идёт дальше

 

Владимир 

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

Добрый день,

Возник такой вопрос, можно ли настроить уведомления для панели действий (например: при добавлении комментария после звонка или добавления активности и т.д.). В академии необходимую документацию не нашел для решения данного вопроса. Подскажите пожалуйста можно ли это реализовать, если да то каким образом. Заранее благодарю за помощь.

Изображение удалено.

Нравится

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

Добрый день,

 

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

 

https://academy.creatio.com/docs/developer/interface_elements/communica…

https://academy.creatio.com/docs/user/platform_basics/communications/no…

 

С уважением, 

Мария

Mariia Sorochan,

Добрый день, 

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

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

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

Как реализовывать в странице кнопку и функционал печатной формы и можно ли реализовывать тоже самое в FreedomUI.  

Нравится

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

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

 

Для того, что бы у Вас была опция сгенерировать отчет для выбранной в разделе записи или непосредственно на странице записи, необходимо настроить функционал печатных форм, к примеру MS Word отчет, более детальная информация доступна в данном блоке статей

На данный момент данная функциональность еще не адаптирована под Freedom UI, но Вы можете использовать данный функционал с новым интерфейсом с помощью бизнес процесов.

 

С уважением, 

Анастасия

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

Через devtools нашел объект и получил его xpath,но при запуске автотеста система не видит этот объект.Может кто сталкивался с данной проблемой?

Нравится

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

Ошибка : no such element: Unable to locate element: {"method":"xpath","selector":"//*[@id='sidebar-item-wrapper-3']"}

Pavel Khamenia, на скриншоте указан элемент @id=sidebar-item-wrapper-2', но в запросе @id=sidebar-item-wrapper-3'

 

также рекомендую искать элемент по data-item-marker, это более надежный вариант поиска элементов в системе Creatio

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

Як встановити ознаку "Прочитано" на запис реєстру у мобільному додатку, якщо користувач відкривав цей запис

Нравится

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

Доброго дня,

Якщо "Прочитано" це колонка, то можете звернути увагу на дану тему. Там описано три шляхи як можна проставити значення колонці, при відкритті сторінки найкраще підходять бізнес-правило та заміщення onLoadRecord.

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

Всем привет.

Не могу найти нигде как строку конвертировать в число. 

Есть поле Кол.дн., формат - целое число, значение 10

Есть кнопка, в меню действий, Добавить дни. По нажатию этой кнопки появляется окошко, где юзер вносит кол.дней, например, 5. 

И нужно что бы в поле Кол.дн произошел расчет, 10+5 = 15, и, соответственно, значение 10 изменилось на 15. 

Ниже пример реализации:

ExtendDeadLineButtonClick: function(caption, buttonCaption, maxCommentSize, callback, scope) {
					var controls = {
						comment: {
							dataValueType: Terrasoft.DataValueType.INTEGER,
							"Caption": {"bindTo": "Resources.Numbers.Comments"},
							customConfig: {
								className: "Terrasoft.MemoEdit",
								height: "25px",
								width: "50px"
///								maxlength: maxCommentSize
							}
						}
					};
 
					var config = {
						defaultButton: 0,
						style: {
							borderStyle: "ts-messagebox-border-style-blue visa-action",
							buttonStyle: "blue"
						}
					};
 
					Terrasoft.utils.inputBox(caption, function(result, arg) {
						if (result === "ok") {
							var comment = arg.comment.value;
							if (comment != 0) {
								var days = this.get("UsrGSApplDeadline");
								var calc = days + comment;
								this.set("UsrGSApplDeadline", calc);
							}
						}
					}, ["ok", "cancel"], this, controls, config);
			}

 

В результате, в поле Кол.дн я получаю следующее:

10+5 = 105

Тоесть, происходит конкатенация, а не сложение. 

 

Нравится

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

Здравствуйте, Павел!

В переменную comment записывается значение типа string, в результате сложения str(comment)+num(days) получаете конкатенацию. Вы можете изменить тип на числовой, модернизировав код одним из способов ниже:

1) var comment = parseInt(arg.comment.value);

2) var calc = + comment + days;

Первый вариант изменит тип переменной для всей функции в зоне видимости. Второй вариант заменит значение comment только в рамках данной строки.

С уважением, Ангелина!

Здравствуйте, Павел!

В переменную comment записывается значение типа string, в результате сложения str(comment)+num(days) получаете конкатенацию. Вы можете изменить тип на числовой, модернизировав код одним из способов ниже:

1) var comment = parseInt(arg.comment.value);

2) var calc = + comment + days;

Первый вариант изменит тип переменной для всей функции в зоне видимости. Второй вариант заменит значение comment только в рамках данной строки.

С уважением, Ангелина!

Добрый день.

 

Огромное спасибо. 

parseInt - именно то что нужно. 

Теперь работает корректно.

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