Доброго времени суток.

 

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

Подскажите, пожалуйста, где это делается

Нравится

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

Добрый день!

Перейти в раздел обращений, из него в мастер раздела, далее вкладка "Портал" и нажать кнопку "Редактировать страницу".

А там уже добавлять, изменять поля

Добрый день!

Перейти в раздел обращений, из него в мастер раздела, далее вкладка "Портал" и нажать кнопку "Редактировать страницу".

А там уже добавлять, изменять поля

Спасибо. Кажется раньше этой вкладки не было? Еще в процессе разработки нашими кастомизаторами со страницы Обращения была убрана страница "Обработка", нет детали, где заказчик и обработчик заявки общаются. Точнее у заказчика она есть:

 

А у обработчика ее нет. Как можно ее вернуть?

Разверните на отдельном сервере вашу версию bpmonline и заберите оттуда все что вам нужно востановить....

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

Всем привет,

Есть кусок кода, который корректно работает в системе:

var hash = NetworkUtilities.getEntityUrl("SomeObject", record.get("SomeObject.Id"));
this.sandbox.publish("PushHistoryState", {hash: hash});

Но в портале самообслуживания hash получается пустым и ничего не происходит. У пользователя есть доступ к объекту - он видит записи если открыть их напрямую (объект прописан в справочниках доступа объектов для портальных пользователей).

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

Нравится

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

Проверьте что у пользователей портала есть права на доступ к объекту (хотя бы на чтение), а так же что ваш объект добавлен в справочник  [Список объектов, доступных пользователям портала]  и что нужные колонки указаны а справочнике [Список доступных полей объектов на портале]

При необходимости внесите изменения, сбросьте рэдис и перезайдите в систему.

Код этой функции getEntityUrl можно открыть в конфигурации, в схеме NetworkUtilities:

/**
 * Creates a relative URL to open the card of the entity.
 * @throws {Terrasoft.ArgumentNullOrEmptyException} Throws an exception if not specified the schema name or
 * the entity ID.
 * @inheritdoc NetworkUtilities#getEntityConfigUrl
 */
getEntityUrl: function(config) {
	if (arguments.length > 1) {
config = {
	entitySchema: arguments[0],
	primaryColumnValue: arguments[1],
	typeColumnValue: arguments[2],
	operation: arguments[3]
};
	}
	let url = "";
	var entityConfig = this.getEntityConfigUrl(config);
	if (entityConfig) {
url = Terrasoft.combinePath(
	entityConfig.cardModule,
	entityConfig.cardSchema,
	entityConfig.operation,
	entityConfig.primaryColumnValue
);
	}
	return url;
},

А она вызывает getEntityConfigUrl:

/**
 * Creates a configuration object values for the U R L to a card entity.
 * @throws {Terrasoft.ArgumentNullOrEmptyException} Throws an exception if not specified
 * the schema name or the entity ID.
 * @param {Object} config Config object.
 * @param {String} config.entitySchema The name or ID of the schema entity.
 * @param {String} [config.entitySchemaName] The name of the schema entity. Alias for @entitySchema.
 * @param {String} config.primaryColumnValue The entity identifier.
 * @param {String} [config.typeColumnValue] The value of the column type.
 * @param {String} [config.typeId] The value of the column type. Alias for @typeColumnValue.
 * @param {String} [config.operation] Operation.
 * @return {Object} Returns the configuration object values for the U R L to a card entity.
 */
getEntityConfigUrl: function(config) {
	const configArg = arguments.length === 1;
	const entitySchema = configArg ? config.entitySchema || config.entitySchemaName : arguments[0];
	const primaryColumnValue = configArg ? config.primaryColumnValue : arguments[1];
	const typeColumnValue = configArg ? config.typeColumnValue || config.typeId : arguments[2];
	const operation = configArg ? config.operation : arguments[3];
	var entitySchemaName = Terrasoft.isGUID(entitySchema)
? this.getEntitySchemaName(entitySchema)
: entitySchema;
	if (!entitySchemaName) {
throw Ext.create("Terrasoft.ArgumentNullOrEmptyException");
	}
	var moduleStructure = Terrasoft.ModuleUtils.getModuleStructureByName(entitySchemaName);
	var entityStructure = Terrasoft.ModuleUtils.getEntityStructureByName(entitySchemaName);
	if (!entityStructure && !moduleStructure) {
return null;
	}
	var pages = entityStructure.pages;
	if (typeColumnValue && moduleStructure && moduleStructure.attribute && !Ext.isEmpty(pages)) {
var typePage = Terrasoft.where(pages, {"UId": typeColumnValue});
pages = Ext.isEmpty(typePage) ? pages : typePage;
	}
	var cardModule = moduleStructure && moduleStructure.cardModule ? moduleStructure.cardModule : "CardModuleV2";
	var cardSchema = pages[0].cardSchema;
	var configUrl = {
cardModule: cardModule,
cardSchema: cardSchema,
entitySchemaName: entitySchemaName,
operation: operation || Terrasoft.ConfigurationEnums.CardOperation.EDIT,
primaryColumnValue: primaryColumnValue
	};
	return configUrl;
},

Вероятно, в ней выполнение идёт по ветви, которая возвращает null. Попробуйте у себя отладить JS в браузере, чтобы выяснить, чего именно на портале не хватает и можно ли это обойти, модифицировав скрипт.

Проверьте что у пользователей портала есть права на доступ к объекту (хотя бы на чтение), а так же что ваш объект добавлен в справочник  [Список объектов, доступных пользователям портала]  и что нужные колонки указаны а справочнике [Список доступных полей объектов на портале]

При необходимости внесите изменения, сбросьте рэдис и перезайдите в систему.

Григорий Чех,

Спасибо за ответ.

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

Тёскин Дмитрий Валерьевич,

Тогда только отлаживатся и смотреть почему возращает пусто или сделать костыль (для портала зашить нужный url)

Ещё точнее, на портале в JS объект Terrasoft.configuration.ModuleStructure содержит только 3 стандартных портальных раздела, и для SomeObject функция ничего не возвращает. Посмотреть наполнение на портале и в обычной системе можно, введя в консоли браузера Terrasoft.configuration.ModuleStructure.

Логика наполнения списка реализована в C#-схеме ConfigurationSectionHelper.

Вероятно, если не прибегать к хакам, поможет добавление на портал этого раздела.

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

Здравствуйте, в обращении в стандартном режиме работы присутствует подраздел "Информация по обращению". 

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

Вроде понимаю что нужно отредактировать "PortalCasePage", но не могу додумать откуда взять источник.

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

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

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

Нравится

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

Здравствуйте! Источник Case  - http://prntscr.com/mw6k0g

Нигрескул Алексей, я так понял нужно добавить еще одну деталь в Details помимо VisaDetailV2bad5afcc, как определить эту деталь?

В достаточно новых версиях системы разделы и детали на портале можно настраивать в мастере разделов, выбрав там рабочее место «Портал».

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

Добрый день. 

BPM service, облако. 

Столкнулся со следующей проблемой - пользователи портала не видят сообщения (email) в обращениях на Портале. 

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

Нравится

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

Необходимо с помощью процесса на добавление/изменение "Activity" и добавление в объект "Email message" (у нас в процессе на все три события)  раздавать дополнительно права на e-mail сообщения (Activity) нужным пользователям портала (например, мы выдавали контакту инцидента и его руководителю).



И посмотрите, есть ли на чтение объекта Activity права у All portal users

Необходимо с помощью процесса на добавление/изменение "Activity" и добавление в объект "Email message" (у нас в процессе на все три события)  раздавать дополнительно права на e-mail сообщения (Activity) нужным пользователям портала (например, мы выдавали контакту инцидента и его руководителю).



И посмотрите, есть ли на чтение объекта Activity права у All portal users

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

Версия 7.12.4.

Добавил деталь в р. "Обращения портала"

При инициализации детали получаю ошибку: 

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

После отладки выявлено, что ошибка связана с вызовом не существующего сallback в методе initDetailRunProcessButtonMenu миксина  ProcessEntryPointUtilities.

В результате этой ошибки деталь не отображается в карточке Обращения на портале.



 

 

Нравится

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

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

/**
 * Initializes "Run process" menu items in detail.
 * @param {Function} callback Callback function.
 * @param {Object} scope Execution context.
 * @protected
 */
initDetailRunProcessButtonMenu: function(callback, scope) {
	var processButtonMenu = this.get("RunProcessButtonMenuItems");
	if (!processButtonMenu) {
		processButtonMenu = this.Ext.create("Terrasoft.BaseViewModelCollection");
		this.set("RunProcessButtonMenuItems", processButtonMenu);
	}
	if (Terrasoft.ProcessEntryPointUtilities.getCanRunProcessFromSection()) {
		this._initDetailAvailableProcessList(processButtonMenu, callback, scope);
	} else {
		callback.call(scope);
	}
},

Возможно, для стандартной детали до else и не доходит.

Илья, добрый день.

В том то и дело, что 

Terrasoft.ProcessEntryPointUtilities.getCanRunProcessFromSection() и проверяет, не является ли пользователь пользователем портала, и в интерфейсе сотрудника возвращает true, и как следствие выполняется this._initDetailAvailableProcessList(processButtonMenu, callback, scope);

НО если пользователь является пользователем портала, то выполняется callback.call(scope);, а callback в этот метод не передается и равен undefind

Т.о. при выводе детали для пользователя портала  получаем ошибку

Сравните с другой деталью тоже на портале, как там работает эта функция.

Мотков Илья,

Деталей на портале нет. 

Вопрос в том, почему в initDetailRunProcessButtonMenu не передаётся callback

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

Мотков Илья,

Метод initDetailRunProcessButtonMenu  вызывается в BaseGridDetailV2 в методе initData и не принимает аргументы (см. https://yadi.sk/i/UoJ5M8kHo9s1kw)

Но в условии else вызывается callback.call(scope);, который по определению вернёт ошибку( т.к. initDetailRunProcessButtonMenu  не принимает аргументов)

Сам метод initDetailRunProcessButtonMenu   описан в схеме-миксине ProcessEntryPointUtilities



Я пытаюсь указать на баг базовой функциональности, который ограничивает использование деталей на портале пользователей.



Для себя временной решение я уже нашёл, но хотелось бы получить исправление в коробочной версии.

Либо переделайте initData, чтобы передавала в функцию эти два параметра, либо в самой initDetailRunProcessButtonMenu добавьте проверку на заполненность параметра, либо, если initData — это единственное место в системе, где функцию initDetailRunProcessButtonMenu вызывают и else не сможет отработать в принципе, исключите нижнюю ветвь.

Мотков Илья,

Илья, решение я уже нашёл (заместил 

BaseGridDetailV2 и метод initDetailRunProcessButtonMenu.)

Целью этой публикации на community является обратить внимание поддержки Terrasoft на не корректную реализацию метода initDetailRunProcessButtonMenu и на проблемы, которые, эта реализация вызывает. 

Чтобы это по возможности было исправлено в следующих релизах.

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

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

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

Добрый день. Можно ли в портале сделать фильтр, который в системе слева настраивается?

Нравится

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

К сожалению, в Сustomer Portal для фильтрации можно использовать только быстрый фильтр.

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

Добрый день!

Столкнулись с следующей ситуацией: для портальных пользователей не отображается на детали История email отправленные ими же. 

Кейс: cпочты пользователя портала отправляется письмо на почту техподдержки, это письмо регистрируется в системе (активность с типом email), по нему создается обращение в системе со связью с письмом. Можно добавить портальное сообщение. Со стороны бэкофиса на странице Обращения на детали История первой записью будет отображаться письмо от пользователя. Если зайти со стороны портала, то данного письма на детали не будет.

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

Спасибо! 

Нравится

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

Вы указали, что пользователь портала не видит писем в «Истории», это корректное поведение системы. В рамках базовой логики – портал самообслуживания не подразумевает общения письмами, в таком случае вообще портал самообслуживания теряет смысл. В системе реализована отдельная логика по работе с обращениями, происхождение у которых «Email». А пользователь, у которого есть портальные учетные данные – предполагается будет общаться с поддержкой и регистрировать обращения через портал.

Мы реализовывали раздачу прав пользователям портала на записи в БП. 



Ключевое здесь - это выдача прав на Activity по полученному письму. 

И основная сложность - это отловить получение письма. Примерно так выглядит сигнал на это событие:



Владмир, спасибо за информацию. Жалко, что на скриншоте ничего не видно. Можно сделать дололнение для маркета.

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

Постараюсь реализовать, но сложно со временем пока что. В том процессе еще много добавлено. 

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

Владимир Соколов,

Владимир, подскажите, пожалуйста, как именно происходила раздача прав (настройка элемента процесса)? Требуется ли дополнительная настройка прав в разделе Администрирования: Доступ к объектам?

Если все права раздаёт процесс, то вручную менять не надо. Но лучше свяжитесь напрямую с Владимиром и уточните к него.

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

Добрый день!

Разместили на портале свой кастомный раздел. Хотим сделать функционал как в обращениях для публикации сообщений на порталеИзображение удалено.

 

Аналогичная кнопка на портале.

 

Нет ли каких-либо инструкций как это сделать?

Реализуемо ли это вообще в том плане, что нет ли ограничений со стороны системы/по лицензиям на такие действия, так как работа идет с порталом, а там функционал ограничен?

Нравится

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

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

Ниже ключевые схемы и логика реализации портальных сообщений:

В схеме CasePage добавляется ActionsDashboardModule, реализация которого находится в схеме CaseSectionActionsDashboard.

В схеме CaseSectionActionsDashboard добавляется кнопка портального сообщения PortalMessageModule.

Открытие окна сообщения по клику на глобус реализовано в методе onMessageModuleRendered в схеме SectionActionsDashboardActionsDashboard.

Кнопка Опубликовать добавляется в PublishButtonContainer в схеме BaseMessagePublisherPage.

Обработка нажатия на кнопку Опубликовать - метод onPublishButtonClick.

 

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

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

 

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

Добрый день.

Столкнулись со следующей проблемой:

Есть объект заявка, при создании этого объекта запускается бизнес процесс "Обработать заявку". Заявка может быть создана и со стороны основного приложения, с потрала и с мобильного клиента. 

Проблема в том, когда заявка создается от пользователя с ролью "Все пользователи портала" (т.е. от пользователя с очень ограниченными правами), то и Бизнес процесс запускается под этим пользователем. И процесс перестает работать на шаге создания активности:

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



После того как скачали текст ошибки и изучил исходники - выяснилось, что портальному пользователю не хватает прав на объект ActivityParticipantRole. После того как были выданы права на этот объект, появилась ошибка, что прав не хватает уже на объект "ActivityParticipant". Дальше права не стали выдавать (т.к. есть опасения что придется выдавать очень много).

Пока мы видим 3 решения этой проблемы: 

а) Последовательно выдавать пользователям портала права на все необходимые объекты - видится что это не самый правильный вариант решения проблемы, но рабочий.

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

в) Всегда запускать процесс от конкретного пользователя (если такое возможно).





Собственно вопросы:

1) Есть ли еще какие нибудь варианты решения и как "правильно" решить данную проблему?

2) Можно ли запускать процесс от конкретного пользователя?

 

Нравится

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

По пунктам:

а) Действительно рабочий, но куча проблем оттестировать этот момент.

б) Я бы переделал весь процесс и выборки/изменения/удаления делал через C# скрипт, пользуясь UserConnection.AppConnection.SystemUserConnection

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

Добрый день. Вот тоже столкнулся с проблемой. Что за пункт 6? 

Что то сайт совсем поломался, процитировать не могу.



По поводу "Я бы переделал весь процесс и выборки/изменения/удаления делал через C# скрипт, пользуясь UserConnection.AppConnection.SystemUserConnection" - наш процесс не маленький, по этому такая переделка будет очень трудоемкой, возможно даже более трудоемкой чем выдача прав.



Придумали еще 1 вариант, это запускать процессы по новым заявкам по таймеру (например раз в 1, 5 или 10 минут получать все заявки по которым еще не запущен процесс и запускать)

Габбазов Искандер Рустемович,

А как вы считываете, что по данному обращению был запущен именно тот процесс который активность создаёт? 

Евгений. В журнале процессов это все можно увидеть

Габбазов Искандер Рустемович,

В журнале процесса, есть ход выполнения процесса. А то что данный процесс был выполнен для заявки 1 нет. При таком же подходе, активности будут открываться вновь и вновь.

А, вопрос про то запущен процесс уже или нет? Так можно поле флаг создать. Например когда процесс по заявке стартует, сразу заполняем это поле флаг. А для запуска ищем все заявки у которых этот флаг не отмечен.

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

Добрый день!

Для заведения пользователя портала самообслуживания необходимо приобретать лицензию как для основного приложения или есть возможность приобретать отдельно только для портала?

Нравится

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

При покупке продукта Service, туда входит 500 портальных пользователей. Если нужно больше пользователей, обращайтесь к своему менеджеру в Terrasoft. Вы де об этом спрашиваете?

Здравствуйте, Любовь!

Лицензии для сотрудников и портальных пользователей отличаются.

В случае если Вам необходимо больше чем 500 лицензий, необходимо обратиться к Вашему менеджеру.

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