Verarbeitung nicht zugeordneter Felder

  • Freigeben Version: Zurich
  • Aktualisiert 31. Juli 2025
  • 3 Minuten Lesedauer
  • Sie können nicht zugeordnete Felder in der SCIM-Anpassung auf verschiedene Weise behandeln.

    Während der SCIM-Anpassung können die Felder, die nicht Teil der Tabellen „sys_user“ und „sys_user_Group“ sind, durch Ausführen der folgenden Funktionen zugeordnet werden.

    SCIM anpassen (Erstellen oder Aktualisieren)

    Sie können den SCIM-Client erstellen oder aktualisieren.

    • Der SCIM-Administrator kann anwenderdefinierte Skripts in hinzufügen onBeforeUnd onAfterSkripts für Felder, die nicht in der ETL-Definition oder RTE zugeordnet sind.
    • Der SCIM-Administrator kann RTE-Zuordnungen überschreiben, indem er anwenderdefinierte Skripts in hinzufügt onBeforeUnd onAfterSkripts.
    • Sie können eine skriptfähige API in der RTE aufrufen onBeforeOder onAfterSkripts für den Zugriff auf eingehende Anforderungen und die Durchführung von Transformationen für andere Tabellen, Listen und nicht zugeordnete Attribute.
    • Sie können verwenden sn_auth.SCIM2Util.getScimProviderCustomizationContext()Methode zum Bereitstellen des SCIM-Anforderungskontexts, der enthält scimResourceObjekt. Die scimResourceIn Kontext stellt in jedem Vorgang Folgendes dar:
      • VERÖFFENTLICHEN : Die in der Anforderungsnutzlast gesendete SCIM-Ressource.
      • PLATZIEREN : Die aktuelle SCIM-Ressource aus der Datenbank wurde durch die SCIM-Ressource ersetzt, die in der Anforderungsnutzlast gesendet wurde.
      • PATCH : Die aktuelle SCIM-Ressource aus der Datenbank nach der Ausführung der Patch-Vorgänge.
    Im Folgenden finden Sie ein Beispiel für onAfterSkript.
    (function onAfter(source, target, importLog) {
    
        var ctx = sn_auth.SCIM2Util.getScimProviderCustomizationContext();
        gs.info("scim context ee: " + JSON.stringify(ctx.scimResource));
    
        var roles = ctx.scimResource.roles;
        if(roles) {
            var removingRolesGR = new GlideRecord("sys_user_has_role");
            removingRolesGR.addQuery("user", target.sys_user[0].sys_id);
            removingRolesGR.query();
            removingRolesGR.deleteMultiple();
    
        for (var i = 0; i < roles.length; i++) {
            var addingRolesGR = new GlideRecord("sys_user_has_role");
            addingRolesGR.setValue("user", target.sys_user[0].sys_id);
            addingRolesGR.setValue("role", roles[i].value);
            addingRolesGR.setValue("state", "active");
            addingRolesGR.insert();
            }
            }
            var customUserExtn = new global.SCIMProviderCustomization().getCustomExtensionUrn('User');
            var salary = ctx.scimResource[customUserExtn].salary;
            if (salary) {
                var gr = new GlideRecord("u_user_salary");
                gr.addQuery("user", target.sys_user[0].sys_id);
                gr.query();
                if (gr.next()) {
                    gr.setValue("salary", salary);
                    gs.info("scim update: " + gr.update());
                } else {
                gr.setValue("salary", salary);
                gr.setValue("user", target.sys_user[0].sys_id);
                gr.insert();
                }
               }
    
    })(source, target, importLog);

    Passen Sie die SCIM-Antwort an

    Für die GET-API-Aufrufe kann jede Antwort zurück an den SCIM-Client mithilfe des Skripts angepasst werden, indem erweitert wird SCIMProviderCustomizationSkript.

    Beim erweitern des Skripts kann der Autor den überschreiben customizeUserResponseUnd customizeGroupResponseMethoden zum Ändern der Antworten für Anwender- und Gruppenressourcen.

    Die com.snc.integration.scim2.provider.customization.script.idMit der Eigenschaft kann das SCIM-Plugin das Skript verwenden, das für die Anpassung der Antwort verwendet werden soll.

    Im Folgenden finden Sie ein Beispiel für die Erweiterung des Basisskripts.
    var SCIMCustomizationScript = Class.create();
    SCIMCustomizationScript.prototype = Object.extendsObject(SCIMProviderCustomization, {
        initialize: function() {
            SCIMProviderCustomization.prototype.initialize.call(this);
        },
        customizeUserResponse: function(context) {
            try {
                var rolesGR = new GlideRecord("sys_user_has_role");
                rolesGR.addQuery("user", context.scimResource.id);
                rolesGR.query();
                var i = 0;
                context.scimResource.roles = [];
                while (rolesGR.next()) {
                    context.scimResource.roles[i] = {
                        display: rolesGR.getElement('role.name').getValue(),
                        value: rolesGR.getElement('role.sys_id').getValue()
                    };
                    i++;
                }
                var userGR = new GlideRecord("u_user_salary");
                userGR.addQuery("user", context.scimResource.id);
                userGR.query();
                if (userGR.next()) {
                    var salary = userGR.getValue("salary");
                    if (salary) {
                        var customExtensionValue = SCIMProviderCustomization.prototype.getCustomExtensionNodeValue.call(this, "User", context);
                        customExtensionValue.salary = salary;
                        SCIMProviderCustomization.prototype.setCustomExtensionNodeValue.call(this, "User", context, customExtensionValue);
                    }
                }
            } catch (ex) {
                gs.error("err: " + ex);
            }
            return context;
        },
        customizeGroupResponse: function(context) {
            return context;
        },
        type: 'SCIMCustomizationScript'
    });
    Hinweis:
    • Der Parameter, der customizeUserResponseUnd customizeGroupResponse„Methoden enthalten“ ist ein Kontextobjekt mit einem Attribut namens scimResource. Dieses Attribut hat alle Attribute eines Anwender- oder Gruppenressourcenobjekts.
    • Eine anwenderdefinierte Skripteinbindung kann nur vom Administrator erstellt und angezeigt werden.
    • Wenn eine Anwender- oder Gruppenressource geändert wird, müssen Sie den Kontext zurückgeben.
    • Wenn keine Änderung eines Attributs im Ressourcenobjekt erfolgt, legen Sie fest com.snc.integration.scim2.provider.customization.script.idLeer oder als Null zurückgeben.
    • Wenn bestimmte Attribute über beibehalten werden onAfterSkript, müssen sie mit Datenbankwerten in ausgefüllt werden scimResourceObjekt im anwenderdefinierten Skript. Diese Aktion ist erforderlich, damit das System Folgendes ausführen kann:
      • Um die richtige zu erhalten scimResourceObjekt in onAfterSkripts während des PUT- und PATCH-Vorgangs.
      • Um die Attribute einzubeziehen, die über beibehalten wurden onAfterSkript in der Antwort zurück an den Client.

    Hilfsfunktionen

    Im Folgenden finden Sie einige der Hilfsfunktionen für die SCIM-Anpassung. Mit diesen Funktionen können Sie verschiedene Arten von Informationen abrufen oder festlegen.

    Tabelle : 1. Hilfsfunktionen
    Funktion Zweck
    SCIMProviderCustomization.prototype.getCustomExtensionUrn.call(this, "User"); Ruft den Wert des anwenderdefinierten Erweiterungsschemas ab.
    SCIMProviderCustomization.prototype.getServiceNowExtensionUrn.call(this, "User"); Rufen Sie den Wert von ab ServiceNow Erweiterungsschema.
    SCIMProviderCustomization.prototype.getCustomExtensionNodeValue.call(this, "User", context); Rufen Sie den anwenderdefinierten Schemaknoten aus der Antwort ab.
    SCIMProviderCustomization.prototype.getServiceNowExtensionNodeValue.call(this, "User", context); Rufen Sie ab ServiceNow Schemaknoten aus der Antwort
    SCIMProviderCustomization.prototype.setCustomExtensionNodeValue.call(this, "User", context, customExtensionValue); Legen Sie den anwenderdefinierten Schemaknoten in der Antwort fest.
    Im Folgenden finden Sie ein Beispiel für die Verwendung der Hilfefunktion:
    var customExtensionUrn = 
    SCIMProviderCustomization.prototype.getCustomExtensionUrn.call(this, "User"); 
    var customExtensionValue = 
    SCIMProviderCustomization.prototype.getCustomExtensionNodeValue.call(this, "User", context); 
    customExtensionValue.age = "18";
    SCIMProviderCustomization.prototype.setCustomExtensionNodeValue call(this, "User", context, customExtensionValue); 
    Hinweis:
    RTE unterstützt das Festlegen von Daten in anderen Tabellen als den Tabellen „sys_user“ und „sys_user_Group“.