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

 

Нравится

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

Добрый день.

В разделе [Активности] отображаются все активности, кроме email.

Для работы с письмами на маркетплейсе реализованы дополнительные разделы. Например, Email extension for Creatio.

Добрый день.

В разделе [Активности] отображаются все активности, кроме email.

Для работы с письмами на маркетплейсе реализованы дополнительные разделы. Например, Email extension for Creatio.

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

В разделе есть несколько типов страницы редактирования. Как установить условия на видимость кнопки добавления для одного из типов? В каком модуле определены данные кнопки? Заранее спасибо!

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

Нравится

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

В diff схемы реестра раздела добавляем 

{

            "operation": "merge",

            "name": "SeparateModeAddRecordButton",

            "parentName": "SeparateModeActionButtonsLeftContainer",

            "propertyName": "items",

            "values": {

                "itemType": Terrasoft.ViewItemType.BUTTON,

                "style": Terrasoft.controls.ButtonEnums.style.GREEN,

                "caption": {"bindTo": "AddRecordButtonCaption"},

                "click": false,

                "visible": {"bindTo": "IsAddRecordButtonVisible"},

                "classes": {

                    "textClass": ["actions-button-margin-right"],

                    "wrapperClass": ["actions-button-margin-right"]

                },

                "controlConfig": {

                    "menu": {

                        "items": {

                            "bindTo": "EditPages",

                            "bindConfig": {

                                "converter": function(editPages) {

                                    if (editPages.getCount() === 0) {

                                        return null;

                                    }

                                    var operationHash = {

                                        "38d26ca1-ab6a-474c-950d-f9ac9b630967": "CanAbilityToAdd1", //здесь guid это id справочника по которому определяется страница редактирования

                                        "2495b17d-2465-41cb-b625-ac36d9aef931": "CanAbilityToAdd2"

                                    };

                                    

                                    var allowedPages = [];

                                    

                                    if (this.get("CanAbilityToAdd1")) {

                                        allowedPages.push("CanAbilityToAdd1");

                                    }

                                    

                                    if (this.get("CanAbilityToAdd2")) {

                                        allowedPages.push("CanAbilityToAdd2");

                                    }

                                    for (var key in operationHash) {

                                        var hashItem = departmentToOperationHash[key];

                                        if (allowedPages.indexOf(hashItem) === -1) {

                                            editPages.collection.remove(editPages.collection.getByKey(key));

                                        }

                                    }

                                    return editPages;

                                }

                            }

                        }

                    }

                }

            }

        }

}

 

В init добавляем к примеру проверку на доступ по операции, либо другую функциональность

initCanAbilityToAdd1: function() {

                RightUtilities.checkCanExecuteOperation({

                    operation: "CanAbilityToAdd1"

                }, function(result) {

                    this.set("CanAbilityToAdd1", result);

                }, this);

            },

Добрый вечер.

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

Названия пунктов меню для разных страниц редактирования берутся из поля ActionKindCaption.

Более подробную информацию посмотрите в этом посте.

Пользовательскими настройками (без внесения дополнительных изменений в программный код) настроить видимость пункта меню в кнопке [Добавить] этого сделать не получится.

Базовая логика добавления пунктов меню для кнопки [Добавить] раздела реализована в схеме 'BaseDataView' пакета NUI.

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

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

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

Не уверенна, что разграничение прав доступа, как-то повлияет на видимость пункта меню кнопки [Добавить] для этого типа.

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

В diff схемы реестра раздела добавляем 

{

            "operation": "merge",

            "name": "SeparateModeAddRecordButton",

            "parentName": "SeparateModeActionButtonsLeftContainer",

            "propertyName": "items",

            "values": {

                "itemType": Terrasoft.ViewItemType.BUTTON,

                "style": Terrasoft.controls.ButtonEnums.style.GREEN,

                "caption": {"bindTo": "AddRecordButtonCaption"},

                "click": false,

                "visible": {"bindTo": "IsAddRecordButtonVisible"},

                "classes": {

                    "textClass": ["actions-button-margin-right"],

                    "wrapperClass": ["actions-button-margin-right"]

                },

                "controlConfig": {

                    "menu": {

                        "items": {

                            "bindTo": "EditPages",

                            "bindConfig": {

                                "converter": function(editPages) {

                                    if (editPages.getCount() === 0) {

                                        return null;

                                    }

                                    var operationHash = {

                                        "38d26ca1-ab6a-474c-950d-f9ac9b630967": "CanAbilityToAdd1", //здесь guid это id справочника по которому определяется страница редактирования

                                        "2495b17d-2465-41cb-b625-ac36d9aef931": "CanAbilityToAdd2"

                                    };

                                    

                                    var allowedPages = [];

                                    

                                    if (this.get("CanAbilityToAdd1")) {

                                        allowedPages.push("CanAbilityToAdd1");

                                    }

                                    

                                    if (this.get("CanAbilityToAdd2")) {

                                        allowedPages.push("CanAbilityToAdd2");

                                    }

                                    for (var key in operationHash) {

                                        var hashItem = departmentToOperationHash[key];

                                        if (allowedPages.indexOf(hashItem) === -1) {

                                            editPages.collection.remove(editPages.collection.getByKey(key));

                                        }

                                    }

                                    return editPages;

                                }

                            }

                        }

                    }

                }

            }

        }

}

 

В init добавляем к примеру проверку на доступ по операции, либо другую функциональность

initCanAbilityToAdd1: function() {

                RightUtilities.checkCanExecuteOperation({

                    operation: "CanAbilityToAdd1"

                }, function(result) {

                    this.set("CanAbilityToAdd1", result);

                }, this);

            },

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

 

Уже зарегистрирована идея  добавить возможность контролировать какой тип страницы редактирования используется какой ролью.

Полозюков Евгений Петрович,

 пытаюсь сделать что-то подобное, все проверила 10 раз, но отладчик выдает:

Uncaught (in promise) TypeError: RightUtilities.checkCanExecuteOperation is not a function

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

define("SysOperationAuditSectionV2", ["BaseFiltersGenerateModule", "SysOperationAudit", "SysOperationAuditArch",
	"RightUtilities"],
function(BaseFiltersGenerateModule, SysOperationAudit, SysOperationAuditArch, RightUtilities) {
	return {

 

Зверев Александр, да, была проблема с последовательностью схем и параметров, передаваемых в схему)

Алла Савельева,

 

Спасибо, что подсказали на тему замещения BaseDataView. Натолкнули на верный путь!

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

define("ActivitySectionV2", ["ConfigurationConstants","RightUtilities","ProcessModuleUtilities","BaseDataView"],
function(ConfigurationConstants,RightUtilities,ProcessModuleUtilities) {
	return {
		entitySchemaName: "Activity",
		details: /**SCHEMA_DETAILS*/{}/**SCHEMA_DETAILS*/,
		attributes: 
		{ 
			"UsrCanManageItTask": {
				dataValueType: this.Terrasoft.DataValueType.BOOLEAN,
				type: this.Terrasoft.ViewModelColumnType.VIRTUAL_COLUMN,
				value: false
			}
		},
		diff: /**SCHEMA_DIFF*/[
 
			]/**SCHEMA_DIFF*/,
		methods: {
			init: function()
			{
					this.getUserSettingsOperationRight();
					window.console.log("Инициализация");
					this.callParent(arguments);
					window.console.log("Права");
 
			},
 
			initEditPages: function() {
				window.console.log("Определение кнопок начало");
 
				var enabledEditPages = new this.Terrasoft.Collection();
 
					this.callParent(arguments);
					var editPages = this.get("EditPages");
 
					window.console.log("Получение страниц");
					var flag = this.get("UsrCanManageItTask");
					this.Terrasoft.each(editPages.getItems(), function(item) {
						window.console.log("Проверка типа");
						window.console.log(item.get("Id"));
						//window.console.log(ConfigurationConstants.Activity.Type.Email);ConfigurationConstants.Activity.Type.Call
						if (item.get("Id") !== "e2831dec-cfc0-df11-b00f-001d60e938c6" &&
							item.get("Id") !== "e1831dec-cfc0-df11-b00f-001d60e938c6") {
 
							if (item.get("Id") !== "f5921924-3e81-4a5f-ae4c-5a6f1b6e7661")
							{
								enabledEditPages.add(item);
								//window.console.log("ок");
							}
							else { 
								if (flag)
								{
										enabledEditPages.add(item);
										//window.console.log("ок");
								}
							}
						}
					});
					window.console.log("Проверка типа конец");
					this.set("EnabledEditPages", enabledEditPages);
 
					window.console.log("Определение кнопок конец");
			},
 
			getFilters: function() {
						window.console.log("Добавление фильтра");
						var filters = this.callParent(arguments);
						if (!this.get("UsrCanManageItTask"))
						{
							filters.add("NotItTask", this.Terrasoft.createColumnFilterWithParameter(
							this.Terrasoft.ComparisonType.NOT_EQUAL, "Type", "f5921924-3e81-4a5f-ae4c-5a6f1b6e7661"
							));
							window.console.log("Добавление фильтра");
						}
						return filters;
			},
 
			getUserSettingsOperationRight: function() {
				//debugger;
				var operationsToRequest = ["UsrCanManageItTask"];
				//operationsToRequest.push("UsrCanManageItTask");
				window.console.log("Права");
 
				RightUtilities.checkCanExecuteOperations(operationsToRequest, function(result) {
					if (result) {
						this.set("UsrCanManageItTask", result.UsrCanManageItTask);
						window.console.log("Права на ит-задачи: "+result.UsrCanManageItTask);
					}
				}, this);
			}
		}
 
	};
});

 

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

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

 

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

Для этого выбран один из вариантов: отобразить 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 следующей стадии кейса, в котором находится продажа? Это бы сильно помогло.

 

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

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

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

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

Коллеги, добрый день!

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

Отключил в объекте проверку на заполненность поля на уровне приложения.

Остается видимо еще дополнительная логика на уровне JS и C#, которая соответственно заполняет исполнителя при открытии карточки задачи в режиме создания и + при создании задачи логикой C# (при открытии карточки задачи уже после ее успешного создания поле все равно становится заполненным).

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

С уважением,

Кулиш Александр

Нравится

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

Добрый день!

Проверьте заполнено ли в EntityScheme в поле 'Ответственный' свойство 'Значение по умолчанию'. Если установлено, то нужно зайти в настройки данного свойства и выбрать вариант 'Не устанавливать значение по умолчанию'.

После этого нужно сохранить и опубликовать схему таблицы.

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

После этого перелогиниться в приложение и проверить заполняется ли поле 'Ответственный' в активностях.

Добрый день!

Проверьте заполнено ли в EntityScheme в поле 'Ответственный' свойство 'Значение по умолчанию'. Если установлено, то нужно зайти в настройки данного свойства и выбрать вариант 'Не устанавливать значение по умолчанию'.

После этого нужно сохранить и опубликовать схему таблицы.

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

После этого перелогиниться в приложение и проверить заполняется ли поле 'Ответственный' в активностях.

Алла Савельева,

Спасибо! Вопрос решен.

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