Index: vhUnitTest/Prod/Kenmerk/TestKenmerk.cls.xml =================================================================== diff -u -r1248 -r1377 --- vhUnitTest/Prod/Kenmerk/TestKenmerk.cls.xml (.../TestKenmerk.cls.xml) (revision 1248) +++ vhUnitTest/Prod/Kenmerk/TestKenmerk.cls.xml (.../TestKenmerk.cls.xml) (revision 1377) @@ -16,18 +16,10 @@ Do ##class(Prod.Kenmerk.DataDefinitie).DeleteKM(GroepID,UnID,KenmerkNaam) - Set %HeeftCreatedEventOntvangen = 0 - Set CreateSubscription = ##class(TECH.PubSub.EventSubscription).%New("KenmerkCreatedEvent","vhUnitTest.Prod.Kenmerk.TestKenmerk","KenmerkCreatedEventListener") - Do CreateSubscription.%Save() - Set %HeeftModEventOntvangen = 0 Set ModifiedSubscription = ##class(TECH.PubSub.EventSubscription).%New("KenmerkModifiedEvent","vhUnitTest.Prod.Kenmerk.TestKenmerk","KenmerkModEventListener") Do ModifiedSubscription.%Save() - Set %HeeftDeleteEventOntvangen = 0 - Set DeletedSubscription = ##class(TECH.PubSub.EventSubscription).%New("KenmerkDeletedEvent","vhUnitTest.Prod.Kenmerk.TestKenmerk","KenmerkDeletedEventListener") - Do DeletedSubscription.%Save() - Set MetaGroep = ##class(Prod.Kenmerk.MetaGroep).%New() Set MetaGroep.Code = "UTGroep" Do MetaGroep.%Save() @@ -45,26 +37,26 @@ Do $$$AssertTrue($$$ISOK(Status),"Het kenmerk is gesaved") - Do $$$AssertTrue(%HeeftCreatedEventOntvangen,"De create event is opgegooid") + Do $$$AssertTrue(%HeeftModEventOntvangen,"De modified event is opgegooid na creatie") + Set %HeeftModEventOntvangen = 0 + Do Kenmerk.Waarden.Insert("NieuweWaarde") Do Kenmerk.%Save() - Do $$$AssertTrue(%HeeftModEventOntvangen,"De modified event is opgegooid") + Do $$$AssertTrue(%HeeftModEventOntvangen,"De modified event is opgegooid na wijziging") + Set %HeeftModEventOntvangen = 0 + Do Kenmerk.%DeleteId(Kenmerk.%Id()) Do MetaGroep.%DeleteId(MetaGroep.%Id()) Do MetaDefinitie.%DeleteId(MetaDefinitie.%Id()) - Do $$$AssertTrue(%HeeftDeleteEventOntvangen,"De delete event is opgegooid") + Do $$$AssertTrue(%HeeftModEventOntvangen,"De modified event is opgegooid na verwijdering") - Do CreateSubscription.%DeleteId(CreateSubscription.%Id()) Do ModifiedSubscription.%DeleteId(ModifiedSubscription.%Id()) - Do DeletedSubscription.%DeleteId(DeletedSubscription.%Id()) - - Kill %HeeftCreatedEventOntvangen + Kill %HeeftModEventOntvangen - Kill %HeeftDeleteEventOntvangen ]]> @@ -79,18 +71,10 @@ Do ##class(Prod.Kenmerk.DataDefinitie).DeleteKM(GroepID,UnID,KenmerkNaam) - Set %HeeftCreatedEventOntvangen = 0 - Set CreateSubscription = ##class(TECH.PubSub.EventSubscription).%New("KenmerkCreatedEvent","vhUnitTest.Prod.Kenmerk.TestKenmerk","KenmerkCreatedEventListener") - Do CreateSubscription.%Save() - Set %HeeftModEventOntvangen = 0 Set ModifiedSubscription = ##class(TECH.PubSub.EventSubscription).%New("KenmerkModifiedEvent","vhUnitTest.Prod.Kenmerk.TestKenmerk","KenmerkModEventListener") Do ModifiedSubscription.%Save() - Set %HeeftDeleteEventOntvangen = 0 - Set DeletedSubscription = ##class(TECH.PubSub.EventSubscription).%New("KenmerkDeletedEvent","vhUnitTest.Prod.Kenmerk.TestKenmerk","KenmerkDeletedEventListener") - Do DeletedSubscription.%Save() - Set MetaGroep = ##class(Prod.Kenmerk.MetaGroep).%New() Set MetaGroep.Code = "UTGroep" Do MetaGroep.%Save() @@ -109,38 +93,25 @@ Do $$$AssertTrue($$$ISOK(Status),"Het kenmerk is gesaved") - Do $$$AssertFalse(%HeeftCreatedEventOntvangen,"De create event is opgegooid") + Do $$$AssertFalse(%HeeftModEventOntvangen,"De modified event is niet opgegooid na creatie") Do Kenmerk.Waarden.Insert("NieuweWaarde") Do Kenmerk.%Save() - Do $$$AssertFalse(%HeeftModEventOntvangen,"De modified event is opgegooid") + Do $$$AssertFalse(%HeeftModEventOntvangen,"De modified event is niet opgegooid na wijziging") Do Kenmerk.%DeleteId(Kenmerk.%Id()) Do MetaGroep.%DeleteId(MetaGroep.%Id()) Do MetaDefinitie.%DeleteId(MetaDefinitie.%Id()) - Do $$$AssertFalse(%HeeftDeleteEventOntvangen,"De delete event is opgegooid") - - Do CreateSubscription.%DeleteId(CreateSubscription.%Id()) + Do $$$AssertFalse(%HeeftModEventOntvangen,"De modified event is niet opgegooid na verwijdering") + Do ModifiedSubscription.%DeleteId(ModifiedSubscription.%Id()) - Do DeletedSubscription.%DeleteId(DeletedSubscription.%Id()) - - Kill %HeeftCreatedEventOntvangen + Kill %HeeftModEventOntvangen - Kill %HeeftDeleteEventOntvangen ]]> - -1 -KenmerkCreatedEvent:TECH.Events.KenmerkCreatedEvent - - - 1 KenmerkModifiedEvent:TECH.Events.KenmerkModifiedEvent @@ -152,14 +123,5 @@ } ]]> - - -1 -KenmerkDeletedEvent:TECH.Events.KenmerkDeletedEvent - - Index: APPS/PM/KenmerkenService.cls.xml =================================================================== diff -u -r1251 -r1377 --- APPS/PM/KenmerkenService.cls.xml (.../KenmerkenService.cls.xml) (revision 1251) +++ APPS/PM/KenmerkenService.cls.xml (.../KenmerkenService.cls.xml) (revision 1377) @@ -305,19 +305,32 @@ If ($IsObject(Kenmerk)) { - Do Kenmerk.Waarden.Clear() - Do ##class(TECH.ListUtils).CopyList(ProductKenmerk.Waarden,Kenmerk.Waarden) - Set Kenmerk.IsEventRaiser = 0 - Set Status = Kenmerk.Save() - If $$$ISERR(Status) + // Controleer of de nieuwe waarden verschillen + Set IsGewijzigd = (ProductKenmerk.Waarden.Count() '= Kenmerk.Waarden.Count()) + Set i = 0 + + While ('IsGewijzigd) && (i < Kenmerk.Waarden.Count()) { - Set ErrorMsg = "Kenmerk "_ProductKenmerk.Groep_"||"_ProductKenmerk.KenmerkNaam_" voor UnID "_UnID_" kon niet worden gesaved.("_$$ParseStatus^vhLib(Status)_")" + Set i = i + 1 + Set IsGewijzigd = (ProductKenmerk.Waarden.GetAt(i) '= Kenmerk.Waarden.GetAt(i)) } - Else + + If (IsGewijzigd) { - Set WaardenLijst = ##class(%ListOfDataTypes).%New() - Do ##class(TECH.ListUtils).CopyList(Kenmerk.Waarden,WaardenLijst) - Do KenmerkenModifiedEventData.Wijzigingen.Insert(##class(TECH.Events.KenmerkModifiedEventData).%New(UnID,ProductKenmerk.Groep,ProductKenmerk.KenmerkNaam,WaardenLijst)) + Do Kenmerk.Waarden.Clear() + Do ##class(TECH.ListUtils).CopyList(ProductKenmerk.Waarden,Kenmerk.Waarden) + Set Kenmerk.IsEventRaiser = 0 + Set Status = Kenmerk.Save() + If $$$ISERR(Status) + { + Set ErrorMsg = "Kenmerk "_ProductKenmerk.Groep_"||"_ProductKenmerk.KenmerkNaam_" voor UnID "_UnID_" kon niet worden gesaved.("_$$ParseStatus^vhLib(Status)_")" + } + Else + { + Set WaardenLijst = ##class(%ListOfDataTypes).%New() + Do ##class(TECH.ListUtils).CopyList(Kenmerk.Waarden,WaardenLijst) + Do KenmerkenModifiedEventData.Wijzigingen.Insert(##class(TECH.Events.KenmerkModifiedEventData).%New(UnID,ProductKenmerk.Groep,ProductKenmerk.KenmerkNaam,WaardenLijst)) + } } }Else { Index: TECH/Events/KenmerkenDeletedEvent.cls.xml =================================================================== diff -u -r1229 -r1377 --- TECH/Events/KenmerkenDeletedEvent.cls.xml (.../KenmerkenDeletedEvent.cls.xml) (revision 1229) +++ TECH/Events/KenmerkenDeletedEvent.cls.xml (.../KenmerkenDeletedEvent.cls.xml) (revision 1377) @@ -2,6 +2,7 @@ +NIET GEÏMPLEMENTEERD Dit is het bulk event voor KenmerkDeletedEvent. Niet elk event gebeurt in bulk, er moet dus ook naar KenmerkDeletedEvent geluisterd worden. serial Index: TECH/Events/KenmerkenCreatedEvent.cls.xml =================================================================== diff -u -r1229 -r1377 --- TECH/Events/KenmerkenCreatedEvent.cls.xml (.../KenmerkenCreatedEvent.cls.xml) (revision 1229) +++ TECH/Events/KenmerkenCreatedEvent.cls.xml (.../KenmerkenCreatedEvent.cls.xml) (revision 1377) @@ -2,6 +2,7 @@ +NIET GEÏMPLEMENTEERD Dit is het bulk event voor KenmerkCreatedEvent. Niet elk event gebeurt in bulk, er moet dus ook naar KenmerkCreatedEvent geluisterd worden. serial Index: Prod/Kenmerk/DataDefinitie.cls.xml =================================================================== diff -u -r1289 -r1377 --- Prod/Kenmerk/DataDefinitie.cls.xml (.../DataDefinitie.cls.xml) (revision 1289) +++ Prod/Kenmerk/DataDefinitie.cls.xml (.../DataDefinitie.cls.xml) (revision 1377) @@ -100,26 +100,16 @@ if SaveOK set SaveOK = ##super(IsNew) - If $$$ISOK(SaveOK) + If $$$ISOK(SaveOK) && (..IsEventRaiser) { - If (..IsEventRaiser) - { - Set Event = "" - If (IsNew) - { - Set EventData = ##class(TECH.Events.KenmerkCreatedEventData).%New(..UnID,..Kenmerk.Groep.Code,..Kenmerk.Kenmerk,..Waarden) - Set Event = ##class(TECH.Events.KenmerkCreatedEvent).%New(EventData) - } - Else - { - // Het heeft geen zin om op de modified flag van "..Waarden" te gaan controleren, deze zal altijd false zijn. - // De Modified flag blijft bewaard in de onaftersave, maar de save van ..Waarden werd reeds volledig afgewerkt. - Set EventData = ##class(TECH.Events.KenmerkModifiedEventData).%New(..UnID,..Kenmerk.Groep.Code,..Kenmerk.Kenmerk,..Waarden.%ConstructClone(1)) - Set Event = ##class(TECH.Events.KenmerkModifiedEvent).%New(EventData) - } - - Do ##class(TECH.PubSub.OrchestrationContext).GetEventRaiser().RaiseEventAsync(Event) - } + // Het heeft geen zin om op de modified flag van "..Waarden" te gaan controleren, deze zal altijd false zijn. + // De Modified flag blijft bewaard in de onaftersave, maar de save van ..Waarden werd reeds volledig afgewerkt. + // + // Het maakt ook niet uit of het een insert of update is. Dit is altijd een wijziging van de waarden van een kenmerk. + // Bij een insert is de wijziging van "Waarden leeg" naar "Waarden gevuld" + Set EventData = ##class(TECH.Events.KenmerkModifiedEventData).%New(..UnID,..Kenmerk.Groep.Code,..Kenmerk.Kenmerk,..Waarden.%ConstructClone(1)) + Set Event = ##class(TECH.Events.KenmerkModifiedEvent).%New(EventData) + Do ##class(TECH.PubSub.OrchestrationContext).GetEventRaiser().RaiseEventAsync(Event) } //w "After : "_$zobjval(,5,0,3,5),! @@ -149,9 +139,10 @@ Set Object = ..%Open(Oid) If ($IsObject(Object) && Object.IsEventRaiser) { - Set EventData = ##class(TECH.Events.KenmerkDeletedEventData).%New($$$UnID,$$$Groep,$$$Kenm) - Set Event = ##class(TECH.Events.KenmerkDeletedEvent).%New(EventData) - Do ##class(TECH.PubSub.OrchestrationContext).GetEventRaiser().RaiseEventAsync(Event) + // Een "delete" is ook een modify. De waardenlijst wordt van "gevuld" naar "leeg" gewijzigd. + Set EventData = ##class(TECH.Events.KenmerkModifiedEventData).%New($$$UnID,$$$Groep,$$$Kenm,##class(%ListOfDataTypes).%New()) + Set Event = ##class(TECH.Events.KenmerkModifiedEvent).%New(EventData) + Do ##class(TECH.PubSub.OrchestrationContext).GetEventRaiser().RaiseEventAsync(Event) } Do ##class(Prod.Kenmerk.DataIndex).DeleteWaarden($$$Groep,$$$Kenm,$$$UnID) @@ -176,8 +167,9 @@ #define Groep $P(ID,"||",2) #define Kenm $P(ID,"||",3) - Set EventData = ##class(TECH.Events.KenmerkDeletedEventData).%New($$$UnID,$$$Groep,$$$Kenm) - Set Event = ##class(TECH.Events.KenmerkDeletedEvent).%New(EventData) + // Een "delete" is ook een modify. De waardenlijst wordt van "gevuld" naar "leeg" gewijzigd. + Set EventData = ##class(TECH.Events.KenmerkModifiedEventData).%New($$$UnID,$$$Groep,$$$Kenm,##class(%ListOfDataTypes).%New()) + Set Event = ##class(TECH.Events.KenmerkModifiedEvent).%New(EventData) Do ##class(TECH.PubSub.OrchestrationContext).GetEventRaiser().RaiseEventAsync(Event) set ID = {ID} Index: vhUnitTest/APPS/PM/TestKenmerkenService.cls.xml =================================================================== diff -u -r1263 -r1377 --- vhUnitTest/APPS/PM/TestKenmerkenService.cls.xml (.../TestKenmerkenService.cls.xml) (revision 1263) +++ vhUnitTest/APPS/PM/TestKenmerkenService.cls.xml (.../TestKenmerkenService.cls.xml) (revision 1377) @@ -150,7 +150,7 @@ Do $$$AssertEquals(ProductenKenmerken.Kenmerken.GetAt(1).Kenmerken.GetAt(4).Waarden.GetAt(1),"Keuken","Er is een ingevulde eigenschap "_ProductenKenmerken.Kenmerken.GetAt(1).Kenmerken.GetAt(4).KenmerkNaam_" : "_ProductenKenmerken.Kenmerken.GetAt(1).Kenmerken.GetAt(4).Waarden.GetAt(1)_"") ; [Review WV JBL Kenm] wat een geflipte expression :-P ; bestaat er geen method Product.GeefKenmerkViaNaam("MeubelToepassing") i.p.v. GetAt(4) ? - + ///Kenmerk wijzigen en wegschrijven Set Waarden = ##class(%ListOfDataTypes).%New() Do Waarden.Insert(NieuweWaarde) @@ -163,6 +163,23 @@ ///Opnieuw ophalen van kenmerken Set ProductenKenmerken = KenmerkenService.GeefProductKenmerken(PRNrs, KenmerkGroepen) Do $$$AssertEquals(ProductenKenmerken.Kenmerken.GetAt(1).Kenmerken.GetAt(4).Waarden.GetAt(1),NieuweWaarde,"Er is een ingevulde eigenschap "_ProductenKenmerken.Kenmerken.GetAt(1).Kenmerken.GetAt(4).KenmerkNaam_" : "_NieuweWaarde_"") + + // We gaan nog eens opnieuw bewaren. Dit zou geen save mogen trigger => zelfde waarden is geen save. + + Set %HeeftModEventOntvangen = 0 + Set ModifiedSubscription = ##class(TECH.PubSub.EventSubscription).%New("KenmerkenModifiedEvent",..%ClassName(1),"KenmerkenModEventListener") + Do ModifiedSubscription.%Save() + + Set Waarden = ##class(%ListOfDataTypes).%New() + Do Waarden.Insert(NieuweWaarde) + Set ProductenKenmerken.Kenmerken.GetAt(1).Kenmerken.GetAt(4).Waarden = Waarden + + Do KenmerkenService.BewaarProductenKenmerken(ProductenKenmerken) + + Do $$$AssertFalse(%HeeftModEventOntvangen,"De mod event werd niet opgegooid omdat er geen wijzigingen waren") + + Do ModifiedSubscription.%DeleteId(ModifiedSubscription.%Id()) + Kill %HeeftModEventOntvangen ]]> @@ -210,6 +227,7 @@ Do $$$AssertFalse(%HeeftModEventOntvangen,"De bulk wijzig event is niet geraised door de rollback") Do ModifiedSubscription.%DeleteId(ModifiedSubscription.%Id()) + Kill %HeeftModEventOntvangen k ProductenKenmerken @@ -256,6 +274,7 @@ Do $$$AssertTrue(%HeeftModEventOntvangen,"De bulk wijzig event is opgevangen en had meerdere wijziging data objecten") Do ModifiedSubscription.%DeleteId(ModifiedSubscription.%Id()) + Kill %HeeftModEventOntvangen k ProductenKenmerken Index: TECH/Events/KenmerkDeletedEvent.cls.xml =================================================================== diff -u -r1229 -r1377 --- TECH/Events/KenmerkDeletedEvent.cls.xml (.../KenmerkDeletedEvent.cls.xml) (revision 1229) +++ TECH/Events/KenmerkDeletedEvent.cls.xml (.../KenmerkDeletedEvent.cls.xml) (revision 1377) @@ -2,6 +2,7 @@ +NIET GEÏMPLEMENTEERD Sommige KenmerkDeletedEvents worden in bulk gegenereerd. Daarom moet in dit geval ook geluisterd worden naar KenmerkenDeletedEvent. serial Index: TECH/Events/KenmerkCreatedEvent.cls.xml =================================================================== diff -u -r1229 -r1377 --- TECH/Events/KenmerkCreatedEvent.cls.xml (.../KenmerkCreatedEvent.cls.xml) (revision 1229) +++ TECH/Events/KenmerkCreatedEvent.cls.xml (.../KenmerkCreatedEvent.cls.xml) (revision 1377) @@ -2,6 +2,7 @@ +NIET GEÏMPLEMENTEERD Sommige KenmerkCreatedEvents worden in bulk gegenereerd. Daarom moet in dit geval ook geluisterd worden naar KenmerkenCreatedEvent. serial