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

Как добавить пользовательскую кнопку (чтобы начать процесс для данной активности) в панель действий только для одного раздела (например, для Case)?Изображение удалено.

 

Заранее благодарю за ваши ответы.

Нравится

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

Мария, этот механизм реализован во многих схемах. Для плитки активности интерфейс описан в схеме BaseDashboardItemViewConfig, а логика — в ActivityDashboardItemViewModel и её родителях EntityDashboardItemViewModel и BaseDashboardItemViewModel. В них можно увидеть кнопку «Завершить» (Execute) и её логику заголовка, видимости и нажатия. А сами названия этих схем прописаны в схеме SectionActionsDashboard в пакете ActionsDashboard в функции:

/**
 * @inheritdoc Terrasoft.BaseActionsDashboard#initDashboardConfig
 * @override
 */
initDashboardConfig: function() {
	this.callParent(arguments);
	const dashboardConfig = this.get("DashboardConfig");
	const processItemsConfig = {
		"VwProcessDashboard": {
			masterColumnName: "Id",
			referenceColumnName: "EntityId",
			viewModelClassName: "Terrasoft.ProcessDashboardItemViewModel",
			viewConfigClassName: "Terrasoft.BaseDashboardItemViewConfig"
		}
	};
	const activityItemsConfig = {
		"Activity": {
			viewModelClassName: "Terrasoft.ActivityDashboardItemViewModel",
			viewConfigClassName: "Terrasoft.BaseDashboardItemViewConfig"
		}
	};
	const approvalItemsConfig = this._getApprovalItemsConfig();
	const extendedConfig = this.values.dashboardConfig || {};
	Ext.merge(dashboardConfig, processItemsConfig);
	Ext.merge(dashboardConfig, activityItemsConfig);
	Ext.merge(dashboardConfig, extendedConfig);
	Ext.merge(dashboardConfig, approvalItemsConfig);
	this.set("DashboardConfig", dashboardConfig);
},
 
/**
 * Returns approval items config.
 * @private
 * @return {Object}
 */
_getApprovalItemsConfig: function() {
	const config = {};
	const approvalSchemaName = this.get("ApprovalSchemaName");
	if (approvalSchemaName) {
		config[approvalSchemaName] = {
			masterColumnName: "Id",
			referenceColumnName: this.get("ApprovalReferenceColumnName"),
			viewModelClassName: "Terrasoft.ApprovalDashboardItemViewModel",
			viewConfigClassName: "Terrasoft.ApprovalDashboardItemViewConfig"
		};
	}
	return config;
},

Соответственно, Вам надо будет делать свои схемы-наследники этих, добавлять там кнопку и заместить SectionActionsDashboard на версию с их упоминанием. Для примера, для виз в схемах ApprovalDashboardItemViewModel и ApprovalDashboardItemViewConfig сделана своя логика с несколькими кнопками, а те схемы унаследованы от тех же EntityDashboardItemViewModel и BaseDashboardItemViewConfig.

 

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

Добрый день, сообщество!

 

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

Для этого выбран один из вариантов: отобразить ActionsDashboard продажи в активности.

Приведенный в конце (без лишних частей) код модуля ActivityPageV2 дает в консоли ошибку:


SectionActionsDashboard.js:2051 Uncaught (in promise) TypeError: Cannot read property 'name' of undefined
    at i._findVisaManagerItem (SectionActionsDashboard.js:2051)
    at i. (SectionActionsDashboard.js:501)
    at i.e (all-combined.js:7)
    at Object.callback (all-combined.js:6)
    at all-combined.js:7

 

Ошибка приводит нас к тому, что в функции _findVisaManagerItem не находится свойство this.get("EntitySchema").name.

 

Подскажите, пожалуйста, как справиться с этой ошибкой (и вообще отобразить кейс)

 

 

 

Код модуля:

define("ActivityPageV2", ["OpportunityConfigurationConstants","ServiceHelper","ProcessModuleUtilities","MaskHelper"], 
function(OpportunityConfigurationConstants, ServiceHelper,ProcessModuleUtilities,MaskHelper) {
  return {
    entitySchemaName: "Activity",
    modules: /**SCHEMA_MODULES*/{
      "ActionsDashboardModule": {
        "config": {
          "isSchemaConfigInitialized": true,
          "schemaName": "OpportunityActionsDashboard",
          "useHistoryState": false,
          "parameters": {
            "viewModelConfig": {
              "entitySchemaName": "Opportunity",
              "actionsConfig": {
                "schemaName": "OpportunityStage",
                "columnName": "Stage",
                "colorColumnName": "Color",
                "filterColumnName": "ShowInProgressBar",
                "orderColumnName": "Number",
                "innerOrderColumnName": "End",
                "decouplingConfig": {
                  "name": "OppStageDecoupling",
                  "masterColumnName": "CurrentStage",
                  "referenceColumnName": "AvailableStage"
                }
              },
            //  "useDashboard": false,
            //  "contentVisible": false,
            //  "headerVisible": true
              "dashboardConfig": {
                "Activity": {
                  "masterColumnName": "Opportunity",
                  "referenceColumnName": "Opportunity"
                }
              }
            }
          }
        }
      }
    }/**SCHEMA_MODULES*/,
    diff: /**SCHEMA_DIFF*/[
      {
        "operation": "insert",
        "name": "ActionsDashboardModule",
        "values": {
          "classes": {
            "wrapClassName": [
              "actions-dashboard-module"
            ]
          },
          "itemType": 4
        },
        "parentName": "ActionDashboardContainer",
        "propertyName": "items",
        "index": 0
      }
    ]/**SCHEMA_DIFF*/
  };
});

 

Нравится

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

А почему бы не пытаться пойти иным путём?

Почему нужны именно кейсы чужого раздела в Активности?

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

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

Кисловский Михаил Андреевич,

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

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

 

Мария, согласно академии:

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

То есть единой «следующей»  стадии нет, при нормальной работе переходы возможны в любую из разрешённых. Если точно знаете, куда нужно перевести по нажатию кнопки, можно в объект добавить справочное поле, ссылающееся на нужную запись и в логике кнопки её считывать.

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

Коллеги, доброго дня!

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

 

Заранее благодарю за любые подсказки.

Нравится

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

Это схема ActionsDashboardItemContainer, также см. ActionsDashboardCSS, где задаются визуальные свойства, в частности background-color:

		.dashboard-container-item {
			position: relative;
			display: inline-block;
			padding: 14px 14px 14px 14px;
			min-height: 104px;
			background-color: rgb(255, 255, 255);
			border: rgb(225, 225, 225) solid 1px;
			box-shadow: 3px 3px 3px rgba(225, 225, 225, 0.2);
			margin: 6px 3px 0 3px;
			width: calc(~'50% - 6px');
			transition: box-shadow 0.2s ease;
			&:hover {
				box-shadow: 3px 3px 3px rgba(225, 225, 225, 0.6);
			}
		}
	}
}

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

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

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

Благодарю за ответ!

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

Добрый день, подскажите как добавить свое действие по аналогии с теми что уже есть в этом модуле
Qss

Нравится

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

Добрый день,
Информацию можно найти тут - https://academy.terrasoft.ua/news/176522
Две статьи - "Добавление инструментальной панели действий" и "Добавление нового канала в Actions Dashboard"

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

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

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

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