Иду по гайду 

https://academy.terrasoft.ru/documents/technic-sdk/7-11/sozdanie-polzov…

То, что родительских объектов слово в слово нет, обходим подсматривая, что в системе от чего зависит. Зарегистрировал в системе скриптом с гайда про редактируемый реестр. Добавил данные в табличку детали скриптом.

На странице редактирования (куда прикреплял деталь) название детали и нет данных:

Изображение удалено.

 

Код скриптов, конечно, могу привести и он будет идентичен гайдовским за исключением названий объектов и полей.

Может, есть некие тайные знания, не описанные в инструкции? В коммьюнити обсуждения есть, но всё не то. У меня данные не отображаются просто, ни No Data, ничего.

Нравится

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

Или Базовая детаьл с полями, дающая такой функционал, только в банковком решении?

Может есть пример реализации где-то на тестовой(демо) среде?

 

ZAN, здравствуйте!

К сожалению, на данный момент деталь с полями по данной инструкции можно реализовать только в банковских продуктах (bank customer journey, bank sales и lending). Аналитики продукта рассматривают возможность реализации создания данного типа детали во всех продуктах, возможно, в будущих релизах это будет реализовано.

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

Мне нужно в разделе продажи создать деталь "фильтр".

Деталь должна иметь такой же внешний вид, как у группы полей. 

Этими полями будут 4 справочника.  Необходимо отловить события изменения этих справочников.   

 

Пробывал создавать деталь как в инструкции с редактируемыми полями, но не вышло. 

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

1. Хотя создал объект для детали,  поместил в него справочник привязанный к справочнику продаж с автозаполенением на уровне приложения. А также сделал связи по остальным своим 4-ым. справочникам.

2. Создал деталь, наследуя от "Базовая деталь".

3. Зарегистрировал эту деталь, через SQL

4. Добавил ее как обычную деталь, по Продажи и Id

 

 

Нравится

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

Под вторым пунктом Вы имеете в виду, что создали "Схему модели представления детали с реестром" и в ней унаследовались от "Базовая схема детали с реестром ( NUI )"?

Alex Zaslavsky,  "Базовая схема детали с реестром ( NUI )"  нет, посчитал, что это нужно именно для реестра. А мне нужно сделать по внешнему виду деталь аналогично как у группы полей, только, чтобы это была деталь. (Ответил из под второго акк)

atyurin,

А, я Вас неправильно понял. Даже не знаю чем помочь. У меня такое было, когда я однажды неправильно сделал регистрацию детали при помощи SQL запроса. Нужны хоть какие-то скрины схемы, детали, запроса.

Добрый день. Судя по описанию вы выбрали неверного родителя для схемы детали. Попробуйте создать деталь согласно статьи https://academy.terrasoft.ru/documents/technic-sdk/7-11/sozdanie-polzov…. Если у вас возникнут затруднения, пожалуйста, напишите на support@terrasoft.ru с предоставлением доступа к вашей среде для проведения отладки.

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

Нужно решить следующую задачу:
1. Создать новое рабочее место и раздел в нем.
2. На странице раздела должен выводиться список кастомных объектов, каждый из которых имеет id (внешний, не тот который в базе bpmonline), название и ссылку (должна быть кликабельна). Объекты должны подгружаться со стороннего API.

Первый пункт проблем не доставил. А вот второй... Я сам являюсь одним из разработчиков того стороннего API, поэтому сначала возникла идея просто выводить таблицу внутри айфрейма, однако руководство поставило задачу сделать более "умным" способом.

Я решил попытаться сделать деталь с пользовательскими полями по туториалу (https://academy.terrasoft.ru/documents/technic-sdk/7-10/sozdanie-polzova...) версия системы у меня 7.10б однако, следуя примеру, родительским объектом детали следовало указать Base fields detail из пакета BaseFinance, но у меня он не установлен, и не понятно, установить его, или же не стоит тащить целый пакет ради одного объекта. Пытался по-другому создать делаь и вывести список на страницу раздела, но ничего так и не получилося.

После создания детали и добавления списка на страницу раздела, планировал при загрузке страницы посылать AJAX-запрос по API, потом с помощью службы DataService вытащить существующие объекты, сравнить с получены ответом, и с помощью этой же службы удалить неактуальные и добавить новые, и таким образом обойтись без конфигурационных сервисов, так как совсем не знаком с языком С#.

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

Нравится

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

Я думаю вам правильнее будет сделать самый обыкновенный раздел мастером разделов на основании объекта, с текстовой колонкой для ссылки, и с текстовой колонкой для внешнего id (если он guid), или числовой, если число.
Сделать несколько доработок что бы ссылка была кликабельной и вела во внешнюю систему.

А наполнять данный раздел с помощью интеграции. И тут открывается множество вариантов. Будь то запрос во внешнюю систему, с переодичностью. Либо внешняя система будет сохранять данные в bpm посредством odata каждый раз как таковые будут там созданы. Либо написать веб сервис в bpm и вызывать его из внешней системы. С вариантами интеграции можете ознакомится здесь:
https://academy.terrasoft.ru/documents/technic-sdk/7-10/integraciya-s-s…

"Максим Шевченко" написал:

Я думаю вам правильнее будет сделать самый обыкновенный раздел мастером разделов на основании объекта, с текстовой колонкой для ссылки, и с текстовой колонкой для внешнего id (если он guid), или числовой, если число.

Сделать несколько доработок что бы ссылка была кликабельной и вела во внешнюю систему.

А наполнять данный раздел с помощью интеграции. И тут открывается множество вариантов. Будь то запрос во внешнюю систему, с переодичностью. Либо внешняя система будет сохранять данные в bpm посредством odata каждый раз как таковые будут там созданы. Либо написать веб сервис в bpm и вызывать его из внешней системы. С вариантами интеграции можете ознакомится здесь:

https://academy.terrasoft.ru/documents/technic-sdk/7-10/integraciya-s-si...


Спасибо, буду смотреть и пробовать.

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

Пытаюсь создать схему представления детали с полями по примеру из https://academy.terrasoft.ru/documents/technic-sdk/7-10/sozdanie-polzova... . Версия системы - 7.10.1.1161. В данном примере из документации при создании схемы представления детали с полями в качестве базового объекта нужно указать Base fields detail ( BaseFinance ), однако в выпадающем списке он отсутствует. Никак не могу понять, что именно я делаю не так. Буду признателен за любую помощь/подсказки.

Нравится

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

Проверьте, есть ли вообще в Вашей конфигурации такая схема, так как она есть только в банковских продуктах bpm'online — bank customer journey, bank sales и lending.
Если у Вас один из перечисленных выше продуктов и такая схема есть в Вашей конфигурации, тогда для того, чтобы её можно было указать в качестве базовой в Вашем пакете, Ваш пакет должен наследоваться от пакета Base Finance с этой схемой.

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

В примерах из документации для версии 7.10 для при создании схемы представления детали с полями в качестве базового объекта нужно указать Base fields detail ( BaseFinance ). Какой объект должен быть указан базовым в версии 7.9.1.3284?

Нравится

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

Вообще пользуйтесь мастерами деталей для создания детали, это намного проще.
https://academy.terrasoft.ru/documents/marketing/7-8/master-detaley
Для того что бы создать деталь мастером детали, предварительно нужно только в конфигурации создать объект на основании "base object".
Мастер создаст и схему детали, и схему страницы детали самостоятельно, а в созданных схемах уже и посмотрите от кого они наследуются.

Извиняюсь, увидел что вы про деталь с полями, в 7.9 данного функционала нет, и по инструкции для 7.10 вы такую деталь не создадите. Вы можете посмотреть как реализована деталь коммуникаций, BaseCommunicationDetail, в 7.9, и её наследников, но там все намного сложнее чем в 7.10 где работа с такими деталями была упрощена для разработчиков системы.

"Максим Шевченко" написал:

Извиняюсь, увидел что вы про деталь с полями, в 7.9 данного функционала нет, и по инструкции для 7.10 вы такую деталь не создадите. Вы можете посмотреть как реализована деталь коммуникаций, BaseCommunicationDetail, в 7.9, и её наследников, но там все намного сложнее чем в 7.10 где работа с такими деталями была упрощена для разработчиков системы.


Большое спасибо за подсказку!

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

Здравствуйте! У меня есть деталь с полями "Застрахование лица" с одним типом данных. При первой загрузке страницы на который расположена деталь вылетает ошибка в DetailViewModelGenerator на строке: itemViewModelConfig.columns[entitySchema.primaryColumn.name]. и entitySchema = undefined. Если нажать обновить страница деталь раскрывается нормально. Ошибка вылетает только при первому переходе на эту страницу. Подскажите пожалуйста в чем проблема и как ее решить. Спасибо.

Нравится

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

Здравствуйте, Владимир!
Попробуйте явно в коде детали указать entitySchema, как, например, в детали "Участники активности":

define('ActivityParticipantDetail', ['ext-base', 'terrasoft', 'sandbox', 'ActivityParticipant',
'ConfigurationConstants', 'ActivityParticipantDetailStructure', 'ActivityParticipantDetailResources',
'LookupUtilities'], function(Ext, Terrasoft, sandbox, ActivityParticipant, ConfigurationConstants, structure,
resources, LookupUtilities) {

structure.userCode = function() {
this.entitySchema = ActivityParticipant;
this.name = 'ActivityParticipantDetailViewModel';
...

А также добавить объект детали в зависимости:

Это у меня уже било сделано. Также я пробовал вручную прописывать entitySchema.
if(!InsuredPerson) {
InsuredPerson = Terrasoft.decode("{\"initialConfig\"":{}

Вот код моей детали с полями:

define('UsrInsuredPersonDetail', ['ext-base', 'terrasoft', 'UsrInsuredPerson', 'UsrInsuredPersonDetailStructure',
'UsrInsuredPersonDetailResources'], function(Ext, Terrasoft, UsrInsuredPerson, structure, resources) {

var filterSchemaName;

var getContainerConfig = function(id, styles) {
var container = {
className: 'Terrasoft.Container',
items: [],
id: id,
selectors: {wrapEl: '#' + id}
};
if (styles) {
container.classes = {wrapClassName: styles};
}
return container;
};

structure.userCode = function() {

this.entitySchema = UsrInsuredPerson;
this.name = 'UsrInsuredPersonDetailViewModel';
filterSchemaName = 'Document';

this.name = 'UsrInsuredPersonDetailViewModel';
//this.primaryColumnName = "UsrInsuredPersonField";
this.methods.getCustomItemView = function(viewModel, itemKey, action,types) {

Terrasoft.each(types, function(item) {
item.click = {
bindTo: 'myTypeChanged'
};
});
var columns = viewModel.attributes;
var UsrInsuredPerson = columns[0];

var viewConfig; // = getContainerConfig(itemKey + '-view', 'detail-view-container-user-class');
switch (action) {
case 'add':
case 'copy':
case 'edit':
//var titleConfig = getContainerConfig(itemKey + '-title', 'controlCaption');
viewConfig = getContainerConfig(itemKey + '-view');
var valueConfig = getContainerConfig(itemKey + '-value');

var deleteButtonConfig = {
id: itemKey + '-delete',
className: 'Terrasoft.Button',
classes: {
wrapperClass: 'detail-delete-btn-user-class'
},
imageConfig: resources.localizableImages.DeleteIcon,
style: Terrasoft.controls.ButtonEnums.style.TRANSPARENT,
selectors: {
wrapEl: '#' + itemKey + '-delete'
},
click: {
bindTo: 'delete'
},
width: '10%'

};

var editConfig = {
id: itemKey + '-edit',
className: 'Terrasoft.TextEdit',

markerValue: UsrInsuredPerson.name,
value: {
bindTo: UsrInsuredPerson.name
},

classes: {
wrapperClass: 'detail-delete-btn-user-class'
},
// style: Terrasoft.controls.ButtonEnums.style.TRANSPARENT,
selectors: {
wrapEl: '#' + itemKey + '-delete'
}

};

//titleConfig.items.push(deleteButtonConfig);
valueConfig.items.push(deleteButtonConfig,editConfig);
viewConfig.items.push(valueConfig);
break;

case 'view':
viewConfig = getContainerConfig(itemKey + '-view', 'detail-view-container-user-class');

var valueLabel = {
className: 'Terrasoft.Label',
caption: {
bindTo: UsrInsuredPerson.name,
bindConfig: {converter: Terrasoft.getTypedStringValue}
}

};

viewConfig.items.push(valueLabel);
break;
}

return viewConfig;

};

this.loadedColumns = [
{
columnPath: 'Id'
}, {
columnPath: 'UsrInsuredPersonField'
},{
columnPath: 'UsrDocument'
}
];

this.name = 'UsrInsuredPersonDetailViewModel';
this.parentColumnPath = 'Id';
this.filterColumnPath = filterSchemaName;
this.attributes = [{
type: Terrasoft.core.enums.ViewModelSchemaItem.ATTRIBUTE,
name: 'UsrInsuredPersonField',
columnPath: 'UsrInsuredPersonField',
dataValueType: Terrasoft.DataValueType.TEXT,
isRequired: true
},{
type: Terrasoft.core.enums.ViewModelSchemaItem.ATTRIBUTE,
name: 'UsrDocument',
columnPath: 'UsrDocument',
dataValueType: Terrasoft.DataValueType.LOOKUP
}
];

};
return structure;
});

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

BPM Online 7.2.0.1002.

Деталь расположена на ContractPage.
Переход на эту страницу осуществляется в моем HomeDocumentSection.

Владимир, а при переходе просто из раздела "Документы" нормально работает?

Да, при переходе просто из раздела "Документы" работает нормально.
А при переходи из моего HomeDocumentSection работает нормально только после перегрузки страницы.

Здравствуйте, Владимир!
В таком случае, скорее всего, при переходе не из раздела не инициализируется объект или страница детали.
Попробуйте добавить и то, и другое в блок "Dependencies" страницы "ContractPage".

Добавил, но это не помогло осталась та же ошибка.

Владимир, попробовал воспроизвести ошибку. Выполнил следующее:
1. Добавил объект детали:

2. Добавил страницу детали. Код:

define('UsrInsuredPersonDetail', ['ext-base', 'terrasoft', 'UsrInsuredPerson', 'UsrInsuredPersonDetailStructure',
    'UsrInsuredPersonDetailResources'], function(Ext, Terrasoft, UsrInsuredPerson, structure, resources) {
    var filterSchemaName;
    var getContainerConfig = function(id, styles) {
        var container = {
            className: 'Terrasoft.Container',
            items: [],
            id: id,
            selectors: {wrapEl: '#' + id}
        };
        if (styles) {
            container.classes = {wrapClassName: styles};
        }
        return container;
    };
 
    structure.userCode = function() {
 
        this.entitySchema = UsrInsuredPerson;
        this.name = 'UsrInsuredPersonDetailViewModel';
        filterSchemaName = 'Document';
        this.methods.getCustomItemView = function(viewModel, itemKey, action,types) {
 
            Terrasoft.each(types, function(item) {
                item.click = {
                    bindTo: 'myTypeChanged'
                };
            });
            var columns = viewModel.attributes;
            var UsrInsuredPerson = columns[0];
 
            var viewConfig; // = getContainerConfig(itemKey + '-view', 'detail-view-container-user-class');
            switch (action) {
                case 'add':
                case 'copy':
                case 'edit':
//var titleConfig = getContainerConfig(itemKey + '-title', 'controlCaption');
                    viewConfig = getContainerConfig(itemKey + '-view');
                    var valueConfig = getContainerConfig(itemKey + '-value');
 
                    var deleteButtonConfig = {
                        id: itemKey + '-delete',
                        className: 'Terrasoft.Button',
                        click: {
                            bindTo: 'delete'
                        }
                    };
 
                    var editConfig = {
                        id: itemKey + '-edit',
                        className: 'Terrasoft.TextEdit',
                        markerValue: UsrInsuredPerson.name,
                        value: {
                            bindTo: UsrInsuredPerson.name
                        }
                    };
 
                    valueConfig.items.push(deleteButtonConfig,editConfig);
                    viewConfig.items.push(valueConfig);
                    break;
 
                case 'view':
                    viewConfig = getContainerConfig(itemKey + '-view', 'detail-view-container-user-class');
 
                    var valueLabel = {
                        className: 'Terrasoft.Label',
                        caption: {
                            bindTo: UsrInsuredPerson.name,
                            bindConfig: {converter: Terrasoft.getTypedStringValue}
                        }
 
                    };
 
                    viewConfig.items.push(valueLabel);
                    break;
            }
 
            return viewConfig;
 
        };
 
        this.loadedColumns = [
            {
                columnPath: 'Id'
            }, {
                columnPath: 'UsrInsuredPersonField'
            },{
                columnPath: 'UsrDocument'
            }
        ];
        this.parentColumnPath = 'Id';
        this.filterColumnPath = filterSchemaName;
        this.attributes = [{
            type: Terrasoft.core.enums.ViewModelSchemaItem.ATTRIBUTE,
            name: 'UsrInsuredPersonField',
            columnPath: 'UsrInsuredPersonField',
            dataValueType: Terrasoft.DataValueType.TEXT,
            isRequired: true
        },{
            type: Terrasoft.core.enums.ViewModelSchemaItem.ATTRIBUTE,
            name: 'UsrDocument',
            columnPath: 'UsrDocument',
            dataValueType: Terrasoft.DataValueType.LOOKUP
        }
        ];
 
    };
    return structure;
});

На странице добавил в Dependencies объект детали, назвал зависимость по имени объекта - "UsrInsuredPerson".
3. Заместил ContractPage и добавил объект "UsrInsuredPerson" в Dependencies. Код замещающей страницы:

define('ContractPage', ['ext-base', 'terrasoft','sandbox', 'ContractPageStructure','ContractPageResources', 'BusinessRuleModule','ConfigurationEnums'],
    function(Ext, Terrasoft,sandbox, structure, resources, BusinessRuleModule,ConfigurationEnums) {
        structure.userCode = function() {
            this.schema.leftPanel.push({
                name: 'UsrInsuredPerson',
                schemaName: 'UsrInsuredPersonDetail',
                type: Terrasoft.ViewModelSchemaItem.DETAIL,
                filterPath: 'UsrDocument',
                filterValuePath: 'Id',
                caption: 'insured person',
                leftWidth: '60%',
                collapsed: false,
                rightWidth: '40%',
                wrapContainerClass: 'control-group-container',
                visible: true
            });
            this.methods.init = function() {
                this.setReadOnlyDetails(['UsrInsuredPerson'], true);
 
            };
        };
        return structure;
    });

4. Пробую воспроизвести путем перехода на страницу редактирования документа напрямую, то есть чищу кэш, вставляю в адресную строку браузера строку вида "http://localhost:7201/0/Nui/ViewModule.aspx#CardModule/ContractPage/edi…" и все загружается без проблем.
Может я что-то упустил при воспроизведении?

Я уже нашел ошибку. Ошибка была в моем HomeDocumentSection с которого осуществляется переход на страницу где расположена деталь. Спасибо за помощь.

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