mirror of
https://github.com/LukeHagar/developer.sailpoint.com.git
synced 2025-12-09 20:37:47 +00:00
20 lines
61 KiB
HTML
20 lines
61 KiB
HTML
<!doctype html>
|
||
<html lang="en" dir="ltr" class="docs-wrapper docs-doc-page docs-version-current plugin-docs plugin-id-idn docs-doc-id-docs/identity-now/transforms/transforms">
|
||
<head>
|
||
<meta charset="UTF-8">
|
||
<meta name="generator" content="Docusaurus v2.2.0">
|
||
<title data-rh="true">Transforms | SailPoint Developer Community</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://developer.sailpoint.com/idn/docs/transforms"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="current"><meta data-rh="true" name="docusaurus_tag" content="docs-idn-current"><meta data-rh="true" name="docsearch:version" content="current"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-idn-current"><meta data-rh="true" property="og:title" content="Transforms | SailPoint Developer Community"><meta data-rh="true" name="description" content="Building Transforms in IdentityNow"><meta data-rh="true" property="og:description" content="Building Transforms in IdentityNow"><meta data-rh="true" name="keywords" content="transforms"><link data-rh="true" rel="icon" href="/img/SailPoint-Logo-Icon.ico"><link data-rh="true" rel="canonical" href="https://developer.sailpoint.com/idn/docs/transforms"><link data-rh="true" rel="alternate" href="https://developer.sailpoint.com/idn/docs/transforms" hreflang="en"><link data-rh="true" rel="alternate" href="https://developer.sailpoint.com/idn/docs/transforms" hreflang="x-default"><link data-rh="true" rel="preconnect" href="https://TB01H1DFAM-dsn.algolia.net" crossorigin="anonymous"><link rel="preconnect" href="https://www.googletagmanager.com">
|
||
<script>window.dataLayer=window.dataLayer||[]</script>
|
||
<script>!function(e,t,a,n,g){e[n]=e[n]||[],e[n].push({"gtm.start":(new Date).getTime(),event:"gtm.js"});var m=t.getElementsByTagName(a)[0],r=t.createElement(a);r.async=!0,r.src="https://www.googletagmanager.com/gtm.js?id=GTM-TSD78J",m.parentNode.insertBefore(r,m)}(window,document,"script","dataLayer")</script><link rel="stylesheet" href="/assets/css/styles.227fd7a0.css">
|
||
<link rel="preload" href="/assets/js/runtime~main.94e2c36e.js" as="script">
|
||
<link rel="preload" href="/assets/js/main.ea79317c.js" as="script">
|
||
</head>
|
||
<body class="navigation-with-keyboard">
|
||
<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();null!==e?t(e):window.matchMedia("(prefers-color-scheme: dark)").matches?t("dark"):(window.matchMedia("(prefers-color-scheme: light)").matches,t("light"))}(),document.documentElement.setAttribute("data-announcement-bar-initially-dismissed",function(){try{return"true"===localStorage.getItem("docusaurus.announcement.dismiss")}catch(t){}return!1}())</script>
|
||
|
||
<noscript><iframe src="https://www.googletagmanager.com/ns.html?id=GTM-TSD78J" height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript><div id="__docusaurus">
|
||
<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#docusaurus_skipToContent_fallback">Skip to main content</a></div><div class="announcementBar_mb4j" role="banner"><div class="announcementBarPlaceholder_vyr4"></div><div class="content_knG7 announcementBarContent_xLdY">Checkout our latest announcement in the SailPoint Developer Community Forum: <a target="_blank" rel="noopener noreferrer" href="https://developer.sailpoint.com/discuss/t/rule-java-docs-now-available-on-the-sailpoint-developer-community/10787">Introducing Rules Java Docs for IdentityNow!</a> 🎉</div><button type="button" aria-label="Close" class="clean-btn close closeButton_CVFx announcementBarClose_gvF7"><svg viewBox="0 0 15 15" width="14" height="14"><g stroke="currentColor" stroke-width="3.1"><path d="M.75.75l13.5 13.5M14.25.75L.75 14.25"></path></g></svg></button></div><nav class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navbar__brand" href="/"><div class="navbar__logo"><img src="/img/SailPoint-Developer-Community-Lockup.png" alt="SailPoint Developer Community" class="themedImage_ToTc themedImage--light_HNdA"><img src="/img/SailPoint-Developer-Community-Inverse-Lockup.png" alt="SailPoint Developer Community" class="themedImage_ToTc themedImage--dark_i4oU"></div><b class="navbar__title text--truncate"></b></a><div class="navbar__item dropdown dropdown--hoverable"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">IdentityNow</a><ul class="dropdown__menu"><li><a href="#" class="dropdown__link navbar__section">API Specifications</a></li><li><a class="dropdown__link indent" href="/idn/api/v3">V3 APIs</a></li><li><a class="dropdown__link indent" href="/idn/api/beta">Beta APIs</a></li><li><a href="#" class="dropdown__link navbar__section">Documentation</a></li><li><a aria-current="page" class="dropdown__link indent dropdown__link--active" href="/idn/docs">IDN Documentation</a></li><li><a href="#" class="dropdown__link navbar__section">Tools</a></li><li><a class="dropdown__link indent" href="/idn/tools/cli">CLI</a></li><li><a class="dropdown__link indent" href="/idn/tools/sdk">SDKs</a></li><li><a href="#" class="dropdown__link navbar__section">External Links</a></li><li><a href="https://documentation.sailpoint.com" target="_blank" rel="noopener noreferrer" class="dropdown__link indent">Product Documentation<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a href="https://university.sailpoint.com/Saba/Web_spf/NA10P1PRD075/guest/categorydetail/categ000000000003041/true/xxemptyxx/" target="_blank" rel="noopener noreferrer" class="dropdown__link indent">IdentityNow Certifications<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div><div class="navbar__item dropdown dropdown--hoverable"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">IdentityIQ</a><ul class="dropdown__menu"><li><a href="#" class="dropdown__link navbar__section">API Specifications</a></li><li><a class="dropdown__link indent" href="/iiq/api">IIQ APIs</a></li><li><a href="#" class="dropdown__link navbar__section">External Links</a></li><li><a href="https://documentation.sailpoint.com" target="_blank" rel="noopener noreferrer" class="dropdown__link indent">Product Documentation<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a href="https://university.sailpoint.com/Saba/Web_spf/NA10P1PRD075/guest/categorydetail/categ000000000003042/true/xxemptyxx/" target="_blank" rel="noopener noreferrer" class="dropdown__link indent">IdentityIQ Certifications<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div><div class="navbar__item dropdown dropdown--hoverable"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">NERM</a><ul class="dropdown__menu"><li><a href="#" class="dropdown__link navbar__section">API Specifications</a></li><li><a class="dropdown__link indent" href="/nerm/api">NERM APIs</a></li><li><a href="#" class="dropdown__link navbar__section">External Links</a></li><li><a href="https://documentation.sailpoint.com" target="_blank" rel="noopener noreferrer" class="dropdown__link indent">Product Documentation<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div><a class="navbar__item navbar__link" href="/blog">Blog</a><a href="https://ideas.sailpoint.com" target="_blank" rel="noopener noreferrer" class="navbar__item navbar__link">Ideas</a><a href="https://developer.sailpoint.com/discuss/" target="_blank" rel="noopener noreferrer" class="navbar__item navbar__link">Discuss</a></div><div class="navbar__items navbar__items--right"><div class="navbar__item dropdown dropdown--hoverable dropdown--right"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">Support</a><ul class="dropdown__menu"><li><a href="https://support.sailpoint.com/csm?id=sc_cat_item&sys_id=a78364e81bec151050bcc8866e4bcb5c&referrer=popular_items" target="_blank" rel="noopener noreferrer" class="dropdown__link">Submit Support Ticket<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a href="https://community.sailpoint.com" target="_blank" rel="noopener noreferrer" class="dropdown__link">Compass<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a href="https://status.sailpoint.com/" target="_blank" rel="noopener noreferrer" class="dropdown__link">Platform Status<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div><a href="https://github.com/sailpoint-oss" target="_blank" rel="noopener noreferrer" class="navbar__item navbar__link header-github-link" aria-label="SailPoint Open-source GitHub"></a><div class="toggle_vylO colorModeToggle_DEke"><button class="clean-btn toggleButton_gllP toggleButtonDisabled_aARS" type="button" disabled="" title="Switch between dark and light mode (currently light mode)" aria-label="Switch between dark and light mode (currently light mode)" aria-live="polite"><svg viewBox="0 0 24 24" width="24" height="24" class="lightToggleIcon_pyhR"><path fill="currentColor" d="M12,9c1.65,0,3,1.35,3,3s-1.35,3-3,3s-3-1.35-3-3S10.35,9,12,9 M12,7c-2.76,0-5,2.24-5,5s2.24,5,5,5s5-2.24,5-5 S14.76,7,12,7L12,7z M2,13l2,0c0.55,0,1-0.45,1-1s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S1.45,13,2,13z M20,13l2,0c0.55,0,1-0.45,1-1 s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S19.45,13,20,13z M11,2v2c0,0.55,0.45,1,1,1s1-0.45,1-1V2c0-0.55-0.45-1-1-1S11,1.45,11,2z M11,20v2c0,0.55,0.45,1,1,1s1-0.45,1-1v-2c0-0.55-0.45-1-1-1C11.45,19,11,19.45,11,20z M5.99,4.58c-0.39-0.39-1.03-0.39-1.41,0 c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0s0.39-1.03,0-1.41L5.99,4.58z M18.36,16.95 c-0.39-0.39-1.03-0.39-1.41,0c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0c0.39-0.39,0.39-1.03,0-1.41 L18.36,16.95z M19.42,5.99c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06c-0.39,0.39-0.39,1.03,0,1.41 s1.03,0.39,1.41,0L19.42,5.99z M7.05,18.36c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06 c-0.39,0.39-0.39,1.03,0,1.41s1.03,0.39,1.41,0L7.05,18.36z"></path></svg><svg viewBox="0 0 24 24" width="24" height="24" class="darkToggleIcon_wfgR"><path fill="currentColor" d="M9.37,5.51C9.19,6.15,9.1,6.82,9.1,7.5c0,4.08,3.32,7.4,7.4,7.4c0.68,0,1.35-0.09,1.99-0.27C17.45,17.19,14.93,19,12,19 c-3.86,0-7-3.14-7-7C5,9.07,6.81,6.55,9.37,5.51z M12,3c-4.97,0-9,4.03-9,9s4.03,9,9,9s9-4.03,9-9c0-0.46-0.04-0.92-0.1-1.36 c-0.98,1.37-2.58,2.26-4.4,2.26c-2.98,0-5.4-2.42-5.4-5.4c0-1.81,0.89-3.42,2.26-4.4C12.92,3.04,12.46,3,12,3L12,3z"></path></svg></button></div><div class="searchBox_ZlJk"><button type="button" class="DocSearch DocSearch-Button" aria-label="Search"><span class="DocSearch-Button-Container"><svg width="20" height="20" class="DocSearch-Search-Icon" viewBox="0 0 20 20"><path d="M14.386 14.386l4.0877 4.0877-4.0877-4.0877c-2.9418 2.9419-7.7115 2.9419-10.6533 0-2.9419-2.9418-2.9419-7.7115 0-10.6533 2.9418-2.9419 7.7115-2.9419 10.6533 0 2.9419 2.9418 2.9419 7.7115 0 10.6533z" stroke="currentColor" fill="none" fill-rule="evenodd" stroke-linecap="round" stroke-linejoin="round"></path></svg><span class="DocSearch-Button-Placeholder">Search</span></span><span class="DocSearch-Button-Keys"></span></button></div></div></div><div role="presentation" class="navbar-sidebar__backdrop"></div></nav><div id="docusaurus_skipToContent_fallback" class="main-wrapper mainWrapper_z2l0 docsWrapper_BCFX"><button aria-label="Scroll back to top" class="clean-btn theme-back-to-top-button backToTopButton_sjWU" type="button"></button><div class="docPage__5DB"><aside class="theme-doc-sidebar-container docSidebarContainer_b6E3"><div class="sidebar_njMd"><nav class="menu thin-scrollbar menu_SIkG menuWithAnnouncementBar_GW3s"><ul class="theme-doc-sidebar-menu menu__list"><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item IdentityNow"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--active" href="/idn/docs">IdentityNow</a></div><ul style="display:block;overflow:visible;height:auto" class="menu__list"><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-2 menu__list-item transforms"><div class="menu__list-item-collapsible menu__list-item-collapsible--active"><a class="menu__link menu__link--sublist menu__link--active" aria-current="page" aria-expanded="true" tabindex="0" href="/idn/docs/transforms">Transforms</a><button aria-label="Toggle the collapsible sidebar category 'Transforms'" type="button" class="clean-btn menu__caret"></button></div><ul style="display:block;overflow:visible;height:auto" class="menu__list"><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-3 menu__list-item menu__list-item--collapsed transforms"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist" aria-expanded="false" tabindex="0" href="/idn/docs/transforms/guides">Guides</a><button aria-label="Toggle the collapsible sidebar category 'Guides'" type="button" class="clean-btn menu__caret"></button></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-3 menu__list-item menu__list-item--collapsed operations"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist" aria-expanded="false" tabindex="0" href="/idn/docs/transforms/operations">Operations</a><button aria-label="Toggle the collapsible sidebar category 'Operations'" type="button" class="clean-btn menu__caret"></button></div></li></ul></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-2 menu__list-item menu__list-item--collapsed rules"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist" aria-expanded="false" tabindex="0" href="/idn/docs/rules">Rules</a><button aria-label="Toggle the collapsible sidebar category 'Rules'" type="button" class="clean-btn menu__caret"></button></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-2 menu__list-item menu__list-item--collapsed eventTriggers"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist" aria-expanded="false" tabindex="0" href="/idn/docs/event-triggers">Event Triggers</a><button aria-label="Toggle the collapsible sidebar category 'Event Triggers'" type="button" class="clean-btn menu__caret"></button></div></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item saasConfiguration"><a class="menu__link" tabindex="0" href="/idn/docs/saas-configuration">SaaS Configuration</a></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-2 menu__list-item menu__list-item--collapsed saasConnectivity"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist" aria-expanded="false" tabindex="0" href="/idn/docs/saas-connectivity">SaaS Connectivity</a><button aria-label="Toggle the collapsible sidebar category 'SaaS Connectivity'" type="button" class="clean-btn menu__caret"></button></div></li></ul></li></ul></nav><button type="button" title="Collapse sidebar" aria-label="Collapse sidebar" class="button button--secondary button--outline collapseSidebarButton_PEFL"><svg width="20" height="20" aria-hidden="true" class="collapseSidebarButtonIcon_kv0_"><g fill="#7a7a7a"><path d="M9.992 10.023c0 .2-.062.399-.172.547l-4.996 7.492a.982.982 0 01-.828.454H1c-.55 0-1-.453-1-1 0-.2.059-.403.168-.551l4.629-6.942L.168 3.078A.939.939 0 010 2.528c0-.548.45-.997 1-.997h2.996c.352 0 .649.18.828.45L9.82 9.472c.11.148.172.347.172.55zm0 0"></path><path d="M19.98 10.023c0 .2-.058.399-.168.547l-4.996 7.492a.987.987 0 01-.828.454h-3c-.547 0-.996-.453-.996-1 0-.2.059-.403.168-.551l4.625-6.942-4.625-6.945a.939.939 0 01-.168-.55 1 1 0 01.996-.997h3c.348 0 .649.18.828.45l4.996 7.492c.11.148.168.347.168.55zm0 0"></path></g></svg></button></div></aside><main class="docMainContainer_gTbr"><div class="container padding-top--md padding-bottom--lg"><div class="row"><div class="col docItemCol_BDYx"><div class="docItemContainer_oq1c"><article><nav class="theme-doc-breadcrumbs breadcrumbsContainer_Z_bl" aria-label="Breadcrumbs"><ul class="breadcrumbs" itemscope="" itemtype="https://schema.org/BreadcrumbList"><li class="breadcrumbs__item"><a aria-label="Home page" class="breadcrumbs__link" href="/"><svg viewBox="0 0 24 24" class="breadcrumbHomeIcon_OVgt"><path d="M10 19v-5h4v5c0 .55.45 1 1 1h3c.55 0 1-.45 1-1v-7h1.7c.46 0 .68-.57.33-.87L12.67 3.6c-.38-.34-.96-.34-1.34 0l-8.36 7.53c-.34.3-.13.87.33.87H5v7c0 .55.45 1 1 1h3c.55 0 1-.45 1-1z" fill="currentColor"></path></svg></a></li><li itemscope="" itemprop="itemListElement" itemtype="https://schema.org/ListItem" class="breadcrumbs__item"><a class="breadcrumbs__link" itemprop="item" href="/idn/docs"><span itemprop="name">IdentityNow</span></a><meta itemprop="position" content="1"></li><li itemscope="" itemprop="itemListElement" itemtype="https://schema.org/ListItem" class="breadcrumbs__item breadcrumbs__item--active"><span class="breadcrumbs__link" itemprop="name">Transforms</span><meta itemprop="position" content="2"></li></ul></nav><div class="tocCollapsible_ETCw theme-doc-toc-mobile tocMobile_ITEo"><button type="button" class="clean-btn tocCollapsibleButton_TO0P">On this page</button></div><div class="theme-doc-markdown markdown"><header><h1>Transforms</h1></header><div class="row"><div class="col col--12"><p>In SailPoint's cloud services, transforms allow you to manipulate attribute values while aggregating from or provisioning to a source. This guide provides a reference to help you understand the purpose, configuration, and usage of transforms.</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="what-are-transforms">What Are Transforms<a class="hash-link" href="#what-are-transforms" title="Direct link to heading"></a></h2><p>Transforms are configurable objects that define easy ways to manipulate attribute data without requiring you to write code. Transforms are configurable building blocks with sets of inputs and outputs:</p><div align="center"></div><p>Because there is no code to write, an administrator can configure these by using a JSON object structure and uploading them into IdentityNow using <a href="/idn/api/v3/transforms">IdentityNow's Transform REST APIs</a>.</p><div class="theme-admonition theme-admonition-info alert alert--info admonition_LlT9"><div class="admonitionHeading_tbUL"><span class="admonitionIcon_kALy"><svg viewBox="0 0 14 16"><path fill-rule="evenodd" d="M7 2.3c3.14 0 5.7 2.56 5.7 5.7s-2.56 5.7-5.7 5.7A5.71 5.71 0 0 1 1.3 8c0-3.14 2.56-5.7 5.7-5.7zM7 1C3.14 1 0 4.14 0 8s3.14 7 7 7 7-3.14 7-7-3.14-7-7-7zm1 3H6v5h2V4zm0 6H6v2h2v-2z"></path></svg></span>info</div><div class="admonitionContent_S0QG"><p>Sometimes transforms are referred to as Seaspray, the codename for transforms. IdentityNow Transforms and Seaspray are essentially the same.</p></div></div><h2 class="anchor anchorWithStickyNavbar_LWe7" id="how-transforms-work">How Transforms Work<a class="hash-link" href="#how-transforms-work" title="Direct link to heading"></a></h2><p>Transforms typically have an input(s) and output(s). The way the transformation occurs mainly depends on the type of transform. Refer to <a href="/idn/docs/transforms/operations">Operations in IdentityNow Transforms</a> for more information.</p><p>For example, a <a href="/idn/docs/transforms/operations/lower">Lower transform</a> transforms any input text strings into lowercase versions as output. So if the input were <code>Foo</code>, the lowercase output of the transform would be <code>foo</code>:</p><div align="center"></div><p>There are other types of transforms too. For example, an <a href="/idn/docs/transforms/operations/e164-phone">E.164 Phone transform</a> transforms any input phone number strings into an E.164 formatted version as output. So if the input were <code>(512) 346-2000</code>, the output would be <code>+1 5123462000</code>:</p><div align="center"></div><h3 class="anchor anchorWithStickyNavbar_LWe7" id="multiple-transform-inputs">Multiple Transform Inputs<a class="hash-link" href="#multiple-transform-inputs" title="Direct link to heading"></a></h3><p>In the previous examples, each transform had a single input. Some transforms can specify more than one input. For example, the <a href="/idn/docs/transforms/operations/concatenation">Concat transform</a> concatenates one or more strings together. If <code>Foo</code> and <code>Bar</code> were inputs, the transformed output would be <code>FooBar</code>:</p><div align="center"></div><h3 class="anchor anchorWithStickyNavbar_LWe7" id="complex-nested-transforms">Complex Nested Transforms<a class="hash-link" href="#complex-nested-transforms" title="Direct link to heading"></a></h3><p>For more complex use cases, a single transform may not be enough. It is possible to link several transforms together. IdentityNow calls these 'nested' transforms because they are transform objects within other transform objects.</p><p>An example of a nested transform would be using the previous <a href="/idn/docs/transforms/operations/concatenation">Concat transform</a> and passing its output as an input to another <a href="/idn/docs/transforms/operations/lower">Lower transform</a>. If the inputs <code>Foo</code> and <code>Bar</code> were passed into the transforms, the ultimate output would be <code>foobar</code>, concatenated and in lowercase.</p><div align="center"></div><p>There is no hard limit for the number of transforms that can be nested. However, the more transforms applied, the more complex the nested transform will be, which can make it difficult to understand and maintain.</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="configuring-transform-behavior">Configuring Transform Behavior<a class="hash-link" href="#configuring-transform-behavior" title="Direct link to heading"></a></h2><p>Some transforms can specify an attributes map that configures the transform behavior. Each transform type has different configuration attributes and different uses. To better understand what is configurable per transform, refer to the Transform Types section and the associated Transform guide(s) that cover each transform.</p><p>It is possible to extend the earlier complex nested transform example. If a Replace transform, which replaces certain strings with replacement text, were added, and the transform were configured to replace <code>Bar</code> with <code>Baz</code> the output would be added as an input to the Concat and Lower transforms:</p><div align="center"></div><p>The output of the Replace transform would be <code>Baz</code> which is then passed as an input to the Concat transform along with <code>Foo</code> producing an output of <code>FooBaz</code>. This is then passed as an input into the Lower transform, producing a final output of <code>foobaz</code>.</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="transform-syntax">Transform Syntax<a class="hash-link" href="#transform-syntax" title="Direct link to heading"></a></h2><p>Transforms are JSON objects. Prior to this, the transforms have been shown as flows of building blocks to help illustrate basic transform ideas. However at the simplest level, a transform looks like this:</p><div class="language-json codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-json codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token property" style="color:#36acaa">"name"</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"Lowercase Department"</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token property" style="color:#36acaa">"type"</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"lower"</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token property" style="color:#36acaa">"attributes"</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token property" style="color:#36acaa">"transform-attribute-1"</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"attribute-1-value"</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token property" style="color:#36acaa">"transform-attribute-2"</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"attribute-2-value"</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>There are three main components of a transform object:</p><ol><li><p><code>name</code> - This specifies the name of the transform. It refers to a transform in the IdentityNow API or User Interface (UI). Only provide a name on the root-level transform. Nested transforms do not have names.</p></li><li><p><code>type</code> - This specifies the transform type, which ultimately determines the transform's behavior.</p></li><li><p><code>attributes</code> - This specifies any attributes or configurations for controlling how the transform works. As mentioned earlier in <a href="#configuring-transform-behavior">Configuring Transform Behavior</a>, each transform type has different sets of attributes available.</p></li></ol><div class="theme-admonition theme-admonition-caution alert alert--warning admonition_LlT9"><div class="admonitionHeading_tbUL"><span class="admonitionIcon_kALy"><svg viewBox="0 0 16 16"><path fill-rule="evenodd" d="M8.893 1.5c-.183-.31-.52-.5-.887-.5s-.703.19-.886.5L.138 13.499a.98.98 0 0 0 0 1.001c.193.31.53.501.886.501h13.964c.367 0 .704-.19.877-.5a1.03 1.03 0 0 0 .01-1.002L8.893 1.5zm.133 11.497H6.987v-2.003h2.039v2.003zm0-3.004H6.987V5.987h2.039v4.006z"></path></svg></span>caution</div><div class="admonitionContent_S0QG"><p>When uploading a transform to IdentityNow it cannot exceed 400KB.</p></div></div><h2 class="anchor anchorWithStickyNavbar_LWe7" id="template-engine">Template Engine<a class="hash-link" href="#template-engine" title="Direct link to heading"></a></h2><p>Seaspray ships with the Apache Velocity template engine that allows a transform to reference, transform, and render values passed into the transform context. Every string value in a Seaspray transform can contain templated text and will run through the template engine.</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="example">Example<a class="hash-link" href="#example" title="Direct link to heading"></a></h3><p>In the following string, the text <code>$firstName</code> is replaced by the value of firstName in the template context. The same goes for <code>$lastName</code>.</p><p>If $firstName=John and $lastName=Doe then the string <code>$firstName.$lastName</code>would render as<code>John.Doe</code>.</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="identity-attribute-context">Identity Attribute Context<a class="hash-link" href="#identity-attribute-context" title="Direct link to heading"></a></h3><p>The following variables are available to the Apache Velocity template engine when a transform is used to source an identity attribute.</p><table><thead><tr><th>Variable</th><th>Type</th><th>Description</th></tr></thead><tbody><tr><td>identity</td><td>sailpoint.object.Identity</td><td>This is the identity the attribute promotion is performed on.</td></tr><tr><td>attributeDefinition</td><td>sailpoint.object.ObjectAttribute</td><td>This is the definition of the attribute being promoted.</td></tr><tr><td>oldValue</td><td>Object</td><td>This is the attribute's previous value.</td></tr></tbody></table><h3 class="anchor anchorWithStickyNavbar_LWe7" id="account-profile-context">Account Profile Context<a class="hash-link" href="#account-profile-context" title="Direct link to heading"></a></h3><p>The following variables are available to the Apache Velocity template engine when a transform is used in an account profile.</p><table><thead><tr><th>Variable</th><th>Type</th><th>Description</th></tr></thead><tbody><tr><td>field</td><td>sailpoint.object.Field</td><td>This is the field definition backing the account profile attribute.</td></tr><tr><td>identity</td><td>sailpoint.object.Identity</td><td>This is the identity the account profile is generating for.</td></tr><tr><td>application</td><td>sailpoint.object.Application</td><td>This is the application backing the source that owns the account profile.</td></tr><tr><td>current</td><td>Object</td><td>This is the attribute's current value.</td></tr></tbody></table><h2 class="anchor anchorWithStickyNavbar_LWe7" id="implicit-vs-explicit-input">Implicit vs Explicit Input<a class="hash-link" href="#implicit-vs-explicit-input" title="Direct link to heading"></a></h2><p>A special configuration attribute available to all transforms is input. If the input attribute is not specified, this is referred to as implicit input, and the system determines the input based on what is configured. If the input attribute is specified, then this is referred to as explicit input, and the system's input is ignored in favor of whatever the transform explicitly specifies. A good way to understand this concept is to walk through an example. Imagine that IdentityNow has the following:</p><ul><li>An account on Source 1 with department set to <code>Services</code>.</li><li>An account on Source 2 with department set to <code>Engineering</code>.</li></ul><p>The following two examples explain how a transform with an implicit or explicit input would work with those sources.</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="implicit-input">Implicit Input<a class="hash-link" href="#implicit-input" title="Direct link to heading"></a></h3><p>An identity profile is configured the following way:</p><p><img loading="lazy" alt="Configuring Transform Behavior 2" src="/assets/images/configuring_transform_behavior_2-573ec9d4460bb7dc496a2ba9366fa386.png" width="1157" height="162" class="img_ev3q"></p><p>As an example, the "Lowercase Department" transform being used is written the following way:</p><div class="language-json codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-json codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token property" style="color:#36acaa">"name"</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"Lowercase Department"</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token property" style="color:#36acaa">"type"</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"lower"</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token property" style="color:#36acaa">"attributes"</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>Notice that the attributes has no input. This is an implicit input example. The transform uses the input provided by the attribute you mapped on the identity profile.</p><p>In this example, the transform would produce <code>services</code> when the source is aggregated because Source 1 is providing a department of <code>Services</code> which the transform then lowercases.</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="explicit-input">Explicit Input<a class="hash-link" href="#explicit-input" title="Direct link to heading"></a></h3><p>As an example, the <code>Lowercase Department</code> has been changed the following way:</p><div class="language-json codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-json codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token property" style="color:#36acaa">"name"</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"Lowercase Department"</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token property" style="color:#36acaa">"type"</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"lower"</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token property" style="color:#36acaa">"attributes"</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token property" style="color:#36acaa">"input"</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token property" style="color:#36acaa">"type"</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"accountAttribute"</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token property" style="color:#36acaa">"attributes"</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token property" style="color:#36acaa">"attributeName"</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"department"</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token property" style="color:#36acaa">"sourceName"</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"Source 2"</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>Notice that there is an <code>input</code> in the attributes. This is an explicit input example. The transform uses the value Source 2 provides for the <code>department</code> attribute, ignoring your configuration in the identity profile.</p><p>In this example, the transform would produce "engineering" because Source 2 is providing a department of <code>Engineering</code> which the transform then lowercases. Though the system is still providing an implicit input of Source 1's department attribute, the transform ignores this and uses the explicit input specified as Source 2's department attribute.</p><div class="theme-admonition theme-admonition-tip alert alert--success admonition_LlT9"><div class="admonitionHeading_tbUL"><span class="admonitionIcon_kALy"><svg viewBox="0 0 12 16"><path fill-rule="evenodd" d="M6.5 0C3.48 0 1 2.19 1 5c0 .92.55 2.25 1 3 1.34 2.25 1.78 2.78 2 4v1h5v-1c.22-1.22.66-1.75 2-4 .45-.75 1-2.08 1-3 0-2.81-2.48-5-5.5-5zm3.64 7.48c-.25.44-.47.8-.67 1.11-.86 1.41-1.25 2.06-1.45 3.23-.02.05-.02.11-.02.17H5c0-.06 0-.13-.02-.17-.2-1.17-.59-1.83-1.45-3.23-.2-.31-.42-.67-.67-1.11C2.44 6.78 2 5.65 2 5c0-2.2 2.02-4 4.5-4 1.22 0 2.36.42 3.22 1.19C10.55 2.94 11 3.94 11 5c0 .66-.44 1.78-.86 2.48zM4 14h5c-.23 1.14-1.3 2-2.5 2s-2.27-.86-2.5-2z"></path></svg></span>tip</div><div class="admonitionContent_S0QG"><p>This is also an example of a nested transform.</p></div></div><h3 class="anchor anchorWithStickyNavbar_LWe7" id="account-transforms">Account Transforms<a class="hash-link" href="#account-transforms" title="Direct link to heading"></a></h3><p>Account attribute transforms are configured on the account create profiles. They determine the templates for new accounts created during provisioning events.</p><div class="theme-admonition theme-admonition-caution alert alert--warning admonition_LlT9"><div class="admonitionHeading_tbUL"><span class="admonitionIcon_kALy"><svg viewBox="0 0 16 16"><path fill-rule="evenodd" d="M8.893 1.5c-.183-.31-.52-.5-.887-.5s-.703.19-.886.5L.138 13.499a.98.98 0 0 0 0 1.001c.193.31.53.501.886.501h13.964c.367 0 .704-.19.877-.5a1.03 1.03 0 0 0 .01-1.002L8.893 1.5zm.133 11.497H6.987v-2.003h2.039v2.003zm0-3.004H6.987V5.987h2.039v4.006z"></path></svg></span>caution</div><div class="admonitionContent_S0QG"><p>These transforms are configured separately from the transforms applied via the identity profile mappings tab.</p></div></div><h4 class="anchor anchorWithStickyNavbar_LWe7" id="configuration">Configuration<a class="hash-link" href="#configuration" title="Direct link to heading"></a></h4><p>These can be configured in IdentityNow by going to <strong>Admin</strong> > <strong>Sources</strong> > (A Source) > <strong>Accounts</strong> (tab) > <strong>Create Account</strong>.</p><p>The available options on this page are constructed as transforms behind the scenes. For example, the identity attribute mapping choice is saved as an <a href="/idn/docs/transforms/operations/identity-attribute">identity attribute transform</a> definition within the saved create profile.</p><p>These can also be configured with IdentityNow REST APIs. You can define any kind of transform you want for any field in the create profile policy, to calculate account attributes in ways beyond what the UI offers. See <a href="/idn/docs/transforms/guides/transforms-in-provisioning-policies">Transforms in Provisioning Policies</a>.</p><p>For more information on the IdentityNow REST API endpoints used to managed transform objects in APIs, refer to <a href="/idn/api/v3/transforms">IdentityNow Transform REST APIs</a>.</p><div class="theme-admonition theme-admonition-tip alert alert--success admonition_LlT9"><div class="admonitionHeading_tbUL"><span class="admonitionIcon_kALy"><svg viewBox="0 0 12 16"><path fill-rule="evenodd" d="M6.5 0C3.48 0 1 2.19 1 5c0 .92.55 2.25 1 3 1.34 2.25 1.78 2.78 2 4v1h5v-1c.22-1.22.66-1.75 2-4 .45-.75 1-2.08 1-3 0-2.81-2.48-5-5.5-5zm3.64 7.48c-.25.44-.47.8-.67 1.11-.86 1.41-1.25 2.06-1.45 3.23-.02.05-.02.11-.02.17H5c0-.06 0-.13-.02-.17-.2-1.17-.59-1.83-1.45-3.23-.2-.31-.42-.67-.67-1.11C2.44 6.78 2 5.65 2 5c0-2.2 2.02-4 4.5-4 1.22 0 2.36.42 3.22 1.19C10.55 2.94 11 3.94 11 5c0 .66-.44 1.78-.86 2.48zM4 14h5c-.23 1.14-1.3 2-2.5 2s-2.27-.86-2.5-2z"></path></svg></span>tip</div><div class="admonitionContent_S0QG"><p>For details about authentication against REST APIs, refer to the <a href="/idn/api/authentication">authentication docs</a>.</p></div></div><h4 class="anchor anchorWithStickyNavbar_LWe7" id="testing-transforms-on-account-create">Testing Transforms on Account Create<a class="hash-link" href="#testing-transforms-on-account-create" title="Direct link to heading"></a></h4><p>To test a transform for an account create profile, you must generate a new account creation provisioning event. This involves granting access to an identity who does not already have an account on this source; an account is created as a byproduct of the access assignment. This can be initiated with access request or even role assignment.</p><h4 class="anchor anchorWithStickyNavbar_LWe7" id="applying-transforms-on-account-create">Applying Transforms on Account Create<a class="hash-link" href="#applying-transforms-on-account-create" title="Direct link to heading"></a></h4><p>Once the transforms are saved to the account profile, they are automatically applied for any subsequent provisioning events.</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="testing-transforms">Testing Transforms<a class="hash-link" href="#testing-transforms" title="Direct link to heading"></a></h2><p><strong>Testing Transforms in Identity Profile Mappings</strong></p><p>To test a transform for identity data, go to <strong>Identities</strong> > <strong>Identity Profiles</strong> and select <strong>Mappings</strong>. Select the transform to map one of your identity attributes, select <strong>Save</strong>, and preview your identity data.</p><p><strong>Testing Transforms for Account Attributes</strong></p><p>To test a transform for account data, you must provision a new account on that source. For example, you can create an access request that would result in a new account on that source, or you can assign a new role.</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="transform-best-practices">Transform Best Practices<a class="hash-link" href="#transform-best-practices" title="Direct link to heading"></a></h2><ul><li><p><strong>Designing Complex Transforms</strong> - Start with small transform <em>building blocks</em> and add to them. It can be helpful to diagram out the inputs and outputs if you are using many transforms.</p></li><li><p><strong>JSON Editor</strong> - Because transforms are JSON objects, it is recommended that you use a good JSON editor. Atom, Sublime Text, and Microsoft Code work well because they have JSON formatting and plugins that can do JSON validation, completion, formatting, and folding. This is very useful for large complex JSON objects.</p></li><li><p><strong>Leverage Examples</strong> - Many implementations use similar sets of transforms, and a lot of common solutions can be found in examples. Feel free to share your own transform examples on the <a href="https://developer.sailpoint.com/discuss" target="_blank" rel="noopener noreferrer">Developer Community forum</a>!</p></li><li><p><strong>Same Problem, Multiple Solutions</strong> - There can be multiple ways to solve the same problem, but use the solution that makes the most sense to your implementation and is easiest to administer and understand.</p></li><li><p><strong>Encapsulate Repetition</strong> - If you are copying and pasting the same transforms over and over, it can be useful to make a transform a standalone transform and make other transforms reference it by using the reference type.</p></li><li><p><strong>Plan for Bad Data</strong> - Data will not always be perfect, so plan for data failures and try to ensure transforms still produce workable results in case data is missing, malformed, or there are incorrect values.</p></li></ul><h2 class="anchor anchorWithStickyNavbar_LWe7" id="transforms-vs-rules">Transforms vs. Rules<a class="hash-link" href="#transforms-vs-rules" title="Direct link to heading"></a></h2><p>Sometimes it can be difficult to decide when to implement a transform and when to implement a rule. Both transforms and rules can calculate values for identity or account attributes.</p><p>Despite their functional similarity, transforms and rules have very different implementations. Transforms are JSON-based configurations, editable with IdentityNow's transform REST APIs. Rules are implemented with code (typically <a href="https://github.com/beanshell/beanshell" target="_blank" rel="noopener noreferrer">BeanShell</a>, a Java-like syntax), so they must follow the <a href="https://community.sailpoint.com/docs/DOC-12122" target="_blank" rel="noopener noreferrer">IdentityNow Rule Guidelines</a>, and they require SailPoint to be reviewed and installed into the tenant. Rules, however, can do things that transforms cannot in some cases.</p><p>Because transforms have easier and more accessible implementations, they are generally recommended. With transforms, any IdentityNow administrator can view, create, edit, and delete transforms directly with REST API without SailPoint involvement.</p><p>If something cannot be done with a transform, then consider using a rule. When you are transitioning from a transform to a rule, you must take special consideration when you decide where the rule executes.</p><ul><li><p>If you are calculating identity attributes, you can use <a href="https://community.sailpoint.com/docs/DOC-12616" target="_blank" rel="noopener noreferrer">Identity Attribute rules</a> instead of identity transforms.</p></li><li><p>If you are calculating account attributes (during provisioning), you can use <a href="https://community.sailpoint.com/docs/DOC-12645" target="_blank" rel="noopener noreferrer">Attribute Generator rules</a> instead of account transforms.</p></li><li><p>All rules you build must follow the <a href="https://community.sailpoint.com/docs/DOC-12122" target="_blank" rel="noopener noreferrer">IdentityNow Rule Guidelines</a>.</p></li></ul><p>If you use a rule, make note of it for administrative purposes. The best practice is to check in these types of artifacts into some sort of version control (e.g., GitHub, et. Al.) for records.</p></div></div></div><div class="col col--12"><footer class="theme-doc-footer docusaurus-mt-lg"><div class="theme-doc-footer-tags-row row margin-bottom--sm"><div class="col"><b>Tags:</b><ul class="tags_jXut padding--none margin-left--sm"><li class="tag_QGVx"><a class="tag_zVej tagRegular_sFm0" href="/idn/tags/transforms">Transforms</a></li></ul></div></div><div class="theme-doc-footer-edit-meta-row row"><div class="col"><a href="https://github.com/sailpoint-oss/developer-community-site/edit/main/products/idn/docs/identity-now/transforms/index.md" target="_blank" rel="noreferrer noopener" class="theme-edit-this-page"><svg fill="currentColor" height="20" width="20" viewBox="0 0 40 40" class="iconEdit_Z9Sw" aria-hidden="true"><g><path d="m34.5 11.7l-3 3.1-6.3-6.3 3.1-3q0.5-0.5 1.2-0.5t1.1 0.5l3.9 3.9q0.5 0.4 0.5 1.1t-0.5 1.2z m-29.5 17.1l18.4-18.5 6.3 6.3-18.4 18.4h-6.3v-6.2z"></path></g></svg>Something wrong? Click here to edit this page.</a></div><div class="col lastUpdated_vwxv"><span class="theme-last-updated">Last updated<!-- --> on <b><time datetime="2023-07-24T14:01:45.000Z">Jul 24, 2023</time></b> by <b>Colin McKibben</b></span></div></div></footer></div></article><div class="col col--12"><nav class="pagination-nav docusaurus-mt-lg" aria-label="Docs pages navigation"><a class="pagination-nav__link pagination-nav__link--prev" href="/idn/docs"><div class="pagination-nav__sublabel">Previous</div><div class="pagination-nav__label">Introduction</div></a><a class="pagination-nav__link pagination-nav__link--next" href="/idn/docs/transforms/guides"><div class="pagination-nav__sublabel">Next</div><div class="pagination-nav__label">Guides</div></a></nav></div></div></div><div class="col col--3"><div class="tableOfContents_bqdL thin-scrollbar theme-doc-toc-desktop"><ul class="table-of-contents table-of-contents__left-border"><li><a href="#what-are-transforms" class="table-of-contents__link toc-highlight">What Are Transforms</a></li><li><a href="#how-transforms-work" class="table-of-contents__link toc-highlight">How Transforms Work</a><ul><li><a href="#multiple-transform-inputs" class="table-of-contents__link toc-highlight">Multiple Transform Inputs</a></li><li><a href="#complex-nested-transforms" class="table-of-contents__link toc-highlight">Complex Nested Transforms</a></li></ul></li><li><a href="#configuring-transform-behavior" class="table-of-contents__link toc-highlight">Configuring Transform Behavior</a></li><li><a href="#transform-syntax" class="table-of-contents__link toc-highlight">Transform Syntax</a></li><li><a href="#template-engine" class="table-of-contents__link toc-highlight">Template Engine</a><ul><li><a href="#example" class="table-of-contents__link toc-highlight">Example</a></li><li><a href="#identity-attribute-context" class="table-of-contents__link toc-highlight">Identity Attribute Context</a></li><li><a href="#account-profile-context" class="table-of-contents__link toc-highlight">Account Profile Context</a></li></ul></li><li><a href="#implicit-vs-explicit-input" class="table-of-contents__link toc-highlight">Implicit vs Explicit Input</a><ul><li><a href="#implicit-input" class="table-of-contents__link toc-highlight">Implicit Input</a></li><li><a href="#explicit-input" class="table-of-contents__link toc-highlight">Explicit Input</a></li><li><a href="#account-transforms" class="table-of-contents__link toc-highlight">Account Transforms</a></li></ul></li><li><a href="#testing-transforms" class="table-of-contents__link toc-highlight">Testing Transforms</a></li><li><a href="#transform-best-practices" class="table-of-contents__link toc-highlight">Transform Best Practices</a></li><li><a href="#transforms-vs-rules" class="table-of-contents__link toc-highlight">Transforms vs. Rules</a></li></ul></div></div></div></div></main></div></div><footer class="footer"><div class="container container-fluid"><div class="row footer__links"><div class="col footer__col"><div class="footer__title">IdentityNow</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/idn/api/getting-started">Your First API Call</a></li><li class="footer__item"><a class="footer__link-item" href="/idn/docs/transforms/guides/your-first-transform">Build A Transform</a></li><li class="footer__item"><a class="footer__link-item" href="/idn/docs/saas-connectivity">Build A SaaS Connector</a></li><li class="footer__item"><a href="https://university.sailpoint.com/Saba/Web_spf/NA10P1PRD075/guest/categorydetail/categ000000000003041/true/xxemptyxx/" target="_blank" rel="noopener noreferrer" class="footer__link-item">Get Certified<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div><div class="col footer__col"><div class="footer__title">IdentityIQ</div><ul class="footer__items clean-list"><li class="footer__item"><a href="https://documentation.sailpoint.com/identityiq/help/plugins/identityiq_plugins.html" target="_blank" rel="noopener noreferrer" class="footer__link-item">Build A Plugin</a></li><li class="footer__item"><a href="https://university.sailpoint.com/Saba/Web_spf/NA10P1PRD075/guest/categorydetail/categ000000000003042/true/xxemptyxx/" target="_blank" rel="noopener noreferrer" class="footer__link-item">Get Certified<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div><div class="col footer__col"><div class="footer__title">Community</div><ul class="footer__items clean-list"><li class="footer__item"><a href="https://developer.sailpoint.com/discuss" target="_blank" rel="noopener noreferrer" class="footer__link-item">Discuss</a></li><li class="footer__item"><a href="https://developer-sailpoint.ideas.aha.io/" target="_blank" rel="noopener noreferrer" class="footer__link-item">Submit an Idea</a></li><li class="footer__item"><a href="https://developer.sailpoint.com/discuss/new-message?groupname=developer_relations" target="_blank" rel="noopener noreferrer" class="footer__link-item">Contact Our Team</a></li></ul></div><div class="col footer__col"><div class="footer__title">More</div><ul class="footer__items clean-list"><li class="footer__item"><a href="https://medium.com/sailpointtechblog" target="_blank" rel="noopener noreferrer" class="footer__link-item">Engineering Blog<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a href="https://github.com/sailpoint-oss" target="_blank" rel="noopener noreferrer" class="footer__link-item">GitHub<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a href="https://twitter.com/sailpoint" target="_blank" rel="noopener noreferrer" class="footer__link-item">Twitter<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div><div class="col footer__col"><div class="footer__title">Company</div><ul class="footer__items clean-list"><li class="footer__item"><a href="https://www.sailpoint.com/company/" target="_blank" rel="noopener noreferrer" class="footer__link-item">The SailPoint Story</a></li><li class="footer__item"><a href="https://www.sailpoint.com/company/diversity-inclusion-and-belonging/" target="_blank" rel="noopener noreferrer" class="footer__link-item">The SailPoint Way</a></li><li class="footer__item"><a href="https://www.sailpoint.com/company/#h-our-leadership" target="_blank" rel="noopener noreferrer" class="footer__link-item">Leadership Team</a></li><li class="footer__item"><a href="https://www.sailpoint.com/partners/become-partner/" target="_blank" rel="noopener noreferrer" class="footer__link-item">Become A Partner</a></li></ul></div><div class="col footer__col"><div class="footer__title">Legal</div><ul class="footer__items clean-list"><li class="footer__item"><a href="https://developer.sailpoint.com/discuss/tos" target="_blank" rel="noopener noreferrer" class="footer__link-item">Terms & Conditions</a></li></ul></div></div><div class="footer__bottom text--center"><div class="margin-bottom--sm"><a href="https://developer.sailpoint.com" rel="noopener noreferrer" class="footerLogoLink_BH7S"><img src="/img/SailPoint-Developer-Community-Lockup.png" alt="SailPoint Developer Community Logo" class="themedImage_ToTc themedImage--light_HNdA footer__logo"><img src="/img/SailPoint-Developer-Community-Inverse-Lockup.png" alt="SailPoint Developer Community Logo" class="themedImage_ToTc themedImage--dark_i4oU footer__logo"></a></div><div class="footer__copyright">Copyright © 2023 SailPoint Technologies, Inc. All Rights Reserved.</div></div></div></footer></div>
|
||
<script src="/assets/js/runtime~main.94e2c36e.js"></script>
|
||
<script src="/assets/js/main.ea79317c.js"></script>
|
||
</body>
|
||
</html> |