Добрый день!
Есть следующая задача: необходимо во время редактирования записи пользователем, не давать другим пользователем редактировать эту же запись или ее детали. Причем этот функционал должен быть универсальным, т.е. должна быть возможность включать его для любых разделов.
Есть идеи как это можно реализовать?
Версия 7.7.0.2107

Нравится

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

Иван, добрый день.
Функционал можно реализовать при помощи раздачи прав на пользователя/группу пользователей при изменении ответственного/группы ответственных в записи, используя элемент бизнес-процесса "Изменение прав доступа", т.е.:
1) Ловим сигнал изменения поля "Ответственный" в записи интересующего нас объекта;
2) Читаем данные о пользователе/группе пользователей в измененной записи;
3) Элементом "Изменение прав":
a. Удаляем все установленные права в измененной записи;
b. Добавляем права пользователю/группе пользователей, которые выбраны в поле "Ответственный"
Что-то вроде этого должно получиться. Если необходимы подробности для настройки элементов БП, то могу поделиться.

Спасибо, про раздачу прав процессом и изменение прав я в курсе.
Тут проблема в том, что запись должна быть закрыта для остальных в момент открытия записи и после сохранения права должны быть восстановлены. Т.е. сам механизм прав тут не очень подходит. Скорее нужен служебный объект, в котором будут хранится данные об открытых на редактирование записях разделов. А у же в карточке при сохранении придется проверять, есть ли она в списке. Пока ничего лучше не придумалось...

Иван,

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

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

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

Подскажите, как отловить сигнал завершения БП со страницы раздела. БП запускается с этой же страницы. А после получения сигнала о завершении, выполнить произвольную функцию.

БП со страницы раздела вызываю следующим кодом:

                                       var processArgs = {
                                                sysProcessName: 'CollectionOfStatistics',
                                                parameters: {
                                                        CreatedById: CreatedById,
                                                        CalcForPeriod: forPeriod
                                                }
                                        };
                                        ProcessModuleUtilities.executeProcess(processArgs);

Нравится

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

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

Вы можете вызвать следующий web сервис:
http[s]://<адрес_приложения_bpm'online>/0/ServiceModel/ProcessEngineService.svc/CollectionOfStatistics/Execute?ResultParameterName=RESULTPARAMETERNAME&CreatedById=CreatedById&CalcForPeriod=forPeriod

В результате на клиент придет значение результирующего параметра RESULTPARAMETERNAME после получения которого, Вы можете выполнить произвольную функцию.

Более подробно о сервисе ProcessEngineService.svc Вы можете почитать по ссылке

RESULTPARAMETERNAME - параметр процесса с типом "Строка". В Вашем кейсе достаточно будет ограничить длину строки 50 символами.

Здравствуйте, Алексей. Спасибо за ответ. Возможно я что-то делаю не правильно. Воспользывался вашим советом. Вызываю БП со страницы раздела следующим методом:

var CreatedById = this.Terrasoft.SysValue.CURRENT_USER_CONTACT.value;
 
var Params = "ResultParameterName=ResultProcess&CreatedById=" + CreatedById + "&CalcForPeriod=false";
 
 
Terrasoft.AjaxProvider.request({
		url: "../ServiceModel/ProcessEngineService.svc/CollectionOfStatistics/Execute?" + Params,
		method: "POST",
		scope: this,
		jsonData: {},
		callback: function(request, success, response) {
			if (success) {
 
//Сюда приходит строка с возвращаемым параметром из БП
//Вида : 
//response.responseText =
//"<string xmlns="http://schemas.microsoft.com/2003/10/Serialization/">"ProcessEnd"</string>"
//Как ее правильно обработать? string.replace мне кажется не совсем верным решением
 
                      }
		}
	});

Как правильно обработать строку вида:

response.responseText = ""ProcessEnd""?

И второй вопрос: в БП есть преднастроенная страница. Соответственно, если она вызывается, то страница раздела ничего не ждет. Параметр response.responseText приходит со значением null и метод в котором вызывается БП завешается. Что не так?

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

Если в процессе есть преднастроенная страница, то должна открыться и пока этот элемент не будет выполнен, результирующий параметр будет null.

Обработка полностью зависит от Вашей задачи. Так как всегда будет приходить один и тот же параметр, то string.replace, как по мне, очень даже корректное решение.

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

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

У меня сейчас стоит такой кейс:
Есть реестр данных, в нем отображается, например, 3 поля. Всего, в объекте полей скажем 6.
В реестре нужно скрыть возможность доступа к карточке редактирования, а при наведении на поле данных организовать вывод всех данных в миникарточку.

Поковырявши Контакт, я нашел там модуль ContactMiniPage. Теперь состоит вопрос в том:
1. создать свой, отнаследовавшись от BaseMiniPage.
2. при наведении на поле, заставить ее отобразиться.

Нравится

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

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

Пример:

Как с миникарточкой разобраться я понимаю, мне ее надо привязать к полю реестра и вывести на экран.

И мне не совсем расширить, мне надо вывести в миникарточке следующие поля:

[Title] = виртуальное поле заполняемое в зависимости от типа контакта
[Контакт] = или [Контакт] или [Контрагент]
[Представитель] = или [Контакт] или [Контрагент]
[Роль] = Справочное поле
[Код] = числовое
[Процент] = числовое
[Территория] = Справочное поле

Попробуйте, указать ее уникальный идентификатор в таблице [SysModuleEdit], колонка [MiniPageSchemaUId].

Пример скрипта:

Миникарточка отображается если колонка имеет тип справочник и миникарточка ссылается на нее.
Если Вам необходимо добавить дополнительные колонки в миникарточке то добавляете их через diff.

И мини-карточка может быть разной, в зависимости от типа (например, типа контрагента)?

"Владимир Соколов" написал:

И мини-карточка может быть разной, в зависимости от типа (например, типа контрагента)?

Такой кейс я не проверял, но можно попробовать следующее:

- добавляете «visible», который будет «биндиться» к пользовательскому атрибуту.
- данный атрибут добавляете в метод, в котором будет реализована Ваша бизнес-задача.
- затем на «init» вызываете данный метод.

По поводу подписки советую ознакомиться с топиками на Community:

- http://www.community.terrasoft.ru/forum/topic/9692 (Подписаться на изменение значения контрола можно так (на примере расчета вычисляемого поля Потенциал(Potential), значение которого зависит от полей Доход(Revenue) и Вероятность(Probability)))

- http://www.community.terrasoft.ru/forum/topic/15340 (Подписка на событие в том или ином виде проскакивала на форуме, к примеру:
http://www.community.terrasoft.ua/forum/topic/13908)

В любом случае нужно пробовать.

"Владимир Соколов" написал:И мини-карточка может быть разной, в зависимости от типа (например, типа контрагента)?

Присоединяюсь к вопросу.
Здесь рассматривается пример только, когда существует карточка одного типа. А когда для раздела существует несколько карточек редактирования для каждого типа записи, то продемонстрированный в академии кейс не работает, как открывались стандартные карточки так и открываются. (Моя тема)

"Коновалов Игорь" написал:
Владимир Соколов пишет:

И мини-карточка может быть разной, в зависимости от типа (например, типа контрагента)?

Присоединяюсь к вопросу.

Здесь рассматривается пример только, когда существует карточка одного типа. А когда для раздела существует несколько карточек редактирования для каждого типа записи, то продемонстрированный в академии кейс не работает, как открывались стандартные карточки так и открываются. (Моя тема)

Игорь, предположительно, должно быть в мастере настроено несколько страниц. Затем для каждого типа должна отдельно зарегестирована в БД схема (своя страница редактирования) и соотвественная для каждого MiniPageSchemaUId. После этого очистить кэш и проверрить работу. Попробуйте, также, отладить код.

Может сделать обратным способом - http://www.community.terrasoft.ru/forum/topic/15063#comment-58412

Боюсь, что обратным способом не подойдёт.

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

Добрый день!

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

Емеется в наличии только JS код выгруженный из конфигурации. Глядя на него пытался сделать нечто подобное:
{
operation: "insert",
name: "RadioGroupContainer",
values: {
itemType: Terrasoft.ViewItemType.RADIO_GROUP,
name: "RadioGroup",
collection: {bindTo: "RadioGroupItemCollection"},
items: []
}

Коллекцию RadioGroupItemCollection формирую в методе init, как набор конфигов. Но ничего не получается.

Нравится

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

Максим, ошибка может заключаться в использовании метода init. Попробуйте использовать onEntityInitialized. Так же за елементы radio_group отвечает свойство items, а не collection.

{
        "operation": "insert",
        "name": "UsrProductionType",
        "values": {
            "itemType": 16,
            "layout": {
                "column": 12,
                "row": 1,
                "colSpan": 12,
                "rowSpan": 1
            },
            "bindTo": "UsrProductionType",
            "items": [],
            "value": {
                "bindTo": "UsrProductionType"
            }
        },
        "parentName": "Header",
        "propertyName": "items",
        "index": 3
    },
    {
        "operation": "insert",
        "name": "FirstUsrProductionType",
        "values": {
            "caption": {
                "bindTo": "Resources.Strings.FirstUsrProductionTypeCaption"
            },
            "value": "Название 1"
        },
        "parentName": "UsrProductionType",
        "propertyName": "items",
        "index": 0
    },
    {
        "operation": "insert",
        "name": "SecondUsrProductionType",
        "values": {
            "caption": {
                "bindTo": "Resources.Strings.SecondUsrProductionTypeCaption"
            },
            "value": "Название 2"
        },
        "parentName": "UsrProductionType",
        "propertyName": "items",
        "index": 1
    }

Спасибо за ответы!

Антон, закодировать через diff схему я могу без проблем так (суть аналогична вашей):
{
operation: "insert",
name: "CallReason",
values: {
itemType: Terrasoft.ViewItemType.RADIO_GROUP,
caption: "Call Reason",
value: {bindTo: "CallReason"},
items: [
{
name: "Test1",
caption: "Test1",
value: "Test1"
}, {
name: "Test2",
caption: "Test2",
value: "Test2"
}, {
name: "Test3",
caption: "Test3",
value: "Test3"
}
]
}
}
Вопрос, как добавить эти items программно, когда их список не предопределен изначально.

Илья, я делал и через items двумя способами так:
1. items: {bintTo: "getItemsConfig"}
2. items: {bintTo: "SomeCollectionAttribute"}

где,
getItemConfig - это какая-то функция, возвращающая конфиг для items,
SomeCollectionAttribute - это атрибут коллекция - набор конфигов для каждого items.

Судя по отладчику генератор radio button не вызывает функцию, и не использует коллекцию, переданные в bindTo. Генератор просто пытается интепретировать имя того что передано в bindTo ("getItemsConfig" или "SomeCollectionAttribute") сразу как конфиг, и соответсвенно падает на этом.

Максим, Вам стоит посмотреть в сторону схемы "ViewGeneratorV2", в котором и происходит генерация радио группы и ее айтемов. Или же попробуйте создать свой Контейнер унаследовавшись от AbstractContainer или Container.

По подсказке хороших людей нашли подходящий пример в конфигурации здесь:
Order.AddressSelectionDetailV2
Сделал по аналогии. Суть такая, что полностью генерируем контрол заново как Container содержаций Containers с помощью GridUtilitesV2.
Способ конечно очень трудозатратный для такой простой задачи, но рабочий)

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

Добрый день
Подскажите, как на С# написать следующее:
нужно найти ID карточки конфигурационной единицы.

Заранее спасибо

Нравится

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

При чём тут C#?

А как тогда можно найти ID открытой карточки конфигурационной единицы ?

Я не имею в виду, что можно посмотреть после record&.

Мне нужно именно его вычислить для дальнейшего использования в условиях if/else

var recordId = new Guid(Page.GetParameterValue("recordId").ToString());

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

Добрый день!
Необходимо создать деталь многие ко многим (например, как статьи БД в карточке обращения)

Создали таблицу развязки
UsrCase -ссылка на Case
UsrProblemKEDB - ссылка на проблемы

Действовали согласно инструкции из этой темы
https://community.terrasoft.ru/forum/topic/15489

Проблема в следующем

вот такая функция
initConfig: function() {
this.callParent(arguments);
var config = this.getConfig();
//Название объекта для выбора из справочника
config.lookupEntitySchema = config.lookupConfig.entitySchemaName = "Problem";
// название раздела
config.sectionEntitySchema = "Case";
}

И примечание к ней Справочные колонки деталей в родительских объектах должны иметь такое же название, как и их объекты

Но объект-то кастомный и колонки в нем называются не Case и Problem, а UsrCase и UsrProblemKEDB.

Как быть в таком случае?

Нравится

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

Доброго.

называйте их соответственно:
UsrCase и UsrProblemKEDB

Извините, но не поняла.
Кого их?

Вот здесь, что необходимо писать?
//Название объекта для выбора из справочника
config.lookupEntitySchema = config.lookupConfig.entitySchemaName = "Problem";
// название раздела
config.sectionEntitySchema = "Case";

Если написать
//Название объекта для выбора из справочника
config.lookupEntitySchema = config.lookupConfig.entitySchemaName = "UsrProblemKEDB";
// название раздела
config.sectionEntitySchema = "UsrCase";

то ошибка будет

Дарья, уточните, какая ошибка?

вот такая ошибка

Дарья, я буду отталкиваться примера http://www.community.terrasoft.ru/forum/topic/15489#comment-59283.

Для работы необходимо, чтобы был создан объект ReleaseConfItem (развязочная таблица), в котором есть колонки "ConfItem" и "Release", которые в свою очередь ссылаются на базовые объекты "ConfItem" и "Release".

Справочные колонки деталей в родительских объектах должны иметь такое же название, как и их объекты

Означает, что колонки в развязочной таблице должны иметь такие же названия (не заголовки) как и название самих объектов. Скорее всего это связано с тем, чтобы выполнялись все запросы автоматом, а не прописывать логику отдельно.

Если колонки UsrCase и UsrProblemKEDB ссылаются на базовые объекты Case и Problem, то для решения Вам необходимо изменить название данных колонок в объекте на соответствующие.

"Мотков Илья" написал:Если колонки UsrCase и UsrProblemKEDB ссылаются на базовые объекты Case и Problem, то для решения Вам необходимо изменить название данных колонок в объекте на соответствующие.

Илья, поясните, пожалуйста, какие именно названия колонок надо поменять
UsrCase ссылается на объект Case (поле ID) - что тут можно поменять в названии?
я не могу поменять UsrCase на Case - это же кастомная колонка
и не могу поменять название объекта Case на какое-то другое
Как действовать, подскажите, пожалуйста?

Деталь отрисовывается
Ошибка возникает при нажатии на кнопку Добавить

Здравствуйте, Дарья!

А почему Вы не можете изменить название колонки с UsrCase на Case?

В системе есть системная настройка Префикс названия объекта (код SchemaNamePrefix). Замените в ней значение по умолчанию с "Usr" на "". После этого очистите Redis и перезайдите в систему. Измените название колонки на нужное...

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

Здравствуйте, к чему эти сложности, если у Вас версия 7+, то достаточно создать объект и воспользоваться мастерами, никакой код писать не нужно.

Ведь пример реализации паттерна многие-ко-многим в bpm’online это просто «детали» в которых есть ссылочные колонки.
detail_wizard

К примеру, в детали «продукт в заказе», есть ссылка на продукт, и связочная с заказом колонка «заказ». И именно таким, у одного заказа может быть множество продуктов. А один и тот же продукт, может фигурировать во множестве заказов.

Перед тем как описать алгоритм, обращу внимание на ошибку со скриншота. Terrasoft.ItemNotFoundException. Это известная ошибка мастеров версии 7.7. Которая будет исправлена в след. версиях. Побороть ее можно так: заходите в конфигуратор, открываете любую схему, именно схему, а не объект, какую-то схему карточки или раздела, и сохраняете ее. Сделайте это перед тем как выполнять алгоритм.

Теперь алгоритм создания детали многие ко многим.

В конфигураторе создаете объект для детали «USRKEDB» или как вам удобно, наследуясь от базового объекта, добавляете туда нужные вам ссылочные колонки. UsrCase и UsrProblemKEDB. Публикуете.

Мастером деталей создаете деталь, указав имя будущей детали и выше созданный объект. Перед тем как сохранять деталь, перейдите на закладку страница, и убедитесь что нет ошибок в открытии этой закладки, и разместите там свои ссылочные существующие поля. Сохраняйте.

После сохранения детали, ее можно зарегистрировать на странице, как понимаю «Case», с помощью мастера разделов:
section_wizard

Указав в качестве колонки детали «UsrCase» в качестве колонки объекта «Id». Сохранить.

В пользовательском режиме настроить отображение колонок грида детали.
Все, У одного Case может быть указано множество Problem. А одна и та же Problem может фигурировать во множестве Case. Никакого кода для этого не понадобилось. Объект, и мастера.

И да, не забывайте чистить кеш браузера, и перезаходить на сайт в процессе "разработки".

Это версия 7.6. Деталь создавалась не мастером. Если создавать деталь мастером, то она унаследуется не от той схемы - не от базовой детали многие-ко-многим. У детали вообще другой функционал будет. Мастером только обычную деталь получается создать.

Какого функционала вам не хватает в предложенном выше варианте? Суть одна и та же. Вы сможете эту деталь вывести как в Обращении, и видеть список проблем.
Так и в проблеме, видеть список обращений, которые случались по проблеме. Что и есть связь многие-ко-многим.

Суть не одна и та же. Базовая деталь многие ко многие отличаются своим функционалом от обычной детали. если б не отличалась, наверное, такой бы схемы вообще не существовало, ведь правда..;? При нажатии кнопки добавить на этой детали должен отражаться выбор записей для привязки. Мастером так создать не получится. Причем здесь обычная деталь, которая создается мастером?

Здравствуйте, Дарья!

Посмотрите реализацию в UIv2.ActivityParticipantDetailV2 метод openContactLookup. Мультивыбор добавляется в config:

var config = {
	entitySchemaName: "Contact",
	multiSelect: true,
	columns: ["JobTitle", "MobilePhone", "Email", "[SysAdminUnit:Contact].Id"]
};

Алексей, вы насколько понимаю имеете ввиду именно мультивыбор при непосредственно самом выборе уже - т.е. Возможность вот на предыдущем скрине поставить несколько галочек сразу и присоединить несколько записей одновременно. Я изначально вела речь о другом. При нажатии на кнопку добавить не должна открываться форма редактирования, а должен открываться вот такой список записей для присоединения, и связь должна быть многие ко многим. Я смотрела реализацию прикрепления статей бд к обращению - несколько статей бд можно прикрепить к обращению, несколько обращений можно прикрепить к статье бд - связь многие ко многим. Реализация в коде понятна и совпадает с той инструкцией, что приведена в начале топика. Непонятно, как действовать в случае, когда колонки Usr

Здравствуйте, посмотрите еще раз внимательно как работает деталь участников активности.

"Татаровская Дарья" написал:При нажатии на кнопку добавить не должна открываться форма редактирования, а должен открываться вот такой список записей для присоединения

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

И это именно связь многие-ко-многим. Один участник во многих активностях. В одной активности много участников. И сделано это на обычной детали с помощью развязочной таблицы + комментарий Алексея.

Использовать схему «Базовая схема детали с реестром со связью многие ко многим» в качестве родительской не рекомендуется так как это устаревшая aspx форма.

Спасибо, Максим, посмотрела.
Непонятно, на самом деле, почему схема многие-ко-многим считается устаревшей, она используется в коробке.

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

Итак, то есть вы предлагаете взять за основу деталь ActivityParticipantDetail?
и сделать детали наподобие нее?
Эта детальвообще ни от какой детали не унаследована.. мне также свою деталь не унаследовать ни от какой? Я правильно понимаю, чтобы сделать деталь многие-ко-многим нужно ее рисовать практически с нуля?
Деталь выглядит причем явно сложнее, чем
стандартная KnowledgeBaseInCaseDetail - Схема детали статей базы знаний в обращениях, которая унаследована от «Базовая схема детали с реестром со связью многие ко многим»
и
стандартная CaseInKnowledgeBaseDetail - Раздел детали обращений в разделе базы знаний, которая унаследована от «Базовая схема детали с реестром со связью многие ко многим».

Но насколько я поняла, в кастомной логике этой базовой простой схемой многие-ко многим воспользоваться невозможно. Это действительно так?

Получается, чтобы сделать допустим, связь многие ко многим между обращениями и проблемами,
нужно создать две детали
ProblemInCaseDetai
l и
CaseInProblemDetail,
не унаследованные ни от какой детали,
а логику в них прописать аналогично логике ActivityParticipantDetail?
Не очень понятно как выводить деталь такую на карточку..

Здравствуйте, Дарья!

Деталь "Активности" - ActivityDetailV2. Там нет логики мультивыбора, так как фильтрация отображаемых записей осуществляется по объекту "Участник активности".

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

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

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

Я хотела взять за основу детали
стандартная KnowledgeBaseInCaseDetail - Схема детали статей базы знаний в обращениях, которая унаследована от «Базовая схема детали с реестром со связью многие ко многим»
и
стандартная CaseInKnowledgeBaseDetail - Раздел детали обращений в разделе базы знаний

и сделать похожие.

Но насколько я поняла, в кастомной логике этой базовой простой схемой многие-ко многим воспользоваться невозможно. Это действительно так?
Очень жалко..(

Вы предлагаете как обходное решение взять за основу деталь ActivityParticipantDetail, я правильно понимаю?
Эта деталь не унаследована ни от какой детали - у нее в графе Родительская деталь пусто.
Мне при создании новой детали (я не буду замещать) тоже не выбрать ни какую родительскую деталь?? даже базовую схему?

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

Схема UIv2.ActivityParticipantDetailV2 наследуется от NUI.BaseGridDetailV2.

Спасибо, теперь понятно

Со связью многие-ко-многим понятно)
А что делать со связью один-ко-многим? и мультивыбором
Развязочной таблицы здесь уже нет.

Базовую схему детали один-ко-многим здесь тоже не удается использовать
Видимо, она опять считается устаревшей.
Да и действует опять следующее ограничение
" Справочные колонки деталей в родительских объектах должны иметь такое же название, как и их объекты"
Но объект-то кастомный, колонки называются с префикса Usr

Как действовать в таком случае?
По аналогии с деталью Изменения в в карточке релизах, или с деталью Обращения в карточке изменения поступить не удается ( они унаследованы от один-ко-многим).

Здравствуйте, Дарья!

Я уже запутался... Вы можете привести практический бизнес-кейс, который Вы хотите реализовать?

Добрый день, Алексей!
Бизнес-кейсов два:
1) связь многие-ко-многим
в частности, в рамках обращений и проблем
Необходимо было в обращении указывать статьи KEDB(проблемы), с помощью которых решено было обращение
Данный бизнес-кейс воплощен в жизнь)
За основу взят пример Схема UIv2.ActivityParticipantDetailV2 - участники в активности, развязочная таблица и т.п.
Тут все ок
2) следующий бизнес-кейс
это реализация связи один-ко-многим
Есть карточка обращения, пользовательское поле "Вызвано изменением" (родительское изменение)
и деталь Дочерние обращения(вызванные) в карточке изменения
Эта деталь должна быть со связью один-ко-многим с возможностью мультивыбора

Сделать наподобие CaseChangeDetail - Схема детали "Обращение" раздела "Изменение" не получается, т.к у нее родительская схема Базовая схема детали с реестром со связью один ко многим - она устаревшая, как вы говорили. и опять таки действует ограничение
Справочные колонки деталей в родительских объектах должны иметь такое же название, как и их объекты" ( в начале топика).Но объект-то кастомный, колонки называются с префикса Usr.

Как быть в таком случае?

"Татаровская Дарья" написал:

2) следующий бизнес-кейс

это реализация связи один-ко-многим

Есть карточка обращения, пользовательское поле "Вызвано изменением" (родительское изменение)

и деталь Дочерние обращения(вызванные) в карточке изменения

Эта деталь должна быть со связью один-ко-многим с возможностью мультивыбора

Сделать наподобие CaseChangeDetail - Схема детали "Обращение" раздела "Изменение" не получается, т.к у нее родительская схема Базовая схема детали с реестром со связью один ко многим - она устаревшая, как вы говорили. и опять таки действует ограничение

Справочные колонки деталей в родительских объектах должны иметь такое же название, как и их объекты" ( в начале топика).Но объект-то кастомный, колонки называются с префикса Usr.

Как быть в таком случае?

Так алгоритм реализации аналогичен, согласно иинструкции. Пример. топика, http://www.community.terrasoft.ru/forum/topic/12306#comment-52833

Как вариант:
- В Объекте 1 (Раздел 1) добавляете колонку "Колонка 2" (родительский объект "Объект 2");
- Реализовываете деталь через мастер на основании существующего объекта (Объект 1) в разделе "Разделе 2" (Объект 2).

Также пример можете посмотреть в LeadProductDetailV2.

Добрый день!
Смысл данной записи был в том, что инструкция не подошла.
в инструкции родительская схема Базовая схема детали с реестром со связью один ко многим - она устаревшая, как говорили уже в топике. и опять-таки действует ограничение из инструкции
"Справочные колонки деталей в родительских объектах должны иметь такое же название, как и их объекты" ( в начале топика)".Но объект-то кастомный, колонки называются с префикса Usr.

то есть взять за основу такой способ не получается:
define("CaseChangeDetail", ["ConfigurationEnums"],
function() {
return {
entitySchemaName: "Case",
methods: {
/**
* Инициализирует параметры детали.
*/
initConfig: function() {
this.callParent(arguments);
var config = this.getConfig();
config.lookupEntitySchema = "Case";
config.sectionEntitySchema = "Change";
},
/**
* Выполняет инициализацию.
*/
init: function() {
this.callParent(arguments);
this.initConfig();
},

/**
* Возвращает дополнительные фильтры.
* @protected
* @virtual
* @returns {Terrasoft.FilterGroup} Фильтры.
*/
},
diff: /**SCHEMA_DIFF*/[]/**SCHEMA_DIFF*/
};
}
);

LeadProductDetilV2, спасибо, но он, к сожалению, не подходит, там используется развязочная таблица LeadProduct
- это бизнес-кейс из случая 1 - многие-ко-многим. Как раз бизнес-кейс из случая 1 был реализован именно таким образом

"Татаровская Дарья" написал:
2) следующий бизнес-кейс

это реализация связи один-ко-многим

Есть карточка обращения, пользовательское поле "Вызвано изменением" (родительское изменение)

и деталь Дочерние обращения(вызванные) в карточке изменения

Эта деталь должна быть со связью один-ко-многим с возможностью мультивыбора

Сделать наподобие CaseChangeDetail - Схема детали "Обращение" раздела "Изменение" не получается, т.к у нее родительская схема Базовая схема детали с реестром со связью один ко многим - она устаревшая, как вы говорили. и опять таки действует ограничение

Справочные колонки деталей в родительских объектах должны иметь такое же название, как и их объекты" ( в начале топика).Но объект-то кастомный, колонки называются с префикса Usr.

Как быть в таком случае?

Здравствуйте, Дарья!

Здесь нужна либо развязочная таблица, либо деталь на основании объекта Case со связью Раздел.Вызвано изменением == Деталь.Вызвано изменением.

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

Добрый день, Алексей!
Первый вариант с развязочной таблицей работает, все замечательно.

Второй - да, делается в несколько кликов в дизайнерах и т.п., но только если обычная деталь с карточкой редактирования.


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

Если действовать по аналогии, то получается вот такой код
define("UsrChildCaseChangeDetail", ["ConfigurationEnums"],
function() {
return {
entitySchemaName: "Case",
methods: {

initConfig: function() {
this.callParent(arguments);
var config = this.getConfig();
config.lookupEntitySchema = "Case";
config.sectionEntitySchema = "UsrParentChange";
},

init: function() {
this.callParent(arguments);
this.initConfig();
}

},
diff: []
};
}
);

Деталь опять-таки есть, и даже мультивыбор работает, при выборе заполняется поле UsrParentChange, но на детали данные при этом не отображаются..
Видимо, это связано с тем, что невозможно выполнить следующее условие в инструкции
"Справочные колонки деталей в родительских объектах должны иметь такое же название, как и их объекты" ?
Поле кастомное, и называется в данном случае UsrParentChange...

Здравствуйте, Дарья!

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

Ну потому что это не единственное пользовательское поле ведь, есть много других полей, у которых есть уже приставка Usr, и что делать с ними, если сменить системную настройку?)

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

Спасибо

Перечитал несколько раз. И пришел к выводу, что более безграмотного, чем фраза: Справочные колонки деталей в родительских объектах должны иметь такое же название, как и их объекты, не найти.

 

Тут и так непонятно, а кто-то не может потрудиться сформулировать более адекватное предложение, тогда бы и темы новые не плодились. Нужно было написать так: В промежуточной таблице названия колонок должны иметь имена объектов, на которые они ссылаются (имя колонки в промежуточной таблице = названию раздела и т.д.)

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

Добрый день!
Подскажите, пожалуйста, правильный синтаксис
сделать поле доступным к изменению, если заполнено другое поле типа справочник
(то есть оно не null)
Что в данном случае нужно написать в выражении rightExpression и comparisonType

ruleType: BusinessRuleModule.enums.RuleType.BINDPARAMETER,
property: BusinessRuleModule.enums.Property.ENABLED,
conditions: [{
leftExpression: {
type: BusinessRuleModule.enums.ValueType.ATTRIBUTE,
attribute: "Status"
},
comparisonType: this.Terrasoft.ComparisonType.EQUAL,
rightExpression: {
type:
value:
}
}]

Нравится

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

Здравствуйте, Дарья.

Вот пример кода из конфигурации:

"BindParameterEnabledCustomerBillingInfoToAccount": {
	"ruleType": BusinessRuleModule.enums.RuleType.BINDPARAMETER,
	"property": BusinessRuleModule.enums.Property.ENABLED,
	"conditions": [
		{
			"leftExpression": {
				"type": BusinessRuleModule.enums.ValueType.ATTRIBUTE,
				"attribute": "Account"
			},
			"comparisonType": Terrasoft.ComparisonType.IS_NOT_NULL
		}
	]

Спасибо

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

Скажіть чи можна застосувати правила(rules) для приховування поля, вказавши в полі attribute звязане поле? Або чи можна вирышити це завдання ыншим способом?
"PassportSeria": {
BindParametrVisibilePlaceByType: {
ruleType: BusinessRuleModule.enums.RuleType.BINDPARAMETER,
property: BusinessRuleModule.enums.Property.VISIBLE,
conditions: [{
leftExpression: {
type: BusinessRuleModule.enums.ValueType.ATTRIBUTE,
attribute: "Account.Type"
},
comparisonType: Terrasoft.ComparisonType.EQUAL,
rightExpression: {
type: BusinessRuleModule.enums.ValueType.CONSTANT,
value: "900E7575-A06B-4F4A-B710-C79FA9C0B6BA".toLowerCase()
}
}]
}
},

Нравится

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

Для решения данной задачи можно воспользоваться свойством visible. "visible": {bindTo: "methodName"}.
В самом методе необходимо получить значение id справочного поля используя this.get. Далее необходимо построить запрос к бд используя entitySchemaQuery и на основании полученного результат вернуть true или false.

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

Добрый день ! Никто не сталкивался с такой ошибкой ? Если да то как решить ее ?

Нравится

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

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

"Зверев Александр" написал:

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


Как это сделать ?

Из веб-интерфейса, в окне метаданных схемы.

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

Я ножичек.
Подскажите где есть инструкции видео о том "Как передать параметр ID выбранной записи, строчки в БП ? "

Суть такова(CASE).
1. Пользователь выбирает строчку к примеру документа ID_doc.
2. Нажимает запустить процесс. Сформировать шаблон.
3. Запускается БП где идет чтение из БД по ID_doc

Нигде не могу найти как это сделать поэтапно.
Помогите. Всем заранее спасибо.

Нравится

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

Добрый день!

Принцип следующий:
- заместить нужную схему (откуда будет запускаться процесс)
- добавить кнопку/действие
- добавить обработчик

Пример обработчика для запуска процесса по выделенной записи:
runProcess: function(tag) {
var activeRow = this.getActiveRow();
if (!activeRow) {
return;
}
var processArgs = {
sysProcessName: "UsrReadTest",
parameters: {
DocParam: activeRow.get("Id") // DocParam - параметр процесса
}
};
Terrasoft.ProcessModuleUtilities.executeProcess(processArgs);
}

Примеры решения подобных задач можно найти в других постах, например:
http://www.community.terrasoft.ru/forum/topic/13314
http://www.community.terrasoft.ru/forum/topic/11626
http://www.community.terrasoft.ru/forum/topic/12414

Уважаемые мы наверное полные дилетанты. Но у нас версия 7,5. Про 7,5 мало что описано.
Будем благодарны если подскажите:

- КАК заместить нужную схему (откуда будет запускаться процесс) в 7,5 ?
- КАК добавить кнопку/действие в 7,5 ?
- КАК добавить обработчик в 7,5 ?

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