Вопрос

Простой Select в элементе процессов Script task

Можно попросить пример (рабочий) для простого Select для элемента Script task?
Нужен выбор всего одного поля из колонки c возможностью использования полученного значения в проекте

 

Пробую так, но это не  рабочий вариант

 

var userConnection = context.UserConnection as UserConnection;

var Supervisor = "Supervisor";

var upd = new Select(userConnection)
         .Column("Name")
        .From("Contact")
        .Where("Surname").IsEqual(Supervisor);
               

//Set("var1", upd);
return true;

 

 

Нравится

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

Добрый день. Для получения первого значения из выборки нужно вызвать метод ExecuteScalar<T>().

 

Код будет выглядеть следующим образом:

var userConnection = Get<UserConnection>("UserConnection");
 
var Supervisor = "Supervisor";
 
var value = (new Select(userConnection)
         .Column("Name")
        .From("Contact")
        .Where("Surname").IsEqual(Column.Parameter(Supervisor)) as Select)
.ExecuteScalar<string>();
 
 
Set("var1", value);
return true;

 

Пащенко Александр Сергеевич,

B методы не надо добавить Terrasoft.Core; ?

Как я понимаю, "Supervisor" - это просто строковое значение. Константы в запрос нужно передавать с через Column.Const или Column.Parameter

var select = new Select(context.UserConnection)
    .Top(1)
    .Column("Name")
    .From("Contact")
    .Where("Surname").IsEqual(Column.Const("Supervisor"))
var value = select.ExecuteScalar<string>();

 

OLeg1020,

Нет, в процессе уже есть необходимые using

Замечание Дершеда Д.Н. тоже правильное. 

Скорректировал начальный пост.

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

Пащенко Александр Сергеевич,

По началу так и думал, через чтение данных, но при выборке, нет нужного значения, хотя при просмотре trace лога оно есть.

Почему сппавшиваю про Usings ->

OLeg1020,

Покажите код, который у Вас получился в итоге.

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

namespace Terrasoft.Core.Process
{
 
	using Newtonsoft.Json;
	using Newtonsoft.Json.Linq;
	using System;
	using System.Collections.Generic;
	using System.Collections.ObjectModel;
	using System.Drawing;
	using System.Globalization;
	using System.Text;
	using Terrasoft.Common;
	using Terrasoft.Configuration;
	using Terrasoft.Core;
	using Terrasoft.Core.Configuration;
	using Terrasoft.Core.DB;
	using Terrasoft.Core.Entities;
	using Terrasoft.Core.Process;
	using Terrasoft.Core.Process.Configuration;
 
	#region Class: Process3MethodsWrapper
 
	/// <exclude/>
	public class Process3MethodsWrapper : ProcessModel
	{
 
		public Process3MethodsWrapper(Process process)
			: base(process) {
			AddScriptTaskMethod("ScriptTask1Execute", ScriptTask1Execute);
		}
 
		#region Methods: Private
 
		private bool ScriptTask1Execute(ProcessExecutingContext context) {
 
			var select = new Select(context.UserConnection)
			    .Top(1)
			    .Column("Name")
			    .From("Contact")
			    .Where("Surname").IsEqual(Column.Const("Supervisor"));
			var value = select.ExecuteScalar<string>();
			Set("var1", select);
 
			return true;
		}
 
		#endregion
 
	}
 
	#endregion
 
}

 

Попробуйте дописать «as Select» так:

var select = new Select(context.UserConnection)
    .Top(1)
    .Column("Name")
    .From("Contact")
    .Where("Surname").IsEqual(Column.Const("Supervisor")) as Select;
var value = select.ExecuteScalar<string>();

 

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

Вот в таком виде

var select = new Select(context.UserConnection)
    .Top(1)
    .Column("Name")
    .From("Contact")
    .Where("Surname").IsEqual(Column.Const("Supervisor")) as Select;
var value = select.ExecuteScalar<string>();
 
Set("var1", value);
return true;

сработало.
Всем спасибо за помощь

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