Открыть сервис

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-страницу, происходит следующее:

  1. Запрос: Браузер отправляет HTTP-запрос к серверу Salesforce.
  2. Обработка: Сервер Salesforce выполняет код Apex (если он привязан к странице), извлекает данные из базы данных (объектов Salesforce) и формирует HTML-код.
  3. Ответ: Сгенерированный 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 для новых проектов. Основные отличия:

ХарактеристикаVisualforceLightning 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 →