Добрый день!

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

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

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

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

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



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

Нравится

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

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

А у вас: OnEntityInitialized. 



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

 

Добрый день, 



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

Yurii,

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

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

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

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

А у вас: OnEntityInitialized. 



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

 

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

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

Нравится

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

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

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

 

 

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

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

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

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

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

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

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

Добрый день!

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



Следовал инструкции 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.

 

С уважением,

Катя

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

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

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

Нравится

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

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

 

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

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

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

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

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

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

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

Нравится

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

Добрый день.

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

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

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

Добрый день!



Развернул 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".

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

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

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

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



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

Если с обычным фильтром можно как-то решить вопрос через 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 в бд и запускать по полученном, они же связаны в любом случае.

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

Всем привет! 

При вызове метода 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# и там все решить и вернуть ответ

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

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

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