цфт что такое тбп
Как в ЦФТ реализовать то, что мы всегда делали в Бисквите (с примерами)
Прошло еще 10 лет и от Бисквита стали банки отказываться. И вот в 2019 году я оказался в крайне неприятной ситуации: я отлично знаю только то, что уже мало кому нужно. Осенью 2019 года я получил отличное предложение от РСХБ-ИНТЕХ, где я сейчас и работаю. Я устроился туда выполнять задачи по разработке в системе Бисквит и одновременно изучать систему ЦФТ на языке программирования Pl Plus. Уже на испытательном сроке мне назначили 14 учебных курсов на учебном портале ЦФТ и стали давать элементарные задачки по разработке в системе ЦФТ. А примерно с лета 2020 года я полностью перешел на разработку в системе ЦФТ (и этому очень рад).
Эта статья о том, как сделать в ЦФТ то, что мы привыкли делать в Бисквите. Начинал я ее писать только для себя, чтобы упорядочить свои знания. Однако потом оказалась, что эта тема важна для всех разработчиков, которые переходят на ЦФТ и не только с Бисквита. Именно поэтому я решил разместить ее на Хабре.
Покажу на примерах
MESSAGE “Hello world”.
MESSAGE “Hello world” VIEW-AS ALERT-BOX.
+ (для цифр) +
+ (для строк) || (конкатенация)
= (для сравнения) =
= (для присваивания) :=
Не так страшен черт, как его малюют: как мы перевели разработку ЦФТ-Банк на платформу CFT Platform IDE (Admin 2.0)
Финансовые компании находятся в поисках лучших решений, которые оптимизируют внутренние процессы разработки, разовьют IT-инфраструктуру в соответствии с требованиями бизнеса и позволят им выводить на рынок лучшие конкурентные продукты. Так, два года назад мы ступили на путь перевода разработки ЦФТ-банк на платформу CFT Platform IDE. Среди коллег по цеху ходят слухи, что это процесс невероятной сложности, ввиду чего не решаются приступить к делу. На своем примере мы докажем, что это вполне подъемный процесс и для вашей команды.
Процесс разработки ПО в НРД в большинстве случаев характерен наличием нескольких команд разработчиков, которые лавируют между проектами, занимаясь разными модулями одной или даже разных систем. В работе у нас постоянно большое количество доработок и приходится держать несколько dev и test-контуров с разными версиями системы. Таким образом, всегда есть необходимость доступа к централизованному хранилищу кода с поддержкой версионности, обеспечением автоматической сборки и установки. Для системы ЦФТ-Банк на протяжении многих лет таких возможностей не было.
ЦФТ-Банк – это автоматизированная банковская система ЗАО «Центр финансовых технологий». Она характерна использованием собственного языка программирования pl/plus и, как следствие, возможностью применения только собственных средств разработки, предлагаемых вендором системы. Код системы открытый, с ограниченными возможностями модификации дистрибутивных модулей и с широкими возможностями создания своих собственных модулей.
Это порождало лишние затраты на подготовку сборок, merge-изменений и т.д. Часто возникали случаи порчи программного кода, т.к. следить за правильностью версиии той или иной программной компоненты могли только сами разработчики в полностью ручном режиме. Однако поменять подход к разработке для системы ЦФТ-Банк было невозможно ввиду существования безальтернативной среды разработки для этой системы, по своему интерфейсу и возможностям отставшей от жизни лет на 15.
Решение наших проблем было предложено ЦФТ с выводом на рынок в 2018 г. новой платформы разработки для своих систем, которая называется CFT Platform IDE (она же Admin 2.0, или сокращённо A2).
Ключевые отличия новой платформы разработки
Внешне разработчик получает среду, реализованную на основе Eclipse Platform, которая гораздо симпатичнее архаичного Администратора словаря данных.
Для сравнения редактирование кода в старой среде (Администратор словаря данных):
Редактирование кода в Admin 2.0:
Но основным преимуществом новой платформы разработки для нас явилась возможность хранения программного кода системы, а также экранных форм, описаний типов и прочего в виде множества текстовых файлов. Именно это позволяет выгружать код в систему контроля версий (в нашем случае Git) со всеми её возможностями, которых нам так недоставало ранее при разработке для ЦФТ-Банк.
Таким образом, разработчикам ЦФТ-Банк стала доступна возможность комфортно отслеживать историю изменений каждого объекта, включая не только время редакции, но и сравнение старой и новой версий через встроенный компонент либо с помощью любого внешнего средства типа Araxis Merge. Тому, кто не знаком с ЦФТ-Банк, это покажется удивительным, но ранее о таком приходилось только мечтать, храня историю изменений лишь в виде комментариев в коде.
Приятными бонусом послужила возможность синтаксической проверки кода без соединения с БД, а также удобная навигация (переходы в вызываемые процедуры по щелчку в месте вызова), быстрый контекстный поиск по проекту.
Отмечу, что новый админ оказался в хорошем смысле более привередлив к синтаксическим конструкциям в коде. Среди наших локальных доработок были выявлены очень странные выражения, например, что-то наподобие:
Непонятно, как Администратор словаря «переваривал» подобное без ошибок. Причём, если первые 2 примера представляют собой безобидный мусор, то последнее — явная ошибка, которая приведёт к некорректной работе программы.
И ещё одной особенностью Admin 2.0 является, благодаря интеграции с Git, функционал получения списка изменений на основе сравнения 2-х веток.
Это позволяет выполнять развёртывание этих изменений в целевую БД. Затем изменения из БД можно выгрузить по тому же списку элементов, используя старый Администратор проектов, в mdb-файл, если их необходимо передать для установки в БД, куда разработчик не имеет прямого доступа. Однако более интересным вариантом является подготовка и развёртывание изменений в новом формате. Он представляет из себя zip-архив, внутри которого находятся текстовые файлы с кодом, а также некоторая метаинформация. Побочным эффектом является возможность просмотреть и даже изменить код в передаваемой поставке без установки в какую-то БД, что в случае с mdb-форматом было невозможно. Но самое основное – сохранение в этот новый формат из Git-репозитория и развёртывание в БД Admin 2.0 предусматривает делать и в безинтерфейсном режиме, что позволяет настроить автосборку и автоустановку, т.е. наконец говорить о CI/СD в применении к доработкам ЦФТ-Банк. Правда, данную тему я планирую подробно раскрыть уже в следующей статье.
Особенности перехода на новую платформу
Материальный вопрос
Первое, с чем пришлось столкнуться — получение лицензий на рабочие места. На каждое рабочее место разработчика требуется отдельная лицензия, которая привязана сразу и к железу ПК, и к учётной записи пользователя. Если у вас в компании тоже несколько изолированных сетей, где есть сервера с ЦФТ-Банк, и ведётся разработка на них, то на одного разработчика потребуется купить несколько лицензий Admin 2.0. Стоимость одной лицензии на момент написания статьи составляет 125 у.е./мес., или около 8 тыс. руб. по внутреннему курсу. За первоначальную покупку на данный момент деньги не взимаются. Лицензии распространяются в виде файлов, а не смарт-ключей, что позволяет без проблем развернуть среду даже на виртуальной станции.
До покупки можно договориться о предоставлении тестовых лицензий. В нашем случае были получены 6 лицензий со сроком действия — 4 месяца на бесплатной основе. Условия обсуждаются с персональным менеджером индивидуально.
Настройка рабочих мест и БД
Серверную часть IDE можно устанавливать и в рабочее время, но правильней будет, если в момент установки не будут открыты на редактирование программные объекты ЦФТ, т.к. основное в обновлении — это новый механизм соответствующих блокировок.
Клиентская часть — это, по сути, Eclipse с расширениями CFT Platform IDE, устанавливается без прав администратора ПК. Только заранее должна быть установлена JRE не ниже 8-й версии. Доступ к обновлениям IDE на сайте ЦФТ теперь открытый, без авторизации. Можно настроить обновления непосредственно через сайт, либо из локальной сети. Например, из сетевой папки или с использованием менджера репозиториев вроде Nexus. Мы выбрали вариант сетевой папки как самый простой в настройке, не требующий доступа в Интернет со всех рабочих мест, надёжный, что важно при настройке тяжелых обновлений, и гибкий ввиду возможности выкладывать обновления по своему расписанию.
Выгрузка кода локального приложения
Для создания проекта, с которым будет работать Admin 2.0, нам нужно выгрузить из БД в папку с набором текстовых файлов описание объектов, являющихся нашими локальными доработками, а также, условно говоря, ссылки на объекты, от которых наши доработки зависят.
Отмечу, что при большом объёме локального приложения среда разработки начинает тормозить, поэтому в такой ситуации необходимо будет деление исходников на актив и архив. К счастью, в лимит мы вписались при немалом объёме локала. Однако стоит учесть объём оперативной памяти рабочих станций. Согласно документации требуется не менее 16Гб, хотя некоторое время части наших разработчиков удавалось работать и на 8Гб памяти, надо было лишь отрегулировать объём памяти java-приложения в файле eclipse.ini.
Что касается выгрузки — процедура несложная, т.к. все необходимые скрипты, такие как для подсчёта объёма приложения, для получения списка объектов и другие входят в комплект поставки.
Адаптация кода
Адаптация заключалась в дополнении того, что не собрал скрип, например, прогрузились не все ссылки на таблицы в чистом Oracle, некоторые ТБП со сложным подчинением — в единичных случаях не подгрузились типы ссылок или массивы. Также надо было слегка подчистить код (см. примеры выше). Но самое главное — подстроить код под новые особенности:
Результат
Серьёзных проблем при адаптации не было. Нам посчастливилось «познакомиться поближе» со своим кодом. В процессе мы выявили недочёты в IDE и даже в технологическом ядре (в компиляторе), которые сейчас ЦФТ уже исправил.
Большую помощь нам оказали специалисты ЦФТ, которые оперативно реагировали на возникшие проблемы, а в случае замедления процесса внедрения с нашей стороны всячески нас стимулировали и поддерживали интерес. После всех этих подготовительных действий мы запросто настроили интеграцию Eclipse с Git и выгрузили в него код текущей версии.
Нам потребовалось создать регламент ведения разработок, т.к. разработчикам ЦФТ-Банк пришлось привыкать работать совершенно в ином стиле: правильно маркировать коммиты, работать в нужной версии и пр. Сама методика работы стала соответствовать общим стандартам разработки в IT-компании.
Несмотря на первоначальное снижение скорости разработки, Admin 2.0 был сразу встречен в нашем коллективе с большим энтузиазмом. За 1-2 месяца активной работы все привыкли к новой среде, а эффективность возросла.
Сегодня Admin 2.0 до сих пор находится на стадии активных доработок, но это гораздо менее сырой продукт, чем 2 года назад. Например, только недавно появилась поддержка работы с группами доступа, пока работающая с ошибками. Также развёртывание в безинтерфейсном режиме может завершаться с ошибками при наличии в коде макросов. Большинство недочетов, которые мы фиксируем, ЦФТ устраняет в пределах месяца. За эти 2 года мы использовали отличную возможность повлиять на развитие Admin 2.0. Сегодня компании, которые задумали подобный переход, смогут пройти этот путь ощутимо быстрее.
PL/Plus
PL/Plus – это язык программирования со строгой типизацией и блочной структурой программы, ориентированный на работу с продуктами компании ЦФТ. Он позволяет выполнять последующую трансляцию кода на язык PL/SQL – внутренний язык СУБД Oracle, на которой базируются программные решения ЦФТ.
Содержание
[править] Основные особенности языка
Язык PL/Plus не является объектно-ориентированными в полном объёме, поэтому, исходя из общепринятой терминологии объектно-ориентированного программирования (ООП) в настоящей модели принято следующее соответствие терминов:
Основной синтаксической единицей является модуль, состоящий из операции, принадлежащей определенному ТБП, а также описаний переменных, типов, функций и процедур, используемых как в самой операции, так и в других операциях.
Для упрощения работы с экземплярами ТБП на уровне языка PL/SQL, который ничего не знает о внутренних свойствах ТБП, для каждого ТБП создается так называемый интерфейсный пакет типа, который содержит в себе набор низкоуровневых базовых функций и процедур работы с экземплярами ТБП (создание, удаление экземпляров, чтение и изменение значений реквизитов и другие).
Препроцессор PL/Plus элементарные действия с экземплярами ТБП преобразует в PL/SQL вызовы базовых процедур интерфейсных пакетов типов, более сложные конструкции (аналоги SQL-операторов) преобразуются непосредственно в SQL-конструкции языка PL/SQL.
Из объектно-ориентированной модели язык PL/Plus использует также наследование.
[править] История создания
Язык был создан с целью решения задач при использовании платформы:
[править] Базовые типы данных
В языке PL+ используются предопределенные типы данных, которые можно разделить на несколько
[править] Выражения и операторы
В зависимости от типов используемых значений и операторов, значение выражения может быть логическим, числовым, строковым или датой.
В выражениях, где операнды имеют разный тип данных не всегда очевидно какая операция должна выполняться и какого типа будет результат. В таких случаях PL+ попытается привести операнды к таким типам данных, чтобы операция имела смысл. Такое поведение называется неявным приведением типов.
[править] Приоритет операторов
В сложных смешанных выражениях могут присутствовать значения разных типов и операторы различных групп. В зависимости от порядка выполнения операторов может меняться не только результат выражения, но и его тип. Такие выражения вычисляются в соответствии с общим приоритетом операторов.
Но этот порядок может быть изменен с помощью скобок (), совсем как в арифметических выражениях. Выражения, заключенные в скобки, выполняются в первую очередь. Скобки тоже можно считать особым оператором и у них тоже есть приоритет.
[править] Функции и процедуры
Функция может возвращать данные практически любого типа от скаляров (строка, число, дата, логика) до сложных структур: коллекций, объектных типов, курсорных переменных и т. д.
Функция может вызываться из любой части исполняемой команды PL+, где допускается использование выражения. Следующие примеры демонстрируют вызовы функций:
В PL+, в отличие от PL/SQL, можно просто проигнорировать возвращаемое значение функции, если оно не представляет интереса для вас. То есть функцию можно использовать так, как если бы она была процедурой. Если функция не имеет параметров, ее вызов может записываться с круглыми скобками или без них.
ЦФТ-Ритейл банк (Платформа 1)
— это процесс приобретения знаний с применением современных телекоммуникационных технологий
проводят ведущие специалисты в современных учебных классах в Москве и Новосибирске
Архитектура системы на уровне элементов СУБД
Администрирование элементов модели. Основное меню АРМ
Администрирование элементов модели. ТБП, реквизиты ТБП, свойства ТБП как элемента базы данных
Администрирование элементов модели. Операции ТБП
Администрирование элементов модели. Представления ТБП
Администрирование элементов модели. Состояния и переходы ТБП
Прикладное программирование. Синтаксис языка PL/Plus
Выполнение регламентных работ
Концепция «ЦФТ-Ритейл банк»
Учетное ядро. Пользователи
Учетное ядро. Клиенты. Идентификация
Учетное ядро. Финансовый мониторинг
Учетное ядро. Финансовые счета
Учетное ядро. Технология формирования и обработки платежных документов
Учетное ядро. Дополнительный контроль. Валютный контроль
Учетное ядро. Завершение операционного дня
Ведение и учет кассовых операций. Валютно-обменные операции
Договоры покупки/продажи кредитов
Ведение договоров продажи: продажа кредитов с поручительством, ведение проданных кредитов за балансом банка (сервисинг), ведение частично проданных кредитов
Депозиты физических лиц
Зарплатные проекты. Списковые зачисления
Работа с картами международных платежных систем
Кредитные карты и овердрафты дебетовых карт
Сопряжение с платежной системой «Золотая Корона»
28. Сопряжение с процессинговым центром «КартСтандарт»
Цфт что такое тбп
Заранее спасибо.Alkov
Профи
Неподтвержденный
SN, SU используются в поддержке прикладной блокировки. Да, скорее всего, их присутствие во временных таблицах не оправдано.
Код: | ||||
function open_cur ( P_OWNER varchar2(30) , P_PREFIX varchar2(3) ) return tp_cur is vSQL varchar2(32767); cur tp_cur; vLF const varchar2(1) := LF$; isHit boolean; begin vSQL := ‘WITH’ ||vLF||’W_CONSTRAINTS as’ ||vLF||’ ( select /*+ RESULT_CACHE */ a.CONSTRAINT_NAME, a.TABLE_NAME, a.CONSTRAINT_TYPE, a.R_CONSTRAINT_NAME’ ||vLF||’ from DBA_CONSTRAINTS a’ ||vLF||’ where a.STATUS = »ENABLED»’ ||vLF||’ and a.OWNER = :OWNER’ ||vLF||’ )’ ||vLF||’select k.TABLE_NAME, k.CONSTRAINT_NAME’ ||vLF||’ from W_CONSTRAINTS k’ ||vLF||’ where k.CONSTRAINT_TYPE = »R»’ ||vLF||’ and x.C_OWNER = :OWNER’ ||vLF||’)’; (!) текст запроса приведён не полностью
| ||||
kai Профи
Каков объём таких данных: количество записей, количество колонок? Всё таки, динамический курсор можно использовать и с одиночными fetch. А ведь ещё есть вариант использования переменных SQL типа: Nested Table. |
Участник
Неподтвержденный
максимум 3 млн строк, 6 «легких» полей (DATE, NUMBER),будем считать по 2 байта.
Итого: 3 млн * 6 * 2 байта = 12млн байт или около 12МБ
+ системные поля типа ROWID
Если мои расчеты верны, то не так много, но треть данных вообще «лишняя» и издержки на формирование и хранение «Левого» индекса.
И из объяснений я не увидел причин отказываться от варианта динамического формирования запроса с «WITH AS».
Он создается без привязки к индексу, всегда.
Вот если индекс создается, то он тоже там участвует.
Индексированные поля(выражения, функции) + ROWID.
Способ его хранения и данные сколько он весит мне не известны.kai
Профи
и вот ещё интересно у него же
Цитата: |
Раньше считалось, что для строк с ROWID (наиболее распространенный тип строк в Oracle; за исключением строк в индекс-таблицах все строки имеют ROWID) значения ROWID должны быть неизменяемыми. Когда строка вставлялась, она должна была ассоциироваться с ROWID-адресом- и этот адрес должен был быть связанным с ней до тех пор, пока строка физически не удалялась из базы данных. Со временем это становится все менее верно, т. к. теперь есть операции, которые могут вызвать изменение ROWID строки; их примеры перечислены ниже.
— Использование команды FLASHBACK TABLE для восстановления таблицы базы данных в состояние, которое она имела в какой-то момент времени в прошлом. — Выполнение операций MOVE, а также многих операций с секциями, таких как разделение и слияние секций. — Применение команды ALTER TABLE SHRINK SPACE для усечения сегмента. Теперь с учетом того, что ROWID могут со временем изменяться (они больше не являются неизменяемыми), физически хранить их в виде столбцов таблиц базы данных не рекомендуется. То есть использование ROWID в качестве типа данных для столбца считается плохой практикой, которой следует избегать. Взамен должен применяться первичный ключ строки (который должен быть неизменяемым), и для поддержания целостности данных может быть определено ограничение ссылочной целостности.
|