Verarbeitung nicht zugeordneter Felder
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.
(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.
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'
});- 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.
| 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. |
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);