Das neue Updatescript für AvERP enthält alle nötigen Änderungen, damit ein Sync mit dem Mitarbeiterstamm funktioniert.
Da ich kleine Änderungen vorher shcon am Updatescript vorgenommen habe (mein Kollege Festus01 wies mich darauf hin, dass der Parameter "Start" z.B. bei Firebird2.1 reserviert ist und daher in dem Script nicht vorkommen darf (wir testen hier unter 2.1 beta2, da wir unsere komplette Datenbank demnächst umstellen wollen) so dass u.A. alle START in STARTPARAMETER hier geändert wurden, wie auch das teilweise doppelte vorkommen von "Tel" was in Zukunft verboten ist) konnte ich nur einen kleinen Teil des Scriptes ablaufen lassen. Mit dem Programm "Diff Doc" habe ich beide Scripts verglichen und nun mal nur folgende Zeilen im IBExpert ausgeführt:
Code: Alles auswählen
SET TERM ^ ;
CREATE OR ALTER PROCEDURE P_AGW_SYNC_A_KATEGORIE(
P_MODUS INTEGER,
P_ID INTEGER,
P_MASKENKEY VARCHAR(75),
P_BESCHREIBUNG VARCHAR(32000),
P_PRIVAT_JN VARCHAR(1),
P_FELDFARBE VARCHAR(6))
RETURNS (
ID INTEGER,
MASKENKEY VARCHAR(75),
BESCHREIBUNG BLOB SUB_TYPE 0 SEGMENT SIZE 80,
PRIVAT_JN VARCHAR(1),
FELDFARBE VARCHAR(6))
AS
DECLARE VARIABLE SJA VARCHAR(1);
DECLARE VARIABLE SNEIN VARCHAR(1);
BEGIN
/* LETZTER STAND 10.12.2007 09:27:32 TR */
/* Protokollieren, dass Aktion hier durchgelaufen ist */
IF (GEN_ID(GEN_ENTWICKLUNG,0) = 0) THEN
INSERT INTO A_WASMACHTIB (PROGRAMMTEIL) VALUES ('P_AGW_SYNC_A_KATEGORIE');
EXECUTE PROCEDURE P_BFIRMA_JANEIN RETURNING_VALUES (:SJA, :SNEIN);
/* Select */
IF (P_MODUS = 1) THEN
IF(P_ID = 0) THEN
BEGIN
FOR SELECT
A.ID,
A.BEZ,
A.TEXT,
A.PRIVAT_JN,
F_UPPER(F_INTTOHEX(A.FELDFARBE, 6))
FROM BPROJPO_KAT A
INTO :ID,
:MASKENKEY,
:BESCHREIBUNG,
:PRIVAT_JN,
:FELDFARBE
DO
BEGIN
SUSPEND;
END
END
ELSE
BEGIN
FOR SELECT
A.ID,
A.BEZ,
A.TEXT,
A.PRIVAT_JN,
F_UPPER(F_INTTOHEX(A.FELDFARBE, 6))
FROM BPROJPO_KAT A
WHERE ID = :P_ID
INTO :ID,
:MASKENKEY,
:BESCHREIBUNG,
:PRIVAT_JN,
:FELDFARBE
DO
BEGIN
SUSPEND;
END
END
/* Insert */
IF (P_MODUS = 2) THEN
BEGIN
IF ((P_ID IS NULL) OR (P_ID = 0)) THEN P_ID = GEN_ID(GEN_A_KATEGORIE,1);
INSERT INTO BPROJPO_KAT (
ID,
MASKENKEY,
BEZ,
TEXT,
PRIVAT_JN,
FELDFARBE
)
VALUES (
:P_ID,
F_UPPER(SUBSTRING(:P_MASKENKEY FROM 1 FOR 3)),
:P_MASKENKEY,
:P_BESCHREIBUNG,
:P_PRIVAT_JN,
F_HEXTOINT(:P_FELDFARBE)
);
END
/* Update */
IF (P_MODUS = 3) THEN
BEGIN
UPDATE BPROJPO_KAT
SET MASKENKEY = F_UPPER(SUBSTRING(:P_MASKENKEY FROM 1 FOR 3)),
BEZ = :P_MASKENKEY,
TEXT = :P_BESCHREIBUNG,
PRIVAT_JN = :P_PRIVAT_JN,
FELDFARBE = F_HEXTOINT(:P_FELDFARBE)
WHERE ID = :P_ID;
END
/* Delete */
IF (P_MODUS = 4) THEN
BEGIN
DELETE FROM A_KATEGORIE
WHERE ID = :P_ID;
END
END^
SET TERM ; ^
GRANT INSERT ON A_WASMACHTIB TO PROCEDURE P_AGW_SYNC_A_KATEGORIE;
GRANT EXECUTE ON PROCEDURE P_BFIRMA_JANEIN TO PROCEDURE P_AGW_SYNC_A_KATEGORIE;
GRANT SELECT,INSERT,UPDATE ON BPROJPO_KAT TO PROCEDURE P_AGW_SYNC_A_KATEGORIE;
GRANT SELECT,DELETE ON A_KATEGORIE TO PROCEDURE P_AGW_SYNC_A_KATEGORIE;
GRANT EXECUTE ON PROCEDURE P_AGW_SYNC_A_KATEGORIE TO SYSDBA;
SET TERM ^ ;
CREATE OR ALTER PROCEDURE P_AGW_SYNC_A_USER(
P_MODUS INTEGER,
P_ID INTEGER,
P_MASKENKEY VARCHAR(40),
P_PASSWORT VARCHAR(40))
RETURNS (
ID INTEGER,
MASKENKEY VARCHAR(40),
PASSWORT VARCHAR(40))
AS
DECLARE VARIABLE SPRACHE_ID INTEGER = 0;
DECLARE VARIABLE SJA VARCHAR(1);
DECLARE VARIABLE SNEIN VARCHAR(1);
DECLARE VARIABLE A_USER_ID INTEGER = 0;
DECLARE VARIABLE A_GRUPPE_ID INTEGER = 0;
BEGIN
/* LETZTER STAND 10.12.2007 10:21:07 TR */
/* Protokollieren, dass Aktion hier durchgelaufen ist */
IF (GEN_ID(GEN_ENTWICKLUNG,0) = 0) THEN
INSERT INTO A_WASMACHTIB (PROGRAMMTEIL) VALUES ('P_AGW_SYNC_A_USER');
EXECUTE PROCEDURE P_BFIRMA_JANEIN
RETURNING_VALUES(:SJA,:SNEIN);
/* Select */
IF (P_MODUS = 1) THEN
BEGIN
IF(P_ID = 0) THEN
BEGIN
FOR SELECT
A.ID,
A.MASKENKEY,
A.MASKENKEY
FROM A_USER A
INTO :ID,
:MASKENKEY,
:PASSWORT
DO
BEGIN
SUSPEND;
END
END
ELSE
BEGIN
FOR SELECT
A.ID,
A.MASKENKEY,
A.MASKENKEY
FROM A_USER A
WHERE A.ID = :P_ID
INTO :ID,
:MASKENKEY,
:PASSWORT
DO
BEGIN
SUSPEND;
END
END
END
/* Insert */
IF (P_MODUS = 2) THEN
BEGIN
IF (USER <> 'WORSTCASE') THEN
BEGIN
/* Pflichtfelder füllen */
/* Sprache mit Sprache aus Firmenstamm vorbelegen */
SELECT A.A_SPRACHE_ID FROM BFIRMA A INTO :SPRACHE_ID;
SELECT B.ID FROM A_GRUPPE B WHERE F_UPPER(F_LRTRIM(B.MASKENKEY)) = 'ADMINISTRATOR' INTO :A_GRUPPE_ID;
END
IF ((P_ID IS NULL) OR (P_ID = 0)) THEN P_ID = GEN_ID(GEN_A_USER,1);
INSERT INTO A_USER (
ID,
MASKENKEY,
A_GRUPPE_ID,
A_SPRACHE_ID,
DATENANZEIGE_UPMENUE
)
VALUES (
:P_ID,
:P_MASKENKEY,
:A_GRUPPE_ID,
:SPRACHE_ID,
:SNEIN);
END
/* Update */
IF (P_MODUS = 3) THEN
BEGIN
IF (P_ID = 0) THEN
BEGIN
UPDATE A_USER
SET MASKENKEY = :P_MASKENKEY;
END
ELSE
BEGIN
UPDATE A_USER
SET MASKENKEY = :P_MASKENKEY
WHERE ID = :P_ID;
END
END
/* Delete */
IF (P_MODUS = 4) THEN
BEGIN
DELETE FROM A_USER
WHERE ID = :P_ID;
END
END^
SET TERM ; ^
GRANT INSERT ON A_WASMACHTIB TO PROCEDURE P_AGW_SYNC_A_USER;
GRANT EXECUTE ON PROCEDURE P_BFIRMA_JANEIN TO PROCEDURE P_AGW_SYNC_A_USER;
GRANT SELECT,INSERT,DELETE,UPDATE ON A_USER TO PROCEDURE P_AGW_SYNC_A_USER;
GRANT SELECT ON BFIRMA TO PROCEDURE P_AGW_SYNC_A_USER;
GRANT SELECT ON A_GRUPPE TO PROCEDURE P_AGW_SYNC_A_USER;
GRANT EXECUTE ON PROCEDURE P_AGW_SYNC_A_USER TO SYSDBA;
SET TERM ^ ;
CREATE OR ALTER PROCEDURE P_AGW_SYNC_BSM_V2(
P_MODUS INTEGER,
P_ID INTEGER,
P_TITEL VARCHAR(64),
P_NACHNAME VARCHAR(64),
P_VORNAME VARCHAR(64),
P_ORGANISATION VARCHAR(64),
P_ABTEILUNG VARCHAR(64),
P_STRASSE VARCHAR(64),
P_PLZ VARCHAR(64),
P_ORT VARCHAR(64),
P_LAND VARCHAR(64),
P_TEL_PRIV VARCHAR(64),
P_TEL_MOBIL VARCHAR(64),
P_EMAIL VARCHAR(64),
P_INITIALEN VARCHAR(32))
RETURNS (
ID INTEGER,
TITEL VARCHAR(64),
NACHNAME VARCHAR(64),
VORNAME VARCHAR(64),
ORGANISATION VARCHAR(64),
ABTEILUNG VARCHAR(64),
STRASSE VARCHAR(64),
PLZ VARCHAR(64),
ORT VARCHAR(64),
LAND VARCHAR(64),
TEL_PRIV VARCHAR(64),
TEL_MOBIL VARCHAR(64),
EMAIL VARCHAR(64),
INITIALEN VARCHAR(32))
AS
DECLARE T_BPLZ_ID INTEGER;
DECLARE T_BLAND_ID INTEGER;
DECLARE VARIABLE SJA VARCHAR(1);
DECLARE VARIABLE SNEIN VARCHAR(1);
BEGIN
/* LETZTER STAND 10.12.2007 15:25:47 TR */
/* PROTOKOLLIEREN, DASS AKTION HIER DURCHGELAUFEN IST */
IF (GEN_ID(GEN_ENTWICKLUNG,0) = 0) THEN
INSERT INTO A_WASMACHTIB (PROGRAMMTEIL) VALUES ('P_AGW_SYNC_BSM_V2');
EXECUTE PROCEDURE P_BFIRMA_JANEIN
RETURNING_VALUES(:SJA,:SNEIN);
IF (P_MODUS = 1) THEN
BEGIN
IF(P_ID != 0) THEN
BEGIN
FOR SELECT
A.ID,
A.BEZ,
F.VORNAME,
F.NACHNAME,
E.NAME,
A.ABTEILUNG,
A.STRASSE,
B.PLZ,
B.ORT,
C.LAND,
A.TELVOR || A.TELANSCH,
A.TEL_MOBIL,
A.EMAIL,
A.NKZ
FROM BSM A
LEFT OUTER JOIN BPLZ B ON A.BPLZ_ID_LANDPLZ = B.ID
LEFT OUTER JOIN BLAND C ON B.BLAND_ID_LANDKENNZ = C.ID
LEFT OUTER JOIN BMAND D ON A.BMAND_ID = D.ID
LEFT OUTER JOIN BADR E ON D.BADR_ID = E.ID
LEFT OUTER JOIN P_NAME_TEILEN(A.NAME) F ON A.NAME = A.NAME
WHERE A.ID = :P_ID AND A.MTAAKTIV = :SJA
INTO :ID,
:TITEL,
:NACHNAME,
:VORNAME,
:ORGANISATION,
:ABTEILUNG,
:STRASSE,
:PLZ,
:ORT,
:LAND,
:TEL_PRIV,
:TEL_MOBIL,
:EMAIL,
:INITIALEN
DO
BEGIN
SUSPEND;
END
END
END
/* P_MODUS 2 nicht verfügbar, da keine Neueinträge aus Groupware */
/* Update */
IF (P_MODUS = 3) THEN
BEGIN
IF(P_ID != 0) THEN
BEGIN
SELECT ID FROM BPLZ
WHERE PLZ = :P_PLZ
AND ORT = :P_ORT
INTO :T_BPLZ_ID;
UPDATE BSM
SET BEZ = :P_TITEL ,
NAME = (:P_VORNAME || ' ' || :P_NACHNAME),
ABTEILUNG = :P_ABTEILUNG,
STRASSE = :P_STRASSE,
TEL_MOBIL = :P_TEL_MOBIL,
EMAIL = :P_EMAIL,
BPLZ_ID_LANDPLZ = :T_BPLZ_ID
WHERE ID = :P_ID;
END
END
/* Delete */
IF (P_MODUS = 4) THEN
BEGIN
DELETE FROM BSM
WHERE ID = :P_ID;
END
END^
SET TERM ; ^
GRANT INSERT ON A_WASMACHTIB TO PROCEDURE P_AGW_SYNC_BSM_V2;
GRANT EXECUTE ON PROCEDURE P_BFIRMA_JANEIN TO PROCEDURE P_AGW_SYNC_BSM_V2;
GRANT SELECT,DELETE,UPDATE ON BSM TO PROCEDURE P_AGW_SYNC_BSM_V2;
GRANT SELECT ON BPLZ TO PROCEDURE P_AGW_SYNC_BSM_V2;
GRANT SELECT ON BLAND TO PROCEDURE P_AGW_SYNC_BSM_V2;
GRANT SELECT ON BMAND TO PROCEDURE P_AGW_SYNC_BSM_V2;
GRANT SELECT ON BADR TO PROCEDURE P_AGW_SYNC_BSM_V2;
GRANT EXECUTE ON PROCEDURE P_NAME_TEILEN TO PROCEDURE P_AGW_SYNC_BSM_V2;
GRANT EXECUTE ON PROCEDURE P_AGW_SYNC_BSM_V2 TO SYSDBA;
Es bezieht sich wie man sieht allerdings nicht alles auf die P_AGW_SYNC_BSM_V2 aber die Ausführung dieser Zeilen im IBExpert lief prima für mich, vllt. auch für alle anderen mit dem Problem.