Skip to main content

Portal Benutzer per SQL anlegen

Manche Situationen machen es notwendig, dass für mehrere Kontaktpersonen ein Druckerei-Portal Benutzer angelegt wird. Dies ist zum Beispiel der Fall, wenn Sie von einem anderen Shop-System auf das Druckerei-Portal umsteigen.

In Printplus DRUCK gibt es keine native Funktion für diese Anforderung. Daher beschreibe ich im Folgenden, wie dies per SQL gelöst werden kann.

Passwort erstellen

Für jede Adresse und jede Kontaktperson benötigen wir ein Passwort. Hierzu habe ich eine “Stored Procedure” geschrieben. Diese erstellt ein randomisiertes Passwort mit mindestens 16 Zeichen. Die Länge variiert zufällig und es werden Sonderzeichen, Groß- und Kleinbuchstaben verwendet. Das Passwort in Klartext und als MD5-Hash zurückgegeben.

CREATE PROCEDURE GetNewPassword (
	@newpassword VARCHAR(36) OUTPUT,
	@newpasswordmd5 VARCHAR(32) OUTPUT
)
AS
BEGIN
DECLARE @counter INT = 0;
DECLARE @randPosition INT = 0;
DECLARE @symbolNr INT = 0;
DECLARE @randLenght INT = FLOOR(RAND()*(19-5)+5);
DECLARE @symbols VARCHAR(43) = '!§$%&()?+*-_|<>[]{}abcdefghijklmnopqrstuvwxyz';
DECLARE @password VARCHAR(36) = NEWID();
DECLARE @passwordLenght VARCHAR(36) = FLOOR(RAND()*(36-16)+16);

WHILE @counter < @randLenght
BEGIN
SET @symbolNr = FLOOR(RAND()*(44-1)+1);
   SET @randPosition = FLOOR(RAND()*(36-1)+1);
   SET @password = STUFF(@password, @randPosition , 1 , SUBSTRING(@symbols,@symbolNr,1));
   SET @counter += 1;
END;
SET @password = LEFT(@password,@passwordLenght);
DECLARE @pwMd5 VARCHAR(32) = CONVERT(VARCHAR(32), HASHBYTES('MD5', @password), 2);
SELECT @newpassword = @password, @newpasswordmd5 = @pwMd5;
END;

Konto und Benutzer erstellen

Der folgende Code greift auf die obere “Stored Procedure” zurück, daher muss diese im Vorfeld angelegt werden.

Bei diesem Schritt wird für alle Adressen, welche noch keinem Druckerei-Portal-Konto zugeordnet sind, ein Konto erstellt.

Weiters wird für jede Kontaktperson dieser Adressen, die bis anhin keinen Druckerei-Portal-Benutzer hat, ein solcher angelegt.

Da das Passwort für die Anmeldung in der Datenbank verschlüsselt gespeichert wird, wird dieses zusätzlich in Klartext im Feld Kommunikation 2 der Kontaktperson hinterlegt. Dadurch können Sie über die Marketingaktion aus IVIS ohne großen Aufwand Ihrem Kunden das Initialpasswort zukommen lassen.

SET NOCOUNT ON
DECLARE @station_number INT = 500
DECLARE addresses CURSOR LOCAL FORWARD_ONLY FAST_FORWARD
FOR
	SELECT iadintnr
	FROM T_IVI01ADX
	WHERE iadintnr NOT IN (SELECT ktiadintnr FROM T_DPKONTO) AND deleted = 0  AND inactive = 0

OPEN addresses

DECLARE @adintnr INT
DECLARE @next_key_dpkonto INT
DECLARE @next_key_dpkonto_result INT

DECLARE @next_key_dpbenutzer INT
DECLARE @next_key_dpbenutzer_result INT

DECLARE @new_password VARCHAR(36)
DECLARE @new_password_md5 VARCHAR(32)
DECLARE @new_pp_timestamp VARCHAR(22) = (SELECT FORMAT((SELECT CAST(CURRENT_TIMESTAMP AS datetime2)), N'yyyy-MM-dd\/HH:mm:00.00'))

FETCH NEXT FROM addresses INTO @adintnr

WHILE @@FETCH_STATUS = 0
BEGIN
	EXEC PORTAL.PPGetKeyDPKONTO @@Station = @station_number, @@count = 1, @@NEXTKEY = @next_key_dpkonto OUTPUT, @@ResultCode = @next_key_dpkonto_result OUTPUT
	EXEC GetNewPassword @newpassword = @new_password OUTPUT, @newpasswordmd5 = @new_password_md5 OUTPUT

	INSERT INTO T_DPKONTO(ktid, ktiadintnr, ktaktiv, ktanzliz, kttyp, ktpwinit, ctimest, timest, csachb, owner, priv, mutcode, ktuidpruef)
	VALUES (@next_key_dpkonto, @adintnr, 1, 25, 'B2B', @new_password, @new_pp_timestamp, @new_pp_timestamp, 'JMX', 'JMX', 100, 'U', 1);

	DECLARE contact CURSOR LOCAL KEYSET
	FOR
		SELECT iktschlf, iktemail
		FROM T_IVI01KTX
		WHERE iktschlf NOT IN (SELECT beniktschlf FROM T_DPBENUTZER) AND iktemail IS NOT NULL AND iktintnr = @adintnr AND deleted = 0 AND inactive = 0
		FOR UPDATE OF iktcomm2

		OPEN contact
			DECLARE @ktschlf INT
			DECLARE @ktemail VARCHAR(100)

			FETCH NEXT FROM contact INTO @ktschlf, @ktemail

			WHILE @@FETCH_STATUS = 0
			BEGIN
				EXEC PORTAL.PPGetKeyDPBENUTZER @@Station = @station_number, @@count = 1, @@NEXTKEY = @next_key_dpbenutzer OUTPUT, @@ResultCode = @next_key_dpbenutzer_result OUTPUT
				EXEC GetNewPassword @newpassword = @new_password OUTPUT, @newpasswordmd5 = @new_password_md5 OUTPUT

				INSERT INTO T_DPBENUTZER(benid, beniktschlf, benaktiv, benpasswort, ctimest, timest, csachb, owner, priv, mutcode, bengesperrt, benktid, benwkb, benname, benemail, benfrei, benmodstat, benauarch, benbenvw)
				VALUES (@next_key_dpbenutzer, @ktschlf, 1, @new_password_md5, @new_pp_timestamp, @new_pp_timestamp, 'JMX', 'JMX', 100, 'U', 0, @next_key_dpkonto, 1, @ktemail, @ktemail, 1, 'K', 1, 3);

				UPDATE T_IVI01KTX
				SET iktcomm2 = @new_password
				WHERE CURRENT OF contact

				FETCH NEXT FROM contact INTO @ktschlf, @ktemail
			END
		CLOSE contact
		DEALLOCATE contact

	FETCH NEXT FROM addresses INTO @adintnr
END

CLOSE addresses
DEALLOCATE addresses