Вопрос

The name MsgChannelUtilities does not exist in the current context

Пытаюсь сделать отправку сообщения в задании-сценарии в соответствии с данной инструкцией https://academy.terrasoft.ua/documents/technic-sdk/7-13/clientmessagebr….

В БД есть данное задание-сценарий:

    string sender = "AddProductToInvoice";

    string messageText = "";

    MsgChannelUtilities.PostMessageToAll(sender, messageText);

    return true;

При публикации выдается сообщение об ошибке компилятора:

"The name MsgChannelUtilities does not exist in the current context "

 

Нравится

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

Во-первых. Ответ на исходный вопрос ("The name MsgChannelUtilities does not exist in the current context ") - в пространство имен бизнес-процесса нужно добавить Terrasoft.Configuration. 

MsgChannelUtilities это просто схема исходного кода в базовой конфигурации, её код расположен в неймспейсе Terrasoft.Configuration (можно её открыть и посмотреть). 

Во-вторых. Метод refreshGridData() определён для раздела (Section) и в примере в https://community.terrasoft.ru/questions/obnovlenie-reestra-detali-posle-bp обновляет именно страницу раздела (AccountSection). Очевидно, что на странице карточки он отсутствует, т.к. на карточке нет грида, который она могла бы обновлять. Чтобы обновить деталь на карточке нужно использовать метод this.updateDetail({detail: "здесьимядетали"});

Вам нужно в Ваш БП в пространство имен подключить MsgChannelUtilities.

Смотрите скриншот ниже:

Алла Савельева пишет:

Алла , у меня такая же проблема , подключил MsgChannelUtilities

но теперь выходит другая ошибка 

см скришот ниже

Пользователь13,

Доброе утро.

В таком случае попробуйте написать таким образом:

var userConnection = Get<UserConnection>("UserConnection");
Terrasoft.Configuration.MsgChannelUtilities.PostMessage(userConnection, MessageName, MessageText);

 

Увы снова ошибка(

добавил эту строку  

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

ошибки не возникло после  публикации, но почему то деталь не обновилась после вставки в нее значения((

Пользователь13 пишет:

ошибки не возникло после  публикации, но почему то деталь не обновилась после вставки в нее значения((

Значит нужно отладиться и посмотреть получает ли деталь Ваше сообщение с БП.

Как вариант, могут быть проблемы с работой Web-сокетов. 

через отладчик выяснил что  обмен сообщениями происходит ошибка на

эту функцию this.refreshGridData(); 

вот код на странице , деталь находиться на странице FinApplicationPage

 onMyBpFinish: function(args) {

                    //Обновим грид

                 //   this.showInformationDialog ("sdfgsdfsdf");

                    window.console.info("Получено сообщение");

                    this.refreshGridData();

                },

Пользователь13,

this.reloadEntity(); - это попробуйте, обновляет всю страницу. У меня заработало все в итоге.

this.refreshGridData(); - тоже ошибку выдавало, видимо ее как-то по другому надо использовать. 

Вообще по обновлению всего и вся - есть в маркетплейсе бесплатное приложение - добавляет кнопку Refresh на страницы и детали. Можно установить, открыть пакет и посмотреть методы. 

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

Во-первых. Ответ на исходный вопрос ("The name MsgChannelUtilities does not exist in the current context ") - в пространство имен бизнес-процесса нужно добавить Terrasoft.Configuration. 

MsgChannelUtilities это просто схема исходного кода в базовой конфигурации, её код расположен в неймспейсе Terrasoft.Configuration (можно её открыть и посмотреть). 

Во-вторых. Метод refreshGridData() определён для раздела (Section) и в примере в https://community.terrasoft.ru/questions/obnovlenie-reestra-detali-posle-bp обновляет именно страницу раздела (AccountSection). Очевидно, что на странице карточки он отсутствует, т.к. на карточке нет грида, который она могла бы обновлять. Чтобы обновить деталь на карточке нужно использовать метод this.updateDetail({detail: "здесьимядетали"});

SERGEY 

спасибо! this.reloadEntity() это заработало!

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