Добрый день.

Стоит задача добавить булево поле в карточку Очереди (SupervisorSingleWindowPageV2).
Добавление произвожу через мастер раздела.
Предварительно в свойствах своего пакета добавляю на вкладке "Завист от пакетов" добавляю:
OperatorSingleWindow,
OperatorCustomerEngagementCenter,
ServiceEnterpriseDefSettings
CustomerCenterDefSettings.

Булево поле создаётся и отображается в карточке. В пакете создан замещающий объект Queue, замещающая схема карточки (SupervisorSingleWindowPageV2) и замещающая схема раздела(SupervisorSingleWindowSectionV2).

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

Если удаляю замещающие объекты/схемы, то сохранение новой очереди происходит без проблем.
Что делаю не так?

В Академии по запросу "Обработка обращений из очереди в Едином окне" проблематично что-либо найти, кроме описания самого раздела.

Нравится

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

Автора такого user-friendly уведомления усадить бы туда кнопку "Подробнее" вставить да редирект на страницу сделать... :smile:
В пожелания, пожалуйста :cool:

Игорь, добрый день!!
Проблема, скорее всего, не в вашем поле. Для того, чтобы процесс можно было использовать в чоереди, у него должно быть добавлено два параметра глобальных: queueItemId и entityRecordId. Оба с типом "Unique identifier". В первое передается Id записи из очереди (именно объекта "Элемент очереди"), а во второй - Id записи образения/заказа/конаткта и т.д. - самого наполнения очереди.

В последних билдах в сообщении именно это и говорится. А ранее было вот такое непонятное.

Юлия, здравствуйте!
В том то и дело, что без замещённых схем запись в разделе "очереди" прекрасно сохраняется.
Пробовал на разных билдах, ситуация аналогичная

Тогда без отладки - никак. Попробуйте отладиться и запостить сюда результаты, если не удастся найти ошибку самостоятельно.

Как это сделать на on-demand?

Мне кажется, что до момента вызова самого БП, вся логика происходит на клиенте, а его можно отладить и в облаке. https://academy.terrasoft.ru/documents/technic-sdk/7-8-0/otladka-klient….
Или вы проверяли и там сразу идет запрос ан сервер?

Но чем вызвано подобное поведение, ведь я наследовался от всех необходимых пакетов?

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

Добрый день.

Стоит следующая задача:
По БП после сохранения карточки лида необходимо открыть карточку продажи. Использую стандартный элемент БП "Открыть страницу редактирования".
Столкнулся с проблемой, что страница продажи не открывается, если предыдущая по БП карточка Лида открыта тоже с использованием элемента БП "Открыть страницу редактирования".

В связи с этим вопрос:
Возможно ли открыть карточку редактирования без использования стандартный элемент БП "Открыть страницу редактирования"

И ещё один вопрос:
Можно ли отключить создание активности при использовании элемента "Открыть страницу редактирования"?

Нравится

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

Добрый день!

1. Элемент “Страница редактирования” считается выполненным после сохранения карточки. Т.е. если в процессе последовательно стоят 2 элемента “Страница редактирования” – для того, чтобы открылась вторая страница пользователь должен нажать кнопку [Сохранить] на первой странице.
По другому страницу редактирования открыть не получится.

2. Элементы Вопрос пользователю/Страница редактирования/Автогенерируемая страница при выполнении создают служебную активность, которая выполняет переадресацию пользователя на целевую страницу. Это базовый механизм работы элементов.

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

Добрый день.
Возникла следующая ошибка при фиксации доработок в хранилище.
Ранее фиксировал в этот репозиторий без проблем.
Доступ к рабочей копии BPMOnline открыт для всех пользователей.
Обновление пакета / Восстановление из хранилища/ Установка пакета происходят без ошибок.
Кто подскажет, что за проблема?

Нравится

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

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

Попробуйте обновить пакет _RcGorizont

"Сергей Кy6риш" написал:Здравствуйте, Игорь.

Попробуйте обновить пакет _RcGorizont

Делал не однократно. Не помогло

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

Добрый день. Необходимо в раздел Орг.структура добавить текстовое поле.
Добавил его в SysAdminUnit, VwSysadminUnit. Добавил элемент в diff.
Но при открытии раздела в консоли появляются следующие ошибки:
http://joxi.ru/Grqv86vTK3akmz
Подскажите, что упустил.

Нравится

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

Здравствуйте. Судя по первой ошибке запрос не может найти колонку UsrChannelSlack и вторую, которую вы замазали. Если вы не ошиблись с названием колонки в замещенной клиентской схеме, то, возможно, проблема в фильтрах или вы забыли очистить кеш браузера.
Возможно, банально забыли сохранить замещенные объекты (посмотрите наличие колонок в таблицах БД)
Сложно ответить без примера исходных кодов

И в догонку. Судя по URL Вы ведете разработку в продуктовом приложении. Это грубейшая ошибка. Вам следует развернуть отдельное приложение для разработки и для тестирования. Или хотя-бы создать отдельную конфигурацию (workspace)

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

"Симута Роман Русланович" написал:Возможно, банально забыли сохранить замещенные объекты (посмотрите наличие колонок в таблицах БД)

+

И это, я понимаю когда номера машин на фото замазывают, но уж название поля - это шикарно :cool: при этом спалили логин и сайт...

Коллеги, все приведённые вами предположения были неоднократно проверенны мной до создания обращения.
Также мой пакет наследуется от всех пакетов, где есть схемы SysadminUnit.
Что касается ведения разработки на продуктивной среде, то база ещё не в промышленной эксплуатации и в случае проблем откат до базовой конфигурации не представляет проблем.

Может у кого есть кейс по добавлению поля в орг.структуру?
Буду очень благодарен.

"Коновалов Игорь" написал:И это, я понимаю когда номера машин на фото замазывают, но уж название поля - это шикарно при этом спалили логин и сайт...

А вы, Александр, ещё и внимание на этом заострили :lol:

в ранних сборках 7.8 была проблема с одинаковыми заголовками замещенных схем и соответственно, с порядком наследования. Например, для базового объекта было три разных схемы в одном пакете с одинаковыми заголовками. Поэтому после создания пользовательского объекта с родителем базовым объектом, надо было проверять из того ли пакета и тот ли это базовый объект.
В релизе 7.8.1681 проблема точно исправлена. в более ранних надо проверять

Роман, а вообще есть ли особенности при добавлении пользовательского поля в орг.структуру (SysAdminUnitPageV2)?
Я, например, заметил. что в нём не указывается entitySchema.

у меня Версия 7.8.0.1434

Схема объекта указана в "Базовая схема страницы редактирования раздела "Роли"" (SysAdminUnitRoleBasePageV2) от которой наследуется Схема страницы редактирования раздела "Организационные роли" (SysAdminUnitPageV2)

define("SysAdminUnitRoleBasePageV2", ["ConfigurationConstants", "SysAdminUnitRoleBasePageV2Resources"],
	function(ConfigurationConstants, resources) {
		return {
			entitySchemaName: "VwSysAdminUnit"....

т.к. схема объекта - VwSysAdminUnit, то именно ее и следует замещать, и в замещающей схеме добавить новую колонку, которую необходимо привязать к новому полю в тоже замещающей клиентской схеме SysAdminUnitPageV2
Никаких особых особенностей по идее быть не должно
единственное что надо внимательно смотреть для 7.8 какую схему из какого пакета в результате заместили :)

Я так понимаю, что моя проблема заключается в том, что я добавил поле в VwSysAdminUnit, а в сам select VwSysAdminUnit его не добавил.
Есть ли пример проведения данной операции для базы on-demand?

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

очень приблизительный путь решения (и я очень не уверен в правильности)
создать в бд в таблице SysAdminUnit нужную колонку
создать в бд в представлении VwSysAdminUnit нужную колонку и связать с таблицей SysAdminUnit
может еще что нужно сделать

НО ДЕЛАТЬ ЭТО НА ТЕСТОВОЙ БД, ни в коем случае не на рабочей
для базы on-demand это сделать вряд-ли получится из-за требований по безопасности
нужно разворачиваться локально

"Коновалов Игорь" написал:Есть ли пример проведения данной операции для базы on-demand?

http://www.community.terrasoft.ru/blogs/11961
установите и гоняйте любые запросы

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

Добрый день коллеги!

Подскажите, хочу добавить свою логику после того как отрендерятся все виджеты на текущей дешбоарде.
Но не очень хочеться переопредилять базовые модули, переопределил только один PortalMainPageBuilder. Это все происходит на главной странице портала, как можно отловить момент загрузки всех виджетов, что бы я потом мог добавить свою логику ?

Нравится

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

Добрый день.

Загрузка вложенных модулей дашборда запускается через sandbox в методе BaseDashboardViewModel.loadNestedModule() (пакет Platform).
Далее в методе BaseNestedModule.render() (пакет NUI) выполняется отрисовка каждого модуля и в конце вызывается метод представления onRender().

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

Такие доработки можно реализовать с помощью базового механизма обмена сообщениями sandbox.

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

Добрый день, коллеги!
Подскажите пожалуйста, в версии 7.8 видел я на стартовой странице портала виджет, а на нем была кнопка "GO TO" , но по требованиям клиента, я изменил эту страницу, и потерял таким образом этот виджет. Подскажите пожалуйста кто знает, что это за модуль используется для такого виджета ?

Нравится

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

Добрый день.
Необходимо для нового раздела с тремя типами записей добавить для каждого типа мини-страницу.
Делаю по инструкции: https://academy.terrasoft.ru/documents/technic-sdk/7-8-0/sozdanie-mini-k...
Создал "Схему модели представления карточки". Унаследовался от BaseMiniPage.
Для каждой страницы редактирования раздела в SysModuleEdit добавил значение MiniPageSchemaUId
Добавил модуль со стилями.
В итоге при добавлении записи открывается стандартная страница редактирования.

Подскажите, что не так?

Нравится

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

[quote="Мария Ватулина"]Вот аналогичная тема - http://www.community.terrasoft.ru/forum/topic/16310[/quote]

Мария, спасибо, но в этой теме ответа на мой вопрос не получил.
Меня интересует именно вызов разных мини-страниц в зависимости от выбранного типа в списке при нажатии на кнопку "Добавить".
Кстати, раньше в разделе "Активности" был выбор типа новой записи (при нажатии на "Добавить" в реестре), сейчас этого выбора нет (только "Добавить задачу"). Но что делать, если содержание мини-страниц должно формироваться в зависимости от типа?

Игорь, предположительно, должно быть в мастере настроено несколько страниц. Затем для каждого типа должна отдельно зарегестирована в БД схема (своя страница редактирования) и соотвественная для каждого MiniPageSchemaUId. После этого очистить кэш и проверрить работу. Попробуйте, также, отладить код.

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

Игорь, статья в Академии
https://academy.terrasoft.ru/documents/technic-sdk/7-8-0/sozdanie-mini-…
описывает создание мини-карточки, которая появляется при наведении курсора на ссылку на запись раздела. В примере это запись раздела "База знаний".
Но это не тот тип миникарточки, который появляется при создании новой записи раздела

Встречный вопрос, как привязать к кнопке "Добавить" мини-карточку вместо обычной?
Смотрю ActivitySectionV2, но признаков открытия minPage кроме как вызова метода this.openAddMiniPage в методе onSelectionKeyPress не нашёл, однако при нажатии на Добавить задачу debugger в этот метод не заходит.

Точной последовательности создания миникарточки, к сожалению, Вам сказать не могу пока.
Однако, укажу откуда начать
посмотрите следующий метод в BaseSectionV2
addRecord: function(typeColumnValue) {
...
if (this.hasAddMiniPage(typeColumnValue)) {
this.openAddMiniPage({
entitySchemaName: this.entitySchemaName,
valuePairs: this.getAddMiniPageDefaultValues(typeColumnValue)
});
} else {
this.openCardInChain({...
}
При создании записи в разделе, если к нему привязана миникарточка, то отладчик останавливается на точке останова, установленной в this.openAddMiniPage
А далее надо смотреть

В BaseSectionV2 в методе addRecord происходит проверка наличия мини-карточки по типу

this.hasAddMiniPage(typeColumnValue)

, где в свою очередь проверяется miniPage.hasAddMiniPage. Это свойство на данный момент у меня undefind.
Вопрос: Где устанавливается это свойство для той или иной страницы редактирования?

p.s.: Я докопал до BaseSchemaViewModel.initEditPages, где формируется конфигурация мини-страницы:

MiniPage: {
  schemaName: editPage.miniPageSchema,
  hasAddMiniPage: editPage.hasAddMiniPage
},

, но где присваивается значение editPage.hasAddMiniPage так и не нашёл.

hasAddMiniPage - всего лишь атрибут который отображает есть ли для данного раздела мини-карточка добавления записи
При глобальном поиске по приложению (F12 затем Ctrl+Shift+F) по слову miniPageSchema или hasAddMiniPage
в первых трех строках отображаются объекты Terrasoft.Configuration с идентификаторами схем миникарточек, привязанных к разным разделам. Скорее всего информация об этом занесена непосредственно в БД. Можно покопать в эту сторону

"Симута Роман Русланович" написал:hasAddMiniPage - всего лишь атрибут который отображает есть ли для данного раздела мини-карточка добавления записи
При глобальном поиске по приложению (F12 затем Ctrl+Shift+F) по слову miniPageSchema или hasAddMiniPage
в первых трех строках отображаются объекты Terrasoft.Configuration с идентификаторами схем миникарточек, привязанных к разным разделам. Скорее всего информация об этом занесена непосредственно в БД. Можно покопать в эту сторону

Тоже искал глобальным поиском + режим отладки раздела Активности (здесь MiniPage.hasAddMiniPage = true)
Но у меня MiniPage.hasAddMiniPage передаётся Undefined, хотя название схемы мини-карточки передаётся и для соответствующих записей в таблице SysModuleEdit заполнено поле MiniPageSchemaUId.

В какой таблице искать hasAddMiniPage?

В таблицах SysModuleEdit, SysModule, SysModuleEntity, SysSchema такого поля нет.
P.S.: Вообще было бы прекрасно, если бы в академии появилась статья по добавлению мини-карточки в раздел к кнопке "Добавить".

Игорь, свойство hasAddMiniPage определено в миксине MiniPageUtilities.

Миксин подключается к модели представления в классе BaseSchemaViewModel реализованном в одноименном модуле. В этом же классе есть метод initEditPages, в котором заполняется коллекция моделей представления для каждой entitySchema и там же заполняютя значениями свойства hasAddMiniPage (поищите глобальным поиском)

Поскольку вы создали новый раздел, то возможно, что это свойство у вас не инициализируется
посмотрите в глобальном объекте Terrasoft.configuration.EntityStructure (просто наберите в консоли)
пример для объекта Account - во вложении
посмотрите в объекте вашего раздела

Статья по миникарточке добавления в ближайших время будет написана.

Да Роман, это я уже находил и писал выше.
Но как всё же проинициализировать свойство editPage.hasAddMiniPage (НЕ miniPage.hasAddMiniPage)?

Узнал. Нужно добавить системную настройку с кодом Has[ИмяСущностиРаздела]MiniPageAddMode, например, как для раздела HasAccountMiniPageAddMode
Это системная настройка булевского типа, из нее и прилетает значение свойства hasAddMiniPage в Terrasoft.configuration.EntityStructure

Да, Роман! То, что надо. Спасибо.

В продолжении темы, страница выводится, НО одна для всех типов.
Смотрю по коду и вижу, что в

 this.openAddMiniPage({
   entitySchemaName: this.entitySchemaName,
   valuePairs: this.getAddMiniPageDefaultValues(typeColumnValue)
});

необходимо передать ещё один параметр miniPageSchemaName, передаю.

Далее в MiniPageContainerViewModel.setSchemaParametersInfo
в строке

var schemaName = this.getSchemaName(entitySchemaName) || config.miniPageSchemaName;

Т.о. в конфигурацию мини-карточки попадает название схемы первой зарегистрированной мини-карточки, хранящаяся в Terrasoft.ModuleUtils.moduleStructure[entitySchemaName].miniPageSchema, а не переданное в параметре miniPageSchemaName значение. И как следствие выводится не та мини-карточка.
Вопрос: Не было ли целесообразней поменять местами this.getSchemaName(entitySchemaName) и config.miniPageSchemaName в строке

var schemaName = this.getSchemaName(entitySchemaName) || config.miniPageSchemaName;

или передавать в this.getSchemaName(entitySchemaName) вторым аргументом тип создаваемой записи?

Решил эту проблему подменой значения Terrasoft.ModuleUtils.moduleStructure[entitySchemaName].miniPageSchema на нужное мне.
Но как-то это костыльно...
Если у кого есть другие варианты реализации, буду благодарен за подсказку

И ещё проблема, после сохранения и закрытия мини-карточки не происходит обновление реестра раздела, подскажите, что пропустил.

Добавьте в схеме раздела

        // Обновление данных реестра.
        this.reloadGridData();

Пример можно глянуть здесь
https://academy.terrasoft.ru/documents/technic-sdk/7-8/dataservice-sozd…

А какой механизм реализован в р. Активности и р. Лиды? Ведь там реестр обновляется.

Честно говоря, не знаю. Надо смотреть :)

А зачем тогда изобретать велосипед с reloadGridData?
Тоже, к сожалению, концов не нашёл в р. Активности и р. Лиды.

Вопрос решил. В sectionV2 подписался на сообщение ReloadDashboardItems.

 subscribeSandboxEvents: function() {
                this.callParent(arguments);
                this.sandbox.subscribe("ReloadDashboardItems", function(){
                    this.reloadGridData()
                }, this);
            }
Показать все комментарии

Здравствуйте.
Стоит задача сохранить карточку Лида при нажатии на кнопку "Завершить" активности в 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

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

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

Добрый день.
Стоит задача распаковать архив 7z с файлами и содержимое файлов записать в соответствующие таблицы BPMOnline 7.8
Казалось бы тривиальная задача, но всё осложняется тем, что продуктивная среда клиента развёрнута на on-demand и соответственно к файловой системе сервера доступа нет. Можно было бы воспользоваться вкладкой "Внешние сборки", но библиотека 7zip.dll написана на С++ и её подключить не представляется возможным, т.к. можно добавлять только dll-ки, написанные на C#.

Может кто сталкивался с такой задачей, а именно распаковка архива с несколькими файлами из потока?

Сам я смотрю в сторону библиотеки SevenZipSharp, а точнее класса SevenZip.Compression.LZMA.Decoder и SevenZipHelper.cs. Но пока при выполнении метода SevenZipHelper.Decompress(byteArray) получаю ошибку Data Error на шаге
decoder.Code(newInStream, newOutStream, compressedSize, outSize, null);

Буду очень благодарен за помощь. Спасибо

Нравится

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

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

Если Вам необходимо добавить какие-либо библиотеки на облачный сервер, это можно сделать, обратившись в техническую поддержку с данной просьбой.

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

Загружаться по ссылке в поток.

При попытке загрузить библиотеку 7z.dll из файловой системы BPMOnline выдаёт следующую ошибку:

Инициализатор типа "SevenZip.SevenZipLibraryManager" выдал исключение. ---> System.ArgumentException: Путь имеет недопустимую форму.

Библиотека лежит в Terrasoft.WebApp/bin/. Доступы к библиотеке для пользователя IIS_IUSRS открыт. Как мне получить доступ к dll-файлам из файловой системы?

В VisualStudio всё хорошо. Ошибка возникает только в BPMOnlline.

Здравствуйте.
Подключить к BPM’online можно только .NET-библиотеки.
Те, что написаны на С++, просто так не присоединить, нужно писать .NET-обёртки.

Что касается опыта решения задачи с распаковкой из *.7z не подскажу, к сожалению. Могу только рекомендовать поиск решения в открытых источниках.

"Александр Зубков" написал:Здравствуйте.
Подключить к BPM’online можно только .NET-библиотеки.
Те, что написаны на С++, просто так не присоединить, нужно писать .NET-обёртки.

Да, Александр, об этом я и писал в топике этой темы.

"Александр Зубков" написал:Что касается опыта решения задачи с распаковкой из *.7z не подскажу, к сожалению. Могу только рекомендовать поиск решения в открытых источниках.

В том то и дело, что если использовать чистый проект в visual Studio, то всё прекрасно работает, проблема возникает при переносе кода в "Исходный код" BpmOnline.

Вопрос остаётся открытый. Как распаковать из BPMOnline архив 7Zip?
Вариант распаковки в каталог также не работает

 var processStartInfo = new ProcessStartInfo();
 processStartInfo.FileName = @"C:\Program Files\7-Zip\7z.exe";
 processStartInfo.Arguments = @"e C:\test.7z";
 Process.Start(processStartInfo);

Возможно, что сайт, который находится в облаке не понимаем локальный путь @"C:\Program Files\7-Zip\7z.exe"

В данном случае нужно разворачивать локально сайт и проводить отладку - https://academy.terrasoft.ru/documents/technic-sdk/7-7-0/otladka-server…

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

Добрый день.
Произвёл настройку согласно статье в академии:
https://academy.terrasoft.ru/documents/technic-sdk/7-8-0/rabota-s-server...
Есть ряд вопросов:
1. После компиляции в каталоге Pkg\Название пакета>\Schemas\Название исходного кода схемы> не появился файл исходного кода схемы с расширением .cs
2. После настройки при входе в BPMOnline загружается WorkspaceExplorerModule.aspx (конфигурация), а не клиентская часть BPMOnline.
3. Каким образом произвести запуск для отладки интересующего кода?

Нравится

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

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

1) В указанной директории файл с исходным кодом появляется при обновлении из svn, а не после компиляции.
2) Да, до первой успешной компиляции так и будет. Альтернатива – выполнить команду Update Workspace Solution.
3) В целом, в статье описано как выполнять отладку.

1. обновление из SVN тоже делал. Появились json-файлы, но cs-файлов нет.
Необходимы ли необходимые настройки Terrasoft.WebApp\Web.config? т.к. у меня в нём изменены CompilerSourcesTempFolderPath, IncludeDebugInformation, ExtractAllCompilerSources, SeparatedJsFiles, как это требовалось до версии 7.8.
2. Результат тот же. WorkspaceExplorerModule. Компилировался через конфигурацию и Update Workspace Solution.

У меня меня 7.8.0.1005_CustomerCenter. Может указанное поведение связано с сырым билдом

Так же выявлено, что при фиксации в хранилище не фиксируются библиотеки, добавленные на вкладке "Внешние сборки" (Ошибка: "Значение аргумента path не может быть пустым или неопределённым"), хотя в рабочую копию сохраняются (папка Assemblies). При обновлении пакета из хранилища содержимое вкладки "Внешние сборки" затирается.

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

"Сергей Кy6риш" написал:Для устранения ошибки необходимо выключить разработку в файловой системе, добавить библиотеку на вкладку, после зафиксировать в хранилище, и включить разработку файловой системы, или дождаться релизную сборку выше 7.8.0.1134

Вы имеете ввиду:

<fileDesignMode enabled="false" UseIDEForCompilation="false" />

?
Когда ожидать новый билд?
И есть ли решение по комментарию #2: http://www.community.terrasoft.ru/forum/topic/19170#comment-63800?

Игорь, прошу указать настройки комaнд Update Workspace Solution (VS) и настройки defPackagesWorkingCopyPath (ConnectionStrings.config).
По поводу новой сборки нужно уточнять в службе поддержки.

Настройки аналогичные статье.
Рабочая копия выгружается при обновлении из хранилища в
<путь к сайту>\Terrasoft.WebApp\Terrasoft.Configuration\Pkg\

Ситуация с cs-файлами в рабочей копии оказалась аналогичной ситуации с фиксацией dll файлов.

Отключил флаги

<fileDesignMode enabled="false" UseIDEForCompilation="false" />

и cs-файлы появились в рабочей копии после очередной фиксации в репозиторий

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

Тут вы не совсем правы. Все что описано в статье работает. Но. Функциональность, описанная в статье, проверялась на "чистой" сборке с настройками по умолчанию. Попробуйте вернуть все настройки в исходное состояние и просто пройтись по последовательности, предложенной в статье.
https://academy.terrasoft.ru/documents/technic-sdk/7-8-0/rabota-s-servernym-kodom-v-visual-studio

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

Еще рекомендую ознакомиться с записью вебинара
"Новые возможности bpm'online 7 8 - Для разработчиков"
https://www.youtube.com/watch?v=fMsCzcW_MRY

В первой половине этого вебинара подробно рассматривается вопрос разработки с VisualStudio в версии 7.8

"Симута Роман Русланович" написал:Тут вы не совсем правы. Все что описано в статье работает. Но. Функциональность, описанная в статье, проверялась на "чистой" сборке с настройками по умолчанию. Попробуйте вернуть все настройки в исходное состояние и просто пройтись по последовательности, предложенной в статье.
https://academy.terrasoft.ru/documents/technic-sdk/7-8-0/rabota-s-serve…

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

Ради чистоты эксперимента Подложил стандартный web.config в Terrasoft.WebApp (единственное исправление UseSVN = true)
Внёс исправления в строку:

<fileDesignMode enabled="true" UseIDEForCompilation="true" />

1. После фиксации Исходного кода в хранилище, его Cs-файл не появился в рабочей копии (<путь к сайту>\Terrasoft.WebApp\Terrasoft.Configuration\Pkg\)
2. После "компилировать всё" в конфигурации и повторной авторизации в системе загружается WorkspaceExplorerModule а не клиентская часть.

Для чистоты эксперимента :)
1. Развернул сборку 7.8.0.1194_SalesEnterprise в папку C:\bpm78cc (настроил бд и тп.п). Проверил на работоспособность, зашел под супервайзором. Работает.
2. В ConnectionStrings.config установил

<add name="defPackagesWorkingCopyPath" connectionString="C:\bpm78cc\Terrasoft.WebApp\Terrasoft.Configuration\Pkg" />

3. В web.config в Terrasoft.WebApp установил UseSVN = true

4. Подключил в дизайнере конфигураций SVN хранилище

5. Создал пользовательский пакет, привязал к хранилищу, в пакете создал схему с исходным кодом

6. Пакет можно зафиксировать в хранилище, можно нет. Желательно зафиксировать, тогда после выгрузки на диск, с содержимым пакета можно работать через SVN-клиент

7. Для папки C:\bpm78cc\Terrasoft.WebApp\Terrasoft.Configuration дал полный доступ пользователю IIS_IUSRS локального компьютера (MyPC\IIS_IUSRS)

7. Пока не настроены команды WorkspaceConsole, то саму VisualStudio использовать смысла пока нет. Нужно проверить функциональность выгрузки схем из бд на диск. Поэтому включил только fileDesignMode

<fileDesignMode enabled="true" UseIDEForCompilation="false" />

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

8. Перезагрузил страницу с открытым дизайнером конфигурации. Появилась кнопка "Обновить проект Visual Studio". Нажал.

В папке C:\bpm78cc\Terrasoft.WebApp\Terrasoft.Configuration\Pkg появилась новая папка UsrServices, содержимое которой является содержимым пакета, созданного в п.5. Сама схема появилась во вложенном каталоге по пути C:\bpm78cc\Terrasoft.WebApp\Terrasoft.Configuration\Pkg\UsrServices\Schemas\UsrGreetingService\UsrGreetingService.cs

также в каталоге C:\bpm78cc\Terrasoft.WebApp\Terrasoft.Configuration\Autogenerated\Src появились автосгенерированные схемы из стандартных пакетов и схема UsrGreetingServiceSchema.UsrServices.cs

Дальше можно настраивать студию и работать. Но нужно не забыть включить UseIDEForCompilation="true" и вызвать команду Build Workspace. После успешной сборки и сайт и служба заработают.

Здравствуйте, с Вашего позволения подниму тему. Потому что не понятен, как, мне кажется, принципиальный момент.
Точно следуя статье на сайте (https://academy.terrasoft.ru/documents/technic-sdk/7-9/rabota-s-servern…) выполнил все действия:
А именно, создал сервис тестовый в конфигурации - проверил - работает.
Исправил ключи конфиг файла - выгрузились файлы с помощью соответствующего пункта Конфигуратора.
Как только ключи были исправлены, сервис стал недоступен - 404. Поведение стало таким http://www.community.terrasoft.ru/forum/topic/24793, то есть, чтобы его вернуть в работоспособное состояние, нужно ключи все вернуть в начальное положение.
Запустил workspaceconsole из VS - библиотека собралась в папку ...Terrasoft.WebApp\Terrasoft.Configuration\bin\ успешно, НО
ни о каком дебаге речи быть уже не могло, потому что сервис стал недоступным. И утверждение, что IIS подхватит эту библиотеку в статье оказалось неверным - установка точки останова и подсоединение к процессу w3p.exe ничего не дало (да и в принципе верно - сервис то 404).
Посмотрел видео по ссылке, мое мнение - бесполезно! У докладчика все подготовительные шаги были УЖЕ выполнены.
Получается замкнутый круг - ключи исправляю - сервис недоступен, ключи возвращаю - сервис доступен, но не отлаживаем.
Роман, прошу указать, что здесь делается не так. Или дополнить статью.
Ведь функционал так и остаётся неработоспособным.

Здравствуйте
Вот сейчас работаю над примером, в котором использую пользовательский сервис. И работаю из VS
Скорее всего, Вы что-то сделали не так
Проверьте, что есть доступ к Terrasoft.Configuration у пользователя IIS_IUSRS локального компьютера (MyPC\IIS_IUSRS)
Создайте схему исходный код в конфигурации (сохранить, опубликовать)

Затем ключи (не забудьте сохранить конфиг)

<fileDesignMode enabled="true" UseIDEForCompilation="true" />

Ключи устанавливать во внешнем конфиге приложения, а не консоли (бывали случаи)

Последовательность работы
1. Из VS запустить команду Tools-UpdateSolution (первый раз)
2. редактируйте код в VS
3. Из VS запустить команду Tools-BuildWorkspace (дождитесь завершения компиляции)

После этого сервис работает, проверяю, например,
http://localhost/bpmonline-7.9.1/0/rest/UsrViewLocalization/Ex02

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