Custom Conditional Class Mapping for Service Graph Connectors Using IntegrationHub ETLIssue <!-- /*NS Branding Styles*/ --> .ns-kb-css-body-editor-container { p { font-size: 12pt; font-family: Lato; color: var(--now-color--text-primary, #000000); } span { font-size: 12pt; font-family: Lato; color: var(--now-color--text-primary, #000000); } h2 { font-size: 24pt; font-family: Lato; color: var(--now-color--text-primary, black); } h3 { font-size: 18pt; font-family: Lato; color: var(--now-color--text-primary, black); } h4 { font-size: 14pt; font-family: Lato; color: var(--now-color--text-primary, black); } a { font-size: 12pt; font-family: Lato; color: var(--now-color--link-primary, #00718F); } a:hover { font-size: 12pt; color: var(--now-color--link-primary, #024F69); } a:target { font-size: 12pt; color: var(--now-color--link-primary, #032D42); } a:visited { font-size: 12pt; color: var(--now-color--link-primary, #00718f); } ul { font-size: 12pt; font-family: Lato; } li { font-size: 12pt; font-family: Lato; } img { display: ; max-width: ; width: ; height: ; } } Service Graph Connectors (SGCs) use the IntegrationHub ETL framework to classify incoming data into appropriate CMDB CI classes. Each connector provides default class mappings, but customers often need to extend these to classify data into different CI classes based on specific conditions in the source data. Conditional class mapping allows you to define If/Then/Else rules that route source records to different target CMDB classes based on field values. For example, you can classify an imported device as a Handheld Computing Device if the UDID field is not empty, or as a Linux Server if the OS name contains "Linux". Release<!-- /*NS Branding Styles*/ --> .ns-kb-css-body-editor-container { p { font-size: 12pt; font-family: Lato; color: var(--now-color--text-primary, #000000); } span { font-size: 12pt; font-family: Lato; color: var(--now-color--text-primary, #000000); } h2 { font-size: 24pt; font-family: Lato; color: var(--now-color--text-primary, black); } h3 { font-size: 18pt; font-family: Lato; color: var(--now-color--text-primary, black); } h4 { font-size: 14pt; font-family: Lato; color: var(--now-color--text-primary, black); } a { font-size: 12pt; font-family: Lato; color: var(--now-color--link-primary, #00718F); } a:hover { font-size: 12pt; color: var(--now-color--link-primary, #024F69); } a:target { font-size: 12pt; color: var(--now-color--link-primary, #032D42); } a:visited { font-size: 12pt; color: var(--now-color--link-primary, #00718f); } ul { font-size: 12pt; font-family: Lato; } li { font-size: 12pt; font-family: Lato; } img { display: ; max-width: ; width: ; height: ; } } All releases Resolution<!-- /*NS Branding Styles*/ --> .ns-kb-css-body-editor-container { p { font-size: 12pt; font-family: Lato; color: var(--now-color--text-primary, #000000); } span { font-size: 12pt; font-family: Lato; color: var(--now-color--text-primary, #000000); } h2 { font-size: 24pt; font-family: Lato; color: var(--now-color--text-primary, black); } h3 { font-size: 18pt; font-family: Lato; color: var(--now-color--text-primary, black); } h4 { font-size: 14pt; font-family: Lato; color: var(--now-color--text-primary, black); } a { font-size: 12pt; font-family: Lato; color: var(--now-color--link-primary, #00718F); } a:hover { font-size: 12pt; color: var(--now-color--link-primary, #024F69); } a:target { font-size: 12pt; color: var(--now-color--link-primary, #032D42); } a:visited { font-size: 12pt; color: var(--now-color--link-primary, #00718f); } ul { font-size: 12pt; font-family: Lato; } li { font-size: 12pt; font-family: Lato; } img { display: ; max-width: ; width: ; height: ; } } Overview Service Graph Connectors (SGCs) use the IntegrationHub ETL framework to classify incoming data into appropriate CMDB CI classes. Each connector provides default class mappings, but customers often need to extend these to classify data into different CI classes based on specific conditions in the source data. Conditional class mapping allows you to define If/Then/Else rules that route source records to different target CMDB classes based on field values. For example, you can classify an imported device as a Handheld Computing Device if the UDID field is not empty, or as a Linux Server if the OS name contains "Linux". How ETL Classification Works The IntegrationHub ETL processes each row from the staging table and evaluates conditional class rules to determine which CMDB class the record should be created in: Source System (AWS, JAMF, Azure, SCCM, etc.) │ │ Data Stream Action fetches data ▼ Staging Table (Import Set) │ │ IntegrationHub ETL evaluates each row ▼ Conditional Class Rules (If/Then/Else) │ ├─ If general.udid IS NOT EMPTY → Handheld Computing Device ├─ If os_name CONTAINS "Linux" → Linux Server ├─ If os_name CONTAINS "Windows" → Windows Server └─ Else → Computer (default) │ ▼ IRE (Identification & Reconciliation Engine) │ ▼ CMDB Target Tables Each conditional class card in the ETL has three components: Condition (If): A filter evaluated against each staging row (e.g., general.udid IS NOT EMPTY)Target class (Then): The CMDB class where matching records are created (e.g., cmdb_ci_handheld_computing)Field mappings: Source-to-target attribute mappings configured via the Edit Mapping button on each class card Prerequisites Admin role on the ServiceNow instanceService Graph Connector installed and configured with at least one successful data importIntegrationHub ETL plugin activatedAt least one import set with data in the staging table for preview and testingUnderstanding of the source data structure and which fields drive classification Step-by-Step Procedure Step 1: Navigate to IntegrationHub ETL In the ServiceNow application navigator, type IntegrationHub ETL and select it under Configuration. This opens the ETL definitions list page. The list page shows all ETL transform maps grouped by CMDB Application (e.g., "CMDB Application: SG-Jamf", "CMDB Application: Service Graph Connector for Microsoft SCCM"). Each entry displays the Name, CMDB Application, Data source, Map Status, and Schedule columns. Click the expand arrow (▼) next to a CMDB Application group to see all ETL maps for that connector. Click on the ETL map name (e.g., "SG-JAMF Computers") to open it. Step 2: Open the ETL Transform Map Assistant Clicking the ETL map name opens the ETL Transform Map Assistant — a guided walkthrough with four sections: #SectionDescription1Specify Basic DetailsImport Source Data and Provide Basic Details — select a sample import set for the assistant to preview staging data.2Prepare Source Data for MappingPreview and Prepare Data — review the source data and its structure before mapping to CMDB classes.3Map Data to CMDB and Add RelationshipsTwo tasks: (a) Select CMDB Classes to Map Source Data, (b) Add Relationships. This is where conditional class mapping is configured.4Preview Sample Integration Results and Schedule ImportRun ETL on sample data, review results, rollback if needed, and configure the import schedule. Each section shows a progress circle (e.g., 1/1 Tasks, 2/2 Tasks) and a checkmark when complete. Step 3: Complete Sections 1 and 2 Section 1 — Specify Basic Details: Click the task "Import Source Data and Provide Basic Details". Select a recent import set number from the Sample Import Set dropdown. Click Mark as Complete. Section 2 — Prepare Source Data for Mapping: Click the task "Preview and Prepare Data". Check "Show data structure" to see the full field hierarchy. Identify the field(s) that will drive your classification (e.g., general.udid, platform, os_name). Click Mark as Complete. Tip: In the data structure view, note the nested field paths. SGC data is organized under sections like general, hardware, security — field paths use dot notation (e.g., general.udid, hardware.serial_number). Step 4: Add a Conditional Class Navigate to Section 3, Task 1: "Select CMDB Classes to Map Source Data". The page displays existing class mappings as cards, with two buttons at the top: Add Class and Add Conditional Class. Each existing class card shows the class name/label, CMDB table name, condition summary, and three controls on the right: Edit Class button, an active/inactive toggle, and an Edit Mapping button. Click Add Conditional Class. The "Add Conditional Class" dialog opens. The "Add Conditional Class" Dialog Collection A dropdown at the top, defaulting to "object". This defines the scope of data being evaluated. Leave this as "object" for most SGC configurations. If (Condition) The condition section has a toggle to enable/disable it, and a condition builder with three fields: FieldDescriptionChoose field (dropdown)Select the source field to evaluate. Shows all fields from the staging data organized by section (e.g., general.udid, general.name, hardware.serial_number).Operator (dropdown)Comparison operator: is, is not, contains, does not contain, starts with, ends with, IS EMPTY, IS NOT EMPTY, less than, greater than.Value (text field)The value to compare against. Not required for IS EMPTY / IS NOT EMPTY operators. Use the OR and AND buttons to add additional conditions. The minus (⊖) icon removes a condition row. Then (Target Class) Defines the CMDB class for records matching the If condition: Class | is | -- Select one -- (dropdown). Select the target class (e.g., cmdb_ci_linux_server, cmdb_ci_handheld_computing). Else (Fallback Class) Defines the class for records that do NOT match the If condition. Has a toggle to enable/disable. When enabled, shows the same Class selector. Use this for a default/fallback classification. New Criteria Click "New Criteria" to add additional If/Then/Else blocks within the same conditional class. This creates a multi-branch classification tree for complex scenarios. Dialog Buttons Cancel: Close without savingDelete Class: Remove the conditional class (visible when editing an existing class)Save: Save the configuration. The new class card appears in the list. Evaluation Order: Conditional classes are evaluated top-to-bottom. The first matching condition determines the class. Place more specific conditions above general ones. Step 5: Configure Field Mappings After saving the conditional class, click Edit Mapping on the new class card. The mapping interface shows source fields on the left and target CMDB fields on the right. Map source fields to target fields. Minimum required field mappings: Target CMDB FieldPurposeExample Source FieldNameCI display name (used in identification)general.name, ec2NameSerial NumberHardware identificationhardware.serial_number, udidDiscovery SourceIdentifies the data sourceUsually auto-set by connectorIP AddressNetwork identificationgeneral.ip_address Critical: Every conditional class needs its own field mappings. Mappings from one class card are NOT inherited by another. Skipping this step creates CIs with empty fields. Step 6: Add Relationships Navigate to Section 3, Task 2: "Add Relationships". This defines how the classified CIs relate to other CIs in the CMDB. If existing OOTB relationship rules already cover your new class, add an OR condition to the existing rule rather than creating a new oneTo add a new relationship, configure the parent class, relationship type, and matching fieldsClick Mark as Complete when done Step 7: Test and Validate Navigate to Section 4: "Preview Sample Integration Results and Schedule Import". Select a sample import set with dataRun the ETL on the sample dataReview integration results — verify records were classified into the correct CMDB classesIf results are incorrect, use the Rollback option to undo test dataAdjust conditions or mappings as needed and re-testOnce satisfied, click Mark as Complete and configure the import schedule Practical Examples Example 1: SG-JAMF — Classify Mobile Devices by UDID Devices with a UDID are mobile/handheld devices. Devices without are computers. Dialog SettingValueCollectionobjectIfgeneral.udid | IS NOT EMPTYThenClass is cmdb_ci_handheld_computingElse (enabled)Class is cmdb_ci_computer Example 2: SG-AWS — Classify EC2 by Operating System Use New Criteria to add multiple If/Then blocks: Dialog SettingValueCriteria 1 — Ifplatform | contains | LinuxCriteria 1 — ThenClass is cmdb_ci_linux_serverCriteria 2 — Ifplatform | contains | WindowsCriteria 2 — ThenClass is cmdb_ci_win_serverElse (enabled)Class is cmdb_ci_server Example 3: SG-SCCM — Override Incorrect system_role Using AND Conditions Click AND after the first condition to combine system_role and os_name: If ConditionThen ClassNotesystem_role is "Server" AND os_name contains "Linux"cmdb_ci_linux_serverStandard Linux serverssystem_role is "Server" AND os_name contains "Windows"cmdb_ci_win_serverStandard Windows serverssystem_role is NOT "Server" AND os_name contains "Server"cmdb_ci_win_serverMisreported VMs — OS overrides roleElsecmdb_ci_computerWorkstations (fallback) Troubleshooting IssueResolutionRecords not classified into new classVerify field paths in the condition match the staging data exactly. Use the Preview and Prepare Data screen to confirm. Fields use dot notation (e.g., general.udid, not just udid).Class card exists but records skip itCheck the active/inactive toggle on the class card (right side). Ensure it is toggled on (blue).Records classified but fields are emptyClick Edit Mapping on the class card and configure field mappings. Each conditional class needs its own mappings — they are not inherited.Custom fields not visible in source field listIf you added custom fields to the Data Stream Action, create entity entries manually in the ETL. The auto-detection only runs during initial connector setup.Duplicate CIs createdVerify IRE identification rules exist for the new target CMDB class in CMDB Class Manager.ETL fields/buttons are greyed outSwitch to the connector's application scope using the application picker (top-right).Conditions are case-sensitive and not matchingUse "contains" instead of "is" for partial matches. Check for whitespace in source data values. Best Practices Specific before general: Place more specific conditions in earlier class cards. ETL evaluates top-to-bottom — first match wins.Always define an Else: Enable the Else section to catch records that don't match any condition. Without this, unmatched records may be skipped.Complete field mappings: Click Edit Mapping for every conditional class card. Unmapped classes create CIs with empty fields.Test with rollback: Use Section 4 of the assistant to test on sample data before running a full production import.Check IRE rules: After adding a new target class, verify IRE identification rules exist for that class in CMDB Class Manager.Label your classes: Use the pencil icon (✏) next to each class card name to give it a descriptive label explaining the classification logic.Monitor after deployment: Check the Integration Commons dashboard after the first scheduled import to verify records are classified correctly.