Как убрать кнопку в виде планеты "отправить сообщение на портал самооблуживания"

Нравится

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

В вашем случае надо разбирать код SectionActionsDashboard и смотреть как формируются табы, чтобы убрать один из них. Открываете схемы и смотрите все что связано со словом Tab.

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

 

Полозюков Евгений Петрович,Спасибо, примерную схему поиска я знаю, где-то есть описание как формирует id элемента для поиска в diff массиве?

Видно, что в id добавляет название схемы раздела CaseSection

Денис Суров,

Описания как формируется id нет, но можно понять что в начале идет название схемы потом имя элемента потом суффикс с типом элемента.

В вашем случае надо разбирать код SectionActionsDashboard и смотреть как формируются табы, чтобы убрать один из них. Открываете схемы и смотрите все что связано со словом Tab.

Полозюков Евгений Петрович,Спасибо, посмотрю

мне подошло скрыть контейнер Tabs

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

Каким образом убрать кнопку и тег на портале самообслуживания

Прикрепленные файлы

Нравится

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

Еще меньше надо было скриншот сделать, чтобы вообще ничего непонятно было.

 

Кнопка действия добавлена в BaseDataView c name - CombinedModeActionsButton и SeparateModeActionsButton. В вашем случае надо в CaseSection в diff описать remove этих двух кнопок.

Еще меньше надо было скриншот сделать, чтобы вообще ничего непонятно было.

 

Кнопка действия добавлена в BaseDataView c name - CombinedModeActionsButton и SeparateModeActionsButton. В вашем случае надо в CaseSection в diff описать remove этих двух кнопок.

Полозюков Евгений Петрович,Спасибо, а тег?

Часть нашел,CombinedModeTagsButton

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

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

Добрый день!

 

Создал замещающую схему PortalPage сделал ComplainButton Visible=false , но кнопка осталась на странице

Нравится

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

Спасибо, нашел, кнопка в PortalCaseSection

"operation": "remove",
                    "name": "ComplainButton",

Денис Суров,

Добрый день, Денис!

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

Правильно ли я понимаю, что достаточно в diff указать следующее:

diff: /**SCHEMA_DIFF*/[
			{
				"operation": "remove",
				"name": "НазваниеКнопки"
			}
		]/**SCHEMA_DIFF*/

Название кнопки мы берём из локализуемых строк, что определены на странице? Или откуда?

 

 

 

Ирина Кузина,

Добрый день, Ирина.
Да, код, который Вы прикрепили успешно удалит кнопку.

Название кнопки можно посмотреть разметке странице(ПКМ на кнопку -> Inspect) в id кнопки полное название, пример "ContactSectionV2CloseButtonButton". Нужно убрать сначала название схемы "ContactSectionV2" и с конца слово "Button". Остальное и есть название кнопки, то есть CloseButton.

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

diff: /**SCHEMA_DIFF*/[
			{
				"operation": "insert",
				"name": "НазваниеКнопки"
               // Другие свойства
			}
		]/**SCHEMA_DIFF*/

 

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

Добрый день.

Можно ли создать разные базыз знаний или разграничить доступ.

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

Нравится

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

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

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

к каждой отдельной статье, как я понимаю?

Всё верно.

Для автоматизации раздачи прав доступа писали БП.

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

Дамиан Викторович,

Дамиан, на отдельную статью у меня неактивна раздача прав. Я проверила настройки, доступ есть

Как работает и настраивать доступ по записям, см. тут и тут.

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

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

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

Нравится

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

Дамиан, эта логика реализована в схеме HtmlEditModule, в функции:

updateToolbar: function() {
	var id = this.id;
	var toolbar = this.toolbar;
	var memo = this.memo;
	if (!toolbar || !memo) {
		return;
	}
	var plainTextMode = this.plainTextMode;
	var enabled = this.enabled;
	var enabledInRichTextMode = !plainTextMode && enabled;
	var enabledInPlainTextMode = plainTextMode && enabled;
	var hideModeButtons = this.hideModeButtons;
	toolbar.fontFamily.setEnabled(enabledInRichTextMode);
	toolbar.fontSize.setEnabled(enabledInRichTextMode);
	toolbar.fontStyleBold.setEnabled(enabledInRichTextMode);
	toolbar.fontStyleItalic.setEnabled(enabledInRichTextMode);
	toolbar.fontStyleUnderline.setEnabled(enabledInRichTextMode);
	toolbar.fontColor.setEnabled(enabledInRichTextMode);
	toolbar.hightlightColor.setEnabled(enabledInRichTextMode);
	toolbar.numberedList.setEnabled(enabledInRichTextMode);
	toolbar.bulletedList.setEnabled(enabledInRichTextMode);
	toolbar.maximized.setEnabled(enabledInRichTextMode);
	toolbar.indentList.setEnabled(enabledInRichTextMode);
	toolbar.outdentList.setEnabled(enabledInRichTextMode);
	toolbar.justifyLeft.setEnabled(enabledInRichTextMode);
	toolbar.justifyCenter.setEnabled(enabledInRichTextMode);
	toolbar.justifyRight.setEnabled(enabledInRichTextMode);
	toolbar.image.setEnabled(enabledInRichTextMode);
	toolbar.link.setEnabled(enabledInRichTextMode);
	toolbar.htmlMode.setEnabled(enabledInPlainTextMode);
	toolbar.plainMode.setEnabled(enabledInRichTextMode);
	toolbar.htmlMode.setPressed(enabledInRichTextMode);
	toolbar.plainMode.setPressed(enabledInPlainTextMode);
	toolbar.htmlMode.setVisible(!hideModeButtons);
	toolbar.plainMode.setVisible(!hideModeButtons);
	memo.setReadonly(!enabled);
	var extToolbar = Ext.get(id + "-" + this.controlElementPrefix + "-toolbar");
	if (extToolbar) {
		extToolbar.dom.style.display = !enabled ? "none" : "table-cell";
	}
	var extHtmlEdit = Ext.get(id + "-" + this.controlElementPrefix + "-htmltext");
	if (extHtmlEdit) {
		extHtmlEdit.dom.style.display = plainTextMode ? "none" : "table-cell";
	}
	var extPlainText = Ext.get(id + "-" + this.controlElementPrefix + "-plaintext");
	if (extPlainText) {
		extPlainText.dom.style.display = !plainTextMode ? "none" : "table-cell";
	}
	var editor = this.editor;
	if (editor) {
		// TODO: 200083
		try {
			editor.setReadOnly(!enabled);
		} catch (e) {
			if (editor.document) {
				editor.document.getBody().$.contentEditable = enabled;
			}
		}
		if (extHtmlEdit) {
			extHtmlEdit.dom.style.backgroundColor = enabled ? "#ffffff" : "#f9f9f9";
		}
	}
},

Проверка условий видимости панели делается в 10 и 11 строках. То есть либо у поля установлено свойство plainTextMode, либо он неактивен. Если у Вас не было никаких доработок, вероятнее всего, вторая причина. По умолчанию в разделе базы знаний для портальных пользователей записи доступны только для чтения, и это, и другие поля просто заблокированы. В таком случае панель форматирования и не нужна. Чтобы она появилась, надо портальным пользователям дать права на создание/изменение статей БЗ:

Выставил права доступа согласно рекомендациям - не помогло.

Дамиан, как оказалось, свойство «enabled» не относится к правам, а задаётся непосредственно кодом в схеме карточки.

 

В PortalKnowledgeBasePage у трёх полей (название, тип и заметки) оно определено как false:

{
	"operation": "merge",
	"name": "Name",
	"values": {
		"enabled": false
	}
},
{
	"operation": "merge",
	"name": "Type",
	"values": {
		"enabled": false
	}
},
{
	"operation": "merge",
	"name": "Notes",
	"values": {
		"layout": {
			"column": 0,
			"row": 0,
			"colSpan": 24,
			"rowSpan": 1
		},
		"enabled": false
	}
},

Если в пакете Custom переопределить эту страницу, поменять на true, то поля (или только заметки, если менять лишь последнее) разблокируются. 

Спасибо, то что нужно. Разобрался с этим только сейчас.
Создал замещающую схему страницы портального раздела "Базы знаний" (PortalKnowledgeBasePage). Внутри неё в блоке diff прописал ваш код для заметок. Всё заработало, панель с кнопкой "развернуть во весь экран" появилась.

diff: /**SCHEMA_DIFF*/[
// Заметки.
{
  "operation": "merge",
  "name": "Notes",
  "values": {
    "layout": {
      "column": 0,
      "row": 0,
      "colSpan": 24,
      "rowSpan": 1
    },
    "enabled": true
  }
},
]/**SCHEMA_DIFF*/

 

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

Всем добрый день!

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

Для бандла service сейчас пытаюсь реализовать деталь с редактируемым реестром, чтобы можно было указывать в заявке несколько значений из справочника. Всем известно, что, когда пытаешься добавить в деталь новое значение, то вызывается метод, который сохраняет родительскую запись, так как запись детали обязательно должна быть связана с родительской записью. Можно как-то добавить в деталь запись, не вызывая метод, который сохраняет родителя, но при этом, чтобы после сохранения родителя, в детали все корректно связалось? Как-то же это реализовано для файлов например.

Нравится

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

Это ещё реализовано и в Средствах связи

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

В средствах связи, схеме ContactCommunicationDetailV2 добавленные и удалённые складываются в две коллекции Collection и DeletedItems и при сохранении из них извлекаются и идут на сервер одним составным запросом:

deleteItem: function(item) {
	var deletedItems = this.get("DeletedItems");
	var collection = this.get("Collection");
	collection.removeByKey(item.get("Id"));
	deletedItems.addItem(item);
},
 
addItem: function(tag) {
	if (this.get("IsDetailCollapsed")) {
		return;
	}
	var communicationTypes = this.get("CommunicationTypes");
	var communicationType = communicationTypes.get(tag);
	var newItem = this.Ext.create("Terrasoft.BaseCommunicationViewModel", {
		entitySchema: this.entitySchema,
		columns: this.columns
	});
	newItem.set("CommunicationTypes", communicationTypes);
	newItem.sandbox = this.sandbox;
	newItem.setDefaultValues(function() {
		newItem.set("CommunicationType", {
			value: communicationType.get("Id"),
			displayValue: communicationType.get("Name")
		});
		newItem.set("Contact", {
			value: this.get("MasterRecordId")
		});
		var itemKey = newItem.get("Id");
		var collection = this.get("Collection");
		collection.add(itemKey, newItem);
		this.changeCardPageButtonsVisibility(true);
	}, this);
	return newItem;
},
 
...
 
getDeleteItemsQueries: function() {
	var deletedItems = this.get("DeletedItems");
	var deleteQueries = [];
	deletedItems.each(function(item) {
		var primaryColumnValue = item.get(item.primaryColumnName);
		var deleteQuery = item.getDeleteQuery();
		deleteQuery.enablePrimaryColumnFilter(primaryColumnValue);
		deleteQueries.push(deleteQuery);
	}, this);
	return deleteQueries;
},
 
getSaveItemsQueries: function() {
	var collection = this.get("Collection");
	var saveQueries = [];
	collection.each(function(item) {
		if (item.isChanged() && item.validate()) {
			saveQueries.push(item.getSaveQuery());
		}
	}, this);
	return saveQueries;
},
 
...
 
save: function() {
	var restrictionsQuery = this.getSaveRestrictionsQuery();
	var queries = restrictionsQuery ? [restrictionsQuery] : [];
	var saveQueries = this.getSaveItemsQueries();
	queries = queries.concat(saveQueries);
	var deleteQueries = this.getDeleteItemsQueries();
	queries = queries.concat(deleteQueries);
	if (Ext.isEmpty(queries)) {
		this.publishSaveResponse({
			success: true
		});
		return true;
	}
	var batchQuery = Ext.create("Terrasoft.BatchQuery");
	Terrasoft.each(queries, function(query) {
		batchQuery.add(query);
	}, this);
	batchQuery.execute(this.onSaved, this);
	return true;
},
 
onSaved: function(response) {
	var message = response.ResponseStatus && response.ResponseStatus.Message;
	if (response.success && !message) {
		var deletedItems = this.get("DeletedItems");
		var collection = this.get("Collection");
		collection.each(function(item) {
			item.isNew = false;
			item.changedValues = null;
		}, this);
		deletedItems.clear();
		this.publishSaveResponse(response);
	} else {
		this.publishSaveResponse({
			success: false,
			message: this.getValidationMessage(message)
		});
	}
},

 

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

При создании портального сообщения из БП происходит его создание во вкладке "Хронология" обращения, но само сообщение не появляется во вкладке "Обработка".

Каким образом перенести сообщение в обработку? (как я понимаю, оно просто не публикуется, хотя признак установлен)

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

Нравится

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

Попробуйте найти в PortalMessage запись о корректно отображаемом пользователям портала сообщении и сравнить с Вашим, создаваемым в БП. Возможно, отличаются значения полей (в частности, HideOnPortal и IsNotPublished) или в связанной таблице прав доступа не хватает разрешений портальным пользователям на эту запись.

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

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

"Хронология" (поле опубликован так же выставлял как "Да"). Сообщение не отображается в "Обработке" нигде (ни в системе, ни на портале, ни под один пользователем)

Проблема найдена - не было указано значение поля

"Уникальный идентификатор схемы". Нет ли ни у кого решения как можно получать данный идентификатор стандартными методами из БП?

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

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

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

Так он же везде одинаковый для одинакового раздела, независимо от версии и даже вертикали.

Если Вам нужно именно программно по названию объекта, то:

var ContactSchemaUId = UserConnection.EntitySchemaManager.GetInstanceByName("Contact").UId;

 

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

Каким образом возможно протестировать портал самообслуживания в рамках тест-драйва продуктов service? В тестовых системах в наличии только лицензия bpmonline ITIL service customer portal on-demand, а Self-Service Portal отсутствует.

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

Нравится

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

Портал самообслуживания доступен для таких продуктов: Service customer center, Service enterprise и Financial Services customer journey. Дополнительных лицензий не нужно, на демо-версии уже есть «Портальный пользователь 1» с доступом на Self Service Portal:

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

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

Всем привет!

Стоит следующая задача: заменить фильтр, на основании которого отображается список в виджете "Мои обращения" (Список обращений пользователя портала) на Главной странице портала?

Учитывая, что

1. замещение клиентских модулей запрещено

2. хочется обойтись "малой кровью"

3. делать свой модуль скопировав базовый не рационально для задачи

4. список формируется на основании подгружаемого config

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

 

Нравится

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

Эта логика реализована в схеме «Список обращений пользователя портала» (UserCasesListModule) в функции initConfig: function(). Вероятно, проще действительно не трогать базовый, а скопировать, сделать в отдельной схеме свой аналог с нужным фильтром, а затем в дизайнере  панели итогов «Главная страница портала» указать его в свойствах блока.

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

благодарю за ответ

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

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

 

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

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

Нравится

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

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

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

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

 

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

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

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