Creatio development guide
Это документация Creatio версии 7.6.0. Мы рекомендуем использовать новую версию документации.
bpm'online SDK
Как добавить на страницу редактирования поле с изображением

Добавление на страницу редактирования поля с изображением (фото контакта, фото товара, логотип контрагента и т.д.) имеет определенные особенности:

  1. Колонка объекта, которая будет использоваться для поля с изображением должна иметь тип — "Ссылка на изображение".
  2. В коллекцию изображений схемы страницы редактирования необходимо добавить изображение по умолчанию.
  3. В массив diff схемы страницы редактирования поле с изображением добавляется с использованием вспомогательного контейнера-обертки с классом ["image-edit-container"].
  4. Конфигурационный объект с настройками поля с изображением в свойстве values должен содержать свойства:
    • getSrcMethod — наименование метода, который получает изображение по ссылке;
    • onPhotoChange — наименование метода, который вызывается при изменении изображения;
    • readonly — свойство, которое определяет возможность редактирования (изменения, удаления) изображения;
    • defaultImage — изображение, которое будет отображаться по умолчанию;
    • generator — генератор элемента управления. Для поля с изображением необходимо указать "ImageCustomGeneratorV2.generateCustomImageControl".
  5.  В коллекцию методов схемы страницы редактирования необходимо добавить методы:
    • метод, который получает изображение по ссылке;
    • метод, который вызывается при изменении изображения;
    • метод, который сохраняет ссылку на измененное изображение в колонке объекта.

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

Описание кейса

Добавить поле с логотипом на страницу редактирования контрагента.

Алгоритм реализации кейса

1. Создать замещающий объект [Контрагент]

Для этого необходимо выбрать пользовательский пакет и на вкладке [Схемы] выполнить пункт меню [Добавить] > [Замещающий объект] (рис. 1).

Рис. 1. — Создание замещающей схемы объекта

Заполнить свойства нового объекта, указав в качестве родительского объект [Контрагент].

2. Добавить в замещающий объект новую колонку [Логотип]

Для созданной колонки необходимо указать тип данных - "Ссылка на изображение" (рис. 2.).

Рис. 2. — Добавление пользовательской колонки в замещающий объект

3. Опубликовать созданный замещающий объект

4. Создать замещающий клиентский модуль страницы редактирования контрагента

Необходимо создать замещающий клиентский модуль, в котором в качестве родительского объекта указать [AccountPageV2] (рис. 3).

Процесс создания замещающей страницы описан в статье "Как создать замещающую схему страницы или раздела".

Рис. 3. — Свойства замещающей страницы редактирования

5. Добавить изображение по умолчанию в ресурсы [Изображения] схемы страницы редактирования

Для этого, щелкнув правой кнопкой по узлу структуры [Images], выбрать [Добавить] (рис. 4).

Рис. 4. — Добавление в ресурсы схемы изображения по умолчанию

Свойства для созданного изображения заполнить, как показано на рисунке 5. В поле [Изображение] выбрать из файловой системы файл с изображением по умолчанию.

Рис. 5. — Свойства ресурса схемы

6. Настроить визуальное отображение поля с логотипом на странице редактирования

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

Для этого нужно в свойстве diff модели представления описать конфигурационный объект поля с логотипом с необходимыми параметрами, а также описать модификации для существующих в верхней части страницы полей: [Name], [Owner], [Type].

Поле с изображением добавляется на страницу с использованием вспомогательного контейнера-обертки с классом ["image-edit-container"].

7. В коллекцию методов модели представления страницы добавить реализацию методов:

  • getAccountImage — метод, который получает изображение по ссылке;
  • getAccountDefaultImage — метод, который устанавливает значение по умолчанию;
  • onPhotoChange — метод, который вызывается при изменении изображения;
  • onPhotoUploaded — метод, который сохраняет ссылку на измененное изображение в колонке объекта.

Ниже приведен исходный код замещающей схемы страницы редактирования:

define("AccountPageV2", ["AccountPageV2Resources", "ConfigurationConstants"],
    function (resources, ConfigurationConstants) {
        return {
            // Название схемы объекта страницы редактирования.
            entitySchemaName: "Account",
            details: /**SCHEMA_DETAILS*/{}/**SCHEMA_DETAILS*/,
            // Коллекция методов модели представления страницы редактирования.
            methods: {
                // Возвращает url логотипа контрагента по ссылке, сохраненной в объекте.
                getAccountImage: function () {
                    // Получаем ссылку на изображение из колонки объекта.
                    var imageColumnValue = this.get("Picture");
                    // Если ссылка установлена, то возвращает url файла с изображением.
                    // Если нет, то вызывает метод, возвращающий изображение по умолчанию.
                    if (imageColumnValue) {
                        return this.getSchemaImageUrl(imageColumnValue);
                    }
                    return this.getAccountDefaultImage();
                },
                // Возвращает url логотипа контрагента по умолчанию.
                getAccountDefaultImage: function () {
                    return this.Terrasoft.ImageUrlBuilder.getUrl(this.get("Resources.Images.DefaultLogo"));
                },
                // Обрабатывает изменение логотипа контрагента. В качестве параметра принимает файл с изображением.
                onPhotoChange: function (photo) {
                    if (!photo) {
                        this.set("Picture", null);
                        return;
                    }
                    // Выполняется загрузка файла в базу данных. По окончании загрузки вызывается метод, который
                    // сохраняет ссылку на измененное изображение в колонке [Логотип] объекта [Контрагент].
                    this.Terrasoft.ImageApi.upload({
                        file: photo,
                        onComplete: this.onPhotoUploaded,
                        onError: this.Terrasoft.emptyFn,
                        scope: this
                    });
                },
                // Метод, который сохраняет ссылку на измененное изображение. В качестве параметра передается Id 
                // сохраненного файла из базы данных.
                onPhotoUploaded: function (imageId) {
                    var imageData = {
                        value: imageId,
                        displayValue: "Image"
                    };
                    // Полю с изображением присваивается ссылка на изображение.
                    this.set("Picture", imageData);
                }
            },
            // 
            diff: /**SCHEMA_DIFF*/[
                // Контейнер-обертка, в который будет размещен логотип контрагента.
                {
                    "operation": "insert",
                    "parentName": "Header",
                    "propertyName": "items",
                    "name": "PhotoContainer",
                    "values": {
                        // Тип элемента - контейнер.
                        "itemType": Terrasoft.ViewItemType.CONTAINER,
                        "wrapClass": ["image-edit-container"],
                        "layout": { "column": 0, "row": 0, "rowSpan": 4, "colSpan": 4 },
                        "items": []
                    }
                },
                // Поле [Picture] — поле с логотипом контрагента.
                {
                    "operation": "insert",
                    "parentName": "PhotoContainer",
                    "propertyName": "items",
                    "name": "Picture",
                    "values": {
                        // Наименование метода, который получает изображение по ссылке.
                        "getSrcMethod": "getAccountImage",
                        // Наименование метода, который вызывается при изменении изображения.
                        "onPhotoChange": "onPhotoChange",
                        // Свойство, которое определяет возможность редактирования (изменения, удаления) изображения.
                        "readonly": false,
                        // Изображение, которое будет отображаться по умолчанию.
                        "defaultImage": Terrasoft.ImageUrlBuilder.getUrl(resources.localizableImages.DefaultLogo),
                        // Генератор элемента управления.
                        "generator": "ImageCustomGeneratorV2.generateCustomImageControl"
                    }
                },
                // Изменение расположения поля [Name].
                {
                    // Для изменения расположения существующего поля в замещающей схеме
                    // используется операция merge.
                    "operation": "merge",
                    "name": "Name",
                    "parentName": "Header",
                    "propertyName": "items",
                    "values": {
                        "bindTo": "Name",
                        "layout": {
                            "column": 4,
                            "row": 0,
                            "colSpan": 18
                        }
                    }
                },
                // Изменение расположения поля [Owner].
                {
                    // Для изменения расположения существующего поля в замещающей схеме
                    // используется операция merge.
                    "operation": "merge",
                    "name": "Owner",
                    "parentName": "Header",
                    "propertyName": "items",
                    "values": {
                        "bindTo": "Owner",
                        "layout": {
                            "column": 4,
                            "row": 2,
                            "colSpan": 18
                        }
                    }
                },
                // Изменение расположения поля [Type].
                {
                    // Для изменения расположения существующего поля в замещающей схеме
                    // используется операция merge.
                    "operation": "merge",
                    "name": "Type",
                    "parentName": "Header",
                    "propertyName": "items",
                    "values": {
                        "bindTo": "Type",
                        "layout": {
                            "column": 4,
                            "row": 1,
                            "colSpan": 18
                        },
                        "contentType": Terrasoft.ContentType.ENUM
                    }
                },
            ]/**SCHEMA_DIFF*/
        };
    });

8. Сохранить замещающую схему страницы

После сохранения схемы и обновления веб-страницы системы на странице редактирования контрагента появится изображение логотипа (рис. 6).

Рис. 6. — Демонстрация результата выполнения кейса

 

Был ли данный материал полезен?

Как можно улучшить эту статью?