Visualforce
Visualforce — это фреймворк для создания пользовательских интерфейсов на платформе Salesforce, основанный на декларативном языке разметки, похожем на HTML, и серверном языке программирования Apex (собственный язык Salesforce, основанный на Java). Visualforce позволяет разработчикам и администраторам создавать кастомизированные веб-страницы, которые интегрируются с данными и бизнес-логикой Salesforce, заменяя или дополняя стандартные интерфейсы платформы.
История
Visualforce был представлен компанией Salesforce в 2008 году как часть платформы Force.com (ныне Salesforce Platform). Его появление стало ответом на потребность в гибкой настройке пользовательского интерфейса, выходящей за рамки возможностей стандартных страниц, таких как «Страницы деталей записи» или «Страницы списков». До Visualforce разработчики использовали ограниченные возможности настройки через «S-Control» (JavaScript-скрипты, встроенные в страницы), что было неудобно и небезопасно.
Visualforce стал первым шагом к созданию полноценной платформы для разработки приложений на базе Salesforce. В последующие годы фреймворк активно развивался: были добавлены компоненты для работы с мобильными устройствами, поддержка AJAX, интеграция с Lightning Design System (LDS) и возможность использования в контексте Lightning Experience. Несмотря на появление более современного фреймворка Lightning Web Components (LWC) в 2019 году, Visualforce остаётся поддерживаемым и широко используемым, особенно в устаревших проектах и для интеграции с внешними системами.
Архитектура и принцип работы
Visualforce работает по модели «запрос-ответ» на сервере Salesforce. Когда пользователь открывает Visualforce-страницу, происходит следующее:
- Запрос: Браузер отправляет HTTP-запрос к серверу Salesforce.
- Обработка: Сервер Salesforce выполняет код Apex (если он привязан к странице), извлекает данные из базы данных (объектов Salesforce) и формирует HTML-код.
- Ответ: Сгенерированный HTML-код отправляется обратно в браузер, который отображает страницу.
Ключевой элемент — контроллер. Это класс Apex, который содержит логику для обработки данных и действий пользователя. Контроллер может быть стандартным (встроенным для стандартных объектов, например, Account или Contact) или пользовательским (написанным разработчиком). Visualforce-страница связывается с контроллером через атрибуты standardController или extensions.
Язык разметки
Visualforce использует собственный язык разметки, основанный на XML. Он состоит из тегов, которые начинаются с префикса apex: (например, <apex:page>, <apex:form>, <apex:outputText>). Теги могут содержать атрибуты, управляющие отображением и поведением. Например:
``xml <apex:page standardController="Account"> <apex:form> <apex:outputField value="{!Account.Name}"/> </apex:form> </apex:page> ``
В этом примере:
<apex:page>— корневой элемент страницы.standardController="Account"— указывает, что страница использует стандартный контроллер для объекта Account.<apex:form>— создаёт HTML-форму.<apex:outputField>— отображает значение поля объекта Account.{!Account.Name}— выражение привязки данных (bind expression), которое подставляет значение поля Name из текущей записи Account.
Выражения привязки данных
Выражения в Visualforce заключаются в фигурные скобки с восклицательным знаком ({!...}). Они позволяют обращаться к данным из контроллера, полям объектов, переменным и глобальным переменным (например, $User, $Api, $Label). Выражения могут быть простыми (например, {!Account.Name}) или сложными, включающими арифметические операции, вызовы методов и условные операторы.
Классификация компонентов
Visualforce включает в себя множество встроенных компонентов, которые можно разделить на несколько категорий:
- Базовые компоненты:
<apex:page>,<apex:form>,<apex:outputText>,<apex:inputText>,<apex:commandButton>,<apex:commandLink>. - Компоненты отображения данных:
<apex:outputField>,<apex:inputField>,<apex:pageBlockTable>,<apex:dataTable>,<apex:dataList>. - Компоненты навигации и макета:
<apex:pageBlock>,<apex:pageBlockSection>,<apex:pageBlockButtons>,<apex:sectionHeader>,<apex:tabPanel>. - Компоненты для работы с медиа:
<apex:image>,<apex:includeScript>,<apex:stylesheet>. - Компоненты для AJAX:
<apex:actionFunction>,<apex:actionPoller>,<apex:actionSupport>. - Компоненты для интеграции:
<apex:iframe>,<apex:include>.
Пользовательские компоненты (Custom Components) создаются разработчиками для повторного использования кода. Они определяются с помощью тега <apex:component> и могут содержать как разметку, так и логику Apex.
Применение
Visualforce используется для решения широкого круга задач в экосистеме Salesforce:
- Создание кастомизированных страниц: Разработка страниц для ввода данных, отчётов, дашбордов, которые не соответствуют стандартным шаблонам.
- Интеграция с внешними системами: Visualforce-страницы могут отображать данные из внешних источников, вызывать REST/SOAP API через Apex и встраивать iframe с внешними веб-приложениями.
- Создание порталов и сообществ: До появления Experience Cloud (ранее Community Cloud) Visualforce был основным инструментом для создания порталов для партнёров и клиентов. Сейчас он используется в гибридных решениях.
- Разработка мобильных приложений: Visualforce поддерживает адаптивную вёрстку и может использоваться в мобильном приложении Salesforce (Salesforce Mobile App).
- Создание мастер-страниц (Templates): Visualforce позволяет создавать шаблоны для страниц, которые задают общий макет, навигацию и стили.
Преимущества и недостатки
Преимущества
- Глубокая интеграция с Salesforce: Visualforce предоставляет прямой доступ к данным, метаданным и бизнес-логике платформы.
- Быстрая разработка: Декларативный язык разметки и встроенные компоненты позволяют создавать функциональные страницы с минимальным объёмом кода.
- Поддержка устаревших решений: Множество существующих проектов на платформе Salesforce построены на Visualforce, поэтому знание фреймворка необходимо для их поддержки и модернизации.
- Гибкость: Возможность встраивать произвольный HTML, CSS и JavaScript, а также использовать Apex для сложной логики.
Недостатки
- Устаревшая архитектура: Visualforce использует серверную генерацию HTML, что приводит к медленной загрузке страниц по сравнению с современными клиентскими фреймворками (например, Lightning Web Components).
- Ограниченная производительность: Каждый запрос к Visualforce-странице требует полного цикла обработки на сервере, что может быть неэффективно для динамических интерфейсов.
- Сложность в поддержке: Код Visualforce может быть трудночитаемым и сложным для тестирования, особенно в больших проектах.
- Отсутствие современных возможностей: Visualforce не поддерживает реактивное программирование, виртуальный DOM и другие современные подходы, которые есть в Lightning Web Components.
Сравнение с Lightning Web Components
С появлением Lightning Web Components (LWC) в 2019 году Salesforce рекомендует использовать LWC для новых проектов. Основные отличия:
| Характеристика | Visualforce | Lightning Web Components |
|---|---|---|
| Архитектура | Серверная генерация HTML | Клиентский рендеринг (JavaScript) |
| Язык | Apex + XML-разметка | JavaScript, HTML, CSS |
| Производительность | Медленнее, полная перезагрузка страницы | Быстрее, частичное обновление |
| Современность | Устаревший | Современный, основан на веб-стандартах |
| Поддержка | Поддерживается, но не развивается | Активно развивается |
| Интеграция с Lightning | Ограниченная | Полная интеграция |
Несмотря на это, Visualforce остаётся востребованным для:
- Поддержки существующих проектов.
- Создания страниц для устаревших версий Salesforce (например, Salesforce Classic).
- Решений, где требуется полный контроль над серверной логикой.
Интересные факты
- Visualforce был назван в честь концепции «визуальной силы» (visual force), подчёркивая его способность создавать мощные и гибкие интерфейсы.
- В Visualforce можно использовать любые CSS-фреймворки, такие как Bootstrap, но для соответствия корпоративному стилю Salesforce рекомендуется использовать Lightning Design System.
- Visualforce-страницы могут быть встроены в Lightning Experience через компонент «Visualforce Page» в Lightning App Builder.
- Существуют сторонние библиотеки, расширяющие возможности Visualforce, например, «Visualforce Remoting» для упрощения AJAX-вызовов.
Источники
- Официальная документация Salesforce: «Visualforce Developer Guide».
- Salesforce Trailhead: модуль «Visualforce Basics».
- Книга «Salesforce.com Developer’s Guide» by Jason Ouellette.
- Статья «Visualforce vs Lightning Web Components: A Comparison» на Salesforce Developer Blog.
- Материалы конференции Dreamforce 2019: «The Future of Visualforce».
BFOmetr — база данных и аналитика по компаниям России.
На главную BFOmetr →