Chyba synchronizace při odmazávání projektu FK_EWD_TeamRoles_EWD_RelationData

Popis

Problém může nastat tehdy, pokud je eWay-CRM® na jednom počítači ve stavu offline a na tomto počítači je smazán projekt, u kterého mezi tím někdo přidal dalšího člena týmu. Po připojení online se eWay-CRM® snaží smazat položky, které jsou ale v konfliktu s referenční integritou FK_EWD_TeamRoles_EWD_RelationData.

eWay agent hlásí chybu synchronizace a v lokálním logu je zobrazeno toto:

Synchronization failed
eWay.Core.DataInterface.StoreException: Uploading of items failed.
---> eWay.Core.DataInterface.StoreException: Cannot delete items in folder Projects.
---> eWay.Core.WebService.eWayWebServiceException: Web service returned an error (rcGeneralError):
The DELETE statement conflicted with the REFERENCE constraint "FK_EWD_TeamRoles_EWD_RelationData".
The conflict occurred in database "eWay", table "dbo.EWD_TeamRoles", column 'RelationDataGUID'.

V serverovém logu se zobrazuje:

Removing item 'b33fe309-3e6e-11e4-8adf-c48508292a51' from folder 'RelationData'
Executing procedure: eWaySP_DeleteItem
Request processed with error response 'rcGeneralError'
System.Data.SqlClient.SqlException: The DELETE statement conflicted with the REFERENCE constraint "FK_EWD_TeamRoles_EWD_RelationData".
The conflict occurred in database "eWay", table "dbo.EWD_TeamRoles", column 'RelationDataGUID'.
The statement has been terminated.
at eWayWSImpala.ItemManager.RemoveItem(Guid itemGuid)
at eWayWSImpala.ItemManager.RemoveItems(IEnumerable`1 items)
at eWayWSImpala.eWayWS.RemoveItems(Guid SID, String ItemType, String[] Items)

Verze

Všechny verze eWay-CRM®

Obtížnost řešení

Vysoká

Postup řešení

V serverovém logu je dva řádky nad zalogovanou chybou uveden také záznam o tom, která konkrétní položka je odmazávána (viz první řádek ve výpisu serverového logu). Ve výpisu je její ItemGUID, podle kterého lze položky odmazat ručně.

Nejprve je potřeba dohledat položky typu TeamRoles, které se odkazují na mazané RelationDataGUID:

SELECT * FROM EWD_TeamRoles WHERE RelationDataGUID = 'b33fe309-3e6e-11e4-8adf-c48508292a51'

Poté je potřeba tyto TeamRoles odmazat:

EXEC eWaySP_DeleteItem @ItemGUID = 'B33FE30A-3E6E-11E4-8ADF-C48508292A51', @ItemFolderName = 'TeamRoles'
EXEC eWaySP_DeleteItem @ItemGUID = 'B33FE30B-3E6E-11E4-8ADF-C48508292A51', @ItemFolderName = 'TeamRoles'
EXEC eWaySP_DeleteItem @ItemGUID = 'B33FE30C-3E6E-11E4-8ADF-C48508292A51', @ItemFolderName = 'TeamRoles'

Celou operaci by měl zajišťovat trigger eWaySP_Projects_RemoveRelatedItems, který ale nefunguje zcela správně. V dalších verzích by měl být problém odstraněn.