Anwendungsbeispiele
Im Folgenden werden einige Beispiele für die Nutzung der Prozeduren vorgestellt.
Anlegen von Benutzern
Das Beispiel zeigt, wie Sie aus Kontaktobjekten in der Processes-Datenbank Benutzer mit eigenem SSO-Konto und einer Mitgliedschaft in einer Portal-Gruppe erstellen können.
Cursor importieren |
-- Read the person data ---------------------------------------------------------------------------- DECLARE c1 CURSOR FAST_FORWARD FOR SELECT s.personid, a2o.agentid, acc.accnam FROM contsystem s JOIN contdetail d ON d.personid = s.personid LEFT JOIN hlsysagenttoobject a2o ON a2o.objectid = s.personid AND a2o.objectdefid = s.persondefid -- Join the account type that matches your Authenticator configuration LEFT JOIN contaccinfapplacc acc ON acc.personid = s.personid AND acc.accapp = 'Windows' -- only create if no agent exists and an accountname is given WHERE a2o.agentid IS NULL AND ISNULL(acc.accnam,'') <> '' AND ISNULL(d.persta,0) = @StatusEmployed /* Maybe filter duplicate accnam values, since this is not supported */ OPEN c1 FETCH NEXT FROM c1 INTO @PersonID, @UserID, @UserAccountNT WHILE @@FETCH_STATUS = 0 BEGIN -- create user out of contact information in Processes EXEC hlapi_userimport_elevatepersontouser @ActionContext , @PersonID, @ContactDefID, @UserID OUTPUT -- create login for user EXEC hlapi_userimport_oidcaccountforuser @ActionContext , @UserID, @UserAccountNT -- associate all groups needed for portal EXEC hlapi_userimport_assignusertoportalgroups @ActionContext , @UserID, @PortalName FETCH NEXT FROM c1 INTO @PersonID, @UserID, @UserAccountNT END CLOSE c1 |
- Erstellen Sie einen Benutzer für einen Kontakt.
- Erstellen Sie das Konto.
- Weisen Sie den neuen Benutzer einer Gruppe zu, die die Serviceware Portal-Verwendung ermöglicht.
Im AD-Import Kontakt zur einer Organisation assoziieren
Ein häufiger Anwendungsfall in SQL-Import-Skripten ist das Erstellen einer
Assoziation und das Entfernen unnötiger oder alter Assoziationen desselben Typs
(verschieben). Dies kann auf zwei Arten erreicht werden. Die API
associate_object verfügt zu diesem Zwecke über eine Funktion. In diesem
Kapitel werden zwei Wege aufgezeigt, um dieses Ergebnis zu erzielen:
- Move-Funktion von associate_object
- Separater deassociate_object-Aufruf
Anmerkung: Wir empfehlen die erste Variante zu verwenden.
Nutzung der Move-Funktion in associate_object | |
Neu | Alt |
-- check for unnecessary previous associations and log deletion IF @EventLogging > 2 AND @RemovePersonAsc = 1 BEGIN IF EXISTS (SELECT TOP 1 * FROM dbo.hlsysassociation WHERE associationdefid=@Person2OrganizationDefID AND objectdefida IN (@CompanyDefID, @DepartmentDefID, @SiteDefID) AND objectida!=@orgunitB_ID AND objectdefidb=@ContactDefID AND objectidb=@ContactID) BEGIN -- log deletion INSERT hlgtadslog VALUES (@gmtsysdate, @orgunitB_ID, 'ASC_D_0005' , 'Alle Assoziationen zwischen der Person ' + ISNULL(@lastname,'<Kein Name>') + ', ' + ISNULL(@firstname,'<Kein Name>') + ' und anderen Organisationen wurden geloescht.','') END END -- check for an existing association to the organization and log creation IF @EventLogging > 1 BEGIN IF NOT EXISTS (SELECT TOP 1 * FROM hlsysassociation WHERE associationdefid=@Person2OrganizationDefID AND objectdefida = @orgunitB_DefID AND objectida=@orgunitB_ID AND objectdefidb = @ContactDefID AND objectidb=@ContactID) BEGIN -- log creation INSERT hlgtadslog VALUES (@gmtsysdate, @ContactID , 'ASC_N_0005', 'Zwischen der Person;' + ISNULL(@lastname,'<Kein Name>') + ', ' + ISNULL(@firstname,'<Kein Name>') + ' und der Organisation ' + ISNULL(@Organisation,'<Kein Name>') + ' in der Kategorie ' + ISNULL(@Root,'<Kein Name>') + ' wurde eine neue Assoziation angelegt.','') END END -- enforce new association and remove old one EXEC hlapi_userimport_associateobject @ActionContext , @Person2OrganizationDefID , @DefTypeOrgUnit, @orgunitB_ID, @orgunitB_DefID , @DefTypePerson, @ContactID, @ContactDefID , @RemovePersonAsc, 0, 1 |
-- delete unnecessary previous associations IF @RemovePersonAsc = 1 BEGIN DELETE hlsysassociation WHERE associationdefid=@Person2OrganizationDefID AND objectdefida IN (@CompanyDefID, @DepartmentDefID, @SiteDefID) AND objectida!=@orgunitB_ID AND objectdefidb=@ContactDefID AND objectidb=@ContactID -- log deletion IF @@ROWCOUNT > 0 AND @EventLogging > 2 BEGIN INSERT hlgtadslog VALUES (@gmtsysdate, @orgunitB_ID, 'ASC_D_0005' , 'Alle Assoziationen zwischen der Person ' + ISNULL(@lastname,'<Kein Name>') + ', ' + ISNULL(@firstname,'<Kein Name>') + ' und anderen Organisationen wurden geloescht.','') END END -- check for an existing association to the organization IF NOT EXISTS (SELECT * from hlsysassociation WHERE associationdefid=@Person2OrganizationDefID AND objectdefida = @orgunitB_DefID AND objectida=@orgunitB_ID AND objectdefidb = @ContactDefID AND objectidb=@ContactID) BEGIN -- new association id SELECT @NewID = 0 EXECUTE @NewID = hlsysgenerateid IF @NewID < 0 BEGIN RAISERROR ('Error: GenerateID.',16,1) RETURN END -- insert association INSERT hlsysassociation VALUES (@NewID, @Person2OrganizationDefID , @orgunitB_ID, @orgunitB_DefID , @ContactID, @ContactDefID , @gmtsysdate, @gmtsysdate,@owner) SELECT @NewAssoc = 1 -- log creation IF @EventLogging > 1 INSERT hlgtadslog VALUES (@gmtsysdate, @NewID, 'ASC_N_0005' , 'Zwischen der Person;' + ISNULL(@lastname,'<Kein Name>') + ', ' + ISNULL(@firstname,'<Kein Name>') +' und der Organisation ' + ISNULL(@Organisation,'<Kein Name>') + ' in der Kategorie ' + ISNULL(@Root,'<Kein Name>') + ' wurde eine neue Assoziation angelegt.','') END |
Separater deassociate_object-Aufruf | |
Neu | Alt |
-- Create and maintain association to contact SELECT @ContactID = MIN(personid) FROM dbo.contpercomm WHERE emaadd = @UsedBy IF @ContactID IS NOT NULL BEGIN -- Log deletion of old associations, if they exist IF @EventLogging > 2 AND @RemovePersonAsc = 1 BEGIN IF EXISTS (SELECT * FROM dbo.hlsysassociation WHERE associationdefid = @ITSMAssetUSedByDefID AND objectida != @ContactID AND objectdefida = @ContactDefID AND objectidb = @HardwareITSMID AND objectdefidb = @HardwareDefID) BEGIN INSERT dbo.hlgthardwareitsmlog VALUES (@gmtsysdate, @HardwareITSMID , 'ASC_D_0002', '','All associations between hardware ' + ISNULL(@AssetModel,'<no name>') + ' and other contacts have been deleted') END END -- Log creation of the associations, if it actually is created now IF @EventLogging > 1 BEGIN IF NOT EXISTS (SELECT * FROM dbo.hlsysassociation WHERE associationdefid = @ITSMAssetUSedByDefID AND objectida = @ContactID AND objectdefida = @ContactDefID AND objectidb = @HardwareITSMID AND objectdefidb = @HardwareDefID) BEGIN INSERT dbo.hlgthardwareitsmlog VALUES (@gmtsysdate, @HardwareITSMID , 'HAIT_A_0002', '', 'The Hardware "' + ISNULL(@AssetModel,'<no name>') + '" with serialnumber "'+ISNULL(@SerialNumber,'<no name>') +'" was added to the contact "'+ ISNULL(@UsedBy,'<no name>') +'"') END END -- Create and maintain association to contact EXEC hlapi_userimport_associateobject @ActionContext , @ITSMAssetUSedByDefID , @DefType Person, @ContactID, @ContactDefID , @DefTypeProduct, @HardwareITSMID, @HardwareDefID , @RemovePersonAsc, 0, 0 END |
-- Create and maintain association to contact SELECT @ContactID = MIN(personid) FROM dbo.contpercomm WHERE emaadd = @UsedBy IF @ContactID IS NOT NULL BEGIN IF NOT EXISTS (SELECT * FROM dbo.hlsysassociation WHERE associationdefid = @ITSMAssetUSedByDefID AND objectida = @ContactID AND objectdefida = @ContactDefID AND objectidb = @HardwareITSMID AND objectdefidb = @HardwareDefID) BEGIN -- Create new object id for the association SELECT @NewID = 0 EXECUTE @NewID = dbo.hlsysgenerateid IF @NewID < 0 BEGIN RAISERROR ('Error: GenerateID.',16,1) RETURN END -- Create association INSERT dbo.hlsysassociation VALUES (@NewID, @ITSMAssetUSedByDefID , @ContactID, @ContactDefID , @HardwareITSMID, @HardwareDefID , @gmtsysdate, @gmtsysdate,@owner) IF @EventLogging > 1 INSERT dbo.hlgthardwareitsmlog VALUES (@gmtsysdate, @HardwareITSMID , 'HAIT_A_0002', '', 'The Hardware "' + ISNULL(@AssetModel,'<no name>') + '" with serialnumber "'+ISNULL(@SerialNumber,'<no name>') + '" was added to the contact "'+ ISNULL(@UsedBy,'<no name>') +'"') END -- Delete associations to other contacts IF @RemovePersonAsc = 1 BEGIN DELETE FROM dbo.hlsysassociation WHERE associationdefid = @ITSMAssetUSedByDefID AND objectida != @ContactID AND objectdefida = @ContactDefID AND objectidb = @HardwareITSMID AND objectdefidb = @HardwareDefID -- Log deletion IF @@ROWCOUNT > 0 AND @EventLogging > 2 BEGIN INSERT dbo.hlgthardwareitsmlog VALUES (@gmtsysdate, @HardwareITSMID , 'ASC_D_0002', '','All associations between hardware' + CONVERT(NVARCHAR(10), @AssetModel) + ' and other contacts have been deleted') END END END |
Assoziationen löschen
Die Prozedur hlapi_userimport_deassociateobject ist kein Ersatz für alle DELETE-Statements die zuvor im Script verwendet wurden. Die meisten Assoziationen können über die Funktion Move in der hlapi_userimport_deassociateobjectt API gelöscht werden, wie zuvor beschrieben.
Mit der neuen Prozedur besteht keine Möglichkeit mehr, mehrere Assoziationen
gleichzeitig zu löschen. Es muss für jede Assoziation die gelöscht werden soll ein
separater Aufruf der Prozedur erfolgen. In der Regel ist dazu die Verwendung eines
Cursors notwendig.
Entfernen von leeren Organisationen in AD-Importen | |
Neu | Alt |
DECLARE c3Assoc CURSOR FAST_FORWARD FOR
SELECT a.associationdefid, a.objectida, a.objectdefida, a.objectidb, a.objectdefidb
FROM hlsysassociation a
WHERE a.objectidb=@ID
OPEN c3Assoc
FETCH NEXT FROM c3Assoc INTO @AssociationDefID
, @ObjectIDA, @ObjectDefIDA
, @ObjectIDB, @ObjectDefIDB
WHILE @@FETCH_STATUS = 0
BEGIN
EXEC hlapi_userimport_deassociateobject @ActionContext
, @AssociationDefID
, @ObjectIDA, @ObjectDefIDA
, @ObjectIDB, @ObjectDefIDB
FETCH NEXT FROM c3Assoc INTO @AssociationDefID
, @ObjectIDA, @ObjectDefIDA
, @ObjectIDB, @ObjectDefIDB
END
CLOSE c3Assoc
DEALLOCATE c3Assoc
|
DELETE hlsysassociation WHERE objectidb=@ID |
Remove Software from Computers in Software Import | |
Neu | Alt |
--Delete assocation between hardware and software that has not been created or updated in this run
DECLARE c2 CURSOR FAST_FORWARD FOR
SELECT a.objectida, a.objectidb
FROM @Assocations a
OPEN c2
FETCH NEXT FROM c2 INTO @HardwareITSMID, @SoftwareITSMID
WHILE @@FETCH_STATUS = 0
BEGIN
EXEC hlapi_userimport_deassociateobject @ActionContext
, @SoftwareITSMInstalledOn
, @HardwareITSMID, @HardwareDefID
, @SoftwareITSMID, @SoftwareDefID
FETCH NEXT FROM c2 INTO @HardwareITSMID, @SoftwareITSMID
END
CLOSE c2
DEALLOCATE c2
|
--Delete assocation between hardware and software that has not been created or updated in this run
DECLARE c2 CURSOR FAST_FORWARD FOR
SELECT associationid FROM dbo.hlsysassociation a
INNER JOIN dbo.hlgtsoftwareitsmdictionary dict ON a.objectidb = dict.objectid
WHERE a.associationdefid = @SoftwareITSMInstalledOn
AND a.objectdefida = @HardwareDefID
AND a.objectdefidb = @SoftwareDefID
AND a.lastmodified != @gmtsysdate
OPEN c2
FETCH NEXT FROM c2 INTO @AssociationID
WHILE @@FETCH_STATUS = 0
BEGIN
DELETE FROM dbo.hlsysassociation WHERE associationid = @AssociationID
FETCH NEXT FROM c2 INTO @AssociationID
END
CLOSE c2
DEALLOCATE c2
|