Обработка таблицы после запроса Select и представление строки в виде набора параметров

Добрый день!

Решаем следующую задачу:

Имеется таблица контактов с полями (6 штук). Необходимо по каждому контакту запустить БП со всеми значениями. Пока посмотрели в пример на академии и ничего не выходит. Идея простая - идти по строчкам таблицы и запускать БП со значениями полей. Но как это реализовать абсолютно непонятно. Как "превратить" классический select в что-то понятное?

Нравится

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

Быстров Сергей,

Не все так строго. Можно создать пустой объект без наследований, добавить UsrId (указать его в качестве Индентификатора в св-вах объекта, во вью генерить через newId), накидать других полей через Usr как и во вью. Ну и проставить галку "Представление в БД".

В таком случае мало мусорных полей и из C# работать с объектом можно. Но. Такие объекты нельзя использовать в аналитике. Т.к. там в каком-то генераторе зашито(!!!), что у объектов первичный ключ всегда называется "Id". Такие пироги.

"Как "превратить" классический select в что-то понятное?" - Что, простите?))

Попробуйте так в скрипттаске:

var connection = Get<UserConnection>("UserConnection");
var esq = new EntitySchemaQuery(connection.EntitySchemaManager, "Contact");
esq.AddAllSchemaColumns();
//esq.Filters.Add(esq.CreateFilterWithParameters(FilterComparisonType.Equal, "Name", somename));
EntityCollection entities = esq.GetEntityCollection(connection);
foreach (Entity contact in entities) {
    connection.ProcessEngine.ProcessExecutor.Execute("MyCoolProcess",
    new Dictionary<string, string> {
 
        { "ContactId", contact.PrimaryColumnValue.ToString() },
        { ".....", .... }
 
    });
}

 

Варфоломеев Данила,

Забыл сказать, объекта у меня нет - обращаюсь к view таблице. Поэтому и использовал селект - он работах хорошо.

Быстров Сергей,

Сделайте объект под view. Все лучше, чем dbexecutor-ами ковыряться)

Так создайте объект и привяжите к view (в свойствах есть галочка).

А если хотите именно Select, там тоже можно цикл и читать несколько колонок:

string schemaName = string.Empty;
Guid objectId = Guid.Empty;
Guid groupId = Guid.Empty;
var selectObjectSchemaName = new Select(userConnection)
	.Column("VwSysSchemaInfo", "Name")
	.Column("MonitoringIndicators", "Object")
	.Column("MonitoringIndicators", "MonitoringGroup")
	.From("MonitoringIndicators")
	.LeftOuterJoin("VwSysSchemaInfo").On("VwSysSchemaInfo","SysSchemaId").IsEqual("MonitoringIndicators", "Object")
	.Where("VwSysSchemaInfo", "SysSolutionId").IsEqual(Column.Parameter(userConnection.Solution.Id))
	.And("MonitoringIndicators","Id").IsEqual(Column.Parameter(Id)) 
as Select;
using (var dbExecutor = userConnection.EnsureDBConnection()) {
	using (IDataReader dr = selectObjectSchemaName.ExecuteReader(dbExecutor)) {
		while (dr.Read()) {
			schemaName = dr[0] == DBNull.Value ? string.Empty : dr.GetString(0);
			objectId = dr[1] == DBNull.Value ? Guid.Empty : UserConnection.DBTypeConverter.DBValueToGuid(dr[1]);
			groupId = dr[2] == DBNull.Value ? Guid.Empty : UserConnection.DBTypeConverter.DBValueToGuid(dr[2]);
		}
	}

 

Вариант с объектом мне нравится, но есть два нюанса:
- таблица view и поля должны быть названы с префиксом Usr (а то ругается)?
- делается наследование от базового объекта, добавляются все колонки из таблицы и ставится галочка "представление в базе". Все так?

Да. Смотрите, как сделаны существующие схемы в конфигурации, начинающиеся на «Vw».

Быстров Сергей,

Не все так строго. Можно создать пустой объект без наследований, добавить UsrId (указать его в качестве Индентификатора в св-вах объекта, во вью генерить через newId), накидать других полей через Usr как и во вью. Ну и проставить галку "Представление в БД".

В таком случае мало мусорных полей и из C# работать с объектом можно. Но. Такие объекты нельзя использовать в аналитике. Т.к. там в каком-то генераторе зашито(!!!), что у объектов первичный ключ всегда называется "Id". Такие пироги.

Варфоломеев Данила,

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

Быстров Сергей,

Можно пример кода, как вы пытаетесь UsrId получить?

Варфоломеев Данила,

С этим разобрался. Немного коряво создал объект. Пересоздал его и все заработало. Теперь осталось запустить процессы по каждой строке. И тут ошибки уже пошли в самих процессах, где я думаю уже разберусь что к чему. Так что - большое спасибо за помощь :3

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