бизнес-процесс
Технические вопросы
7.x

Добрый день.

Версия BPM 7.2

Есть ли возможность запускать бизнес-процесс в фоновом режиме? Сейчас использую такой код при нажатии на кнопку:

ProcessModuleUtilities.executeProcess(processArgs);

Проблема в том, что страница блокируется (появляется значок загрузки). Однако мой бизнес-процесс работает длительное время, он меняет состояние записей в определенном разделе (Выполняется, Ошибка, Успешно и т.д.), может обрабатывать по несколько записей за запуск, и необходимо дать пользователю возможность продолжать работу с системой.

Спасибо!

Нравится

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

Добрый день!

Проблема может заключатся в логике выполнения самого процесса (нет прав доступа на записи, некорректная обработка записи).
Если логика процесса не подразумевает взаимодействие с пользователем(отобразить страницу редактирования, вопрос пользователю и т.д.) то процесс по умолчанию будет отрабатывать в фоновом режиме.
Вы верно указали, для запуска процесса используется метод executeProcess(processArgs).
Начните с простого, запустите процесс по кнопке, который обработает 1 запись и посмотрите результат.

Бизнес-процесс не взаимодействует с пользователем. Там нет элементов взаимодействия с пользователем. БП считывает правила синхронизации из БД, выполняет запросы к удаленному стороннему web-сервису, разбирает ответ и затем обновляет данные в БД. При возникновении любой ошибки, процесс записывает информацию в лог и переходит к другому правилу синхронизации из набора.

На текущий момент удаленный web-сервис недоступен, возникает ошибка соединения, сообщение об ошибке попадает в лог - но во время всего этого страница пользователя блокируется, до тех пор, пока процесс не прекратит работу.

А необходимо, чтобы процесс запустился и вся его работа выполнялась в фоне.

В какую сторону мне посмотреть?

Артем,
Попробуйте поставить в начале процесса элемента “Таймер” с какой-то задержкой. В результате будет создан триггер, который продолжит выполнение процесса в указанное время, от этого же пользователя в фоновом режиме.

Показать все комментарии
7.6
быстрый переход
группа в url
фильтр в url
Технические вопросы
7.x

Добрый день!

Существует ли возможность указания в url'е группы для перехода, а так же доп.фильтра?

Нравится

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

Здравствуйте!

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

"Демьяник Алексей" написал:Вы можете создать собственные команды для командной строки для перехода в динамические группы. В результате выполнения команды будет открываться та или иная группа с предустановленными фильтрами.

Спасибо, Алексей! А команду можно указать в url'е?

Здравствуйте!

Эмулировать команду в url нет возможности.

Показать все комментарии
EntitySchemaQuery
SQL
выборка
Технические вопросы
7.x

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

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 это и есть наш Алиас.

Спасибо!

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

При создании email вручную-поле "От кого" заполняется автоматически. При переходе в элемент "Email" в ходе БП - данное поле не заполняется автоматически. Чтобы решить данный вопрос был добавлен данный код в карточку редактирования Email

                        methods: {
                                onEntityInitialized: function() {
                                        this.callParent(arguments);
                                        this.set("Sender", "shop@ringo.info");
                                }
                        },

Но это проблемы не решило, подскажите, что я делаю не так?

Нравится

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

Странновастенько... debbuger что говорит?

В какой объект в студии смотреть?

EmailPageV2

Такого объекта в студии не нашел :sad:

Прошу прощения, исправил свой комментарий)

Такого объекта нет в списке выгруженных при компиляции

Здравствуйте!

Для отладки в браузере:
1) Очистите кэш браузера
2) В ресурсах (source) найдите схему EmailPageV2.

Эта схема будет содержать весь код схемы в иерархии пакетов

Для отладки в VisuakStudio:
1) Сгенерируйте исходный код (либо для всех, либо для измененных - особой разницы нет)
2) Скомилируйте измененное (либо все)

После этого схема появится. Она будет иметь название [#Package#].EmailPageV2, где [#Package#] - название пакета.

Здравствуйте!

Для отладки в браузере:
1) Очистите кэш браузера
2) В ресурсах (source) найдите схему EmailPageV2.

Эта схема будет содержать весь код схемы в иерархии пакетов

Для отладки в VisuakStudio:
1) Сгенерируйте исходный код (либо для всех, либо для измененных - особой разницы нет)
2) Скомилируйте измененное (либо все)

После этого схема появится. Она будет иметь название [#Package#].EmailPageV2, где [#Package#] - название пакета.

Добрый день Александр!!!

в своем первом посте вы описали что открытие EmailPageV2 выполняется в ходе выполнения бизнес-процесса. Если так, то вам перед тем как открыть сраницу редактирования Email требуется передать на данную страницу, в виде массива реквизитов и их значений, поля что требуется заполнить. Если не значете как это сделать, в виде скриншотов могу рассказать как это делается, на примере.

Показать все комментарии
7.6
CustomDetail
entitySchemaName
SchemaBuilderV2
Кастомная деталь
Технические вопросы
7.x

Возникает проблема в
(anonymous function) (SchemaBuilderV2.js:338)
(anonymous function) (SchemaBuilderV2.js:126)
(anonymous function) (commonutils.js:1463)

в строке:

generatorConfig.entitySchemaName = schemaResponse.entitySchemaName; //schemaResponse = undefined

Что нужно проверить, чтоб schemaResponse был "живым"?

Нравится

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

Опишите подробнее на каком этапе появляется ошибка?

Очистил кэш браузера, всё заработало.

Видимо после добавления нового поля нужно было кэш чистить...

"AlexLS" написал:Что нужно проверить, чтоб schemaResponse был "живым"?

Добрый день!!!

проверять ничего не требуется, нужно знать четкие правила, что при создание новых разделов, страниц редактирования, деталей их обязательно нужно регистрировать в базе данных в таблицах SysModule, SysModuleLcz, SysModuleEdit, SysModuleEditLcz, SysDetail. И тогда подобные ошибки возникать у вас или вообще не будут или будут возникать очень редко.

"Власов Михаил Викторович" написал:их обязательно нужно регистрировать в базе данных в таблицах SysModule, SysModuleLcz, SysModuleEdit, SysModuleEditLcz, SysDetail

Михаил, спасибо за ответ! А как это правильно делать, где-то сказано?

"AlexLS" написал:Михаил, спасибо за ответ! А как это правильно делать, где-то сказано?

По данному вопросу есть информация на Академии, плюс данные вопросы уже не раз обсуждали на комьюнити, если поискать то можно найти ответа. Я своей практики написал сам SQL скрипты по регистрации Разделов, Страниц редактирования, Деталей и пользуюсь ими. Мне так удобнее и быстрее. Если нужно могу поделиться.

"Власов Михаил Викторович" написал:SQL скрипты по регистрации Разделов, Страниц редактирования, Деталей и пользуюсь ими. Мне так удобнее и быстрее. Если нужно могу поделиться

Михаил, спасибо!

Буду очень благодарен, если поделитесь (например, в личном сообщении)!

Показать все комментарии
группы полей
две колонки
Технические вопросы
7.x

Ответ на вопрос, если кому понадобиться.
Есть две группы полей, надо их расположить рядом, чтобы они занимали по 50% от ширины(12 столбцов).
//грид для групп начало/конец
{
"operation": "insert",
"parentName": "GeneralInfoTab",
"propertyName": "items",
"name": "StartDueBlock",
"values": {
"itemType": Terrasoft.ViewItemType.GRID_LAYOUT,
"items": []
}
},
//группа начало
{
"operation": "insert",
"name": "StartGroup",
"parentName": "StartDueBlock",
"propertyName": "items",
"values": {
"layout": {
"column": 0,
"row": 0,
"colSpan": 12,
"rowSpan": 1
},
"controlConfig": {
"collapsed": false
},
"itemType": Terrasoft.ViewItemType.CONTROL_GROUP,
"items": [],
"caption": { "bindTo": "Resources.Strings.StartGroupCaption" }
}
},
//заполняем элементами группу начало
{
"operation": "insert",
"name": "el1",
"parentName": "StartGroup",
"propertyName": "items",
"values": {
"caption": { "bindTo": "Resources.Strings.el1Caption" }
}
},
{
"operation": "insert",
"name": "el2",
"parentName": "StartGroup",
"propertyName": "items",
"values": {
"caption": { "bindTo": "Resources.Strings.el2Caption" }
}
},
//группа завершение
{
"operation": "insert",
"name": "DueGroup",
"parentName": "StartDueBlock",
"propertyName": "items",
"values": {
"layout": {
"column": 13,
"row": 0,
"colSpan": 12,
"rowSpan": 1
},
"controlConfig": {
"collapsed": false
},
"itemType": Terrasoft.ViewItemType.CONTROL_GROUP,
"items": [],
"caption": { "bindTo": "Resources.Strings.DueGroupCaption" }
}
},
//заполняем группу завершение
{
"operation": "insert",
"name": "el3",
"parentName": "DueGroup",
"propertyName": "items",
"values": {
"caption": { "bindTo": "Resources.Strings.el3Caption" }
}
},
{
"operation": "insert",
"name": "el4",
"parentName": "DueGroup",
"propertyName": "items",
"values": {
"caption": { "bindTo": "Resources.Strings.el4Caption" }
}
}

Нравится

0 комментариев
Показать все комментарии
Технические вопросы
7.x

Подскажите пожалуйста, как можно переместить CONTROL_GROUP в правую часть окна. Фото прикрепил к сообщению.

Нравится

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

Алдександр, добрый день!

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

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

{
	"operation": "insert",
	"parentName": "GeneralInfoTab",
	"propertyName": "items",
	"name": "TestBlock",
	"values": {
		"itemType": Terrasoft.ViewItemType.GRID_LAYOUT,
		"items": []
	}

И добавить в него нужные групы полей.

Cпробуй так

{
                "operation": "insert",
                "parentName": "GeneralInfoTab",
                "propertyName": "items",
                "name": "TestBlock",
                "values": {
                    "itemType": Terrasoft.ViewItemType.GRID_LAYOUT,
                    "items": []
                }
            },
{
                "operation": "insert",
                "name": "OptionsDepartureGroup",
                "parentName": "TestBlock",
                "propertyName": "items",
                "values": {
                    "itemType": Terrasoft.ViewItemType.CONTROL_GROUP,
                    "items": [],
                    "caption": "..."
                },
                index: 1
            },
{
                "operation": "insert",
                "name": "AdditionallyGroup",
                "parentName": "TestBlock",
                "propertyName": "items",
                "values": {
                    "itemType": Terrasoft.ViewItemType.CONTROL_GROUP,
                    "items": [],
                    "caption": "..."
                },
                index: 2
            },

Нет не работает (

Видел подобную реализацию на маркетплэйсе
https://www.terrasoft.ua/bpmonline-marketplace/cargo-logistics-powered-…
Попробуйте спросить у данного разработчика.

Создал тему с решением. Кидайте ссылку, если будет подобный вопрос.

http://www.community.terrasoft.ru/forum/topic/17086

[quote="Полозюков Евгений Петрович"]Создал тему с решением. Кидайте ссылку, если будет подобный вопрос.

http://www.community.terrasoft.ru/forum/topic/17086[/quote]

Добрый день Александр!!!

я бы не рекомендовал решать данную задачу предлагаемым Евгением путем. Так как это не отвечает идеологии BootStrap. Так как к примеру вам требуется Отображать или скрывать по условию Как сами контрол-группы, так и поля внутри данных контролов. При скрытии или отображение к примеру требуется чтобы изменялся автоматически размер как Контрол-Группы, так и автоматически смещались поля вверх или вниз Внутри контрол-группы. Используя предлагаемое Евгением решение данную задачу не решит. Если задача для вас Александр Актуальна и вам интересно как ее можно решить правильным способом, пишите. Я тогда приведу правильный пример в рамках данного Инцидента. Спасибо!!!

Михаил, было бы интересно увидеть Ваш пример реализации. Заранее спасибо.

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

Добрый день, подскажите литературу, где можно найти информацию по созданию виджетов. Нужно построить сложный отчет, с помощью виджетов в разделе Заказы/Аналитика.

Нравится

1 комментарий
entity
копирование
Технические вопросы
7.x

Здравствуйте!
Возникла проблема при копировании записей.
Использую следующий конструктор:
var newEntity = new Entity (entity);
Запись корректно создается, однако события объекта не срабатывают, в чем может быть проблема?

Полный код приведен ниже:

private void copyRouteDetail(Guid TemplateId, Guid TransRequestId) {
        EntitySchema schema = UserConnection.EntitySchemaManager.GetInstanceByName("SxRouteDetailTransRequest");
        EntitySchemaQuery esq = new EntitySchemaQuery(schema);
        esq.AddAllSchemaColumns();
        esq.UseAdminRights = false;
        esq.Filters.Add(esq.CreateFilterWithParameters(FilterComparisonType.Equal,
                                                        "SxRouteOptions", TemplateId));
        EntityCollection entities = esq.GetEntityCollection(UserConnection);
         foreach (Entity entity in entities)
        {
                var newEntity = new Entity (entity);
                newEntity.SetColumnValue("SxRouteOptionsId", null);
                newEntity.SetColumnValue("SxTransRequestId", TransRequestId);
                newEntity.UseAdminRights = false;
                newEntity.Save(false);
        }
}

Нравится

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

Здравствуйте, данный вопрос будет решён в рамках Вашего обращения №0300267

"Пащенко Александр Сергеевич" написал:Запись корректно создается, однако события объекта не срабатывают, в чем может быть проблема?

Добрый день Александр!!!

я бы рекомендовал внимательно проанализировать все бизнес-процессы выполняемые в сохраняемом Entity, внимательно проанализировать сначало Глазами, а потом внимательно проанализировать в Дебагере, что происходит в вашей базе данных при сохранение, и найти место где возникает исключение, при котором запись создается, но не выполняются события.

я могу предположить что некорректно созданы бизнес-процессы главной и замещающих схем Entity.

Михаил, все процессы процессы построены корректно и работают стабильно.
Процитирую ответ техподдержки:
"Данное поведение проявляется по причине того что, при использования данного конструктора класса Entity свойства создаваемого объекта отвечающие за вызов событий проставляются как false. К сожалению, изменить данные свойства после создания объекта нельзя.

Данную задачу можно решить следующим образом:

var userConnection = context.UserConnection;
var schema = UserConnection.EntitySchemaManager.GetInstanceByName("Account");
var newEntity = schema.CreateEntity(UserConnection);
newEntity.SetDefColumnValues();
//код установки значений колонок объекта
newEntity.Save();

Упростить задачу копирования значений колонок из одного объекта в другой можно используя метод public IEnumerable GetColumnValueNames(), который возвращает имена колонок объекта. Затем перебирая в foreach результат данного метода скопировать значения колонок."

При отладке, единственная разница, которую нашел - при использовании конструктора
var newEntity = new Entity(oldEntity)
у newEntity.Process=null,
у oleEntity.Process = не nulll, а ссылка на метод.

Михаил, все процессы процессы построены корректно и работают стабильно.
Процитирую ответ техподдержки:
"Данное поведение проявляется по причине того что, при использования данного конструктора класса Entity свойства создаваемого объекта отвечающие за вызов событий проставляются как false. К сожалению, изменить данные свойства после создания объекта нельзя.

Данную задачу можно решить следующим образом:

var userConnection = context.UserConnection;
var schema = UserConnection.EntitySchemaManager.GetInstanceByName("Account");
var newEntity = schema.CreateEntity(UserConnection);
newEntity.SetDefColumnValues();
//код установки значений колонок объекта
newEntity.Save();

Упростить задачу копирования значений колонок из одного объекта в другой можно используя метод public IEnumerable GetColumnValueNames(), который возвращает имена колонок объекта. Затем перебирая в foreach результат данного метода скопировать значения колонок."

При отладке, единственная разница, которую нашел - при использовании конструктора
var newEntity = new Entity(oldEntity)
у newEntity.Process=null,
у oleEntity.Process = не nulll, а ссылка на метод.

"Пащенко Александр Сергеевич" написал:Данную задачу можно решить следующим образом:

var userConnection = context.UserConnection;
var schema = UserConnection.EntitySchemaManager.GetInstanceByName("Account");
var newEntity = schema.CreateEntity(UserConnection);
newEntity.SetDefColumnValues();
//код установки значений колонок объекта
newEntity.Save();

Добрый день Александр!!!

так техническая поддержка вам предложила верный вариант решения вашей проблемы. Чем он вам не нравиться? что не устраивает?

Мне нужно сделать точную копию записи, в которой более 70 колонок, изменив всего 1 значение. Использовать для этого указанный выше конструктор считаю более целесообразным, но он некорректно работает. О варианте перебора всех колонок я знал. Сюда ответ продублировал на случай, если кому-то понадобится еще.

Спасибо за отклик!

Александр день добрый!!!

вы свою задачу можете вообще решить иструментами бизнес-процесса, и поидее это будет правильно. Подглядеть к примеру можно в бизнес-процесс  CreateInvoiceFromOrder . В данном бизнес процессе как раз происходит копирование продуктов из Заказа в Счет. Я бы пошел по данному пути.

Показать все комментарии
Технические вопросы
7.x

Дорого времени суток, коллеги.
У нас возник один интересный кейс, необходимо реализовать страницу "Политика конфиденциальности" с кучей текста, так чтобы она была доступна со страницы регистрации. Подскажите, как правильно сделать?
Я виже путь через отдельную .aspx страницу. Как ее можно правильно реализовать?

Нравится

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

Здравствуйте.
Рекомендую для начала ознакомиться с:
https://academy.terrasoft.ru/documents/technic-sdk/7-8-0/dokumentaciya-…
Вопрос очень расплывчат. Пробуйте начинать реализацию и, уже, по ходу любопытсвовать, ежели возникнут сложности.

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

Попробовал добавить в каталог \Terrasoft.WebApp\ файл и открыть его в браузере - страница открывается, осталось только ссылку на нее добавить на странице раздела. Но надо помнить, что при обновлении приложения их нужно скопировать, не совсем удобно. 

Склоняюсь к тому чтобы развернуть новый сайт на том же сервере и направить ссылки на него.

Добавлял в эту папку обычный файл AccessDenied.html  с имитацией дизайна системы и нужной иформацией, при необходимости перебрасывал на него, работало нормально. Но это было в 5.Х, где обновляли не так регулярно.

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