Вопрос

Запрос в БД из БП

Делаю запрос к БД из элемента "Задание-сценарий":

 

var userConnection = Get<UserConnection>("UserConnection");
var group = Get<string>("ProcessSchemaParameter1");
 
string selectID = ((Select)new Select(userConnection)
   .Column("t1", "SysAdminUnitId")
   .From("SysAdminUnitInRole").As("t1")
   .Join(JoinType.Inner, "SysAdminUnitInRole").As("t2")
   .On("t2", "SysAdminUnitInRole").IsEqual("3DAFC997-65E9-47E4-9434-F036077D66F4")
   .And("t1","SysAdminUnitId").IsEqual("t2","SysAdminUnitId")
   .Where("t1", "SysAdminUnitRoleId").IsEqual(group)).ExecuteScalar<string>();
string contact = ((Select)new Select(userConnection)
	.Column("ContactId")
	.From("SysAdminUnit")
	.Where("Id").IsEqual(selectID)).ExecuteScalar<string>();
 
Set("ProcessSchemaParameter1", contact); 
 
return true;

И тут появилось 2 момента:

1) как записать в параметр процесса результат (не текстом, а полноценным id)

2) при использовании такого кода выдает ошибки:

Invalid column name '3DAFC997-65E9-47E4-9434-F036077D66F4'

Invalid column name 'a7e3d18a-0f2d-444d-be2b-cd625dc3c097'

Invalid column name 'SysAdminUnitInRole'

Нравится

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

Ошибки у Вас возникают из-за того, что некорректно построен запрос с помощью класса Select.

1. Invalid column name '3DAFC997-65E9-47E4-9434-F036077D66F4'

IsEqual("3DAFC997-65E9-47E4-9434-F036077D66F4") замените на 
IsEqual(Column.Parameter(new Guid("3DAFC997-65E9-47E4-9434-F036077D66F4")))

2. Invalid column name 'a7e3d18a-0f2d-444d-be2b-cd625dc3c097'

IsEqual(group) на
IsEqual(Column.Const(group))

Аналогично и с IsEqual(selectID)

3. Invalid column name 'SysAdminUnitInRole'

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

Относительно первого вопроса: по-моему, Вы неправильно получаете нужные Вам значения. Как это делать можно посмотреть в таких постах: https://community.terrasoft.ru/articles/bpmonline-kak-opredelit-avlaetsa-li-tekusii-polzovatel-administratorom и https://community.terrasoft.ru/questions/pravilnoe-ispolzovanie-dbexecutor

Также хочу обратить Ваше внимание, что получить нужные значение можно с помощью класса EntitySchemaQuery. Более подробно можно почитать здесь.

Ошибки у Вас возникают из-за того, что некорректно построен запрос с помощью класса Select.

1. Invalid column name '3DAFC997-65E9-47E4-9434-F036077D66F4'

IsEqual("3DAFC997-65E9-47E4-9434-F036077D66F4") замените на 
IsEqual(Column.Parameter(new Guid("3DAFC997-65E9-47E4-9434-F036077D66F4")))

2. Invalid column name 'a7e3d18a-0f2d-444d-be2b-cd625dc3c097'

IsEqual(group) на
IsEqual(Column.Const(group))

Аналогично и с IsEqual(selectID)

3. Invalid column name 'SysAdminUnitInRole'

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

Относительно первого вопроса: по-моему, Вы неправильно получаете нужные Вам значения. Как это делать можно посмотреть в таких постах: https://community.terrasoft.ru/articles/bpmonline-kak-opredelit-avlaetsa-li-tekusii-polzovatel-administratorom и https://community.terrasoft.ru/questions/pravilnoe-ispolzovanie-dbexecutor

Также хочу обратить Ваше внимание, что получить нужные значение можно с помощью класса EntitySchemaQuery. Более подробно можно почитать здесь.

Алла Савельева,

Спасибо за помощь, это помогло мне решить проблему

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