Добрый день. Редакция real-estate 7.7
Интересует следующий момент - можно ли каким нибудь образом на стороне клиента подписаться на события добавления/удаления фотографий?

Цель нашей работы следующая: требуется, что бы фото, которые прикреплены к объектам были видны из сети интернет безо всякой авторизации + для интернет аудитории требуется наложение watermark. Соответственно идея в том, что после того, как фото загружалось / удалялось штатным механизмом запускать свой сервис, который будет например выдирать фото из БД и копировать их к примеру на удаленное хранилище.

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

Про вариант в Odata я знаю, но если все же это делать на стороне terrasoft?

Нравится

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

Петр, в схеме GalleryDetail есть метод onDataLoaded, который вызывается когда мы добавляем картинку в галерею.
В схеме GalleryImageViewModel есть метод onImageDeleteClick, который вызывается при клике на кнопку удаления.
В этих методах можно добавить вызов своего сервиса, который будет расшаривать картинки.

Мария, спасибо, будем пробовать!

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

После обновления до 7.8 страницы редактирования разных типов документа ведут себя странно. При добавлении открывается нужная страница, а при открытии сохраненной записи - всегда базовая (DocumentPageV2). Подскажите как исправить.

Нравится

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

Олег, это скорее частный случай, который требует индивидуального рассмотрения и лучше с ним обратится в техническую поддержку, если не хотите светить сайтом и доступом к нему здесь. Их адрес support@terrasoft.ru

Почему то при обновлении удалилась колонка TypeColumnValue...

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

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

Используется bpm'online comerce 7.6

Я нашел метод обработки события выбора валюты onCurrencyMenuItemClick, но я думаю он мне не поможет. Подскажите пожалуйста что мне делать или в каком направлении "копать"???

Нравится

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

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

А почему не реализовать логику расчета значения после добавления/изменения/удаления записи на детали?

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

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

В базовой версии сумма хранится в поле "Итого, б.в". Сумма пересчитывается по курсу, указанному в справочнике "Курсы валют", к валюте, указанной в системной настройке "Валюта по умолчанию".

Здравствуйте, возвращаюсь к данному вопросу.

Есть какое то свойство или метод который присваивает и рассчитывает значение по умолчанию??

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

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

Честно говоря, я не совсем понимаю, почему возник данный вопрос - в статье нет упоминаний системных настроек.
Системные настройки хранятся в объекте SysSettingsValue. Вы можете изменить системную настройку запросом ESQ. В системе для некоторых объектов, например, счет и заказ используются системные настройки. В результате добавления новой записи значение системной настройки увеличивается.

По поводу системной настройки - https://academy.terrasoft.ru/documents/sales-commerce/7-6-0/spravochnik… (на всякий случай сделал снимок)

Я зашел в описание системных настроек - было упоминание о этой настройке, сейчас она почему то пропала.
В объекте SysSettingsValue нету такой настройки, настройка базовой валюты находиться в объекте SysSettings.

Сергей, не совсем так.

Есть две таблицы:
1) SysSettings
2) SysSettingsValue

Выполните запрос для получения значения системной настройки:

select * from SysSettingsValue where SysSettingsId = (select Id from SysSettings where Code = "PrimaryCurrency")

Спасибо большое за подсказку. Стало ясно как работать с SysSettingsValue. А в клиентских схемах еще проще.

Что касается вопроса автоматизации определения по стране курса валют, допустим я смогу пересчитать
для заданной страны, заданной валюты и по курсу все нужные мне поля, как мне поменять значение валюты для каждого поля и перерисовать, что бы label соответствовали валюте данной страны указанной в заказе?

Возможно вам поможет
https://academy.terrasoft.ru/documents/technic-sdk/7-8-0/dobavlenie-mul…
Статья написана еще для 7.7, не знаю как применимо к 7.6

Насчет версии в 7.6 реализованы модули MoneyModule, MultiCurrencyEdit, MultiCurrencyEditUtilities.

Немножко обманул
пример есть и в 7.6
https://academy.terrasoft.ru/documents/technic-sdk/7-6-0/kak-dobavit-mu…

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

Необходимо из клиентского модуля выполнить процесс и чтоб он вернул, например, коллекцию значений.
Серверный процесс, должен сделать select к сторонней базе, и вернуть то что попало в select.
Задание-сценарий - это функция типа bool. То есть она не сможет возвратить коллекцию.

Как быть?
Спасибо!

Нравится

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

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

Пользователь находится в интерфейсе bpm'online и запускает действием процесс. В результате процесс должен:
1) Обратиться к стороннему ресурсу
2) Получить ответ в виде параметра bool
3) Обработать его в процессе
4) Вернуть на клиент.

Правильно я понял Вашу задачу?

Все верно, кроме:
Процесс делает select к сторонней БД(находящейся в нашей сети). И получившийся "resultset" надо отправить на клиента.

Здравствуйте,
Вам не нужен бизнес-процесс для выполнения задуманного, вы можете написать свой конфигурационный сервис, и на языке c# написать все что угодно что позволяет язык c#, а делать запросы к БД он явно позволяет.
https://academy.terrasoft.ru/documents/technic-sdk/7-8-0/kak-sozdat-svo…
Функция, написанная в сервисе может вернуть как простой тип, так и сложный, массивы, списки, что угодно, сериализуя это в JSON.
На клиенте вы получите результат:
https://academy.terrasoft.ru/documents/technic-sdk/7-8-0/kak-programmno…
И делаете с ним что хотите.
Все это можно сделать если сервис и вызов сервиса написан в рамках одной Bpmonline. Если вы хотите сервис иметь на одном сайте, а вызов на другом, то можно даже написать сервис доступный для вызова без авторизации, с другого сайта (CORS) но вроде бы для вашей задачи вам это не нужно. Если нужно то на форуме уже где-то была инструкция как это сделать.

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

Здравствуйте, коллеги.

У меня вопрос: в печатной форме есть макрос, например, который форматирует текст. Как его исполнить, в коде сервиса? Это необходимо сделать до конвертации в PDF.

Нравится

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

Вот нашел пример запуска макроса:

using System;
using Word = Microsoft.Office.Interop.Word;
using VBIDE = Microsoft.Vbe.Interop;
 
namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            var wordApp = new Word.Application();
            wordApp.Documents.Add("C:\\1.docm");
            var doc = wordApp.Documents[1];
            VBIDE.VBComponent oModule = doc.VBProject.VBComponents.Add(VBIDE.vbext_ComponentType.vbext_ct_StdModule);
 
            string sCode =
                "public sub VBAMacro()\r\n" +
                "   msgbox \"VBA Macro called\""\r\n"" +

Добрый день!

Ознакомьтесь с этой статьей:
https://academy.terrasoft.ru/documents/technic-sdk/7-6-0/kak-sozdat-svo…

Добрый день, Юрий.

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

По умолчанию в bpm'online нет библиотек, которые используются в предоставленном коде. Их необходимо загрузить дополнительно.

Спасибо, буду пробовать.
По результатам - отпишусь.

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

Здравствуйте.
Стоит задача сохранить карточку Лида при нажатии на кнопку "Завершить" активности в LeadSectionActionsDashboard.
При нажатии кнопки вызывается метод onExecuteButtonClick схемы ActivityDashboardItemViewModel.
Но как отследить нажатие кнопки Завершить из карточки Лида непонятно.
Заранее спасибо за ответ.

Нравится

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

Здравствуйте!
Отследить нажатие кнопки "Завершить" можно попробовать с помощью пробрасывания события.

В методе onExecuteButtonClick добавить публикацию события "SomeEvent" в ActivityDashboardItemViewModel:
this.sandbox.publish("SomeEvent", []);

На странице LeadPageV2 в messages добавить подписку на событие "SomeEvent" :
"SomeEvent": {
mode: Terrasoft.MessageMode.PTP,
direction: Terrasoft.MessageDirectionType.SUBSCRIBE
}

На странице LeadPageV2 в методе subscribeSandboxEvents добавить вызов метода "someMethod" по событию "SomeEvent":
this.sandbox.subscribe("SomeEvent", this.someMethod, this, ...);

На странице LeadPageV2 написать метод "someMethod" , в котором вызывать сохранение Лида.

"Demchenko Olha" написал:В методе onExecuteButtonClick добавить публикацию события "SomeEvent" в ActivityDashboardItemViewModel:
this.sandbox.publish("SomeEvent", []);

Придётся полностью заместить схему ActivityDashboardItemViewModel? Есть ли возможность наследования от неё как от родителя?

Заместил ActivityDashboardItemViewModel. Добавил в метод onExecuteButtonClick публикацию события. В свойствах ActivityDashboardItemViewModel в Messages добавил своё сообщение (Публикация, Адресное). В LeadPageV2 в блок messages добавил сообщение, в метод subscribeSandboxEvents добавил subscriber.
При публикации сообщения возникает ошибка: Message UsrOnExecuteButtonClick is not defined in BaseSchemaModuleV2.
Нужно замещать ещё BaseSchemaModuleV2?

И ещё вопрос, существует ли подробная инструкция по использованию сообщений в BPMOnline7.x?

Добрый день!
Вот поправки в решение:
В схеме ActivityDashboardItemViewModel:
1. Добавить блок messages
messages: {
/**
* @message ReloadDashboardItems
* Reloads dashboard items.
*/
"SomeEvent": {
mode: this.Terrasoft.MessageMode.PTP,
direction: this.Terrasoft.MessageDirectionType.PUBLISH
}
}

2. В методе execute:
execute: function(options) {
this.sandbox.publish(“SomeEvent”, {});
var elementUId = this.get("ProcessElementId");
var recordId = this.get("Id");
var schemaName = this.get("EntitySchemaName");
if (this.isActivity() && this.hasMiniPage(schemaName)) {
this.showMiniPage(options);
} else {
if (elementUId) {
ProcessModuleUtilities.tryShowProcessCard.call(this, elementUId, recordId);
} else {
this.callParent(arguments);
}
}
},

В схеме SectionActionsDashboard:
3. Блок messages:
messages: {
/**
* @message ReloadDashboardItems
* Reloads dashboard items.
*/
"SomeEvent": {
mode: this.Terrasoft.MessageMode.PTP,
direction: this.Terrasoft.MessageDirectionType.SUBSCRIBE
}
}

4. В методе subscribePublisher:
subscribePublisher: function(moduleId) {
this.sandbox.subscribe("GetPropertiesByName", this.onGetPropertiesByName, this, [moduleId]);
this.sandbox.subscribe("SomeEvent", this.someEventExecuted, this);
},

5. Добавить метод someEventExecuted:
someEventExecuted: function() {
this.saveMasterEntity();
}

Мне нужно отслеживать сообщение в карточке Лида, а не в SectionActionsDashboard

Т.к. активность можно Завершить не только по нажатию на кнопку "Завершить", но и при переходе по ссылке активности, поэтому Вам было предложено сделать через SectionActionsDashboard.
Если делать через LeadPageV2 то можно сделать только по клику на кнопку.

Выполнил эти пункты:

"Demchenko Olha" написал:В схеме ActivityDashboardItemViewModel:
1. Добавить блок messages
messages: {
/**
* @message ReloadDashboardItems
* Reloads dashboard items.
*/
"SomeEvent": {
mode: this.Terrasoft.MessageMode.PTP,
direction: this.Terrasoft.MessageDirectionType.PUBLISH
}
}

2. В методе execute:
execute: function(options) {
this.sandbox.publish(“SomeEvent”, {});
var elementUId = this.get("ProcessElementId");
var recordId = this.get("Id");
var schemaName = this.get("EntitySchemaName");
if (this.isActivity() && this.hasMiniPage(schemaName)) {
this.showMiniPage(options);
} else {
if (elementUId) {
ProcessModuleUtilities.tryShowProcessCard.call(this, elementUId, recordId);
} else {
this.callParent(arguments);
}
}
},


По идее после этих настроек ошибка при публикации должна была уйти, но при публикации сообщения ошибка " Message UsrOnExecuteButtonClick is not defined in BaseSchemaModuleV2." опять появляется.

вот мой ActivityDashboardItemViewModel: activitydashboarditemviewmodel.js_.txt

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

define("SectionActionsDashboard", function() {
return {
methods: {
createDashboardItemViewModel: function() {
var viewModel = this.callParent(arguments);
var baseExecute = viewModel.execute;
viewModel.execute = this.someEventExecuted.bind(this, baseExecute, viewModel);
},

someEventExecuted: function(callback, scope) {
this.Ext.callback(callback, scope);
this.saveMasterEntity();
}
},
diff: /**SCHEMA_DIFF*/[]/**SCHEMA_DIFF*/
};
}
);

Заместить необходимо только SectionActionsDashboard

В моём случае, наверно правильнее будет наследовать LeadSectionActionDashboard?
При замещении столкнулся с проблемой, заголовок для LeadSectionActionDashboard как и для SectionActionDashbord равен BaseActionDashboard и не понятно какую из схем наследовать

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

define("SectionActionsDashboard", function() {
return {
methods: {
createDashboardItemViewModel: function() {
var viewModel = this.callParent(arguments);
var baseExecute = viewModel.execute;
viewModel.execute = this.someEventExecuted.bind(this, baseExecute, viewModel);
},

someEventExecuted: function(callback, scope) {
this.Ext.callback(callback, scope);
this.saveMasterEntity();
}
},
diff: /**SCHEMA_DIFF*/[]/**SCHEMA_DIFF*/
};
}
);

Заместить необходимо только SectionActionsDashboard

Спасибо!!! То, что надо!

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

Друзья, подскажите, как в справочнике "Типы средств связи" создать новый "Тип коммуникации". Например есть необходимость создать вложенный список Email (рабочий, личный), как это реализовано в списке "Телефон"

Нравится

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

Здравствуйте, Игорь!

Для создания данного вложенного списка Вам необходимо произвести замещение в базовой схеме детали средств связи [BaseCommunicationDetail].

Зарегистрируйте справочник от объекта "тип коммуникации". Добавьте свой тип. Перепишите метод "getToolsMenuItems" детали ContactCommunicationDetailV2 по аналогии с тем как в этом же методе создаются группы для телефонов и соц. сетей.

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

Добрый день.
Есть справочник с полями(Имя, Описание, Показывать(логическое)).
Подскажите, как сделать фильтр, если Показывать = фолс то не отображать запись в справочнике.
(при нажатии на лупу в всплывающем окне не отображались такие записи)
Прикреплю скриншоты.

Нравится

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

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

Есть два варианта решения:
1) Программированием
2) Распределением прав

Программированием Вы можете создать список элементов для отображения. Пример Вы можете найти в схеме ActivityPageV2 (пакет UIV2). Поле "Результат" фильтруется. Доступные для выбора записи определяются кодом:

				"Result": {
					lookupListConfig: {
						filters: [
							function() {
								var type = this.get("ActivityCategory");
								var filterGroup = Ext.create("Terrasoft.FilterGroup");
								filterGroup.add("ActivityCategory",
									Terrasoft.createColumnFilterWithParameter(
										Terrasoft.ComparisonType.EQUAL,
										"[ActivityCategoryResultEntry:ActivityResult].ActivityCategory",
										type.value));
								filterGroup.add("BusinessProcessOnly",
									Terrasoft.createColumnFilterWithParameter(
										Terrasoft.ComparisonType.EQUAL,
										"BusinessProcessOnly",
										0));
								return filterGroup;
							}
						]
					}
				},

Правами Вы можете включить администрирование по записям для объекта справочника. Далее, Вам необходимо:
1) Определить права для пользователей, чтобы все видели все записи
2) Удалить содержимое справочника
3) Создать значения, которые должны видеть все пользователи
4) Изменить права по умолчанию - раздать права таким образом, чтобы записи не видели пользователи, у которых Пользователь = false (например, добавив пользователей, которые могут видеть записи в функциональную роль)
5) Создать значения, которые должны видеть пользователи, входящие в функциональную роль с четвертого пункта.

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

возможно ли использовать сервис Mandrill совместно с bpmOnline 7.2?

Нравится

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

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

Да и Террасофт уже отошел от Mandrill в сторону рассылок UniOne.

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

возможно ли использовать сервис Mandrill совместно с bpmOnline 7.2?

Нравится

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

Добрый день!

Интеграция с Mandrill была реализована начиная с продукта 7.4, до этого использовалась интеграция с MailChimp. К сожалению, ввиду технологических отличий, на продукте версии 7.2 использовать сервис Mandrill не удастся.
Прошу обратить Ваше внимание, что с версии продукта 7.8 мы перешли на использование email-рассылок в облаке (UniOne).

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