Problem executing trigger 'eWaySP_SumarizeCartsPricesOnProjectsAndLeads'

Popis

Chyba se v chybovém logu uživatele projevuje následujícím textem:

Synchronization failed:
eWay.StandardEdition.Synchronization.SynchronizationException: Could not upload items
---> eWay.Core.DataInterface.StoreException: Uploading of items failed.
---> eWay.Core.DataInterface.StoreException: Cannot save the item to webservice to folder Carts
---> eWay.Core.WebService.eWayWebServiceException: Web service returned an error (rcGeneralError): Problem executing trigger 'eWaySP_SumarizeCartsPricesOnProjectsAndLeads'

V případě logu webově služby se chyba projevuje následujícím textem:

System.InvalidOperationException: Problem executing trigger 'eWaySP_SumarizeCartsPricesOnProjectsAndLeads'
---> System.Data.SqlClient.SqlException: Subquery returned more than 1 value.
This is not permitted when the subquery follows =, !=, <, <= , >, >= or when the subquery is used as an expression
.

Tato chyba může nastat při počítání cen z dokladů na projektech. Ve výpočetní proceduře eWaySP_SumarizeCartsPricesOnProjectsAndLeads je select, který bere v potaz vazby typu GENERAL a CART. Vazba typu CART se vytváří mezi dokladem a příležitostí/projektem, ze které byl doklad vyroben. Vazba GENERAL je vytvořena pouze mezi dokladem a projektem, a to pouze v případě, že byl doklad nejprve vytvořen na příležitosti (jednalo se například o nabídku) a příležitost byla poté převedena na projekt. Tehdy vazba CART stále směřuje na příležitost a na projekt vede vazba GENERAL.

Po otevření samotného dokladu je na dialogu dokladu kontrolka Projekt, kde by měla být vybrána ta položka, na které byl doklad původně vytvořen. Pokud tedy byl doklad původně vytvořen na příležitosti, měla by zde být příležitost. Pokud byl doklad vytvořen už na projektu, měl by zde být tento projekt.

Problém spočívá v tom, že pokud se uživatel nachází na projektu, otevře doklad, který má v poli Projekt vybranou příležitost, a tuto příležitost změní na projekt, v databázi se vazba typu CART, která ukazovala na příležitost, odmaže a vytvoří se nová vazba typu CART na vybraný projekt. Nyní tedy existují dvě různé vazby (CART a GENERAL) mezi dvěma stejnými položkami (doklad a projekt). Zde pak procedura eWaySP_SumarizeCartsPricesOnProjectsAndLeads vrátí chybu.

Verze

Všechny verze eWay-CRM®

Obtížnost řešení

Vysoká

Postup řešení

V logu webové služby je na řádku před výpisem chyby vypsán také ItemGUID dokladu, na kterém procedura padá například:

2014-09-18 09:06:10,571 [9] DEBUG w3wp [(null)] - Executing AfterSave SP trigger eWaySP_SumarizeCartsPricesOnProjectsAndLeads on folder Carts with parameters '@CartGUID: 224cd6c8-8ce6-11e3-a1e8-0017319697c4'

Pokud tento ItemGUID dokladu vložíme do následujícího selectu a pustíme nad serverovou databází, vrátí se dvě identické položky ItemGUID2, ale každá s jiným typem vazby (a s jiným RelationDataGUID):

SELECT ItemGUID2, RelationType, RelationDataGUID
FROM EWR_ObjectRelations
WHERE ItemGUID1 = '224cd6c8-8ce6-11e3-a1e8-0017319697c4'
AND RelationType IN ('CART' , 'GENERAL') -- GENERAL: When lead converted to Project
AND ObjectTypeID2 = (select ObjectTypeID from EWE_ObjectTypes where FolderName = 'Projects')

Nejrychlejším řešením je jednu z vazeb odmazat, a protože vazba typu CART udává to, která položka se bude zobrazovat v poli Projekt na dialogu dokladu, je vhodné odmazat vazbu typu RELATION pomocí této procedury nad serverovou databází (jako parametr @RelationDataGUID je potřeba vložit hodnotu ze sloupce RelatioDataGUID ze selectu výše):

EXEC [dbo].[eWaySP_DeleteRelations]
@RelationDataGUID = '7F60A7A2-8CE6-11E3-A1E8-0017319697C4',
@UseItemChanges = 1