Вопрос

Как заместить функцию initconfig модуля UserCasesListModule.

Для изменения фильтрации нужно изменить данную функцию у этого модуля.

Подскажите как это правильно сделать?

Пробывал сделать вот так результатов не дало

define("ITUserCasesListModule", ["terrasoft", "UserCasesListModule","ext-base", "UserCasesListModuleResources",
"PortalClientConstants",
		"BaseNestedModule", "GridUtilitiesV2", "ContainerListGenerator", "ContainerList", "DashboardGridModule",
		"css!PortalModulesCSS"],
	function(Terrasoft, Ext, resources, PortalClientConstants) {
 
		Ext.define("Terrasoft.configuration.ITUserCasesListModule", {
			extend: "Terrasoft.UserCasesListModule",
			alternateClassName: "Terrasoft.ITUserCasesListModule",
 
			Ext: null,
			sandbox: null,
			Terrasoft: null,
			showMask: null,
 
			/**
			 * ### ###### ###### ############# ### ########## ######.
			 * @type {String}
			 */
			viewModelClassName: "Terrasoft.UserCasesListViewModel",
 
			/**
			 * ### ##### ########## ############ ############# ########## ######.
			 * @type {String}
			 */
			viewConfigClassName: "Terrasoft.UserCasesListViewConfig",
 
			/**
			 * ### ##### ########## #############.
			 * @type {String}
			 */
			viewGeneratorClass: "Terrasoft.ViewGenerator",
 
			/**
			 * ############## ###### ############ ######.
			 * @protected
			 * @overridden
			 */
			initConfig: function() {
				this.moduleConfig =	{
					"caption": "",
					"sectionId": PortalClientConstants.SysModule.PortalMainPageSectionId,
					"entitySchemaName": "Case",
					"filterData": "{\"className\":\"Terrasoft.FilterGroup\",\"items\":{},\"logicalOperation\":0," +
						"\"isEnabled\":true,\"filterType\":6,\"rootSchemaName\":\"Case\",\"key\":\"\"}",
					"style": "widget-green",
					"orderDirection": 2,
					"orderColumn": "RegisteredOn",
					"rowCount": 10,
					"gridConfig": {
						"items": [
							{
								"bindTo": "Number",
								"type": "text",
								"position": {
									"column": 0,
									"colSpan": 6,
									"row": 1
								},
								"aggregationType": "",
								"metaPath": "Number",
								"path": "Number"
							},
 
							{
								"bindTo": "RegisteredOn",
								"type": "title",
								"position": {
									"column": 50,
									"colSpan": 0,
									"row": 1
								},
								"orderDirection": 2,
								"orderPosition": 1,
								"dataValueType": 7,
								"aggregationType": "",
								"metaPath": "RegisteredOn",
								"path": "RegisteredOn"
							}
						]
					}
				};
			}
 
		});
 
		return Terrasoft.ITUserCasesListModule;
	}
);

 

У меня такой же вопрос

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

Выходит во такая ошибка

Казанцев Андрей Юрьевич,

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

Теперь по Вашему вопросу - ошибка в заголовке функции. Должно быть вот так:

define("ITUserCasesListModule", ["terrasoft", "ext-base", "UserCasesListModuleResources",
"PortalClientConstants",
		"BaseNestedModule", "GridUtilitiesV2", "ContainerListGenerator", "ContainerList", "DashboardGridModule",
		"css!PortalModulesCSS", "UserCasesListModule"],
	function(Terrasoft, Ext, resources, PortalClientConstants) {

 

Алла Савельева пишет:

Казанцев Андрей Юрьевич,

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

Теперь по Вашему вопросу - ошибка в заголовке функции. Должно быть вот так:


 
define("ITUserCasesListModule", ["terrasoft", "ext-base", "UserCasesListModuleResources",
"PortalClientConstants",
		"BaseNestedModule", "GridUtilitiesV2", "ContainerListGenerator", "ContainerList", "DashboardGridModule",
		"css!PortalModulesCSS", "UserCasesListModule"],
	function(Terrasoft, Ext, resources, PortalClientConstants) {

Как это можно обойти?

 

Обратите внимание, у Аллы приведен другой порядок в define.

Войдите или зарегистрируйтесь, чтобы комментировать
Вопрос

Добрый день !

Есть ли возможность без программирования направлять пользователю на электронную почту уведомление (допустим по пятницам или по понедельникам)  - чтобы в теле письма была таблица со всеми лидами, созданными за прошедшую неделю (желательно кликабельные ссылки)? Как можно это реализовать ?

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

У меня такой же вопрос

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

Добрый день!
Выполнять в бизнес процессе, который по вашему расписанию будет отсылать Email сообщение (пример).
А вот сформировать тело сообщения с таблицей без программирования уже сложно.

Сидоров Александр В.,

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

LilyG,

Ну да. Считать список можно стандартными блоками БП. А вот из списка сформировать текст, который потом пойдет в сообщение - уже нужен блок "Задание сценарий", а это уже программирование

Войдите или зарегистрируйтесь, чтобы комментировать
Вопрос

Добрый день.

Подскажите как реализовать фильтрацию по колонке Status по определенным статусам обращений(не отображались закрытые и отмененные обращения)?

У меня такой же вопрос

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

См. аналогичное добавление фильтра здесь.

Зверев Александр пишет:

См. аналогичное добавление фильтра здесь.

Этот вариант не рабочий. Потому что при добавлении функции она не вызывается. Нашел другое решение, все работает. 

Войдите или зарегистрируйтесь, чтобы комментировать
Вопрос

Добрый день!

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

actionMenuItems.addItem(this.getButtonMenuItem({
                    "Caption": {"bindTo": "Resources.Strings.EditRightsCaption"},
                    "Tag": "editRights",
                    "Visible": {"bindTo": "getSchemaAdministratedByRecords"}
                }));

метод же найти не могу.

Нужно для назначения прав на страницу контрагента в БП без использования Terrasoft.Core.DB

У меня такой же вопрос

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

По нажатию на кнопку действия 'Настроить права доступа' вызывается окно для редактирования прав, в котором пользователь вручную раздает права доступа, и его вызов реализован в методе editRights (указан в свойстве 'Tag').

В БП в элементе 'Задание-сценарий' можно реализовать произвольный запрос, в котором выполнять добавление/изменение/удаление данных напрямую в базу данных без использования Terrasoft.Core.DB:

var customQuery = new CustomQuery(context.UserConnection);
customQuery.SqlText = @"insert into Cases (Id) values (newid())";
using (DBExecutor dbExecutor = context.UserConnection.EnsureDBConnection())
{
	var datareader = customQuery.ExecuteReader(dbExecutor);
}
return true;

Вот ещё другой пример:

var userConnection = context.UserConnection;
var dr = new CustomQuery(userConnection, String.Format(
"update case set SolutionProvidedOn = null where Id = 974ca9fc-c066-4a7a-ac65-7ec91a44a067")).ExecuteReader(dbExecutor);
return true;

 

Спасибо, Алла.

В БП этот код вызывает ошибку компиляции "The name dbExecutor does not exist in the current context"

Либо "The type or namespace name 'IDataReader' coul not be found" в первом варианте.

То есть это работает только для неинтерпетируемого процесса? 

Естественно, использование в БП блоков скриптов на C# требует компиляции процесса.

Виталий Егоров,

Если Вы используете второй вариант, попробуйте вместо UserConnection написать context.UserConnection.

 

Если первый вариант, то приблизительно такой код:

var userConnection = context.UserConnection;
var customQuery = new CustomQuery(userConnection);
customQuery.SqlText = @"insert into Cases (Id) values (newid())"; 
using (DBExecutor dbExecutor = userConnection.EnsureDBConnection())
{
	var reader = customQuery.ExecuteReader(dbExecutor);
}
return true;

 

Виталий Егоров пишет:
В БП этот код вызывает ошибку компиляции "The name dbExecutor does not exist in the current context"

Нужно обернуть в using, как и в первом фрагменте. 

 Либо "The type or namespace name 'IDataReader' coul not be found" в первом варианте.

А тут нужно включить нужную библиотеку System.Data в Usings (в дизайнере БП справа на вкладке «Методы»).

Спасибо, Алла, все работает.

Александр, спасибо, попробую добавить DataReader.

Добавил в этот же БП еще один сценарий с кодом:

foreach (string accountId in accountIdList){
    try {
        var update = new Update(UserConnection, "Account")
               .Set("OwnerId", Column.Parameter(newOwner))
               .Where ("Id").IsEqual(Column.Parameter(accountId));
        update.Execute();
    }
    catch (SqlException ex){
        errorsList.Add(ex.Message);
    }
    finally {
        var sel = new Select(UserConnection)
            .Column("Name")
            .From("Account")
            .Where ("Id").IsEqual(Column.Parameter(accountId));
             using (DBExecutor dbExecutor = context.UserConnection.EnsureDBConnection()) {
            using (IDataReader dataReader = sel.ExecuteReader(dbExecutor)){
                       accountName = CreateJson(dataReader);
            }
        }
        accountNameList.Add(accountName);
    }
}

На выходе получаю ошибку:

'Query' does not contain a definition for 'ExecuteReader' and no extension method 'ExecuteReader' accepting a first argument of type 'Query' could be found (are you missing a using directive or an assembly reference?)

 

 

Может, дело в забытом «as Select» в конце объявления sel? Как тут:

Select select = 
	new Select(UserConnection)
		.Column("Id")
		.From("ActivityStatus")
		.Where("Finish").IsEqual(Column.Parameter(true))
		as Select;
using (var dbExecutor = UserConnection.EnsureDBConnection()) {
	using (IDataReader dr = select.ExecuteReader(dbExecutor)) {
		while (dr.Read()) {
			finishActivityStatuses.Add(UserConnection.DBTypeConverter.DBValueToGuid(dr[0]));
		}
	}
}

 

Спасибо, добрый человек! :)

Войдите или зарегистрируйтесь, чтобы комментировать
Вопрос

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

У меня такой же вопрос

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

Для вывода сообщения используется функция:

Terrasoft.MessageBox.Show({message:'текст',title:'заголовок'})

 

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

Это понятно как выводить сообщения. Интересует вывод после завершения синхронизации данных.

Определить, загружались ли вообще по синхронизации данные, можно посредством:

!Ext.isEmpty(Terrasoft.CurrentUserInfo.lastSyncDate)

А первый или не первый раз, самому где-то хранить значение-флажок.

Войдите или зарегистрируйтесь, чтобы комментировать
Вопрос

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

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

"Status": {
		"enabledStatusByUser": {
			"ruleType": BusinessRuleModule.enums.RuleType.BINDPARAMETER,
			"property": BusinessRuleModule.enums.Property.ENABLED,
			"logical": Terrasoft.LogicalOperatorType.AND,
			"conditions": [
				{
					"comparisonType": Terrasoft.ComparisonType.EQUAL,
					"leftExpression": {
						"type": BusinessRuleModule.enums.ValueType.SYSVALUE,
						"attribute": "CURRENT_USER"
					},
					"rightExpression": {
						"type": BusinessRuleModule.enums.ValueType.CONSTANT,
						"value": "7f3b869f-34f3-4f20-ab4d-7480a5fdf647"
					}
				}
			]
		}
	}

 

У меня такой же вопрос

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

Добрый день!
Попробуйте такой код в условиях (conditions)

"conditions": [
	{
		"comparisonType": 3,
		"leftExpression": {
			"type": 3,
			"value": "CurrentUser",
			"dataValueType": 10
		},
		"rightExpression": {
			"type": 0,
			"value": "7f3b869f-34f3-4f20-ab4d-7480a5fdf647",
			"dataValueType": 10
		}
	}
]

 

Сидоров Александр В.,

Спасибо, работает

Григорий Чех,

Вы имеете ввиду настроить администрирование по колонкам?

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

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

Спасибо за совет, буду иметь ввиду

Войдите или зарегистрируйтесь, чтобы комментировать
Вопрос

Коллеги, здравствуйте!

Подскажите, где происходит сакральный Set("UserConnection", UserConnection) для БП?

Из академического интереса спрашиваю по результатам обсуждения  этого вопроса.

 

У меня такой же вопрос

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

Где то внутри Terrasoft.Core.ProcessEngine.... без исходников или дизасма и не видно :)

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

А при запуске через ProcessEngineService там в начале функции ExecuteProcess считывается то самое HttpContext.Current.Session["UserConnection"].

Войдите или зарегистрируйтесь, чтобы комментировать
Вопрос

Приветствую, коллеги!

Запускается макрос по такой схеме:

  1. БП по таймеру
  2. Подпроцесс
  3. ScriptTask
  4. ReportService
  5. GenerateMSWordReport
  6. Макрос : IExpressionConverter

В макросе надо esq запрос выполнить, пытаюсь получить UserConnection:

 

  • HttpContext.Current.Session["UserConnection"] не работает ибо HttpContext.Current == null
  • Get<UserConnection>("UserConnection") - нет метода Get
  • context.UserConnection - нет context в объявленных
  • UserConnection - не переменная, а тип

Как же все таки исхитриццо с UserConnection для esq? можно без него запрос сделать?

 

У меня такой же вопрос

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

См. последний ответ тут.

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

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

А после?

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

а теперь до пункта 7 добирается и в методе Evaluate на строке с получением UserConnection ломает процесс

Как вариант, использовать SystemUserConnection.

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

Теперь надо создать топик "Как получить SystemUserConnection в макросе?"

Попробуйте (HttpContext.Current.Application["AppConnection"] as AppConnection).SystemUserConnection.

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

не работает, ибо 

HttpContext.Current равно null

в каком месте можно глянуть, как инициализируется UserConnection, который берется из Get<UserConnection>(“UserConnection”) или context.UserConnecrion для БП?

В примере макроса вообще есть получение UserConnection и HttpContext.Current там не null:

_userConnection = (UserConnection)HttpContext.Current.Session["UserConnection"];

 

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

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

A HttpContext.Current.Session[“UserConnection”] работает только при запуске через сервис

Если иначе никак, можно работать через OData, как во стороннем приложении.

Капец как сложно, мне всего то надо если ИПешник, ИНН без КПП выводить и запятой лишней не было :)

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

Войдите или зарегистрируйтесь, чтобы комментировать
Вопрос

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

У меня такой же вопрос

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

Добрый день!
Посмотрите тут

Сидоров Александр В.,

Благодарю это понятно, но проблема заключается в следующем как отфильтровать выборку по длине значения поля.

 

На esq реализовать это довольно сложно. Предлагаю сделать представление (view) и фильтровать уже на уровне представления

Либо сделать в объекте ещё одно числовое поле и при добавлении/изменении номера в БП/встроенном БП/триггере вычислять и записывать туда его длину.

Войдите или зарегистрируйтесь, чтобы комментировать
Вопрос

Столкнулась со странным поведением системы. Версия 7.14.0.597.

В системной настройке 'CurrentPackageId' указан пользовательский пакет (не Custom), а в настройке 'CustomPackageId' указан пакет Custom.

При редактировании карточки раздела изменения вносятся в нового наследника этой карточки в пакет Custom, причем не под тем пользователем, под которым выполняются изменения, а под пользователем Supervisor (в полях 'Создал' и 'Изменил' нового сервиса указан Supervisor).

Никакие 'танцы с бубнами' не помогают решить данную проблему.

Может кто-то сталкивался с таким или у Вас есть идеи, как можно решить эту проблему?

Возможно, проблемы в параметрах пакета, который указан в 'CurrentPackageId'?

Нужно, чтобы изменения, выполненные в мастере, писались в пользовательский пакет, который указан в настройке 'CurrentPackageId'.

У меня такой же вопрос

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

Алла, см. аналогичные вопросы. Судя по отсутствию продолжения тем, должны помочь именно стандартные действия по чистке. Если нет, нужно подключаться и производить отладку.

Войдите или зарегистрируйтесь, чтобы комментировать