Нужно создать миникарточку для отправки sms. 

Тоесть небольшое окно где нужно ввести номер и текст сообщения.

Вызывать окно по кнопке. Кто знает как создать такое окно?

Нравится

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

Добрый день.

Появилась хотелка от руководства видеть некогда созданный нами раздел в другом рабочем месте (Общее -> Продажи). Как это можно сделать?

Тестовая среда развернута на локальном сервере, боевая - в облаке Terrasoft'а.

Версия bpm'online - 7.13.1.769

Спасибо.

Нравится

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

1. Можно сделать руками сразу на проде, а тест переразвернуть копией прода. Подробно смотрите статью на Академии.

2. Можно добавить на тесте раздел в нужное рабочее место, привязать данные к пакету, а потом перенести пакет на прод и установить данные. Описание здесь.

1. Можно сделать руками сразу на проде, а тест переразвернуть копией прода. Подробно смотрите статью на Академии.

2. Можно добавить на тесте раздел в нужное рабочее место, привязать данные к пакету, а потом перенести пакет на прод и установить данные. Описание здесь.

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

спасибо, по первому пункту все получилось - не внимательно читал документацию. А по второму пункту - через пакеты (SVN) все и делаем :)

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

Я не могу найти где можно увидеть список файлов к Обращению.

Само обращение отображается по запросу 

***bpmonline.com/0/ServiceModel/EntityDataService.svc/CaseCollection(guid'ae67f3b8-c319-4a59-9d97-f8585f6b3d33')

Но внутри него я не могу найти список прикрепленный файлов.

Вопрос.

Где искать ? 

Нравится

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

Для каждой детали используется свой адрес в OData. Файлы обращения, соответственно, будут: ***bpmonline.com/0/ServiceModel/EntityDataService.svc/CaseFileCollection/. Там можно посмотреть Id файлов и связи с обращениями. А непосредственно скачивание производить в FileService.

Я правильно понял чтоб мне найти файл который принадлежит к обращению мне нужно считать все файлы которые отдает CaseFileCollection и пройти все skiptoken ? После того как считал найти в них ид моего обращения ? И лишь потом узнать что за файл.  

Нет ли другого метода ? Т.е. сделать какой-то запрос чтоб по ид обращения он выдал мне список файлов которые есть в данном обращении ? 

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

не хватило разума мне понять.

view-source:https://*****.bpmonline.com/0/ServiceModel/EntityDataService.svc/CaseFileCollection?$filter=Name eq 'WhatsApp Image 2018-01-16 at 14.15.07 (1).jpeg'

По такому запросу ответ отдает верный.



view-source:https://*****.bpmonline.com/0/ServiceModel/EntityDataService.svc/CaseFileCollection?$filter=CaseId eq guid'829a0b1a-650b-4844-b664-59053f9434ad'

По этому запросу отдает Элемент коллекции с именем CaseId не найден



Что он от меня хочет ? 

CaseFileCollection?$filter=Case/Id eq guid'829a0b1a-650b-4844-b664-59053f9434ad'

 

Спасибо!

Никогда б не догадался. Ниже привожу рабочий пример.

https://*.bpmonline.com/0/ServiceModel/EntityDataService.svc/CaseFileCollection?$filter=Case/Id eq guid'1f779f3d-60b4-4a2c-a4b4-43e2cf89d8f0'

ссылку выше про  FileService. Я почитал. Но результата опять нет. 

 

http://адрес_сайта/0/rest/FileService/GetFile/e9eafee9-c4e4-4793-ad0a-003bd2c6a9b4/935b6ecb-3509-4c8a-bc7e-03ab0661da24

Тут первый GUID — ID схемы ContactFile (видно в URL, если её открыть в дизайнере), второй — ID записи в таблице.



Я думал что по этому запросу https://*.bpmonline.com/0/ServiceModel/EntityDataService.svc/CaseFileCollection?$filter=Case/Id eq guid'1f779f3d-60b4-4a2c-a4b4-43e2cf89d8f0'

я узнаю ид файла. Но нет. Ид тут другой. И ID схемы CaseFileCollection Тоже у меня нет.

Вопрос. 

Где я должен получить эти ИД ? 

По ссылке написано всё верно. Первый Id — для схемы CaseFile посмотрите в дизайнере. Второй — Id нужной записи в этой таблице, которую Вы получите по результату CaseFileCollection.

Да, все верно. Я не туда смотрел. Спасибо.

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

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



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



Заходим в деталь карточки раздела, добавляя туда запись отрабатывает БП который меняет значение поля в 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…;

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

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

Как получить доступ к элементам раздела, который создал сам.

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

Стоит задача сделать поле(типа справчоник) в детали раздела "новый" нередактируемым. А я все перерыл не могу понять как это делать. 

Нравится

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

1. Уточните, каким образом Вы создавали раздел - через мастер или вручную?

2. Не совсем понятно, где не отображаются созданные вами разделы. Если есть возможность, добавьте скриншоты.

3. Вашу задачу (сделать поле детали нередактируемым) можно через мастер детали, который вызывается из меню соответствующей детали из пользовательского интерфейса, но для этого Вам нужно обладать соответствующими правами, например, системного администратора.

1. Уточните, каким образом Вы создавали раздел - через мастер или вручную?

2. Не совсем понятно, где не отображаются созданные вами разделы. Если есть возможность, добавьте скриншоты.

3. Вашу задачу (сделать поле детали нередактируемым) можно через мастер детали, который вызывается из меню соответствующей детали из пользовательского интерфейса, но для этого Вам нужно обладать соответствующими правами, например, системного администратора.

Алла Савельева,спасибо за ответ, но уже разобрался. Просто работаю со схемами раздела

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

Добрый день, нужна помощь в усовершенствовании множественного выбора в иерархии.

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

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

Нравится

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

У всех у них есть ParentId, который равен вашей выделенной записи, при клике по чекбоксу делайте выборку по ParentId, а потом ID этих записей добавьте в SelectedRows, пример небольшой:

 

var rowKeys = gridData.getKeys();
var selectedRows = this.get("SelectedRows");
this.set("SelectedRows", this.Ext.Array.merge(selectedRows, rowKeys));

 

У всех у них есть ParentId, который равен вашей выделенной записи, при клике по чекбоксу делайте выборку по ParentId, а потом ID этих записей добавьте в SelectedRows, пример небольшой:

 

var rowKeys = gridData.getKeys();
var selectedRows = this.get("SelectedRows");
this.set("SelectedRows", this.Ext.Array.merge(selectedRows, rowKeys));

 

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

А какой самый первый метод отрабатывает при выборе записи? Где добавляется выбранный элемент в SelectedRows?

Alex Zaslavsky,

не помню, нужно посмотреть, попробуйте глянуть isAnySelected

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

Как реализовать следующую задачу.

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

Нравится

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

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

Или в конфигурации дляобъекта раздела Шашлыкчные добавьте поле типа справоник и укажите тип справочника Контакты, назовите это поле Шашлычник. Опубликуйте ваши изменения. Затем в мастере настройки раздела вытащите это поле на страницу раздела! 

 

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

Или в конфигурации дляобъекта раздела Шашлыкчные добавьте поле типа справоник и укажите тип справочника Контакты, назовите это поле Шашлычник. Опубликуйте ваши изменения. Затем в мастере настройки раздела вытащите это поле на страницу раздела! 

 

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

Добрый день!

Создал шаблон email, при отправке коммерческого предложения данный шаблон подтягивается в следующем виде:

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

При нажатии на одну из ссылок (например, Тест) клиенту автоматически открывается ответное письмо по следующему шаблону:

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

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

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

P.S. Вообще в принципе стоит цель создания в bpm sales функционала, подобному оценке удовлетворенности по шкале, который сейчас есть bpm service.

Нравится

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

Это обычная гиперссылка на URL «mailto:test@example.com?subject=sss&body=bbb», её обрабатывает выбранный на компьютере почтовый клиент. Формировать гиперссылки с макросами можно аналогично другим шаблонам со ссылкой (например, письмам с уведомлениями по инцидентам).

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

Оценка сделана без всяких писем, там дёргается веб-сервис, доступный извне без авторизации.

 

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

Александр, большое количество шаблонов перелопатил, но к сожалению, так и не понял, как формировать гиперссылку с макросом. Не могли бы вы написать пример?

В маркете есть БП, который для задач формирует письма-уведомления с гиперссылкой на их карточку. В стандартной версии нашёл подобный «Шаблон уведомления о новой визе счета (US)».

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

Понял, спасибо.

Это обычная гиперссылка на URL «mailto:test@example.com?subject=sss&body=bbb»

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

Или вообще, в принципе, при нажатии на ссылку клиентом происходили изменения полей в системе?

Если нужно делать ссылку, доступную пользователям без регистрации, при нажатии на которую срабатывает какая-то логика, это делается при помощи анонимного веб-сервиса.

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

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

Забиндил обязательность поля "Название" под функцию isEditMode(), поле визуально выглядит будто оно обязательное, но я могу легко удалить название и сохранить запись... Кто-нибудь подскажет почему так происходит?

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

 

 

 

 

 

 

 

 

 

 

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

Нравится

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

Чтобы проверка на обязательность работала, создайте атрибут для этого поля и укажите для него свойство "IsRequired", а из свойств поля уберите.

Но с таким подходом также есть проблемы, которые в последних версиях так и не решены - посмотрите этот пост.

Скорее всего Вашу задачу нужно решать через валидацию.

Чтобы проверка на обязательность работала, создайте атрибут для этого поля и укажите для него свойство "IsRequired", а из свойств поля уберите.

Но с таким подходом также есть проблемы, которые в последних версиях так и не решены - посмотрите этот пост.

Скорее всего Вашу задачу нужно решать через валидацию.

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

действительно, большое спасибо, помогло.

Alex Zaslavsky,

Обязательно посмотрите пост с описанием возможных проблем при такой реализации.

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

спасибо, обязательно.

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

Можно ли делать настройку моб приложения? Например: нужно наложить доп фильтр на реестр контрагента, это возможно?

Нравится

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

Виталий, здравствуйте!

Есть базовый функционал фильтров в мобильном приложении - https://academy.terrasoft.ru/documents/mobile/7-13/filtry-v-mobilnom-pr…

Все доработки, которые нет возможности настроить через мастер мобильного приложения происходят через SDK - https://academy.terrasoft.ru/documents/technic-sdkmob/7-12/dokumentaciy…

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