Использовать TypeScript при разработке клиентской функциональности

Сложный

Файловый контент позволяет использовать при разработке клиентской функциональности компилируемые в JavaScript языки, например, TypeScript. Подробнее о TypeScript можно узнать на сайте https://www.typescriptlang.org.

Установка TypeScript 

Одним из способов установки инструментария TypeScript является использование менеджера пакетов NPM для Node.js. Для этого необходимо выполнить в консоли Windows следующую команду:

Команда для установки инструментария TypeScript
npm install -g typescript

Важно. Прежде чем устанавливать TypeScript c помощью NPM, проверьте наличие среды выполнения Node.js в вашей операционной системе. Скачать инсталлятор можно по на сайте https://nodejs.org.

Пример. При сохранении записи контрагента выводить для пользователя сообщение о правильности заполнения поля Альтернативные названия (Also known as). Поле должно содержать только буквенные символы. Логику валидации поля реализовать на языке TypeScript.

Исходный код 

Пакет с реализацией примера можно скачать по ссылке.

Алгоритм реализации примера 

1. Перейти в режим разработки в файловой системе 

2. Создать структуру хранения файлового контента 

Общий принцип создания рекомендуемой структуры хранения файлового контента:

  1. В выгруженном в файловую систему пользовательском пакете создайте каталог Files.
  2. В каталог Files добавьте папку src, а внутри нее создайте подкаталог js.
  3. В каталог Files добавьте файл descriptor.json.
    descriptor.json
    {
        "bootstraps": [
            "src/js/bootstrap.js"
        ]
    }
    
  4. В каталог Files\src\js добавьте файл bootstrap.js.
    bootstrap.js
    (function() {
        require.config({
            paths: {
                "LettersOnlyValidator": Terrasoft.getFileContentUrl("sdkTypeScript", "src/js/LettersOnlyValidator.js")
            }
        });
    })();
    

На заметку. Указанный в bootstrap.js файл LettersOnlyValidator.js будет скомпилирован на шаге 4.

3. Реализовать класс валидации значения на языке TypeScript 

В каталоге Files\src\js создайте файл Validation.ts, в котором объявите интерфейс StringValidator.

Validation.ts
interface StringValidator {
    isAcceptable(s: string): boolean;
}
export = StringValidator;

В этом же каталоге создайте файл LettersOnlyValidator.ts. Объявите в нем класс LettersOnlyValidator, реализующий интерфейс StringValidator.

LettersOnlyValidator.ts
// Импорт модуля, в котором реализован интерфейс StringValidator.
import StringValidator = require("Validation");
 
// Создаваемый класс должен принадлежать пространству имен (модулю) Terrasoft.
module Terrasoft {
    // Объявление класса валидации значений.
    export class LettersOnlyValidator implements StringValidator {
        // Регулярное выражение, допускающее использование только буквенных символов.
        lettersRegexp: any = /^[A-Za-z]+$/;
        // Валидирующий метод.
        isAcceptable(s: string) {
            return !Ext.isEmpty(s) && this.lettersRegexp.test(s);
        }
    }
}
// Создание и экспорт экземпляра класса для require. 
export = new Terrasoft.LettersOnlyValidator();

4. Выполнить компиляцию исходных кодов TypeScript в исходные коды JavaScript 

Для настройки компиляции добавьте в каталог Files\src\js конфигурационный файл tsconfig.json.

tsconfig.json
{
    "compilerOptions":
    {
        "target": "es5",
        "module": "amd",
        "sourceMap": true
    }
}

В консоли Windows перейдите в каталог Files\src\js и выполните команду tsc.

scr_compile.png

В результате выполнения компиляции в каталоге Files\src\js будут созданы JavaScript-версии файлов Validation.ts и LettersOnlyValidator.ts, а также *.map-файлы, облегчающие отладку в браузере.

scr_src_files.png

Содержимое файла LettersOnlyValidator.js, который будет использоваться в Creatio, получено автоматически.

LettersOnlyValidator.js
define(["require", "exports"], function (require, exports) {
    "use strict";
    var Terrasoft;
    (function (Terrasoft) {
        var LettersOnlyValidator = /** @class */ (function () {
            function LettersOnlyValidator() {
                this.lettersRegexp = /^[A-Za-z]+$/;
            }
            LettersOnlyValidator.prototype.isAcceptable = function (s) {
                return !Ext.isEmpty(s) && this.lettersRegexp.test(s);
            };
            return LettersOnlyValidator;
        }());
        Terrasoft.LettersOnlyValidator = LettersOnlyValidator;
    })(Terrasoft || (Terrasoft = {}));
    return new Terrasoft.LettersOnlyValidator();
});
//# sourceMappingURL=LettersOnlyValidator.js.map

5. Выполнить генерацию вспомогательных файлов 

Для генерации вспомогательных файлов _FileContentBootstraps.js и FileContentDescriptors.js выполните следующие действия:

  1. Перейдите в раздел Конфигурация (Configuration).
  2. Выполните загрузку пакетов из файловой системы (действие Обновить пакеты из файловой системы (Update packages from file system)).
  3. Выполните компиляцию приложения (действие Компилировать все (Compile all items)).

    На заметку. Этот шаг необходимо выполнять для применения изменений в файле bootsrtap.js. Для его выполнения также можно использовать утилиту WorkspaceConsole.

6. Использовать валидатор в схеме Creatio 

В разделе Конфигурация (Configuration):

  1. Выполните загрузку пакетов из файловой системы (действие Обновить пакеты из файловой системы (Update packages from file system)).
  2. Cоздайте замещающую схему страницы редактирования записи контрагента.
    scr_schema_props.png
  3. Выполните выгрузку пакетов в файловую систему (действие Выгрузить пакеты в файловую систему (Download packages to file system)).
  4. В файловой системе измените файл ..\sdkTypeScript\Schemas\AccountPageV2\AccountPageV2.js.
    ..\sdkTypeScript\Schemas\AccountPageV2\AccountPageV2.js
    // Объявление модуля и его зависимостей.
    define("AccountPageV2", ["LettersOnlyValidator"], function(LettersOnlyValidator) {
        return {
            entitySchemaName: "Account",
            methods: {
                // Метод валидации.
                validateMethod: function() {
                    // Определение правильности заполнения колонки AlternativeName.
                    var res = LettersOnlyValidator.isAcceptable(this.get("AlternativeName"));
                    // Вывод результата пользователю.
                    Terrasoft.showInformation("Is 'Also known as' field valid: " + res);
                },
                // Переопределение метода родительской схемы, вызываемого при сохранении записи.
                save: function() {
                    // Вызов метода валидации.
                    this.validateMethod();
                    // Вызов базовой функциональности.
                    this.callParent(arguments);
                }
            },
            diff: /**SCHEMA_DIFF*/ [] /**SCHEMA_DIFF*/
        };
    });
    

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

Неправильно заполненное поле
scr_result_01.png
Правильно заполненное поле
scr_result_02.png