Начал разбираться в стандартных чатах и возникли вопросы
1. Как я могу отправить сообщение автоматически к примеру с помощью бизнес процесса, какое действие мне надо отслеживать и в какую таблицу инсертить
2. Как я могу обработать сообщение и давать на них автоматические ответы7 
К примеру человек ввел /status ему выдается сообщение о статусе груза к примеру. Или он  ввел номер записи и ему выдало данные по ней из системы?

Нравится

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

Добрый день!

По п.1. В данный момент данный функционал отсутствует в продукте, есть пожелание на доработку.

По п.2, данный вопрос лежит в плоскости интеграций по API и настройки чат-ботов, к сожалению, не располагаю такой информацией.

Здравствуйте! Я пробовал делать отправку из задания-сценария. Перехатить сообщения пока не получилось, но если есть у кого-то есть пример, то буду признателен.

 

Пример кода на отправку, что бы сообщение отправилось, необходим чат с контактом, собственно переменная chatId:

using Terrasoft.Configuration.Omnichannel.Messaging
using System.Linq
using OmnichannelMessaging
using OmnichannelProviders.Domain.Entities
using MessageDirection = OmnichannelProviders.Domain.Entities.MessageDirection
 
//Сам код:
 
UserConnection userConnection = Get<UserConnection>("UserConnection");
Guid chatId = Get<Guid>("ChatId");
string textMessage = Get<string>("TextMessage");
 
DateTime foo = DateTime.Now;
long unixTime = ((DateTimeOffset)foo).ToUnixTimeSeconds();
 
var messageManager = new MessageManager(userConnection);
var messages = messageManager.GetMessagesByChatId(chatId);
var unifiedMessage = messages.FirstOrDefault();
 
if (unifiedMessage != null) {
	UnifiedMessage message = new UnifiedMessage {
		Recipient = unifiedMessage.MessageDirection == MessageDirection.Incoming ? unifiedMessage.Sender : unifiedMessage.Recipient,
		Sender = unifiedMessage.MessageDirection == MessageDirection.Incoming ?	unifiedMessage.Recipient : unifiedMessage.Sender,
		MessageDirection = MessageDirection.Outcoming,
		ChatId = chatId.ToString(),
		ChannelId = unifiedMessage.ChannelId,
		Source = unifiedMessage.Source,
		MessageType = OmnichannelProviders.Domain.Entities.MessageType.Text,
		Message = textMessage,
		Timestamp = unixTime
	};
    messageManager.Send(message);
}

 

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

Добрый вечер. Может кто-то стакивался или знает возможно ли реализовать веб-сервис (rest - сервис), который будет передавать файл Excel.

Реализация через стандартный интерфейс веб-сервисов Creatio

Нравится

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

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

Нравится

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

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

Не совсем понял ваш вопрос, но начиная с версии 7.17.4 можно вызвать веб-сервис с помощью следующего кода:
 

using Terrasoft.Configuration.ServiceSchema;
 
//...
 
try {
    // Создаем экземпляр ServiceSchemaClient
    var client = ClassFactory.Get<IServiceSchemaClient>();
    // Настраиваем параметры вызова
    var parameters = new Dictionary<string, object>() {
        {"id", 1}, {"name", userName}
    };
    // Получаем результат выполнения
    var serviceResponse = client.Execute(UserConnection, serviceName, methodName, parameters);
} catch (Exception e) {
    // Обрабатываем ошибки
}

Также вам может помочь обсуждение тут.

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

Есть раздел договоры, когда проваливаюсь в запись и нажимаю на контрагента, то система просто зависает и пишет Uncaught TypeError: Cannot read property 'entitySchemaName' of undefined , не совсем понимаю куда копать, при это когда захожу в контрагента из раздела контрагент этой ошибки нет
с чем можно связано и куда копать
core-base.js:704 user: Supervisor/7f3b869f-34f3-4f20-ab4d-7480a5fdf647
 file: https://support.ru/0/conf/content/SchemaBuilderV2.js?hash=fb899ee9f0b54…
 line: 543
 column: 57
 message: Uncaught TypeError: Cannot read property 'entitySchemaName' of undefined 
 stack: TypeError: Cannot read property 'entitySchemaName' of undefined
    at i.<anonymous> (https://support.ru/0/conf/content/SchemaBuilderV2.js?hash=fb899ee9f0b54…)
    at https://support.ru/core/c9cf54cfbeb445fbb561c4bf11e53272/combined/all-c…
    at Object.execCb (https://support.ru/core/057665f97324038f6c7c326b6734de6b/requirejs/requ…)
    at Module.check (https://support.ru/core/057665f97324038f6c7c326b6734de6b/requirejs/requ…)
    at Module.enable (https://support.ru/core/057665f97324038f6c7c326b6734de6b/requirejs/requ…)
    at Module.init (https://support.ru/core/057665f97324038f6c7c326b6734de6b/requirejs/requ…)
    at https://support.ru/core/057665f97324038f6c7c326b6734de6b/requirejs/requ…

Нравится

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

Добрый день!

 

Такая ошибка может быть по нескольким причинам.

 

1) Попробуйте выполнить следующее действия:
1. Открыть конфигурацию, найти последнюю измененную схему страницы и реестра Контрагента. Их названия будут соответствовать Страница - AccountPageV2, Раздел - AccountSectionV2.
2. Выполнилть пересохранение схемы раздела и старицы, ничего изменять не нужно, просто пересохранить модули.
3. Скомпилируйте приложение.
4. Очистите кэш браузера для пользователей у которых наблюдается ошибка и проверьте её воспроизведение еще раз.

 

2) Ошибка может возникать из-за неактуальной версии браузера.  Проблема в синтаксической ошибке в схемах, которую более новые версии игнорируют. Попробуйте обновить браузер до последней актуальной версии, и очистить кэш в браузере. 

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

Использую очень простой метод (см. ниже)  в контексте двух событий:

1) onEntityInitialized

2) при изменении поля Account на карточке.

В первом случае формируется запрос без использования фильтра по идентификатору контрагента, во втором с фильтром. В обоих случаях "var account = this.get("Account");" успешно вычисляется. Как добиться гарантированной фильтрации в обоих случаях?

 

         setIsAffiliated: function() {
                var account = this.get("Account");
                
                var esq = Ext.create("Terrasoft.EntitySchemaQuery", {
                    rootSchemaName: "Account"
                });
                //esq.rowCount = 1;

                esq.addColumn("IsAffiliatedLegalEntity");
                esq.filters.add("Account", esq.createColumnFilterWithParameter(
                    Terrasoft.ComparisonType.EQUAL,
                    "Id",
                    account.Id));

                esq.getEntityCollection(function(result) {
                    if (result.success) {
                        var first = result.collection.firstOrDefault();
                        if (!Ext.isEmpty(first)) {
                            var isAffil = first.get("IsAffiliatedLegalEntity");
                            this.set("IsAffiliatedLegalEntity", isAffil);
                        }
                    }
                }, this);
            }

Нравится

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

                var accVal = account.value;
                var accId = account.Id;

Нашел причину. Она в том, что возвращаются разные объекты в двух случаях, но в обоих идентификатор контрагента доступен так "account.value;"

Добрый день, Сергей!
Следует посмотреть какое значение возвращает строка  
var account = this.get("Account"); 
Если оно одно и тоже, то довольно странно, что в одном случае фильтр не используется.

                var accVal = account.value;
                var accId = account.Id;

Нашел причину. Она в том, что возвращаются разные объекты в двух случаях, но в обоих идентификатор контрагента доступен так "account.value;"

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

Проблема в работе утилиты CLIO, но удаться собрать в один пакет несколько, хотя данная функция завялена на странице проекта:

 

Compress more than one packages to a single .gz file if the command runs from a directory that contains the package.

clio generate-pkg-zip <PACKAGE_NAME_1>,<PACKAGE_NAME_2>,<PACKAGE_NAME_3>

Нравится

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

Александр Тыра, здравствуйте.

Можете уточнить где именно была заявлена данная функциональность?
Вся информация о работе Clio находится на github разработчиков продукта. Возможно, Вам смогут помочь и там.
https://github.com/Advance-Technologies-Foundation

Sorotiuk Anna,

 Вот тут в wiki

https://github.com/Advance-Technologies-Foundation/clio/wiki/generate-p… в самом низу " Compress more than one packages to a single .gz file if the command runs from a directory that contains the package. "

Александр Тыра,
Спасибо за уточнение.
Насколько вижу, на GitHub разработчиков создана проблема соответствующая Вашему запросу.
https://github.com/Advance-Technologies-Foundation/clio/issues/190
Могу только предложить ожидать ответа там.

Sorotiuk Anna,

Это я и написал)

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

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

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

Фактический пример: сегодня 19.07.2021.
19.07 < 15. 11 и 19.07 > 01.01, поэтому идем по условному потоку 1, иначе по условному потоку 2.

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

Нравится

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

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

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

да, верно

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

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

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

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

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

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

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

Может кто знает как можно скрыть в ActionsDashboard в активностях кнопку выполнения. В коде вижу что в базовом классе данная кнопка просто уcтановленyа в true

 

Как изменить для определенного вида активности этот атрибут в false?

Нравится

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

После загрузки всех элементов страницы, либо в любой другой момент:

this.set("ExecuteButtonVisible"false);

 

Добрый день.
Для скрытия этой кнопки правильнее всего будет переопределить метод, который устанавливает значение ExecuteButtonVisible в true.

Создайте модуль UsrBaseDashboardItemViewModel и переопределите метод initExecuteButtonVisibility:
 

define("UsrBaseDashboardItemViewModel", ["BaseDashboardItemViewModel"],
	function(resources, MaskHelper) {
		Ext.define("Terrasoft.configuration.UsrBaseDashboardItemViewModel", {
			override: "Terrasoft.configuration.BaseDashboardItemViewModel",
			initExecuteButtonVisibility: function() {
				this.set("ExecuteButtonVisible", false);
			}
		});
	});

После этого добавьте этот модуль в BootstrapModulesV2, заместив его:

 

 define("BootstrapModulesV2", ["UsrBaseDashboardItemViewModel"], function() {
    return {};
});

Пример и инструкцию можно найти по ссылке.

Тимофей Ромах,

 

на странице где грид, или активности?

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

Задача "интеграция с Jira и отображения стадий в отдельной карточке в которую можно попасть из страницы раздела. Задач в Jira может быть несколько".

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

То что сразу приходит в голову:

1) Как же управлять такими кейсами, ведь кнопки "Вид" тут нет, а значит и перейти в меню управление DCM не можем. А кнопка вид у нас есть только у страниц что имею связь с Section, у нас ее нет, потому и кнопки нет (эта логика прописана в базовой странице).

Нравится

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

Добрый вечер.

 

Я бы попробовала такие варианты.

1. Для этой страницы создать раздел, но не подключать в рабочее место пользователей.

2. Посмотреть, как эта логика реализована в карточке раздела, а потом попробовать перенести её в нужную карточку.

Добрый вечер.

 

Я бы попробовала такие варианты.

1. Для этой страницы создать раздел, но не подключать в рабочее место пользователей.

2. Посмотреть, как эта логика реализована в карточке раздела, а потом попробовать перенести её в нужную карточку.

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

 

1) Кстати, хорошая идея, когда-то делал так, а сейчас в голову не пришло это. Самый безболезненный вариант.

2) Пробовал, там завязка на проверку привязана ли страница к разделу в базовых классах. Можно конечно переопределить все, но боюсь рано или поздно с каким-то обновлением это вылезет боком .

 

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

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

Коллеги, добрый день!

 

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

1) Если я загружаю шаблон с формулами для ячеек, должны ли они отрабатывать при формирование отчета? Например, Я вывожу две системные колонки в шаблоне, а в третьей вывожу конкатенацию этих двух колонок. Должна ли отрабатывать конкатенация.

2) Распознает ли конструктор название колонок в шаблоне и сопоставляет ли он их записями из детали "Колонки отчета"? 

Нравится

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

Илья, добрый день!

 

Кастельно Вашего первого вопроса: "Я вывожу две системные колонки в шаблоне, а в третьей вывожу конкатенацию этих двух колонок. Должна ли отрабатывать конкатенация".

 

К сожалению, на данный момент непосредственно в печатной форме реализовать данную задачу возможности нет.

В качестве решения Вашего кейса можем предложить реализовать бизнес-процесс, который будет записывать необходимые рассчетные данные в поле в карточке объекта. Потом данное расчетное поле можно будет выводить в печатную форму.
Примерный алгоритм реализации:

- создать на странице, к которой привязан отчет Ms Word, дополнительное поле с необходимым Вам типом;

- реализовать заполнение нового поля нужным значением, например, с помощью бизнес-процесса;

- вывести поле с полученным расчетным значением в шаблон отчета Ms Word.

Больше о функциональности бизнес-процессов Вы сможете узнать на Академии: https://academy.terrasoft.ru/docs/user/biznes_processy

 

 

Касательно Вашего второго вопроса: "Распознает ли конструктор название колонок в шаблоне и сопоставляет ли он их записями из детали "Колонки отчета"?".

 

Конструктор отчетов не распознает название колонок в тексте шаблона. При генерации отчета система ориентируется на свойства полей, которые были вытянуты из блока "Word Report Data": 

 

В данный блок попадают поля, которые были настроены при создании отчета в Creatio:

 

При этом при генерации соответствующие значения будут подставленны именно в те поля, которы были перетянуты из блока "Word Report Data" вне зависимости от того, какой текст Вы напишете внутри этого поля.

Имеется в виду, что если Вы перетянете настроенное поле "Номер" из блока "Word Report Data", а затем измените текст внутри этого элемента например на "Ответственный", то при генерации отчета на место данного элемента будет подставлено значение поля "Номер".

Т.е. генератор печатных форм ориентируется именно на свойства перетянутого поля, а не на его содержимое.

 

Дополнительные материалы по созданию и настройке отчетов вы можете найти на Академии:

https://academy.terrasoft.ru/docs/7-17/user/kastomizacija_no_code/otche…

https://academy.terrasoft.ru/docs/user/kastomizacija_no_code/otchety_i_…

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