#OnEntityInitialized
Sales_Creatio_enterprise_edition
7.17

Добрый день!

Есть пакет A в котором переопределена схема страницы раздела UsrTender1Page

Есть Пакет который зависит от пакета и в нем тоже есть переопределённая схема  UsrTender1Page.

Проблема заключается в том что Метод OnEntityInitialized не запускается в схеме UsrTender1Page из пакета B. В пакете А OnEntityInitialized запускается нормально

Пакет А мы трогать не можем так как доступ к нем закрыт и свою работу мы ведём в отдельном пакете B.

Метод init работает в обеих схемах.



В чем может быть причина? Как заставить OnEntityInitialized заработать?

Нравится

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

Чеботов Никита, Проблема в самой названии функции  пишется так: onEntityInitialized

А у вас: OnEntityInitialized. 



Для наглядности прикрепляю скрин:

 

Добрый день, 



Можете пожалуйста прикрепить код метода в вашей странице из пакета В ? 

Yurii,

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

OnEntityInitialized: function() {
     this.callParent(arguments);
     debugger;
}

Метод Init работает стабильно

Чеботов Никита, Проблема в самой названии функции  пишется так: onEntityInitialized

А у вас: OnEntityInitialized. 



Для наглядности прикрепляю скрин:

 

Показать все комментарии
#Entity
#программист
Studio_Creatio
7.17

Нужно в раздел Активности считывать элементы из дочернего объекта. Как называется функция запроса элементов (строк) раздела по entitySchemaName? Нужно, чтобы её переназначить на свою.

Нравится

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

Не совсем понятно, что вы подразумеваете под дочерним элементом, возможно деталь на карточке активности?

Имеется в виду получить данные из какой-то детали? Обычный ESQ запрос, только с объектом детали в качестве корневого. 

 

 

Бершеда Д. Н.,

Нет. Мне нужно передать записи из стороннего объекта в раздел.

Чтобы вместо записей текущего объекта отображались записи стороннего объекта. 

Дима Вовченко,

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

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

Показать все комментарии
#лента
редактор
Studio_Creatio_enterprise_edition
7.17

Добрый день!

Хочу добавить панель редактирования текста к существующему полю сообщения, но необходимая панель у него не появляется



Следовал инструкции https://community.terrasoft.ua/questions/izmenenie-teksta-v-kommentariy…



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



 

diff: [
// Сообщение в которое хочу добавить редактор текста 
//Зеленый блок на картинке
{
	"operation": "insert",
	"name": "SocialMessageEdit",
	"parentName": "SocialMessageEditContainer",
	"propertyName": "items",
	"values": {
		"generateId": false,
		"className": "Terrasoft.ESNHtmlEdit",
		"itemType": Terrasoft.ViewItemType.MODEL_ITEM,
		"dataValueType": Terrasoft.DataValueType.TEXT,
		"contentType": Terrasoft.ContentType.RICH_TEXT,
		"labelConfig": {
			"visible": false
		},
		"keydown": {bindTo: "onKeyDown"},
		"enterkeypressed": {bindTo: "onEnterKeyPressed"},
		"value": {bindTo: "SocialMessageText"},
		"placeholder": {bindTo: "Resources.Strings.WritePostHint"},
		"classes": {
			htmlEditClass: ["postMessage", "placeholderOpacity", "feedMaxWidth"]
		},
		"focus": {bindTo: "onSocialMessageEditFocus"},
		"focused": {bindTo: "SocialMessageEditFocused"},
		"blur": {bindTo: "onSocialMessageEditBlur"},
		"markerValue": "postMessageMemoEdit",
		"height": "26px",
		"prepareList": {bindTo: "prepareEntitiesExpandableList"},
		"list": {bindTo: "entitiesList"},
		"listViewItemRender": {bindTo: "onEntitiesListViewItemRender"},
		"autoGrow": true,
		"autoGrowMinHeight": 26,
		"customItemAttributes": {
			schema: {
				property: "schemaName",
				attribute: "data-schemaname"
			}
		}
	}
},
 
//Поле с редактором, которое удалось добавить
//Красный блок на картинке
{				
	"operation": "insert", // Операция добавления компонента на страницу.
	"name": "Message",//"Message", // Имя колонки схемы, к которой привязан компонент.
	"parentName": "SocialMessageEditContainer", // Мета-имя родительского контейнера, в который добавляется поле.
	"propertyName": "items", // Поле добавляется в коллекцию компонентов родительского элемента.
	"values": {
		// Заголовок поля.
		"contentType": this.Terrasoft.ContentType.RICH_TEXT,
		"labelConfig": {
			"visible": false
		},
		// Расположение поля.
		"layout": {						
			"column": 0, // Номер столбца.						
			"row": 0, // 5 Номер строки.						
			"colSpan": 12, // 12 Диапазон занимаемых столбцов.
			"layoutName": "SocialMessageEditContainer"
		},
		"height": "50px",
		"styles": {
			"background-color": "white"
		},
		"controlConfig": {  //здесь и ниже код для того, чтобы в примечания можно было добавлять картинки
			"imageLoaded": {
				"bindTo": "SortIcon"//"insertImagesToNotes"
			},
			"images": {
				"bindTo": "SummariesIcon"//"NotesImagesCollection"
			}
		}
	}
}
]

Вот такой результат вижу сейчас

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

Нравится

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

Если попробовать операцией merge изменить зеленый блок, функциональность не проявляется



 

{				
	"operation": "merge", // Операция добавления компонента на страницу.
	"name": "SocialMessageEdit",//"Message", // Имя колонки схемы, к которой привязан компонент.
	"parentName": "SocialMessageEditContainer", // Мета-имя родительского контейнера, в который добавляется поле.
	"propertyName": "items", // Поле добавляется в коллекцию компонентов родительского элемента.
	"values": {
		// Заголовок поля.
		"contentType": this.Terrasoft.ContentType.RICH_TEXT,
		"labelConfig": {
			"visible": false
		},
		// Расположение поля.
		"layout": {						
			"column": 0, // Номер столбца.						
			"row": 0, // 5 Номер строки.						
			"colSpan": 12, // 12 Диапазон занимаемых столбцов.
			"layoutName": "SocialMessageEditContainer"
		},
		"height": "50px",
		"styles": {
			"background-color": "white"
		},
		"controlConfig": {  //здесь и ниже код для того, чтобы в примечания можно было добавлять картинки
			"imageLoaded": {
				"bindTo": "SortIcon"//"insertImagesToNotes"
			},
			"images": {
				"bindTo": "SummariesIcon"//"NotesImagesCollection"
			}
		}
	}
}

 

Полный код замещающей модели представления базовой схемы SocialFeed :



https://datagr-my.sharepoint.com/:u:/g/personal/serhii_udielov_datagroup_ua/Efsq1LLC5wJOuTQV_9Ld4nMB3Y12zlmuLfn96ROGOyQHJA?e=jjhI5y 

Добрый день,

 

У меня получилось такое сделать, только нужно еще с кнопкой Publish доделать (пробовал через новые контейнеры сделать, но кнопку адекватно переместить не смог):

Сам код:

define("SocialFeed", ["ESNHtmlEditModule", "SocialMentionUtilities", "css!SocialMessagePublisherModule", "NotesUtilities"
], function() {
	return {
      	entitySchemaName: "SocialMessage",
      	mixins: {
			NotesUtilities: "Terrasoft.NotesUtilities"
		},
      	attributes: {
        	"NotesImagesCollection": {dataValueType: Terrasoft.DataValueType.COLLECTION}
		},
 
      	methods: {
          /**
			 * @inheritdoc
			 * @overridden
			 */
          	init: function(callback, scope) {
                this.callParent(arguments); 
                this.mixins.NotesUtilities.initNotesImagesCollection.call(this);
        	},
          	onNotesImagesUploadComplete: function() {
                this.hideBodyMask(); 
                this.updateFileDetail(); 
        	}, 
        	onNotesImagesUpload: function() { 
                this.showBodyMask(); 
        	},
 
          	onButtonClick: function(){
				console.log("Test");
            },
 
			postPublishActionsVisible: function() {
				return true;
			}
        },
 
		diff: /**SCHEMA_DIFF*/[
			{
					"operation": "insert",
					"name": "MessageContainer",
					"parentName": "SocialFeedHeader",
					"propertyName": "items",
					"values": {
						"itemType": Terrasoft.ViewItemType.CONTAINER,
						"items": []
					}
				},
			{				
				"operation": "insert",
				"name": "Message",
				"parentName": "MessageContainer", 
				"propertyName": "items",
				"values": {
					"contentType": this.Terrasoft.ContentType.RICH_TEXT,
					"labelConfig": {
						"visible": false
					},
					"value": {bindTo: "SocialMessageText"},
					"layout": {						
						"column": 0,						
						"row": 0,						
						"colSpan": 12,
                      	"layoutName": "SocialFeedHeader"
					},
					"height": "50px",
					"styles": {
							"background-color": "white"
					},
					"controlConfig": {
						"imageLoaded": {
							"bindTo": "SortIcon"
						},
						"images": {
							"bindTo": "NotesImagesCollection"
						}
					}
				}
			},
 
			{
					"operation": "insert",
					"name": "MessagePublishButtonContainer",
					"parentName": "MessageContainer",
					"propertyName": "items",
					"values": {
						"generateId": false,
						"itemType": Terrasoft.ViewItemType.CONTAINER,
						"classes": {
							wrapClassName: ["publishButtonWrap"]
						},
						"visible": {bindTo: "postPublishActionsVisible"},
						"items": []
					}
				},
 
			{
					"operation": "insert",
					"parentName": "MessagePublishButtonContainer",
					"name": "MessagePublishButton",
					"propertyName": "items",
					"values": {
						"generateId": false,
						"caption": {bindTo: "Resources.Strings.Publish"},
						"itemType": Terrasoft.ViewItemType.BUTTON,
						"style": Terrasoft.controls.ButtonEnums.style.GREEN,
						"click": {bindTo: "onPostPublishClick"},
						"markerValue": "publishPostMessageButton",
						"classes": {
							textClass: ["floatRight"]
						},
						"clickDebounceTimeout": 1000
					}
				},
			{
				"operation": "remove",
				"name": "SocialMessageContainer"
			}
		]/**SCHEMA_DIFF*/
	};
});

Сообщения публикуются при нажатии на Publish, осталось только переместить саму кнопку.

Oleg Drobina,

Супер! Получилось отобразить редактор, поигрался немного с индексами и вышло более-менее корректно отобразить необходимые панельки





Но теперь появилась следующая проблема :

при попытке добавить изображение с локального устройства, ловлю такое (картинка не загружаеться):





Мой текущий код елемента :

{                

              "operation": "insert",

                "name": "Message",

                "parentName": "MessageContainer", 

                "propertyName": "items",

                "values": {

                      //"bindTo": "Message",

                      "itemType": Terrasoft.ViewItemType.MODEL_ITEM,

                      //"dataValueType": Terrasoft.DataValueType.TEXT,

                    "contentType": this.Terrasoft.ContentType.RICH_TEXT,

                      //"className": "Terrasoft.ESNHtmlEdit", //- removed redactor

                    "labelConfig": {

                        "visible": false

                    },

                      // "keydown": {bindTo: "onKeyDown"}, //invalid logic in side chat

                    // "enterkeypressed": {bindTo: "onEnterKeyPressed"}, //invalid logic in side chat

                    "value": {bindTo: "SocialMessageText"}, //+

                    //"placeholder": {bindTo: "Resources.Strings.WritePostHint"},

                      "focus": {bindTo: "onSocialMessageEditFocus"},

                    "focused": {bindTo: "SocialMessageEditFocused"},

                    "blur": {bindTo: "onSocialMessageEditBlur"},

                    "markerValue": "postMessageMemoEdit",

                    "layout": {                        

                        "column": 0,                        

                        "row": 0,                        

                        "colSpan": 12,

                          "layoutName": "SocialFeedHeader"

                    },

                    "height": "26px",

                      //"classes": {

                    //        htmlEditClass: ["placeholderOpacity"]

                    //},

                    "styles": {

                            "background-color": "white"

                    },

                    "controlConfig": {                          

                        "imageLoaded": {

                            "bindTo": "SortIcon"

                        },

                        "images": {

                            "bindTo": "NotesImagesCollection"

                        }

                    }

                },

                  "index" : 0

            },

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

 

 define("SocialFeed", ["ESNHtmlEditModule", "SocialMentionUtilities", "css!SocialMessagePublisherModule", "NotesUtilities"
], function() {
	return {
      	entitySchemaName: "SocialMessage",
      	mixins: {
			NotesUtilities: "Terrasoft.NotesUtilities"
		},
      	attributes: {
        	"NotesImagesCollection": {dataValueType: Terrasoft.DataValueType.COLLECTION}
		},
 
      	methods: {
          /**
			 * @inheritdoc
			 * @overridden
			 */
          	init: function(callback, scope) {
                this.callParent(arguments); 
                this.mixins.NotesUtilities.initNotesImagesCollection.call(this);
        	},
			postPublishActionsVisible: function() {
				return true;
			}
        },
 
		diff: /**SCHEMA_DIFF*/[
			{
					"operation": "insert",
					"name": "MessageContainer",
					"parentName": "SocialFeedHeader",
					"propertyName": "items",
					"values": {
						"itemType": Terrasoft.ViewItemType.CONTAINER,
						"items": []
					}
				},
			{				
				"operation": "insert",
				"name": "Message",
				"parentName": "MessageContainer", 
				"propertyName": "items",
				"values": {
					"contentType": this.Terrasoft.ContentType.RICH_TEXT,
					"labelConfig": {
						"visible": false
					},
					"value": {bindTo: "SocialMessageText"},
					"layout": {						
						"column": 0,						
						"row": 0,						
						"colSpan": 12,
                      	"layoutName": "SocialFeedHeader"
					},
					"height": "50px",
					"styles": {
							"background-color": "white"
					},
					"controlConfig": {
						"imageLoaded": {
							"bindTo": "insertImagesToNotes"
						},
						"images": {
							"bindTo": "NotesImagesCollection"
						}
					}
				}
			},
 
			{
					"operation": "insert",
					"name": "MessagePublishButtonContainer",
					"parentName": "MessageContainer",
					"propertyName": "items",
					"values": {
						"generateId": false,
						"itemType": Terrasoft.ViewItemType.CONTAINER,
						"classes": {
							wrapClassName: ["publishButtonWrap"]
						},
						"visible": {bindTo: "postPublishActionsVisible"},
						"items": []
					}
				},
 
			{
					"operation": "insert",
					"parentName": "MessagePublishButtonContainer",
					"name": "MessagePublishButton",
					"propertyName": "items",
					"values": {
						"generateId": false,
						"caption": {bindTo: "Resources.Strings.Publish"},
						"itemType": Terrasoft.ViewItemType.BUTTON,
						"style": Terrasoft.controls.ButtonEnums.style.GREEN,
						"click": {bindTo: "onPostPublishClick"},
						"markerValue": "publishPostMessageButton",
						"classes": {
							textClass: ["floatRight"]
						},
						"clickDebounceTimeout": 1000
					}
				},
			{
				"operation": "remove",
				"name": "SocialMessageContainer"
			}
		]/**SCHEMA_DIFF*/
	};
});

 

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

Пытаюсь вынести страницу Email из раздел Активности в новый раздел EmailAct.

 

Идея была привязать две раздел на один объект и перепривязать или скопировать страницу Email.

 

Для этого создал новый раздел Email и объект EmailAct. После этого в таблица "SysModuleEntity" у нового раздел (значение "Id" взят из таблицы "SysModule" поле "SysModuleEntityId" для EmailAct) указал в поле "SysEntitySchemaUId" как для Активности.

-------

Далее попытался сменить "Code" в "SysModule" с 'EmailAct' на 'Activity'. Но вместо привязки записей из Активности в Email -> получаю два раздел Email без записей.

 

Не подскажите - что я сделал не то?

И как правильно выполнить поставленную задача?

 

Планировалось, что объект активности так и останется активности, просто раздел Активности будет иметь фильтр по тип не равно Email, а раздел Email будет копией Активности, но с фильтру по тип равно Email

 

Спасибо!

 

P.S. Извините за русский, не мой родной язык, но английский ещё хуже знаю (использую переводчик).

Если кто знает армянский - можете на нем ответить - мне будет более просто.

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

Нравится

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

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



getFilters: function() {

                var filters = this.callParent(arguments);

                filters.add("EmailFilter", this.Terrasoft.createColumnFilterWithParameter(

                    this.Terrasoft.ComparisonType.EQUAL, "Type", ConfigurationConstants.Activity.Type.Email

                ));

                return filters;

            }



Следующий шаг это сделать что бы открывалась нужна страница, я бы создал новый пейдж и унаследовался от EmailPageV2, и перебиндил бы её в таблице SysModueEdit

Точная версия ПО: 7.17.3.1.377

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



Можно ли это сделать? Да. 

Есть ли лучший способ решить задачу? Думаю, что тоже да.

Стас Гаврилюк,

Сейчас email находится в Активности.

Т.к. email активностей может быть много - нужно сделать раздел вноль как раздел Активности, только где была бы одна единственная страница Email и соответственно записи из объекта Активности с типом Email . А в активностях её или убрать или скрыть и сделать так, чтоб записи с типом Email не отображались.

Не подскажите - как это лучше сделать?

Стас Гаврилюк,

Идея была в том, чтобы создать новый раздел ссылающийся на объект активности и имеющий фильтрацию по тип = email. А у Активности добавить фильтрацию по тип не равно email.

 

Стас Гаврилюк,

Хотелось бы прочитать - как лучше это сделать?

Max Froggy,

Т.к. email активностей может быть много - нужно сделать раздел вноль как раздел Активности,

 

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

Стас Гаврилюк,

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

Я хоть и часто работал с C#/JS и Creatio не совсем понимаю, как это сделать...

Стас Гаврилюк,

Скажите хоть - как бы вы решали такую задачу?

Стас Гаврилюк,

Очень прошу помочь...

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

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



getFilters: function() {

                var filters = this.callParent(arguments);

                filters.add("EmailFilter", this.Terrasoft.createColumnFilterWithParameter(

                    this.Terrasoft.ComparisonType.EQUAL, "Type", ConfigurationConstants.Activity.Type.Email

                ));

                return filters;

            }



Следующий шаг это сделать что бы открывалась нужна страница, я бы создал новый пейдж и унаследовался от EmailPageV2, и перебиндил бы её в таблице SysModueEdit

Стас Гаврилюк, огромное спасибо

как минимум поменять - поменять что?

Стас Гаврилюк,

Проблемка единственное, при клике на Email выделяется почему-тоАктивности

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

 

В приложении существует три основные таблицы в которых хранится информация о разделе:  SysModule, SysModuleEntity, SysModuleEdit.



SysModule - таблица, где хранятся сама информация про раздел.

SysModuleEntity - таблица связи раздела и SysModuleEdit. В ней хранится информация про типизацию страниц.

SysModuleEdit - информация про страницы редактирования раздела.

 

Более детально о таблицах SysModuleEdit и SysModuleEntity можно прочитать здесь:

https://community.terrasoft.ua/articles/tablicy-sysmoduleedit-i-sysmodu…

 

Что касается SysModule:

 [Caption] - Название раздела (можно брать caption объекта раздела.

[SysModuleEntityId]  - колонка Id записи таблицы SysModuleEntity из первого этапа (проверка Select Id from SysModuleEntity Where SysEntitySchemaUId='AF6DD4AD-1398-4FCE-8837-78DC65AE0F9E')

[Code] - Название объекта раздела;

[SectionModuleSchemaUId] - UId модуля SectionModuleV2 с помощью которой открывается схему раздела;

[SectionSchemaUId] - колонка Uid страницы раздела объекта (например, "UsrRK1Section") в таблице SysSchema (проверка Select Uid,Name,Caption from SysSchema where name like '%UsrRK%'). 

Что касается Вашей проблемы рекомендую проверить корректно ли заполнены все привязки в данных таблицах.

 

Вот некоторые моменты с которыми пользователи часто сталкиваются при создании этого раздела:

- Вы можете использовать в таблице SysModuleEdit ( колонка CardSchemaUId) схему базовой странице редактирования EmailPageV2.

- Проверьте установлена ли связать этой записи в таблице SysModuleEdit с таблицей SysModuleEntity Вашего раздела.

- Также проверьте что в таблице SysModule Вашего раздела указана корректная запись из таблице  SysModuleEntity.

 

С уважением,

Катя

Показать все комментарии
права доступа
Sales_Creatio
7.17

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

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

Нравится

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

на ум приходит автозаполнение поля, по которому происходит переход заказа на стадию кейса и на стадии уже запускается процесс распределения прав

 

Можно вторым insert добавить права в SysOrderRights

Я бы перевёл сервис на работу с Entity, если не было каких-то очень серьёзных оснований реализовывать именно так. Потому что в дальнейшем это ещё больше проблем будет создавать.

Но вообще класс RightsHelper должен помочь

Показать все комментарии
Excel Импорт
переопределить
схема
убрать базовую логику
импорт Excel
excel
Studio_Creatio
7.17

Требуется переопределить базовую схему FileImportStartPage. Что бы при вызове стандартного импорта вида ViewModule.aspx?vm=FileImportWizard#FileImportModule/FileImportStartPage/b8482840-b481-47ba-8d10-ce16561429f1/Contact

Выдавалась моя страница с частично изменённой логикой. Но при переопределении схем FileImportStartPage, FileImportModule, FileImportWizard

Падает с ошибками

Нравится

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

Добрый день.

Уточните, пожалуйста, какую ошибку вы получаете?

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

Показать все комментарии
ошибка IIS
postman
авторизация
Studio_Creatio
7.17

Добрый день!



Развернул creatio on-site, но при попытке проверки авторизации с помощью Postman мне возвращается 401Unauthorized

{
    "Message": "There was an error processing the request.",
    "StackTrace": "",
    "ExceptionType": ""
}

Сам запрос с корректными данными в Body c которым я захожу на сайт

POST /0/ServiceModel/AuthService.svc/Login HTTP/1.1
Host: my-host
Content-Type: application/json
Cookie: UserName=103|113|100|106|103|106|112|114|113|102|111
Content-Length: 76
 
{    
    "UserName":"UserName",
    "UserPassword":"UserPassword"
}



Подскажите в чем может быть проблема?



 

Нравится

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

host/0/SERVICEMODEL/AUTHSERVICE.SVC/LOGIN 401 UNAUTORIZED

host/SERVICEMODEL/AUTHSERVICE.SVC/LOGIN 200 OK 

Добрый день.

Похоже на то, что вы используете .net Core сборку приложения.
В .net Core приложении нет "0", именно по этому вы не можете авторизоваться.
Корректный путь "/ServiceModel/AuthService.svc/Login HTTP/1.1".

Показать все комментарии
РасширенныйФильтр
Studio_Creatio_enterprise_edition
7.17

Приветствую всех!

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

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



Мне надо повесить проверку для фильтра "Заголовок".

Если с обычным фильтром можно как-то решить вопрос через getFilter, то как стучать в расширенные?

 

Нравится

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

Здравствуйте Владислав,

 

С расширенными фильтрами так же само, как и с обычными: как только нажимается кнопка "Применить", чтобы применить расширенный фильтр, вызывается тот же метод getFilters из BaseDataView. То есть нужно смотреть как можно заменить логику этого метода.

 

С уважением,

Олег

Удалось достать значения фильтров, но понял что используя getFilter мою задачу реализовать не выйдет. Во-первых я никак не могу переопределить кнопку "применить" из схемы которая рисует и собирает конфиг расширенного фильтра - ExtendedFilterEditModelV2.

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



Прикрепляю код переопределенной схемы раздела.

 

define("ActivitySectionV2", ["ExtendedFilterEditModelV2"], function(ExtendedFilterEditModelV2) {
	return {
		entitySchemaName: "Activity",
		details: /**SCHEMA_DETAILS*/{}/**SCHEMA_DETAILS*/,
		diff: /**SCHEMA_DIFF*/[]/**SCHEMA_DIFF*/,
		methods: {
 
            getFilters: function () {
                var filters = this.callParent(arguments);
                var customFilters = filters.contains("CustomFilters") ? filters.get("CustomFilters") : null;
                //debugger;
                var count = 0;
                for(var i in customFilters.collection.keys) { 
                    if(customFilters.collection.items[i].isEnabled && customFilters.collection.items[i].leftExpressionCaption == "Заголовок"){ 
                        var headerCaption = customFilters.collection.items[i].rightExpression.parameter.value; //rightExpression.parameter.value
                        if(headerCaption == null || headerCaption.length < 3) { 
                            this.showInformationDialog("WORKING");
                            //this.applyFilters();
                            return filters;
                        }
                    }
                }
                return filters;
            },
 
            applyButton: function() {
                this.showInformationDialog("btn handler works");
            },
        }
 
	};
});

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

Буду благодарен за любую помощь.

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

Добрый день. 

Когда БП запускаешь из серверного кода при помощи конструкции:

var schema = UserConnection.ProcessSchemaManager.GetInstanceByName(@"Process1");

То будет в дальнейшем вызвана актуальная версия БП или та, чьё имя полностью совпадает с написанным в поиске схему, независимо от того, является она актуальной или нет?

Нравится

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

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

 

Спасибо за обращение.

 

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

 

С уважением,

Анастасия 

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

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

https://academy.terrasoft.ua/api/netcoreapi/7.18.0/api/Terrasoft.Core.P…



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

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

Всем привет! 

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

https://community.terrasoft.ua/questions/kak-poluchit-dostup-do-sysadmi…



Есть такой код: 

initData: function() {
					this.initializeActionButtons();
					this.callParent(arguments);
					this.isUserInRole(JSConst.SYS_ADMIN_UNIT_ROLE.ROLE.SALES_MANAGER);
					this.isUserInRole(JSConst.SYS_ADMIN_UNIT_ROLE.ROLE.SALES_DEPARTMENT_MANAGER);
					this.isUserInRole(JSConst.SYS_ADMIN_UNIT_ROLE.ROLE.SYS_ADMIN);
				},
 
 
isUserInRole: function(roleId) {
					var currentUserId = Terrasoft.core.enums.SysValue.CURRENT_USER;
 
					var esqCheckUserPossibility = Ext.create("Terrasoft.EntitySchemaQuery", {
						rootSchemaName: "SysAdminUnitInRole"
					});
					esqCheckUserPossibility.addColumn("id");
                    esqCheckUserPossibility.filters.logicalOperation = this.Terrasoft.LogicalOperatorType.AND;
                    var currentUserInRole = esqCheckUserPossibility.createColumnFilterWithParameter(
						Terrasoft.ComparisonType.EQUAL, 
						"SysAdminUnit",
						currentUserId);
                    var isBelongToRoleFilter = esqCheckUserPossibility.createColumnFilterWithParameter(
						Terrasoft.ComparisonType.EQUAL, 
						"SysAdminUnitRoleId", 
						roleId);	
 
					esqCheckUserPossibility.filters.add("UserFilter", currentUserInRole);
					esqCheckUserPossibility.filters.add("isBelongToRoleFilter", isBelongToRoleFilter);
 
                    esqCheckUserPossibility.getEntityCollection(function (response) {
                        if (!response && !response.success) {
		             		return;
	        	    	}
						if(!response.collection.isEmpty()) {
							if(roleId == JSConst.SYS_ADMIN_UNIT_ROLE.ROLE.SALES_MANAGER) {
								this.$IsUserHasSalesManagerRole = true;
							}
							else if(roleId == JSConst.SYS_ADMIN_UNIT_ROLE.ROLE.SALES_DEPARTMENT_MANAGER) {
								this.$IsUserHasSalesDepartmentManagerRole = true;
							}
							else if(roleId == JSConst.SYS_ADMIN_UNIT_ROLE.ROLE.SYS_ADMIN) {
								this.$IsUserHasSysAdminRole = true;
							}
							return;
                    	}
						/*
                        if (callback) {
                            callback.call(scope || this);
                        }
						*/
                    },this);
				},
 
onUpdateServiceProvisionClick: function() {
					if(this.$IsUserHasSalesManagerRole || this.$IsUserHasSalesDepartmentManagerRole) {
						if(this.$IsUserHasSysAdminRole) {
							this.callServiceProvisionService(this.$MasterRecordId, this.onCallServiceProvisionServiceCallback, this);
						}
						else { 
                          	var message = this.get("Resources.Strings.MessageDependsOnUserRoleCaption");
							this.showInformationDialog(message);
						}
                    }
					else { 
						this.callServiceProvisionService(this.$MasterRecordId, this.onCallServiceProvisionServiceCallback, this);
					}
                },



в методе isUserInRole(roleId) беру id текущего юзера 

var currentUserId = Terrasoft.core.enums.SysValue.CURRENT_USER;

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



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

Нравится

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

Владислав, добрый день!

Доступ к объекту SysAdminUnitInRole происходит через веб-сервисы. Это связано с безопасностью – по этой причине через ESQ получить данные не получится. Для решения Вашей задачи рекомендую обратить внимание на схему детали SysFuncRoleInUserDetailV2. Выборка данных происходит по объекту SysUserInRole, а не по объекту SysAdminUnitInRole. Попробуйте работать с другим объектом.

Владислав, добрый день!

Доступ к объекту SysAdminUnitInRole происходит через веб-сервисы. Это связано с безопасностью – по этой причине через ESQ получить данные не получится. Для решения Вашей задачи рекомендую обратить внимание на схему детали SysFuncRoleInUserDetailV2. Выборка данных происходит по объекту SysUserInRole, а не по объекту SysAdminUnitInRole. Попробуйте работать с другим объектом.

Дима Вовченко,

Спасибо! 

или же написать вызов сервиса на c# и там все решить и вернуть ответ

Стас Гаврилюк,

Посчитал корректным писать это на клиенте и при инициализации сразу же раздавать права и манипулировать доступностью объектов в зависимости от роли пользователя. 

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