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

Есть 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
        ContactId AS debtorId,
        t1.CreatedOn AS activityDate,
        t2.CreatedOn AS paymentDate
FROM Activity AS t1 INNER JOIN UsrPayments AS t2
        ON t1.ContactId = t2.UsrDebtorId
WHERE t1.CreatedOn = (
        SELECT max(CreatedOn) FROM Activity
        WHERE t1.ContactId = t2.UsrDebtorId
);

И есть некоторый код C#, где с помощью подзапроса я хочу определить дату последней активности по платежу, аналогично тому, как я это делаю выше на native SQL:

var selectNewPayments = (Select)new Select(userConnection)
        .Column("t1", "ContactId")
        .Column("t1", "CreatedOn")
        .Column("t2", "CreatedOn")
        .From("Activity").As("t1")
        .Join(JoinType.Inner, "UsrPayments").As("t2")
        .On("t1", "ContactId").IsEqual("t2", "UsrDebtorId")
        .Where("... здесь подзапрос и обращение к функции max() ...")
        as Select;

Как этот подзапрос написать?

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

Спасибо.

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

Нравится

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

Здравствуйте!
Все функции описаны по ссылке.

Пример:

SELECT 
C.Name,
(SELECT COUNT(*) FROM Activity A WHERE A.ContactId = C.Id) As ActivityCount
FROM Contact C

Перевод в С#:

var subSelect = new Select(userConnection)
                .Column(Func.Count(Column.Asterisk()))
.From("Activity").As("A")
.Where("C", "Id").IsEqual("A", "ContactId").As("ActivityCount")
var select = new Select(userConnection)
                .Column("C", "Name")
                .Column(subSelect)
.From("Contact").As("C")

Супер! Алексей, спасибо большое.

А можно то же самое, только не Select'ом а с помощью ESQ?

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

Примеры доступны по ссылке:
https://www.terrasoft.ru/bpmonlinesdk/UsingEntitySchemaQuery.html

"Шамшин_Олег" написал:А можно то же самое, только не Select'ом а с помощью ESQ?

1. Делаете один esq запрос на содержимое подзапроса, выбираете из него, список Id, или чего вам нужно, в оригинальном посте подзапрос выбирал CreatedOn. Формируете массив этих CreatedOn.

2. В колбеке после возврата результата подзапроса, формируете новый esq запрос, с фильтрацией нужной колонки, в оригинальном посте CreatedOn на вхождение в массив ранее выбранных CreatedOn.

Т.к. фильтрация createColumnInFilterWithParameters спокойно проверит вхождение колонки и в массив.
Пример оторванный от контекста esq, рассматривает только создания фильтра, но такой фильтр подставленный в esq будет работать и в esq:
http://www.community.terrasoft.ru/forum/topic/11497#comment-50859

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

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

Есть некоторый запрос, который возвращает информацию по должнику и последней активности, проявленной в отношении него:

SELECT
        TOP 1  
        ContactId as id,
        AC.CreatedOn as activityDate,
        UP.CreatedOn as paymentDate

FROM
        Activity as AC INNER JOIN UsrPayments as UP
                ON AC.ContactId = UP.UsrDebtorId
WHERE
        UP.CreatedOn  > AC.CreatedOn

ORDER BY AC.id ASC;

И есть некоторый код на C#, где с помощью класса Select проделывается то же, но считываются записи по всем активностям:

var selectNewPayments = (Select)new Select(userConnection)
                .Column("t1", "ContactId")
                .Column("t1", "CreatedOn")
                .Column("t2", "CreatedOn")
                .From("Activity").As("t1")
                .Join(JoinType.Inner, "UsrPayments").As("t2")
                .On("t1", "ContactId").IsEqual("t2", "UsrDebtorId")
                .Where("t1", "CreatedOn")
                .IsLess("t2", "CreatedOn") as Select;

Как прочитать только первую запись?

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

Спасибо.

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

Нравится

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

Нашел, собственно -

var selectNewPayments = (Select)new Select(userConnection)
   .Top(1)
   .Column("t1", "ContactId") 
   .Column("t1", "CreatedOn")
   .Column("t2", "CreatedOn")
   .From("Activity").As("t1")
   .Join(JoinType.Inner, "UsrPayments").As("t2")
   .On("t1", "ContactId").IsEqual("t2", "UsrDebtorId")
   .Where("t1", "CreatedOn").IsLess("t2", "CreatedOn").OrderByAsc("t1", "id") as Select;

Такой запрос возможен???

select count(ID)

   from [dbo].[Case] AS TI

WHERE DATEPART(HOUR, DATEADD(hh, 6, TI.[UsrDueDate])) >=9  and DATEPART(HOUR, DATEADD(hh, 6, TI.[UsrDueDate])) <12

and FORMAT(DATEADD(hh, 6, TI.[UsrDueDate]), N'yyyy.MM.dd') = FORMAT(cast(GETDATE() +1 as date), N'yyyy.MM.dd')

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

Добрый день! В нашей компании встал вопрос с быстродействием системы. В частности менеджеры в региональных офисах стали жаловаться на долгое открытие разделов и карточек в системе. Для эксперимента были сняты трейсы через Profiler. На трейсах были обнаружены непонятные пары запросов: Audit Login и Audit Logout, постоянно отправляемые на сервер. Кроме того, с помощью сниффера, получили странную картину: в определённые моменты времени и сервер и клиент одновременнно простаивают. В связи спроблемой с быстродействием хотелось бы больше понимать механизм работы системы. Можно ли получить больше информации по этому вопросу?

Нравится

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

Здравствуйте.
В стандартной конфигурации запросов вида "Audit Login", "Audit Logout" нет. Вероятнее всего, что это либо проектная доработка, либо внесены изменения в конфигурацию с Вашей стороны. Что касается быстродействия, то можно попробовать перестроить индексы базы данных путём запуска "хранимки" sp_reindex_all_tables (скрипт для её создания прикрепил). Запускать нужно в нерабочее время и предварительно ОБЯЗАТЕЛЬНО создать резервную копию базы данных.

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

/*
Вывести зависимость выбранного пакета от других пакетов
*/

SELECT DependingPackage.Name AS 'Пакет', DependedPackage.Name AS 'Зависит от пакетов' FROM SysPackageDependency
INNER JOIN SysPackage AS DependedPackage ON DependedPackage.Id = SysPackageDependency.DependOnPackageId
INNER JOIN SysPackage AS DependingPackage ON DependingPackage.Id = SysPackageDependency.SysPackageId
WHERE SysPackageId =
(
SELECT id FROM SysPackage WHERE Name = 'Custom' --введите название пакета
)
ORDER BY DependedPackage.Name

http://i.piccy.info/i9/6666e8ff13a10ff68305bde3b011c958/1434210764/12075/772387/image2015_4_18_12_13_39.png

/*
Вывести зависимые пакеты от указанного пакета
*/

SELECT DependedPackage.Name AS 'Пакет', DependingPackage.Name AS 'Зависимые пакеты' FROM SysPackageDependency
INNER JOIN SysPackage AS DependedPackage ON DependedPackage.Id = SysPackageDependency.DependOnPackageId
INNER JOIN SysPackage AS DependingPackage ON DependingPackage.Id = SysPackageDependency.SysPackageId
WHERE DependOnPackageId =
(
SELECT id FROM SysPackage WHERE Name = 'Base' --введите название пакета
)
ORDER BY DependingPackage.Name

http://i.piccy.info/i9/3ba59b1a74bbc34f0ccb9ef5ab75c916/1434210782/9991/772387/image2015_4_18_12_12_56.png

Нравится

Поделиться

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

Коллеги, здравствуйте.

В ходе выполнения различного рода задач может пригодится скрипт, который выполнит поиск заданного идентификатора по всей базе данных (в колонке с определенным названием).

DECLARE @COLUMN_NAME NVarChar(100) = 'Id'
DECLARE @COLUMN_VALUE NVarChar(100) = '8F2E3098-932C-49A8-8D06-B40462DA98CD'

DECLARE @tableName VARCHAR(50)
DECLARE tablesCursor CURSOR LOCAL FORWARD_ONLY STATIC FOR
               
                SELECT table_name = sysobjects.name
                FROM sysobjects
                JOIN syscolumns ON sysobjects.id = syscolumns.id        
                WHERE sysobjects.xtype='U'
                AND syscolumns.name = @COLUMN_NAME

OPEN tablesCursor
FETCH NEXT FROM tablesCursor INTO @tableName

WHILE @@FETCH_STATUS = 0
BEGIN  
               
                EXEC ('DECLARE @recordCount INT;
                               DECLARE @quotesChar CHAR = char(39);
                               DECLARE @tabChar CHAR = char(9);
                               BEGIN TRY
                                               SET @recordCount =
                                                               (SELECT COUNT(*)
                                                               FROM ['
+ @tableName + '] where ' + @COLUMN_NAME + ' = ''' + @COLUMN_VALUE + ''')
                                               IF @recordCount > 0
                                               BEGIN                                                  
                                                               PRINT '
'''
                                                               PRINT '
'-- ' + @tableName + ':''
                                                               PRINT '
'     SELECT * FROM ' + @tableName +
                                                                                                              ' WHERE ' + @COLUMN_NAME +
                                                                                                              ' = '' + @quotesChar + ''' + @COLUMN_VALUE + ''' + @quotesChar + ''''                                          
                                                               PRINT '
'     -- Количество строк в запросе: '' + CAST(@recordCount as VARCHAR(5))
                                               END
                               END TRY
                               BEGIN CATCH                                  
                               END CATCH;                      
                               '
);
                FETCH NEXT FROM tablesCursor INTO @tableName
END

CLOSE tablesCursor
DEALLOCATE tablesCursor

Нравится

Поделиться

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

Коллеги, данный материал будет полезен администраторам системы bpm'online с большим количеством пользователей, а также консультантам и программистам, ведущим разработку на платформе bpm'online.

Для решения разного рода бизнес-задач, а также быстрого анализа проблем, связанных с организационной структурой, пригодится SQL-скрипт, который выводит сводную информацию о пользователях системы:

1) Имя пользователя
2) Активен (да / нет)
3) Контакт пользователя
4) Тип контакта пользователя
5) Контрагент контакта пользователя
6) Тип контрагента контакта пользователя
7) Культура пользователя (5.4.0+)
8) Лицензии пользователя
9) Роли пользователя
10) Является ли пользователь синхронизированным с LDAP (да / нет)
11) Идентификатор пользователя
12) Идентификатор контакта пользователя
13) Идентификатор контрагента контакта пользователя


bpm'online 5.4.0 - 7.X:

SELECT
SysAdminUnit.Name AS Users,
SysLicPackage.Name AS SLPN,
SAUR.Name AS Rol,
SysAdminUnit.Active AS Active,
Contact.Name AS Contacts,
ContactType.Name AS ContactTypes,
Account.Name AS Accounts,
AccountType.Name AS AccountTypes,
SysAdminUnit.SynchronizeWithLDAP AS LDAP,
SysCulture.Name AS Culture,
SysAdminUnit.Id AS UserID,
Contact.Id AS ContactID,
Account.Id AS AccountID
INTO #temp FROM SysLicUser
FULL OUTER JOIN SysAdminUnit ON SysAdminUnit.Id = SysLicUser.SysUserId
LEFT OUTER JOIN SysUserInRole ON SysUserInRole.SysUserId = SysAdminUnit.Id
LEFT OUTER JOIN SysAdminUnit SAUR ON SAUR.Id = SysUserInRole.SysRoleId
LEFT OUTER JOIN SysLicPackage ON SysLicPackage.Id = SysLicUser.SysLicPackageId
INNER JOIN Contact ON Contact.Id = SysAdminUnit.ContactId
LEFT OUTER JOIN ContactType ON ContactType.Id = Contact.TypeId
LEFT OUTER JOIN Account ON Account.Id = Contact.AccountId
LEFT OUTER JOIN AccountType ON AccountType.Id = Account.TypeId
LEFT OUTER JOIN SysCulture ON SysCulture.Id = SysAdminUnit.SysCultureId
SELECT DISTINCT
Users,
Active,
Contacts,
ContactTypes,
Accounts,
AccountTypes,
Culture,
(SELECT DISTINCT cast(SLPN AS varchar(max)) + ', ' AS 'data()' FROM #temp SLU2 WHERE SLU1.Users=SLU2.Users FOR xml path('') ) AS Licenses,
(SELECT DISTINCT cast(Rol AS varchar(max)) + ', ' AS 'data()' FROM #temp SLU2 WHERE SLU1.Users=SLU2.Users FOR xml path('') ) AS Roles,
LDAP,
UserID,
ContactID,
AccountID
FROM #temp SLU1
GROUP BY Users, Active, Contacts, ContactTypes, Accounts, AccountTypes, LDAP, Culture, UserID, ContactID, AccountID
DROP TABLE #temp


bpm'online 5.3:

SELECT
SysAdminUnit.Name AS Users,
SysPackage.Name AS SLPN,
SAUR.Name AS Rol,
SysAdminUnit.Active AS Active,
Contact.Name AS Contacts,
ContactType.Name AS ContactTypes,
Account.Name AS Accounts,
AccountType.Name AS AccountTypes,
SysAdminUnit.SynchronizeWithLDAP AS LDAP,
SysAdminUnit.Id AS UserID,
Contact.Id AS ContactID,
Account.Id AS AccountID
INTO #temp FROM SysLicUser
FULL OUTER JOIN SysAdminUnit ON SysAdminUnit.Id = SysLicUser.SysUserId
LEFT OUTER JOIN SysUserInRole ON SysUserInRole.SysUserId = SysAdminUnit.Id
LEFT OUTER JOIN SysAdminUnit SAUR ON SAUR.Id = SysUserInRole.SysRoleId
LEFT OUTER JOIN SysPackage ON SysPackage.Id = SysLicUser.SysPackageId
INNER JOIN Contact ON Contact.Id = SysAdminUnit.ContactId
LEFT OUTER JOIN ContactType ON ContactType.Id = Contact.TypeId
LEFT OUTER JOIN Account ON Account.Id = Contact.AccountId
LEFT OUTER JOIN AccountType ON AccountType.Id = Account.TypeId
SELECT DISTINCT
Users,
Active,
Contacts,
ContactTypes,
Accounts,
AccountTypes,
(SELECT DISTINCT cast(SLPN AS varchar(max)) + ', ' AS 'data()' FROM #temp SLU2 WHERE SLU1.Users=SLU2.Users FOR xml path('') ) AS Licenses,
(SELECT DISTINCT cast(Rol AS varchar(max)) + ', ' AS 'data()' FROM #temp SLU2 WHERE SLU1.Users=SLU2.Users FOR xml path('') ) AS Roles,
LDAP,
UserID,
ContactID,
AccountID
FROM #temp SLU1
GROUP BY Users, Active, Contacts, ContactTypes, Accounts, AccountTypes, LDAP, UserID, ContactID, AccountID
DROP TABLE #temp

Нравится

Поделиться

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

Добрый день, коллеги.

Если есть необходимость переименовать название раздела в главном меню системы, может помочь пример ниже.

Необходимо заместить модуль SimpleIntro, изменить в нем значение локализированной строки нужного раздела, после чего скопировать из блока diff базовой схемы блок добавления нужного раздела в блок diff замещающего клиентского модуля, при этом операцию insert заменить на merge.

Пример замещающего клиентского модуля для заголовка раздела Контрагенты (значение локализированной строки изменено на "Клиенты"):

define("SimpleIntro", ["SimpleIntroResources", "ConfigurationConstants"], function(resources, ConfigurationConstants) {
return {
attributes: {
},
methods: {
init: function() {
this.callParent(arguments);
},
},
diff: [
{
"operation": "merge",
"propertyName": "items",
"parentName": "BasicTile",
"name": "AccountSectionV2",
"values": {
"itemType": Terrasoft.ViewItemType.LINK,
"caption": {"bindTo": "Resources.Strings.AccountSectionCaption"},
"tag": "SectionModuleV2/AccountSectionV2/",
"click": {"bindTo": "onNavigateTo"}
}
}
]
};
});

http://storage3.static.itmages.ru/i/15/0513/h_1431534157_4107282_131d2c6f19.png

Нравится

Поделиться

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

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

Роман, добрый день!

Поменять заголовок раздела Вы можете в Мастере разделов (на скриншотах)

Спасибо!

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

В случае если Вы столкнулись с проблемой анализа объема таблицы в базе SQL, а так же Вам нужно узнать, сколько в ней записей и какой объём занимают индексы, - Вам необходимо выполнить скрипт из вложения и проанализировать результат в полученной таблице.

Нравится

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