BuildMap Rule
Overview
This rule manipulates raw input data provided by the rows and columns in a file and builds a map from the incoming data. Use this rule to create a new value by combining two columns together. For example, if one column was access
and another permissions
you could combine these together to create an entitlement admin-read
.
This rule runs in the cloud, but it's really a connector rule because it executes against the DelimitedFileConnector.
Execution
- Cloud Execution - This rule executes in the Identity Security Cloud cloud, and has read-only access to the records from the Delimited File being imported. However, it doesn't have access to on-premise sources or connectors.
- Logging - Logging statements are currently only visible to SailPoint personnel.
Input
Argument | Type | Purpose |
---|---|---|
cols | java.util.List | Ordered list of the column names from the file’s header records or specified columns list. |
record | java.util.List | Ordered list of the values for the current record, parsed based on the specified delimiter. |
application | System.Collections.Hashtable | Map of the application configuration. |
schema | sailpoint.object.Schema | Reference to the schema object for the delimited file source being read. |
Connector Rule JSON Template
This template is used for the connector rule development process which is supported for the delimited file connector. Note the BeanShell code is escaped in the $.sourceCode.script attribute. The example, unescaped and formatted for readability, follows.
{
"name": "Sample BuildMapRule",
"type": "BuildMap",
"signature": {
"input": [
{
"name": "cols",
"description": "An ordered list of the column names from the file’s header record or specified Columns list.",
"type": null
},
{
"name": "record",
"description": "An ordered list of the values for the current record (parsed based on the specified delimiter)",
"type": null
},
{
"name": "application",
"description": "The source object sent to the connector from IdentityNow.",
"type": null
},
{
"name": "schema",
"description": "A reference to the Schema object for the Delimited File source being read.",
"type": null
}
],
"output": null
},
"sourceCode": {
"version": "1.0",
"script": "import sailpoint.connector.DelimitedFileConnector;\n\nMap map = DelimitedFileConnector.defaultBuildMap( cols, record );\nString access = (String) map.get( \"access\" );\nString permission = (String) map.get( \"permission\" );\n\nif ( access != null && permission != null ) {\n map.remove(\"access\");\n map.remove(\"permission\");\n map.put(\"access\", access + \" - \" + permission);\n}\nreturn map;"
},
"attributes": {
"sourceVersion": "1.0"
},
"description": "This basic rule performs the combines 2 values into a single attribute."
}
Connector Rule Example
This is the unescaped BeanShell code from the $.sourceCode.script attribute above.
import sailpoint.connector.DelimitedFileConnector;
Map map = DelimitedFileConnector.defaultBuildMap( cols, record );
String access = (String) map.get( "access" );
String permission = (String) map.get( "permission" );
if ( access != null && permission != null ) {
map.remove("access");
map.remove("permission");
map.put("access", access + " - " + permission);
}
return map;
Cloud Rule XML Template
This template is used for the cloud rule deployement process which is NOT requried for buildmap rules but is still supported.
<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE Rule PUBLIC "sailpoint.dtd" "sailpoint.dtd">
<Rule name="Example Rule" type="BuildMap">
<Description>Describe your rule here.</Description>
<Signature>
<Inputs>
<Argument name="log"/>
<Argument name="cols" type="List"/>
<Argument name="record" type="List"/>
<Argument name="application"/>
<Argument name="schema"/>
</Inputs>
</Signature>
<Source><![CDATA[
// Add your logic here.
]]></Source>
</Rule>
Cloud Rule Example
<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE Rule PUBLIC "sailpoint.dtd" "sailpoint.dtd">
<Rule name="Example Rule" type="BuildMap">
<Description>This basic rule performs the combines 2 values into a single attribute.</Description>
<Signature>
<Inputs>
<Argument name="log"/>
<Argument name="cols" type="List"/>
<Argument name="record" type="List"/>
<Argument name="application"/>
<Argument name="schema"/>
</Inputs>
</Signature>
<Source><![CDATA[
import sailpoint.connector.DelimitedFileConnector;
Map map = DelimitedFileConnector.defaultBuildMap( cols, record );
String access = (String) map.get( "access" );
String permission = (String) map.get( "permission" );
if ( access != null && permission != null ) {
map.remove("access");
map.remove("permission");
map.put("access", access + " - " + permission);
}
return map;
]]></Source>
</Rule>