select ad.id, ad.Address

from 

  AddressType at, 

  AccountAddress ad

where 

    ad.AccountId = 'e308b781-3c5b-4ecb-89ef-5c1ed4da488e'

    and at.Id = ad.AddressTypeId

    --and at.Name = 'Собеседования' 

    and at.Name = 'Места работы'

var select = this.Ext.create("Terrasoft.EntitySchemaQuery", { rootSchemaName: "AccountAddress" });

                    select.addColumn("Id");

                    select.addColumn("Address");

                    select.filters.add("filterByAccountWork1",

                        select.createColumnFilterWithParameter(Terrasoft.ComparisonType.EQUAL,

                            "Account", this.get("AccountId")));

                    select.filters.add("filterByAccountWork2",

                        select.createColumnFilterWithParameter(Terrasoft.ComparisonType.EQUAL,

                            "AddressType", "Места работы"));

                            /* вот тут где-то синтакс ошибка

                    select.filters.add("filterByAccountWork3",

                        select.createColumnFilterWithParameter(Terrasoft.ComparisonType.EQUAL,

                            "[AccountAddress:AddressType].Id",

                            "[AccountAddress.AddressType].Id"));

                            */

 

Нравится

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

Добрый день

А вам точно нужно декартовое произведение? Это будет долго работать

Чем не подойдет?

select 
   ad.id, 
   ad.Address 
from 
  AccountAddress ad
  inner join AddressType at on at.Id = ad.AddressTypeId
where 
    ad.AccountId = 'e308b781-3c5b-4ecb-89ef-5c1ed4da488e'
    --and at.Name = 'Собеседования' 
    and at.Name = 'Места работы'

и в этом случае все гораздо проще, и данных в разы меньше

 

Артем Гура,

Привет, Да, так лучше намного будет, а как это сделать на esq? :) Запутался, все время синтакс еррор в консоли. Пытался сделать по 

https://academy.terrasoft.ru/documents/technic-sdk/7-12/postroenie-pute… но пока не смог :), прошу помощи

QArt,

Что-то вроде этого:

var esq = Ext.create("Terrasoft.EntitySchemaQuery", {
    rootSchemaName: "AccountAddress"
});
esq.addColumn("Id");
esq.addColumn("Address");
var filterGroup = Ext.create("Terrasoft.FilterGroup");
filterGroup.logicalOperation = Terrasoft.LogicalOperatorType.AND;
filterGroup.addItem(Terrasoft.createColumnFilterWithParameter(Terrasoft.ComparisonType.EQUAL, "Account", ''));
filterGroup.addItem(Terrasoft.createColumnFilterWithParameter(Terrasoft.ComparisonType.EQUAL, "=[AddressType:Id:AddressTypeId].Name", 'Собеседования'));
esq.filters.addItem(filterGroup);
esq.getEntityCollection(...)

 

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

getFullAddressFromVacancy: function (Id) {

                        var esq = this.Ext.create("Terrasoft.EntitySchemaQuery", {

                            rootSchemaName: "AccountAddress"

                        });

                        esq.addColumn("Id");

                        esq.addColumn("Address", "Address");

                        esq.addColumn("AccountAddress.SxSubwayStation.Name", "MetroName");

                        esq.addColumn("AccountAddress.City.Name", "CityName");

                        esq.filters.add("VacancyCandidateFilter222", this.Terrasoft.createColumnFilterWithParameter(

                            this.Terrasoft.ComparisonType.EQUAL,

                            "Id", Id));

                        esq.getEntityCollection(function (response) {

                            if (response.success && response.collection.getCount() == 1) {

                                var entity = response.collection.getByIndex(0);

                                var addr = entity.get("Address");

                                var city = entity.get("CityName");

                                var metro = entity.get("MetroName");

                                var add = '';

                                if (city != undefined && city != 'Москва')

                                  add += city + ', ';

                                if (metro != undefined)

                                  add += metro + ', ';

                                if (addr != undefined)

                                  add += addr;

                                this.log('Add = ' + add);

                                this.set("BpMetroAutoFill", add);

                            }

                        }, this);

                }

В консоли хрома вижу что столбцы, кроме Address пишутся isNotFound. 

Делал согласно https://academy.terrasoft.ru/documents/technic-sdk/7-8/poluchenie-rezul…

EntitySchemaQuery умеет довыгребать AccountAddress.SxSubwayStation.Name в таблице AccountAddress есть столбец SxSubwayStationId

Аналогично с City.

Что не так делаю, подскажите плиз?

Нравится

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

Прооосто ужас.

...rootSchemaName: "AccountAddress"... //запрос уже идёт в AccountAddress
...esq.addColumn("City.Name", "CityName");... // поэтому писать AccountAddress.City.Name не правильно
...esq.addColumn("SxSubwayStation.Name", "MetroName");.. //аналогично
...esq.filters.add("VacancyCandidateFilter222", this.Terrasoft.createColumnFilterWithParameter(
this.Terrasoft.ComparisonType.EQUAL,
"Id", Id));
esq.getEntityCollection()... //Есть метод esq.getEntity(id, callback, scope). Зачем зазря писать фильр по id, а потом фильтровать коллекцию?

 

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

Угу, в первый день "отношений с платформой" этим "правильным методом" не получилось (был другой запрос), надо будет попробовать еще раз. Ща пока не до эстетики, но к ней придем, исправил, работает, уже хорошо, спасибо! 

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

Есть sql-запрос вида:

select *

from Table T

where T.ProjectId = @ProjectId

    and not exists (select * from Table T1

                    where T1.ContactId = @ContactId

                        and T1.ParameterId = T.ParameterId)

Использование метода CreateFilterWithParameters() позволяет построить параметризированный запрос, но только exists:

var esqCardBlock = new EntitySchemaQuery(userConnection.EntitySchemaManager, "Table");

esqCardBlock.AddAllSchemaColumns();

var CardBlockFilters = esqCardBlock.Filters;                  CardBlockFilters.Add(esqCardBlock.CreateFilterWithParameters(FilterComparisonType.Equal,

                        "Project", projectId));                CardBlockFilters.Add(esqCardBlock.CreateFilterWithParameters(FilterComparisonType.Equal,

                        "[Table:Parameter:Parameter].Contact", contact));

Если же использовать CreateNotExistsFilter(), то не понятно, куда добавлять значение параметра @ContactId.

Какой всё-таки метод использовать для построения параметризированного запроса Not Exists?

Нравится

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

Алла, возможно, такое получится при помощи выставления группе фильтров свойства .IsNot = true;

Как тут:

			var esq = new EntitySchemaQuery(UserConnection.EntitySchemaManager, "Activity");
			esq.AddAllSchemaColumns();
			esq.Filters.Add(esq.CreateFilterWithParameters(FilterComparisonType.Equal, "Owner", currentUserId));
			esq.Filters.Add(esq.CreateFilterWithParameters(FilterComparisonType.Greater, "ModifiedOn", LastSyncDate));
			if (IsFirstSync) {
				esq.Filters.Add(esq.CreateFilterWithParameters(FilterComparisonType.Greater, "DueDate", Today));
			}
			esq.Filters.Add(esq.CreateFilterWithParameters(FilterComparisonType.Equal, "ShowInScheduler", true));
			var filtersByExisting = new EntitySchemaQueryFilterCollection(esq);
			filtersByExisting.IsNot = true;
			var notExFilter = esq.CreateFilterWithParameters(
				FilterComparisonType.IsNotNull,
				"[ActivityCorrespondence:Activity].SourceActivityId");
			filtersByExisting.Add(notExFilter);
			filtersByExisting.Add(esq.CreateFilterWithParameters(FilterComparisonType.Equal,
				"[ActivityCorrespondence:Activity].SourceAccount.Id", SourceAccountId));
			esq.Filters.Add(filtersByExisting);
			esq.Filters.Add(esq.CreateFilterWithParameters(FilterComparisonType.LessOrEqual, "CreatedOn", CurrentSyncDateTime));
			var entityCollection = esq.GetEntityCollection(UserConnection);

 

Саша,

спасибо за ответ. Я тоже уже думала так сделать, попробую и напишу о результате smiley

Саша,

таким способом, как ты предложил, получилось построить нужный фильтр.

Ещё вопрос: почему в документации на академии написано, что метод CreateFilterWithParameters перегруженный https://academy.terrasoft.ru/documents/technic-sdk/7-11/dobavlenie-vych…;Что имеется ввиду?

Алла, у меня по этой ссылке нет слов «перегруженный»  и «CreateFilterWithParameters».

Ошибка, речь идет об этой ссылке: https://academy.terrasoft.ru/documents/technic-sdk/7-11/ispolzovanie-en…

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

А подскажите, пожалуйста, есть ли аналог ".IsNot = true" в entitySchemaQuery на стороне клиента?

И если нет, то как по другому в js можно построить подобный фильтр?

См. верхний ответ тут.

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

есть простой до безобразия код:

var select = Ext.create("Terrasoft.EntitySchemaQuery", { rootSchemaName: "Usrgifts" });

                select.addColumn("id");

                select.getEntityCollection(function(result) {

                    if (result.success) {

                        var collection = result.collection;

                        collection.each(function(item) {

                            this.set("UsrPriceodPresent", 34);

                        }, this);

                    }

                }, this);

вылетает на getEntityCollection, без ошибок без ничего, просто не заходит внутрь...

можете подсказать в чем проблема?

Нравится

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

Добрый день

Такого не бывает :) На вкладке Network должна быть информация. И что значит вылетает? Он должен внутрь зайти только после возврата результата с сервера

Артем Гура,

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

var esq = Ext.create("Terrasoft.EntitySchemaQuery", {rootSchemaName: "Usrgifts"});

                esq.addAggregationSchemaColumn("UsrPriceodPresent", Terrasoft.AggregationType.SUM, "RecalcGiftsAmountContact");

                esq.filters.add("OnlyEWS", this.Terrasoft.createColumnFilterWithParameter(

                    this.Terrasoft.ComparisonType.EQUAL, "Usrgiftscontact", this.get("PrimaryColumnValue")));

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

Заработало! Сначала все  написал)

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

Добрый день!

Нужна помощь. Есть запрос на T-SQL вот такого вида: 

SELECT

    [tbl_BaseAssortment].[OfferingID] AS [OfferingID],

    [tbl_BaseAssortment].[Description] AS [Description],

    [tbl_BaseAssortment].[ChannelID] AS [ChannelID],

    [tbl_BaseAssortment].[StartDate] AS [StartDate],

    [tbl_BaseAssortment].[DueDate] AS [DueDate]

FROM

    [dbo].[tbl_BaseAssortment] AS [tbl_BaseAssortment]

WHERE([tbl_BaseAssortment].[StartDate] = 

    (SELECT

        MAX([tbl_BaseAssortmentLast].[StartDate]) AS [StartDate]

    FROM

        [dbo].[tbl_BaseAssortment] AS [tbl_BaseAssortmentLast]

    WHERE([tbl_BaseAssortment].[OfferingID] = [tbl_BaseAssortmentLast].[OfferingID] AND

        [tbl_BaseAssortment].[ChannelID] = [tbl_BaseAssortmentLast].[ChannelID] AND

        ([tbl_BaseAssortmentLast].[DueDate] >= getdate() OR

        [tbl_BaseAssortmentLast].[DueDate] IS NULL))))

Его нужно записать на EntitySchemaQuery в конфигурационной схеме. С фильтром совсем запутался...

Нравится

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

Добрый день. Если данный запрос необходимо выполнить из серверного кода - вам стоит посмотреть в сторону использования класса SELECT (более низкоуровневый класс чем ESQ). В случае клиентского кода необходимо добавлять View, поскольку конструкция SELECT FROM SELECT не поддерживается (если только не делать второй запрос в коллбеке первого).

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

Доброго времени суток!

Есть SQL-запрос:

SELECT [Name] [ProductName], [UsrProductS1].[UsrBalanceProduct] [Balance]
   FROM [Product] [Product]
LEFT OUTER JOIN [UsrProductStockStore] [UsrProductS1]
  ON ([UsrProductS1].[UsrProductId] = [OrderProduct].[ProductId]
  AND [UsrProductS1].[UsrStoreHouseId] = '168cee1e-d573-432e-b5f7-c945c85aa6fe')

Необходимо перевести его на EntitySchemaQuerry. На community и в SDK не нашел как реализовать подобный запрос. Прошу помочь, заранее спасибо!

Нравится

3 комментария
var usrStoreHouseId = "168cee1e-d573-432e-b5f7-c945c85aa6fe";
var esq = this.Ext.create("Terrasoft.EntitySchemaQuery", {
     rootSchemaName: "Product"
});
esq.addColumn("Name", "ProductName");
esq.addColumn("UsrProductStockStore.UsrBalanceProduct", "Balance");
esq.addColumn("UpoDayInCalendar");
esq.filters.add("storeHouseFilter", this.Terrasoft.createColumnFilterWithParameter(
this.Terrasoft.ComparisonType.EQUAL, "UsrProductStockStore.UsrStoreHouse", usrStoreHouseId));

рекомендации usrStoreHouseId выводить в константы, чтобы код был читабельным.

"Шамшин_Олег" написал:LEFT OUTER JOIN [UsrProductStockStore] [UsrProductS1]
  ON ([UsrProductS1].[UsrProductId] = [OrderProduct].[ProductId]

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

Да, в запросе опечатался, вместо   [OrderProduct] нужно  [Product] .
Немного переделал ваш запрос и всё заработало, спасибо.

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

Доброго времени суток! Возникла следующая проблема:
В бизнес-процессе есть запрос:

EntitySchemaQuery CountOfOrderesq = new EntitySchemaQuery(UserConnection.EntitySchemaManager,"UsrOrderProvidersProduct");
CountOfOrderesq.IsDistinct = true;
CountOfOrderesq.AddAllSchemaColumns();
CountOfOrderesq.Filters.Add(CountOfOrderesq.CreateFilterWithParameters(FilterComparisonType.Equal, "UsrOrderId", OrderId));
CountOfOrderesq.Filters.Add(CountOfOrderesq.CreateFilterWithParameters(FilterComparisonType.Greater, "UsrShipped", 0));
var CountOfOrders = CountOfOrderesq.GetEntityCollection(UserConnection);

Далее его результат вызывается в цикле

foreach (var Order in CountOfOrders){
        EntitySchema Activityschema = UserConnection.EntitySchemaManager.GetInstanceByName("Activity");
        var OrderNumber = Order.GetTypedColumnValuestring>("UsrClientsOrderId.Number");//вот здесь
        var ClientsOrder = Order.GetTypedColumnValueGuid>("UsrClientsOrderId");
        var ActivityEntity = Activityschema.CreateEntity(UserConnection);
        ActivityEntity.SetDefColumnValues();
        ActivityEntity.SetColumnValue("Title", "Повторная комплектация по заказу клиента " + OrderNumber);
        ActivityEntity.SetColumnValue("UsrComplicateAftProvidersOrder", true);
        ActivityEntity.SetColumnValue("TypeId", "ad9476d6-cec0-4c69-b361-c80db1670fb5");//тип комплектация
        ActivityEntity.SetColumnValue("OrderId", ClientsOrder);
        ActivityEntity.Save();
        ActivityEntities.Add(ActivityEntity);
}

При выполнении появляется ошибка:

Terrasoft.Common.ItemNotFoundException: Значение с именем "UsrClientsOrderId.Number" не найдено
в Terrasoft.Core.Entities.EntityColumnValueCollection.GetByName(String name)
в Terrasoft.Core.Entities.Entity.InternalGetColumnValue(String valueName)
в Terrasoft.Core.Entities.Entity.GetTypedColumnValue[TResult](String valueName)
в Terrasoft.Core.Process.UsrProcess1.ScriptTask1Execute(ProcessExecutingContext context)
в Terrasoft.Core.Process.ProcessFlowElement.Execute(ProcessExecutingContext context)

Sql-текст запроса:

SELECT DISTINCT
 [UsrOrderProvidersProduct].[Id] [Id],
 [UsrOrderProvidersProduct].[CreatedOn] [CreatedOn],
 [UsrOrderProvidersProduct].[CreatedById] [CreatedById],
 [CreatedBy].[Name] [CreatedBy.Name],
 [CreatedBy].[PhotoId] [CreatedBy.PhotoId],
 [UsrOrderProvidersProduct].[ModifiedOn] [ModifiedOn],
 [UsrOrderProvidersProduct].[ModifiedById] [ModifiedById],
 [ModifiedBy].[Name] [ModifiedBy.Name],
 [ModifiedBy].[PhotoId] [ModifiedBy.PhotoId],
 [UsrOrderProvidersProduct].[ProcessListeners] [ProcessListeners],
 [UsrOrderProvidersProduct].[UsrProductId] [UsrProductId],
 [UsrProduct].[Name] [UsrProduct.Name],
 [UsrProduct].[PictureId] [UsrProduct.PictureId],
 [UsrOrderProvidersProduct].[UsrQuantity] [UsrQuantity],
 [UsrOrderProvidersProduct].[UsrUnitId] [UsrUnitId],
 [UsrUnit].[Name] [UsrUnit.Name],
 [UsrOrderProvidersProduct].[UsrOrderIdId] [UsrOrderIdId],
 [UsrOrderId].[Number] [UsrOrderId.Number],
 [UsrOrderProvidersProduct].[UsrCompleted] [UsrCompleted],
 [UsrOrderProvidersProduct].[UsrShipped] [UsrShipped],
 [UsrOrderProvidersProduct].[UsrClientsOrderIdId] [UsrClientsOrderIdId],
 [UsrClientsOrderId].[Number] [UsrClientsOrderId.Number],
 [UsrOrderProvidersProduct].[UsrMust] [UsrMust],
 [UsrOrderProvidersProduct].[UsrProcessed] [UsrProcessed],
 [UsrOrderProvidersProduct].[UsrTotalAmountWithoutVAT] [UsrTotalAmountWithoutVAT]
 
 FROM [dbo].[UsrOrderProvidersProduct] [UsrOrderProvidersProduct]

 WITH(NOLOCK) LEFT OUTER JOIN [dbo].[Contact] [CreatedBy]
 WITH(NOLOCK) ON ([CreatedBy].[Id] = [UsrOrderProvidersProduct].[CreatedById]) LEFT OUTER JOIN [dbo].[Contact] [ModifiedBy]
 WITH(NOLOCK) ON ([ModifiedBy].[Id] = [UsrOrderProvidersProduct].[ModifiedById]) LEFT OUTER JOIN [dbo].[Product] [UsrProduct]
 WITH(NOLOCK) ON ([UsrProduct].[Id] = [UsrOrderProvidersProduct].[UsrProductId]) LEFT OUTER JOIN [dbo].[Unit] [UsrUnit]
 WITH(NOLOCK) ON ([UsrUnit].[Id] = [UsrOrderProvidersProduct].[UsrUnitId]) LEFT OUTER JOIN [dbo].[ORDER] [UsrOrderId]
 WITH(NOLOCK) ON ([UsrOrderId].[Id] = [UsrOrderProvidersProduct].[UsrOrderIdId]) LEFT OUTER JOIN [dbo].[ORDER] [UsrClientsOrderId]
 WITH(NOLOCK) ON ([UsrClientsOrderId].[Id] = [UsrOrderProvidersProduct].[UsrClientsOrderIdId])

 WHERE [UsrOrderProvidersProduct].[UsrOrderIdId] = @P1 AND [UsrOrderProvidersProduct].[UsrShipped] > @P2

Подскажите пожалуйста решение проблемы. Заранее спасибо!

Нравится

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

Здравствуйте, Олег!

Попробуйте убрать Id в Вашем запросе:

var OrderNumber = Order.GetTypedColumnValue("UsrClientsOrder[s]Id[/s].Number");//вот здесь
var ClientsOrder = Order.GetTypedColumnValue("UsrClientsOrder[s]Id[/s]");

Приставка Id добавляется автоматически к колонкам типа Guid.

Здравствуйте, Андрей!

Так называются поля в объекте, если убрать Id то система вообще их не найдет.

Олег,

попробуйте переименовать колонку в объекте (убрать id) и применить рекомендацию выше.

Сообщите, пожалуйста, результат.

Андрей,

Заменили данное поле на "UsrClientOrder", ошибка повторяется снова.

var ClientsOrder = Order.GetTypedColumnValue("UsrClientsOrderId");
Так же уточню, что эта строка работает, ошибка появляется именно в обращении к "UsrClientsOrderId.Number".

Олег,
давайте попробуем следующим образом:

var countColumnName = Order.AddColumn("UsrClientsOrderId.Number").Name;
var OrderNumber = Order.GetTypedColumnValue<string>(countColumnName);

Андрей, решили проблему другим способом, тот что выше выдает ту же самую ошибку.

var OrderNumber = Order.GetTypedColumnValue<string>("UsrClientsOrderIdNumber");

Выяснилось, что колонки в коллекции называются так же как в запросе, но БЕЗ точки.

Добрый день Олег!!!

я бы еще рекомендовал при создание EntitySchemaQuery запросов, заранее "составному полю" присваивать свои Алиасы. Тогда при обработки значений запроса вам легче будет обрабатывать результаты запроса.

так же бы не рекомендовал при составление EntitySchemaQuery запросов включать все столбцы из EntitySchema, когда в результате к примеру вам нужны только 2 или 3 столбца. Это очень сильно влияет на производительность ваших страниц.

Здравствуйте, Михаил!

Спасибо за советы! Один вопрос, а каким образом присваивается Алиас к к колонке в запросе?

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

Добрый день Олег!!!

в вашем примере вы получаете все колонки из EntitySchema  CountOfOrderesq.AddAllSchemaColumns(); а я бы рекомендовал получать именно те колонки которые потом будут использоваться в обработке запроса. По вопросу Алиаса для колонки в EntitySchemaQuery:  ESQ.AddColumn("ReverseRelationType.Id", "ReverseRelationTypeId")  , где  ReverseRelationTypeId это и есть наш Алиас.

Спасибо!

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

Коллеги, приветствую.

Есть некоторый запрос к базе данных, полученный с использованием класса SELECT (считывается информация о платежах за период по ФИО должника.):

var selectPaymentsRegister = (Select)new Select(userConnection)
        .Column("c", "Surname").As("Surname")
        .Column("c", "GivenName").As("Name")
        .Column("c", "MiddleName").As("MiddleName")
        .Column("c", "Name").As("FullName")
        .Column("c", "Phone").As("Phone")
        .Column("c", "Address").As("Address")
        .Column("up", "UsrPaymentSum").As("Amount")
        .Column("up", "UsrPaymentDate").As("AmountDate")
        .From("UsrPayments").As("up")
        .Join(JoinType.Inner, "Contact").As("c")
        .On("up", "UsrDebtorId").IsEqual("c", "Id")
        .Where("c", "Surname").IsEqual(Column.Parameter(debtorSurname))
        .And("c", "GivenName").IsEqual(Column.Parameter(debtorName))
        .And("c", "MiddleName").IsEqual(Column.Parameter(debtorMiddleName))
        .And("up", "UsrPaymentDate").IsGreaterOrEqual(Column.Parameter(dateBegin))
        .And("up", "UsrPaymentDate").IsLessOrEqual(Column.Parameter(dateEnd))

        as Select;

Далее, с использованием IDataReader в цикле я получаю значения полей.

Как составить такой же запрос, но с использованием EntitySchemaQuery? Хочу подробнее разобраться в этой теме.

Был бы весьма признателен за информацию.

Спасибо.

--
С уважением, Алексей Быков.

Нравится

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

Коллеги, приветствую.

Есть определенный интерес поизучать классы Select, Insert, Update, EntitySchemaQuery и подробнее
разобраться, как с ними работать.

Чтобы это было проще и быстрее мне бы хотелось иметь возможность работать с ними из MS Visual Studio.

Например, запрос из статьи Использование EntitySchemaQuery для построения запросов к базе данных:

// Создание экземпляра запроса, добавление в запрос колонок и источника данных.
Select selectQuery = new Select(UserConnection)
                    .Column("Id")
                    .Column("Name")
                    .From("Contact");
// Выполнение запроса к базе данных и получение результирующего набора данных.
using (DBExecutor dbExecutor = UserConnection.EnsureDBConnection())
{
    using (IDataReader reader = selectQuery.ExecuteReader(dbExecutor))
    {
        while (reader.Read())
        {
            // Обработка результатов запроса.
        }
    }
}

Собственно, вопрос в конфигурировании класса UserConnection, как его использовать "вне платформы", не в режиме отладки?

Например, в методе Main:

static void Main(string[] args)
{
}

В элементе "Задание- сценарий" я могу получить его таким образом:

var userConnection = Get("UserConnection");

В Web- сервисе WCF:

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

Был бы весьма признателен за информацию.

Спасибо.

--
С уважением, Алексей Быков.

Нравится

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

Здравствуйте.
Если сайт у вас развернуть on-site, то есть, поднят на своем IIS сервере:
Тогда у вас есть возможность написать свой, к примеру, веб-сервис, или даже скрипт-сценарий, и пользуясь статьей по отладке,
http://academy.terrasoft.ru/documents/docs/technic/SDK/7.6.0/ServerCode…
ставить точки останова, и изучать поведение серверного ESQ.
Здесь главное, что бы код был частью системы, поэтому его и нужно писать как часть системы (веб-сервис, бизнес-процесс, и.т.д.), а не сторонние dll,exe,итд.
С автономной программы этого сделать не получится.

Если же сайт on-demand, то есть, развернут как http://имя-сайта.bpmonline.com/
То такой возможности у Вас нет, и со стороннего процесса (программы), Вы никак не обратитесь к ядру системы.
Из сторонних программ написанных Вами в Visual Studio, Вы можете разве что обратится к уже написанным веб-сервисам в рамках структуры сайта, либо же по протоколу OData,
http://academy.terrasoft.ua/documents/docs/technic/SDK/7.4.1/WorkWithBp… что, конечно же, совсем не запросы ESQ.

Александр, спасибо большое за ответ!

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

Коллеги, приветствую.

Есть некоторый простой бизнес- процесс, инициируемый событием- сигналом "Добавление записи в таблицу". При каждом добавлении записи я получаю ее уникальный идентификатор, например -

F6F4725A-C7C6-4AA2-BE50-E4878ACB7D4B

Я выполняю простой запрос из MS SQL Server Management Studio -

SELECT
        UsrInDebtId
FROM
        UsrDebt
WHERE
        Id='F6F4725A-C7C6-4AA2-BE50-E4878ACB7D4B';

Получаю какой- то результат.

Аналогично из кода C#

...
myConnection.Open();
SqlCommand myCommand = new SqlCommand("...", myConnection);
SqlDataReader myReader = myCommand.ExecuteReader();
while (myReader.Read()) {
   ...
}
...    

Уникальный идентификатор я сохраняю в параметре addedRecordId -

Guid addedRecordId = Get("addedRecordId");

Далее я хочу использовать класс Select из пространства имен Terrasoft.Core.DB -

var userConnection = Get("UserConnection");
Select select = (Select)new Select(userConnection)
            .Column("UserInDebtId")
            .From("UsrDebt").As("UD")
            .Where("UD", "Id")
            .IsEqual(addedRecordId); // строка 42

Получаю ошибки компиляции -

Как я могу использовать Guid в условии IsEqual?

Был бы весьма признателен за информацию.

Спасибо.

--
С уважением, Алексей Быков.

Нравится

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

Может быть, существует возможность получить строковое представление уникального идентификатора из события- сигнала и далее уже программно создать Guid, который и передать в предикат?..

Например:

string str = "F6F4725A-C7C6-4AA2-BE50-E4878ACB7D4B";
Guid guid = new Guid(str);

А затем уже:

...
.IsEqual(guid);

Хотя и не совсем ясно, что бы это могло дать...

Алексей,

В этом случае можно решить задачу двумя способами:

Вариант 1.
.IsEqual(addedRecordId.ToString());
Вариант 2.
.IsEqual(Column.Parameter(addedRecordId));

Второй вариант более корректный.

Здравствуйте, Олег! Большое спасибо за ответ, попробую сегодня.

В обоих случаях получаю такую ошибку компиляции:

Cannot implicity convert type 'Terrasoft.Core.DB.Query' to 'Terrasoft.Core.DB.Select'. An explicit
conversion exists (are you missing a cast?)

Нужно видеть всю картину, трудно так определить где зарыт камень.
Напишите в техническую поддержку.

Олег, спасибо.

Помогло использование переменной с неявным типом:

var selectQuery = 
	new Select(userConnection) ...
Показать все комментарии