На данный момент вложения чатов сохраняются в базу данных.

Метод SaveFileFromStream класса OmnichannelProviders.AttachmentsDownloader использует стандартный метод entity.SetStreamValue("Data", ms).

Метод SaveFile класса Terrasoft.Configuration.Omnichannel.Messaging.OmnichannelOutcomeMessagingService использует стандартный метод entity.SetStreamValue("Data", attachment.Content).



При этом с недавнего времени появились абстрактные интефейсы для работы с файлами в системе (Terrasoft.File).

https:/academy.terrasoft.ua/docs/developer/back_end_razrabotka/api_dlya_raboty_s_fajlami/obzor



Несмотря на отдельно настроенное с помощью интерфейсов хранение файлов не в БД а на диске (или возможное любое другое), чаты все ровно сохраняют файл по старому в БД.



Идея:

Доработать матоды OmnichannelProviders.AttachmentsDownloader.SaveFileFromStream и Terrasoft.Configuration.Omnichannel.Messaging.OmnichannelOutcomeMessagingService.SaveFile, чтобы они работали через интерфейсы Terrasoft.File.

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

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

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

Товарищи, подскажите пожалуйста.



Как правильно реагировать на комментарии от портальных пользователей в обращении, созданные через интерфейс в карточке портального обращения.



Может есть какой то другой способ отличный от создания новой версии процесса Отправка Email сообщения контакту обращения при публикации сообщения в канале Портал - Мультиязычный?

Нравится

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

Михаил, не совсем понял вопрос.

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

Или Вы не знаете, на какой объект завязаться процессом, чтобы срабатывал при добавлении портального сообщения?

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

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



Есть следующая ситуация:



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

Поэтому возникает необходимость актуализировать данные в карточке, к примеру, при помощи метода this.reloadEntity(), но непонятно как отправить message из БП в схему карточки и там уже запустить обновление.



Есть идеи?

Нравится

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

На сервере через Элемент скрипты делаете так:

 

string messageText = "{\"любой текст, если хотите\"}";
string sender = "NeedUpdatedGrid";
MsgChannelUtilities.PostMessageToAll(sender, messageText);

Затем создаете клиентский модуль, такого содержания:

 

define("ClientMessageBridge", ["ConfigurationConstants"],
function(ConfigurationConstants) {
    return {
        messages: {
            "NeedUpdatedGrid": {
                "mode": Terrasoft.MessageMode.BROADCAST,
                "direction": Terrasoft.MessageDirectionType.PUBLISH
            }
        },
        methods: {
            init: function() {
                this.callParent(arguments);
                this.addMessageConfig({
                    sender: "NeedUpdatedGrid",
                    messageName: "NeedUpdatedGrid"
                });
            },
            afterPublishMessage: function(
                sandboxMessageName,
                webSocketBody,
                result,
                publishConfig) {
                if (sandboxMessageName === "NeedUpdatedGrid") {
                    var name = webSocketBody.name;
                }
            }
        }
    };
});

А там, где хотите обновить грид, делаете так:

init: function() {
  this.callParent(arguments);
  this.sandbox.subscribe("NeedUpdatedGrid", this.myNameMethod, this);
},
myNameMethod: function(args) {
    this.reloadEntity();
}

Ну и соответственно не забудьте в схеме дописать 

блок messages, сообщение можете принимать как BROADCAST

 

На сервере через Элемент скрипты делаете так:

 

string messageText = "{\"любой текст, если хотите\"}";
string sender = "NeedUpdatedGrid";
MsgChannelUtilities.PostMessageToAll(sender, messageText);

Затем создаете клиентский модуль, такого содержания:

 

define("ClientMessageBridge", ["ConfigurationConstants"],
function(ConfigurationConstants) {
    return {
        messages: {
            "NeedUpdatedGrid": {
                "mode": Terrasoft.MessageMode.BROADCAST,
                "direction": Terrasoft.MessageDirectionType.PUBLISH
            }
        },
        methods: {
            init: function() {
                this.callParent(arguments);
                this.addMessageConfig({
                    sender: "NeedUpdatedGrid",
                    messageName: "NeedUpdatedGrid"
                });
            },
            afterPublishMessage: function(
                sandboxMessageName,
                webSocketBody,
                result,
                publishConfig) {
                if (sandboxMessageName === "NeedUpdatedGrid") {
                    var name = webSocketBody.name;
                }
            }
        }
    };
});

А там, где хотите обновить грид, делаете так:

init: function() {
  this.callParent(arguments);
  this.sandbox.subscribe("NeedUpdatedGrid", this.myNameMethod, this);
},
myNameMethod: function(args) {
    this.reloadEntity();
}

Ну и соответственно не забудьте в схеме дописать 

блок messages, сообщение можете принимать как BROADCAST

 

Литвинко Павел,

Спасибо, попробую.

А зачем эта функция?

afterPublishMessage: function(
                sandboxMessageName,
                webSocketBody,
                result,
                publishConfig) {
                if (sandboxMessageName === "NeedUpdatedGrid") {
                    var name = webSocketBody.name;
                }
                }

И модуль этой же функции должен от кого-то наследоваться?

Литвинко Павел,

На сервере через Элемент скрипты делаете так:

Под - "...Элемент скрипты..." , вы имели ввиду элемент задание сценарий?

Если это так, то следующий код там неприменим:

MsgChannelUtilities.PostMessageToAll(sender, messageText);

Так как объект MsgChannelUtilities отсутствует в данном контексте.

Андреев Андрей Сергеевич пишет:

Литвинко Павел,

На сервере через Элемент скрипты делаете так:

Под - "...Элемент скрипты..." , вы имели ввиду элемент задание сценарий?

Если это так, то следующий код там неприменим:

MsgChannelUtilities.<span>PostMessageToAll</span><span>(</span>sender, messageText<span>)</span><span>;</span>

Так как объект MsgChannelUtilities отсутствует в данном контексте.

ЕщеСвернуть

Да, задание сценарий 

Андреев Андрей Сергеевич пишет:

Литвинко Павел,

Спасибо, попробую.

А зачем эта функция?


 
afterPublishMessage: function(
                sandboxMessageName,
                webSocketBody,
                result,
                publishConfig) {
                if (sandboxMessageName === "NeedUpdatedGrid") {
                    var name = webSocketBody.name;
                }
                }

И модуль этой же функции должен от кого-то наследоваться?

https://academy.terrasoft.ua/documents/technic-sdk/7-13/clientmessagebr…;

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

Добрый день.
Подскажите пожалуйста, есть ли возможность отправлять сообщение из процесса объекта на клиент?
Например: перед сохранением выполнить проверку и выдать предупреждение пользователю.
Такой вариант предпочтительнее чем проверка на клиенте (с которой проблем нет), потому что записи могут добавляться тремя различными способами.
Версия BPM 7.6

Нравится

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

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

К сожалению, реализовать такой функционал в бизнес процессе не получится - необходимо реализовывать на клиенте.
Данная возможность появится в будущих версиях приложения.

:biggrin:
throw new Exception("Сообщение пользователю")

Дмитрий спасибо, то что нужно!

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

Добрый день!
По аналогии с Счетчиком активности, подписываюсь на сообщение от БП.
В коде страницы читаю сообщение, но функция обработки сообщения начинает вызываться циклично, в Body сообщения текст не изменяется.
В чем может быть проблема?

Нравится

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

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

"Maxim Gritsenko" написал:

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


Хорошо. Пока, поставил "костыль": сохраняю текст сообщения (в тексте id, поэтому повторов быть не может) и если это повтор - выхожу из функции обработки.
Любом случае, спасибо за помощь и поддержку!

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