---
schema_version: "1"
id: 1253223a1832eb94cb6046c492dad174bfb205f35f975619e486eb141633f487
title: Creating a Custom Cards Apex Page (Managed Package)
collection: admin
version: current
locale: en-us
portal_url: https://docs.salesforce.com/admin/current/en-us/xcloud/264-0-0/os_creating_a_custom_cards_apex_page.md
canonical_url: https://help.salesforce.com/s/articleView?id=xcloud.os_creating_a_custom_cards_apex_page.htm&release=264.0.0&type=5
source_site: help.salesforce.com
content_type: documentation
content_hash: 792c613b40380a9c2c6c8856d7fcebedd657148fae0111eb81a9542035950539
description: For the managed package runtime, to create a custom Cards Apex page, create a Visualforce Apex page, add your Angular app to the page, add some common scripts, and add your layout name.
products:
  - Omnistudio
release: "264"
---
# Creating a Custom Cards Apex Page (Managed Package)

For the managed package runtime, to create a custom Cards Apex page, create a Visualforce Apex page, add your Angular app to the page, add some common scripts, and add your layout name.

![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US).

1. Create a Visualforce page and set the `apex:page` header as follows:
    
    ```java
    <apex:page docType="html-5.0" applyHtmlTag="false" showHeader="false" sidebar="false" standardStylesheets="false" controller="nsPrefix.CardCanvasController"> 
    ```
2. Add the following `html` tag:
    
    ```java
    <html xmlns:ng="http://angularjs.org" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" ng-app="hybridCPQ" class="ng-cloak" dir="{!IF(isLanguageRTL, 'rtl', 'ltr')}">
    ```
    
    where the `ng-app` tag relates to your Angular application. If you are including CPQ, you can reference the `"hybridCPQ"` app directly, otherwise include your own app.
3. Add these resources to your page:
    
    ```java
    <script src="{!URLFOR($Resource.nsPrefix__VlocityDynamicForm__vlocity_core_assets, '/latest/vlocity_core_assets.js')}"></script>
    <script src="{!URLFOR($Resource.nsPrefix__VlocityDynamicForm__angular_strap_bundle_1_6)}"></script>
    
    <script src="{!$Resource.nsPrefix__VlocityDynamicForm__SldsAngular}"></script>
    <script src="{!URLFOR($Resource.nsPrefix__VlocityDynamicForm__cardframework_core_assets, '/latest/cardframework_assets.js')}"></script>
    <script src="{!$Resource.nsPrefix__VlocityDynamicForm}"></script>
    <script src="{!URLFOR($Resource.nsPrefix__VlocityDynamicForm__cardframework_core_assets, '/latest/cardframework.js')}"></script>
    ```
    
    Optionally, for CPQ apps, add HybridCPQ:
    
    ```java
    
    <script src="{!$Resource.nsPrefix__HybridCPQ}"></script>
    ```
4. Include your layout name in the body of your page:
    
    ```java
    <vloc-layout layout-name="myLayout" ></vloc-layout>
    ```

Complete code:

```java
<apex:page docType="html-5.0" applyHtmlTag="false" showHeader="false"
sidebar="false" standardStylesheets="false"
controller="vlocity_cmt.CardCanvasController">


<html xmlns:ng="http://angularjs.org" xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
ng-app="hybridCPQ" class="ng-cloak" dir="{!IF(isLanguageRTL, 'rtl', 'ltr')}">

<head>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<apex:stylesheet value="{!IF(isLanguageRTL, URLFOR($Resource.vlocity_cmt__slds, '/assets/styles/salesforce-lightning-design-system-vf.rtl.min.css'), URLFOR($Resource.vlocity_cmt__slds, '/assets/styles/salesforce-lightning-design-system-vf.min.css'))}" />
<!-- Custom CSS here -->

<!-- Salesforce Console API -->
<!-- Common scripts -->
<apex:includeScript value="/support/console/41.0/integration.js" />
<script src="{!URLFOR($Resource.vlocity_cmt__vlocity_core_assets, '/latest/vlocity_core_assets.js')}"></script>
<script src="{!URLFOR($Resource.vlocity_cmt__angular_strap_bundle_1_6)}"></script>
</head>

<body>
<div class="">
<!-use your layout name->
<button type="button" class="btn btn-default">Left</button>
<vloc-layout layout-name="AccountConsoleCards"
ctrl="CPQController"></vloc-layout>
</div>

<script src="{!$Resource.vlocity_cmt__SldsAngular}"></script>
<script src="{!URLFOR($Resource.vlocity_cmt__cardframework_core_assets, '/latest/cardframework_assets.js')}"></script>
<script src="{!$Resource.vlocity_cmt__VlocityDynamicForm}"></script>
<script src="{!URLFOR($Resource.vlocity_cmt__cardframework_core_assets, '/latest/cardframework.js')}"></script>
<script src="{!$Resource.vlocity_cmt__HybridCPQ}"></script>

<script type="text/javascript">
var sessionId = '

{!$Api.Session_ID}';
var vlocCPQ = {
'accessToken': '{!$Api.Session_ID}
',
'staticResourceURL': {
'slds': '

{!URLFOR($Resource.vlocity_cmt__slds)}
',
}
};
</script>
</body>

</html>
</apex:page>
```