Коллеги, здравствуйте!

Беру [#Системная переменная.Текущее значение времени#] и мне из нее необходимо:

  • вычитать день и месяц из текущей даты;
  • сравнить день и месяц текущей даты с другими значениями дня и месяца;
  • написать сравнение в Формулу условного потока.

Фактический пример: сегодня 19.07.2021.

19.07 < 15. 11 и 19.07 > 01.01, поэтому идем по условному потоку 1, иначе по условному потоку 2.



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

Нравится

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

Коллеги, решили вопрос такой формулой.

В каждый условный поток поставили формулу в зависимости от требуемого периода.

Например, в одном потоке такая формула для промежутка времени 01.01 - 31.08:

([#Системная переменная.Текущее значение даты#].Day >= 1 && [#Системная переменная.Текущее значение даты#].Month == 1) || ([#Системная переменная.Текущее значение даты#].Month == 2) || ([#Системная переменная.Текущее значение даты#].Month == 3) || ([#Системная переменная.Текущее значение даты#].Month == 4) || ([#Системная переменная.Текущее значение даты#].Month == 5) ||  ([#Системная переменная.Текущее значение даты#].Month == 6) ||  ([#Системная переменная.Текущее значение даты#].Month == 7) || ([#Системная переменная.Текущее значение даты#].Month == 8)



в другом потоке такая формула для промежутка времени16.11 - 31.12:

([#Системная переменная.Текущее значение даты#].Day >= 16 && [#Системная переменная.Текущее значение даты#].Month == 11 ) || ([#Системная переменная.Текущее значение даты#].Month == 12 )

Правильно ли я понял, вы хотите, чтоб ваш поток срабатывал ежегодно в определённый период дат (с 01.01 по 15.11)? Поэтому вы хотите отделить год от даты?

Николай Ходаковский,

да, верно

Александра Дубс, добрый день!

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

В параметр процесса записываем текущую дату по формуле:

new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day)

Во второй параметр записываем дату сравнения с текущим годом:

new DateTime(DateTime.Now.Year, [#Дата сравнения 1#].Month,[#Дата сравнения 1#].Day)

Созданные параметры можно сравнивать в формуле или условном потоке в виде:

[#Текущая дата#] < [#Дата сравнения#]

Коллеги, решили вопрос такой формулой.

В каждый условный поток поставили формулу в зависимости от требуемого периода.

Например, в одном потоке такая формула для промежутка времени 01.01 - 31.08:

([#Системная переменная.Текущее значение даты#].Day >= 1 && [#Системная переменная.Текущее значение даты#].Month == 1) || ([#Системная переменная.Текущее значение даты#].Month == 2) || ([#Системная переменная.Текущее значение даты#].Month == 3) || ([#Системная переменная.Текущее значение даты#].Month == 4) || ([#Системная переменная.Текущее значение даты#].Month == 5) ||  ([#Системная переменная.Текущее значение даты#].Month == 6) ||  ([#Системная переменная.Текущее значение даты#].Month == 7) || ([#Системная переменная.Текущее значение даты#].Month == 8)



в другом потоке такая формула для промежутка времени16.11 - 31.12:

([#Системная переменная.Текущее значение даты#].Day >= 16 && [#Системная переменная.Текущее значение даты#].Month == 11 ) || ([#Системная переменная.Текущее значение даты#].Month == 12 )

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

Есть следующая задача: при изменении активности нужно отправить ответственному email в котором есть прямая ссылка на эту активность.

Данную задачу можно реализовать используя элементы [Формула] и [Читать данные] в дизайнере бизнес-процессов. Необходимо добавить в сам процесс дополнительный текстовый параметр, который преобразовывает идентификатор активности используя формулу в текстовое значение через метод ToString(). 

Ссылка на активность состоит из статической части и динамической, например:

https://XXXX-crm-bundle.terrasoft.ru/0/Nui/ViewModule.aspx#CardModuleV2…e59e41be-f36b-1410-d691-00155d04c01d, все что сразу после ../edit/ - динамическая часть, guid (глобальный идентификатор активности), его и будем подставлять в тело email после статической ссылки.

1. Создаем элемент бизнес-процесса [Сигнал] который будет реагировать на изменение в активности. 

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

2. Следующим шагом, элементом [Читать данные] вычитываем данные из активности по Id.

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

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

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

4. Используя элемент [Формула] передаем значение формулы в параметр guid активности.

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

В значении формулы используем метод ToString(), который преобразует идентификатор в текстовое значение:

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

5. Добавляем элемент для отправки email c заданными параметрами.

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

В теле письма, вставляем статическую ссылку на ваш сайт и через кнопку "молния"  выбираем параметры процесса, Параметр для guid активности.

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

В результате в теле письма получаем:

Ссылка на активность

https://XXX-crm-bundle.terrasoft.ru/0/Nui/ViewModule.aspx#CardModuleV2/… для guid активности#]

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

6. И как результат, при изменении активности получаем на почту письмо:

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

 

 

 

Нравится

Поделиться

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

Ссылку на сам сайт (если у вас есть тестовая и рабочая среды, например) можно хранить в системной настройке SiteUrl (он же используется для настройки Telegram - https://academy.terrasoft.ru/docs/user/ustanovka_i_administrirovanie/na…)

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

Подскажите, пожалуйста, как получить количество дней в месяце в формуле процесса?



DaysInMonth() редактору формул не нравится

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

Нравится

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

Сделайте скриншот формулы с текстом ошибки.

Можно попробовать добавить System в Namespace.

И посмотрите еще раз пример.

int daysInJuly = System.DateTime.DaysInMonth(2021, 7);

Владимир, у меня всё работает:

В процесс дополнительно ничего не добавлял.

Зверев Александр пишет:

Андрей, у меня всё работает:

Очень интересно! Я проверил в облаке - действительно, работает.

А на on-site - выдаёт ошибку.



В чём может быть разница? 

Может, версия отличается? Я пробовал на 7.17.2.

Зверев Александр пишет:

развернули Marketing 7.17.2 PostgreSQL на Windows - то же самое...

Чистка кэша браузера и Redis не помогает?

В «инструментах разработчика» браузера есть более подробная информация об ошибке?

Чистка, рестарт не помогли, в консоли тоже ничего.  

Значит, есть ещё какие-то различия между системами, где работает, и где нет. А если на одном сайте создать БП, выгрузить схему в файл и загрузить на другой сайт, тоже перестаёт работать?

Зверев Александр пишет:

Значит, есть ещё какие-то различия между системами, где работает, и где нет. А если на одном сайте создать БП, выгрузить схему в файл и загрузить на другой сайт, тоже перестаёт работать?

Проверил ещё на парочке on-site (которые ставили не мы) - везде повторяется такая же ошибка.. 

При переносе схемы БП с этой функцией на такой сайт тоже? А в логах, куда пишутся стеки ошибок в серверном коде, ничего не появляется?

Зверев Александр,

Вернулся к этому вопросу. Если перенести схему из облака, то процесс успешно выполняется. 

Однако при попытке его редактировать, снова та же ошибка.



В логах не нашли ничего подозрительного

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

Создаем параметр процесса типа справочник. В обязательном порядке пишем что за справочник.

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

Тут все замечательно. Далее идем и выбираем элемент формула. В нем выбираем только что созданный параметр. В поле "Значение формулы" выбираем выбор из справочника и приплыли. Заново выбираем справочник. Мелочь, но место для ошибки потому что дает выбрать другой справочник.

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

Зачем повторно выбирать справочник, если его уже задали в параметре?

Предлагаю автоматически указывать справочник из параметра процесса, если таковой задан в параметре.

 

P.s. можно считать мелким багом.

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

В системе еще масса мест где можно сделать что-то не так, так что можно сказать что это корректная работа.

Полозюков Евгений Петрович,

Ну так надо от них избавляться)

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

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

Коллеги, привет!

Подскажите, пожалуйста, как правильно прописать формулу в элементе формула бизнес-процесса?

Необходимо из строки "+38 (099) 999-99-99" вычитать числа и записать их обратно в строку. На выходе должно быть "380999999999".

Заранее благодарю.

Нравится

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

Виктория, мне кажется вот здесь https://community.terrasoft.ru/questions/ubrat-simvoly-v-tekste-s-pomosu-bp описан один в один ваш кейс)

Виктория, мне кажется вот здесь https://community.terrasoft.ru/questions/ubrat-simvoly-v-tekste-s-pomosu-bp описан один в один ваш кейс)

Ну и с Днем Рождения, кстати;) 

Сидоров Александр Валерьевич, спасибо))) 

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

Добрый день!

Руководствуясь статьей "Формулы" на Академии, пытаюсь создать в БП условный поток с проверкой заполненности поля, но при сохранении выдает ошибку:

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

________________________________________________________________________________________

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

Нравится

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

Вы пытаетесь сравнить Дату с Guid. Поэтому формула и выдает вам ошибку. Вам нужно сравнивать с DateTime.MinValue

Вы пытаетесь сравнить Дату с Guid. Поэтому формула и выдает вам ошибку. Вам нужно сравнивать с DateTime.MinValue

Сидоров Александр Валерьевич,

 благодарю, разобрался.

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

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

Возможно ли реализовать использование методов расширения в элементе БП формула.

Столкнулся с таким случаем нужно определить вхождение текущего времени в диапазон.

Написал метод расширения:

namespace Terrasoft.Configuration
{
    public static class AbDateTimeExtensions
    {
        public static bool IsInRange(this DateTime dateToCheck, DateTime startDate, DateTime endDate)
        {
            return dateToCheck.TimeOfDay >= startDate.TimeOfDay && dateToCheck.TimeOfDay < endDate.TimeOfDay;
        }
    }
}

 Но при использовании его в формуле выводит ошибку - http://prntscr.com/mwbc1w

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

В старом  дизайнере процессов можно было в формуле просто вызвать функцию, написанную на C# в том же БП. Сейчас так нельзя. В Вашем случае для такого вычисления вместо блока-формулы можно использовать блок-скрипт, где считать значения из параметров и вызвать функцию, а результат записать в ещё один параметр.

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

Пащенко Александр Сергеевич,

Хорошая идея. Давайте её залайкаем и, возможно, когда-нибудь эта возможность в bpm'online появится wink

Пащенко Александр Сергеевич, без компиляции бы в любом случае не обошлось. В старом движке процессов компилировать нужно было всегда, а в новом — только если есть элементы на C#.

Зверев Александр,

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

Если какую-то логику нужно часто применять в процессе, можно оформить её в UserTask.

Алла Савельева,

А смысл? Проще делать хэлперы (схема исходного кода) и их использовать в скриптасках. Для чегото более навороченного можно сделать свои действия процесса.

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

Коллеги всем доброго времени суток. Нужна Ваша помощь.

В БП есть элемент Web-сервис в  котором есть массив - http://prntscr.com/kyim63.

Данный массив объектов состоит из двух полей Number и Description - http://prntscr.com/kyimnk

Данные поля необходимо заполнять по следующему правилу из двух выборок - http://prntscr.com/kyin8y

Правила заполнения реализовал следующим образом через тернальные выражения в формуле поля - http://prntscr.com/kyio17http://prntscr.com/kyioa3

Но при отработке элемента Web-сервис видим что массив Communications пустой - http://prntscr.com/kyip7z

Если же посмотреть на данные трассировки двух элементов из которых должна осуществляться выборка видим:

Идем в "Читать Контакты СТО в платформе" - http://prntscr.com/kyiq70 здесь по нулям следовательно логике должно брать значение из другого элемента, идем в "Читать Основной контакт Контрагента" - http://prntscr.com/kyir2v, здесь данные есть, вопрос почему не заполнились в веб-сервисе?

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

Нравится

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

Нужно ещё больше ссылок на prntscr.com.angry

В 7.12 поддержка работы с веб-сервисами из БП только появилась. В 7.13 обещают усовершенствовать, улучшить работу в том числе и с массивами. Есть смысл дождаться релиза и переделать с учётом его возможностей.

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