Здравствуйте.
Создал объект на основе базового объекта. Добавил событие "После добавления записи", в нем пул и дорожку.
На дорожку поместил событие "Сообщение".Поведение.Сообщение = "BaseEntityInserted". Вообщем делал по аналогии с базовым объектом, но после сохранение записи БП не выполняется. Что я сделал не так?

Нравится

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

Здравствуйте!
После добавления записи рекомендуется использовать обычные процессы. Вы можете построить бизнес процесс, используя дизайнер процессов. Начальный элемент - сигнал. Настройки сигнала: объект - созданный Вами объект, событие - после добавления записи. Подробнее о бизнес процессах Вы можете прочитать здесь.

Да можно и так, но если я захочу добавить функционал не "После добавления записи", а перед сохранением, тут уже БП не поможет, что в таких случаях нужно делать?

В таких случаях:
1) Добавьте обработку события до "Сохранения записи"
2) Откройте диаграмму процесса
3) Добавьте элемент "Задание-сценарий" (этих элементов может быть несколько, они могут выполняться как последовательно, так и параллельно)
4) Пропишите все, что должно произойти в элементе "Задание-сценарий"

Вся исполняемая логика должна быть в элементе "Задание-сценарий".

"Дашкевич К." написал:

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

Создал объект на основе базового объекта. Добавил событие "После добавления записи", в нем пул и дорожку.

На дорожку поместил событие "Сообщение".Поведение.Сообщение = "BaseEntityInserted". Вообщем делал по аналогии с базовым объектом, но после сохранение записи БП не выполняется. Что я сделал не так?

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

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

Здравствуйте , есть несколько объектов Entity (родитель Базовый Объект) в которых есть каскадное \ связанное обновление реализованное на событиях. Скажите можно ли инициализировать изменения в одном из них, так чтобы для низ лежащих не проверялись права для того кто инициировал изменение в родителе.

Или вообще инициировать изменение или сохранение объекта Entity из под другого логина например?.

Права на объекты настроены на уровне записей.

Предметно:

Есть лист согласования который согласует заявление на отпуск, в котором должны поставить визы руководители и отдел кадров. У заявление на отпуск в детали есть записи указанных дней отпуска (Персональные дни), для каждого сотрудника (Контакт). В этих днях, есть кол-во использованных дней, которое по закрытие заявления рассчитываются. Права на изменение и добавление есть у отдела кадров, у сотрудника только на чтение, для того чтобы формировать заявление. Если лист согласование завизирван всеми участниками успешно то меняется заявление (изменяет состояние), и далее заявление на уровне объект (Entity) меняет те дни которые указанны в детали. И получается: чтобы всё прошло успешно - необходимо выдавать права на изменение на всё это хозяйство - всем кто должен подписать отпуск. Что не есть хорошо.

пример изменения по событие в entity

if (daysCount == daysUsed  &&  (daysUsed > 0)) {
   Entity.SetColumnValue("FreeDayStatusId", Terrasoft.Configuration.FreeDayStatusConst.used);
}

Я понимаю можно было написать update, или сделать на уровне SQL Server триггером, в первом случае придется воротить много одинаковых update со всех мест которые меняют объекты, во втором нагрузка на БД а не на IIS и условия изменения в данных не позволяют использовать триггер бд.

Нравится

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

Если вместо UserConnection использовать UserConnection.AppConnection.SystemUserConnection, то права будут игнорироваться.

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

Добрый день!

Подскажите, где можно получить информацию классе Entity, и о его методах в частности? На удивление, в SDK этой информации не нашел :(

Нравится

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

Добрый день, Николай!
На данный момент класс Entity находится в процессе review.
Если у Вас есть точечные вопросы по какому-то методу – будем рады объяснить его предназначение с примерами использования.

С уважением, техподдержка «Террасофт»

Здравствуйте, Николай!

В папке с дистрибутивом есть папка Terrasoft.WebApp, в ней в папке bin лежат библиотеки (dll-файлы), которые вы можете добавить в проект в Visual Studio и затем посмотреть классы в данных библиотеках со всеми методами, свойствами, типами и так далее (скриншот во вложении). Либо можете посмотреть структуру любой другой программой для просмотра dll библиотек.

Александр, спасибо большое - то, что нужно!

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

Здравствуйте!
Можно ли в JS отключить учет прав при update,insert c использованием ESQ?

Нравится

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

Александр, ESQ задумывалась как раз в контексте работы с правами доступа.

Александр, без проверки вроде бы можно только на сервере, с клиентской части это довольно небезопасно.

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

Данная возможность отсутствует, для этого Вы можете использовать объект Select() на стороне сервера

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

"Андрей Каспаревич" написал:

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


Уже так и сделал. Спасибо.

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

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

Подскажите пожалуйста, как правильно построить Update на серверной части, чтоб сработали обработчики, описанные в событиях обновляемого объекта?

Нравится

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

Если существует необходимость обработки событий объект, то Update лучше всего сделать через ESQ

public static void ExampleUpdateEntity(Guid contactId)
{
    EntitySchema schema = UserConnection.EntitySchemaManager.GetInstanceByName("Contact");
    EntitySchemaQuery esq = new EntitySchemaQuery(schema);
    esq.AddAllSchemaColumns();
    Entity entity = esq.GetEntity(UserConnection, contactId);
    entity.SetColumnValue("Name", "New Name");
    entity.Save();
}

а можно ли contactId как-то заменить фильтрами? Либо нужно сначала получить Id необходимой записи, а потом его использовать?
Каким образом можно после обработки обновить значения в карточке(перетянуть значения из базы, не обновляя страницу)?

Можно заменить и фильтрами. Сама идея просто работать с Entity.

    EntitySchema schema = UserConnection.EntitySchemaManager.GetInstanceByName("Contact");
    EntitySchemaQuery esq = new EntitySchemaQuery(schema);
    esq.AddAllSchemaColumns();
    esq.Filters.Add(esq.CreateFilterWithParameters(FilterComparisonType.Equal, "Name", "FilterName"));
    EntityCollection entities = esq.GetEntityCollection(UserConnection);
    foreach (Entity entity in entities)
    {
        entity.SetColumnValue("Name", "NewName");
        entity.Save();
    }

Спасибо за подсказку, все работает.

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

Для того, чтобы в коде создать объект воспользуйтесь следующим примером кода:

var entitySchemaManager = Page.Schema.SchemaManagerProvider.GetManager("EntitySchemaManager") as EntitySchemaManager;
var contactSchemaQuery = new EntitySchemaQuery(entitySchemaManager, "Contact"); //название схемы объекта
contactSchemaQuery.AddColumn(contactSchemaQuery.RootSchema.GetPrimaryColumnName());
contactSchemaQuery.AddColumn("Dear"); // определяем каждую из колонок, с которыми мы будем работать

contactSchemaQuery.Filters.Add(campaign contactSchemaQuery.CreateFilterWithParameters(
         FilterComparisonType.Equal,
         "Id",
        new Guid("14e6a3c6-920b-4e27-9274-7c9b071d79d3"))); //фильтр запроса
var contactEntity = contactSchemaQuery.GetEntityCollection(UserConnection);

contactEntity – это DataSource, из которого можно получить значения для тех колонок, которые мы определили в начале.

Нравится

Поделиться

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