Index: DOM/ProdRes/impl/VerwachteInvoerAPIimpl.cls.xml =================================================================== diff -u -r2161 -r2169 --- DOM/ProdRes/impl/VerwachteInvoerAPIimpl.cls.xml (.../VerwachteInvoerAPIimpl.cls.xml) (revision 2161) +++ DOM/ProdRes/impl/VerwachteInvoerAPIimpl.cls.xml (.../VerwachteInvoerAPIimpl.cls.xml) (revision 2169) @@ -83,8 +83,8 @@ Set AantalTeLinkenInvoer = VerwachteInvoer.GeefAantal() - VerwachteInvoer.GeefAantalGelinkt() - Set $ZTRAP = "RegistreerFout" Set OperatieScope = ##class(TECH.OperatieScope).StartMetTx() + Set $ZTRAP = "RegistreerFout" Set ProductReservatieIterator = VerwachteUitvoer.GeefProductReservatieIterator(ProductID) While (AantalTeLinkenInvoer > 0 && ProductReservatieIterator.HasNext()) { @@ -108,12 +108,14 @@ If ($$$ISERR(Status)) { Do ##class(TECH.ExceptionHandler).Throw(##class(TECH.Exceptions.SaveFailedException).%New("Kon de reservatie niet opslaan",Status)) } } } + Set $ZTRAP = "" Do OperatieScope.Gelukt() Quit RegistreerFout Set $ZTRAP = "" + Set Exceptie = ##class(TECH.ExceptionHandler).Catch() Do OperatieScope.Gefaald() - Do ##class(TECH.ExceptionHandler).Rethrow() + Do ##class(TECH.ExceptionHandler).Rethrow(Exceptie) ]]> @@ -168,5 +170,153 @@ Quit SamenvoegVoorstellen ]]> + + +VerwachteInvoerID:%String,NieuweVerwachteInvoer:DOM.ProdRes.dto.VerwachteInvoerInfo +DOM.ProdRes.VerwachteInvoer + AantalGelinkt)) + { + Set InvoerUitvoerLink = InvoerUitvoerLinkIterator.Next() + Set AantalGelinkt = AantalGelinkt + InvoerUitvoerLink.GeefAantalProducten() + } + + // Als er überhaupt een invoer-uitvoer-link was komen we in deze if + If ($IsObject(InvoerUitvoerLink)) + { + // Het object dat aanwezig is, is degene die er heeft voor gezorgd dat de while lus is gestopt. + // Als het aantal gelinkt groter is dan moet het de invoer-uitvoer-link gesplitst worden. + // Bij gelijke aantallen moeten we niks extra doen met dit object want dan voldoet de verwachte invoer net om de link te voldoen. + If (VerwachteInvoer.GeefAantal() < AantalGelinkt) + { + Set AantalAfsplitsen = AantalGelinkt - VerwachteInvoer.GeefAantal() + Do InvoerUitvoerLink.ZetAantalProducten(InvoerUitvoerLink.GeefAantalProducten()-AantalAfsplitsen) + Set NieuweInvoerUitvoerLink = ##class(DOM.ProdRes.impl.InvoerUitvoerLinkImpl).%New(AantalAfsplitsen) + Set Status = NieuweInvoerUitvoerLink.%Save() + If ($$$ISERR(Status)) { Do ##class(TECH.ExceptionHandler).Throw(##class(TECH.Exceptions.SaveFailedException).%New("Kon de InvoerUitvoerLink niet opslaan",Status)) } + Do NieuweVerwachteInvoer.RegistreerInvoerUitvoerLink(NieuweInvoerUitvoerLink) + Set VerwachteUitvoerReservatie = InvoerUitvoerLink.GeefVerwachteUitvoerReservatie() + Do VerwachteUitvoerReservatie.RegistreerInvoerUitvoerLink(NieuweInvoerUitvoerLink) + Set Status = VerwachteUitvoerReservatie.%Save() + If ($$$ISERR(Status)) { Do ##class(TECH.ExceptionHandler).Throw(##class(TECH.Exceptions.SaveFailedException).%New("Kon de verwachte uitvoer reservatie niet opslaan",Status)) } + } + // Alle resterende invoer-uitvoer-linken moeten verplaatst worden naar de nieuwe verwachte invoer + While (InvoerUitvoerLinkIterator.HasNext()) + { + Set InvoerUitvoerLink = InvoerUitvoerLinkIterator.Next() + Do VerwachteInvoer.VerwijderInvoerUitvoerLink(InvoerUitvoerLink) + Do NieuweVerwachteInvoer.RegistreerInvoerUitvoerLink(InvoerUitvoerLink) + } + } + + Set Status = VerwachteInvoer.%Save() + If ($$$ISERR(Status)) { Do ##class(TECH.ExceptionHandler).Throw(##class(TECH.Exceptions.SaveFailedException).%New("Kon de originele verwachte invoer niet opslaan",Status)) } + Set Status = NieuweVerwachteInvoer.%Save() + If ($$$ISERR(Status)) { Do ##class(TECH.ExceptionHandler).Throw(##class(TECH.Exceptions.SaveFailedException).%New("Kon de nieuwe verwachte invoer niet opslaan",Status)) } + + Set $ZTRAP = "" + Do OperatieScope.Gelukt() + + Quit NieuweVerwachteInvoer +SplitsError + Set $ZTRAP = "" + Set Exceptie = ##class(TECH.ExceptionHandler).Catch() + Do OperatieScope.Gefaald() + Do ##class(TECH.ExceptionHandler).Rethrow(Exceptie) +]]> + + + + +De verwachte invoeren moeten dezelfde producten bevatten. De samengevoegde verwachte invoer wordt teruggegeven. +De samen te voegen verwachte invoeren worden verwijderd. +VerwachteInvoerIDs:%ListOfDataTypes,DueIn:%TimeStamp,TransactieReferentie:%String,TransactieLijnReferentie:%String +DOM.ProdRes.VerwachteInvoer +reservatie) hetzelfde zijn. Deze kunnen we ook samenvoegen. + Set InvoerUitvoerLinkPerReservatie = ##class(%ArrayOfObjects).%New() + Set InvoerUitvoerLinkIterator = SamengevoegdeVerwachteInvoer.GeefInvoerUitvoerLinkIterator() + While (InvoerUitvoerLinkIterator.HasNext()) + { + Set InvoerUitvoerLink = InvoerUitvoerLinkIterator.Next() + Set VerwachteUitvoerReservatie = InvoerUitvoerLink.GeefVerwachteUitvoerReservatie() + Set VerwachteUitvoerReservatieID = VerwachteUitvoerReservatie.%Id() + If ('InvoerUitvoerLinkPerReservatie.IsDefined(VerwachteUitvoerReservatieID)) + { + Do InvoerUitvoerLinkPerReservatie.SetAt(InvoerUitvoerLink, VerwachteUitvoerReservatieID) + } + Else + { + Set BestaandeInvoerUitvoerLink = InvoerUitvoerLinkPerReservatie.GetAt(VerwachteUitvoerReservatieID) + Do BestaandeInvoerUitvoerLink.ZetAantalProducten(BestaandeInvoerUitvoerLink.GeefAantalProducten() + InvoerUitvoerLink.GeefAantalProducten()) + Do VerwachteUitvoerReservatie.VerwijderInvoerUitvoerLink(InvoerUitvoerLink) + Set Status = VerwachteUitvoerReservatie.%Save() + If ($$$ISERR(Status)) { Do ##class(TECH.ExceptionHandler).Throw(##class(TECH.Exceptions.SaveFailedException).%New("Kon de nieuwe verwachte invoer niet opslaan",Status)) } + Do SamengevoegdeVerwachteInvoer.VerwijderInvoerUitvoerLink(InvoerUitvoerLink) + Set Status = InvoerUitvoerLink.%DeleteId(InvoerUitvoerLink.%Id()) + If ($$$ISERR(Status)) { Do ##class(TECH.ExceptionHandler).Throw(##class(TECH.Exceptions.StatusException).%New(##class(TECH.enu.ExceptionCode).GeneralError(),"Kon invoer-uitvoer-link "_InvoerUitvoerLink.%Id()_" niet verwijderen",Status)) } + } + } + + Set Status = SamengevoegdeVerwachteInvoer.%Save() + If ($$$ISERR(Status)) { Do ##class(TECH.ExceptionHandler).Throw(##class(TECH.Exceptions.SaveFailedException).%New("Kon de nieuwe verwachte invoer niet opslaan",Status)) } + + Set $ZTRAP = "" + Do OperatieScope.Gelukt() + } + + Quit SamengevoegdeVerwachteInvoer +SamenvoegError + Set $ZTRAP = "" + Set Exceptie = ##class(TECH.ExceptionHandler).Catch() + Do OperatieScope.Gefaald() + Do ##class(TECH.ExceptionHandler).Rethrow(Exceptie) +]]> + Index: DOM/ProdRes/impl/ReservatieImpl.cls.xml =================================================================== diff -u -r2161 -r2169 --- DOM/ProdRes/impl/ReservatieImpl.cls.xml (.../ReservatieImpl.cls.xml) (revision 2161) +++ DOM/ProdRes/impl/ReservatieImpl.cls.xml (.../ReservatieImpl.cls.xml) (revision 2169) @@ -181,16 +181,19 @@ While ($$$ISOK(Status) && InvoerUitvoerLinkIterator.HasNext()) { Set InvoerUitvoerLink = InvoerUitvoerLinkIterator.Next() - Set VerwachteInvoer = InvoerUitvoerLink.GeefVerwachteInvoer() - If ($IsObject(VerwachteInvoer)) + If ($IsObject(InvoerUitvoerLink)) { - Do VerwachteInvoer.VerwijderInvoerUitvoerLink(InvoerUitvoerLink) - Set Status = VerwachteInvoer.%Save() + Set VerwachteInvoer = InvoerUitvoerLink.GeefVerwachteInvoer() + If ($IsObject(VerwachteInvoer)) + { + Do VerwachteInvoer.VerwijderInvoerUitvoerLink(InvoerUitvoerLink) + Set Status = VerwachteInvoer.%Save() + } + If ($$$ISOK(Status)) + { + Set Status = InvoerUitvoerLink.%DeleteId(InvoerUitvoerLink.%Id()) + } } - If ($$$ISOK(Status)) - { - Set Status = InvoerUitvoerLink.%DeleteId(InvoerUitvoerLink.%Id()) - } } } Quit Status Index: DOM/ProdRes/impl/InvoerUitvoerLinkImpl.cls.xml =================================================================== diff -u -r2161 -r2169 --- DOM/ProdRes/impl/InvoerUitvoerLinkImpl.cls.xml (.../InvoerUitvoerLinkImpl.cls.xml) (revision 2161) +++ DOM/ProdRes/impl/InvoerUitvoerLinkImpl.cls.xml (.../InvoerUitvoerLinkImpl.cls.xml) (revision 2169) @@ -17,7 +17,7 @@ 1 %Status @@ -52,15 +52,15 @@ DOM.ProdRes.Reservatie Index: DOM/ProdRes/VerwachteInvoerAPI.cls.xml =================================================================== diff -u -r2161 -r2169 --- DOM/ProdRes/VerwachteInvoerAPI.cls.xml (.../VerwachteInvoerAPI.cls.xml) (revision 2161) +++ DOM/ProdRes/VerwachteInvoerAPI.cls.xml (.../VerwachteInvoerAPI.cls.xml) (revision 2169) @@ -12,15 +12,15 @@ -Voert ook de save uit van de verwachte invoer +Voert ook de save uit van de verwachte invoer. 1 VerwachteInvoerInfo:DOM.ProdRes.dto.VerwachteInvoerInfo DOM.ProdRes.VerwachteInvoer -Gaat zelf na of een ID bestaat en gooit een exceptie indien dit niet het geval is +Gaat zelf na of een ID bestaat en gooit een exceptie indien dit niet het geval is. 1 VerwachteInvoerID:%String @@ -50,5 +50,22 @@ VerwachteUitvoerIDs:%ListOfDataTypes DOM.ProdRes.dto.SamenvoegVoorstellen + + + +Geeft de afgesplitste verwachte invoer terug. +1 +VerwachteInvoerID:%String,NieuweVerwachteInvoer:DOM.ProdRes.dto.VerwachteInvoerInfo +DOM.ProdRes.VerwachteInvoer + + + + +De verwachte invoeren moeten dezelfde producten bevatten. De samengevoegde verwachte invoer wordt teruggegeven. +De samen te voegen verwachte invoeren worden verwijderd. +1 +VerwachteInvoerIDs:%ListOfDataTypes,DueIn:%TimeStamp,TransactieReferentie:%String,TransactieLijnReferentie:%String +DOM.ProdRes.VerwachteInvoer + Index: DOM/ProdRes/impl/VerwachteInvoerImpl.cls.xml =================================================================== diff -u -r2161 -r2169 --- DOM/ProdRes/impl/VerwachteInvoerImpl.cls.xml (.../VerwachteInvoerImpl.cls.xml) (revision 2161) +++ DOM/ProdRes/impl/VerwachteInvoerImpl.cls.xml (.../VerwachteInvoerImpl.cls.xml) (revision 2169) @@ -49,7 +49,7 @@ + +DueIn:%TimeStamp + + + %String %TimeStamp + +1 +DueIn:%TimeStamp + + 1 %String Index: TECH/ExceptionHandler.cls.xml =================================================================== diff -u -r2151 -r2169 --- TECH/ExceptionHandler.cls.xml (.../ExceptionHandler.cls.xml) (revision 2151) +++ TECH/ExceptionHandler.cls.xml (.../ExceptionHandler.cls.xml) (revision 2169) @@ -60,13 +60,26 @@ -Laat de callstack intakt +Laat de callstack intakt. Exceptie is exceptioneel. Wanneer deze is leeggelaten wordt de bestaande exceptie gerethrowed (indien deze niet werd gecatched uiteraard!) +In geval van een transactie kan de rethrow zonder exceptie parameter niet gebruikt worden omdat de $zerror ook wordt gerollbacked. +Volgende stramien moet dan gebruikt worden: + Set Exceptie = ##class(TECH.ExceptionHandler).Catch() + TROLLBACK + Do ##class(TECH.ExceptionHandler).Rethrow(Exceptie) 1 +Exceptie:TECH.IException Index: vhUnitTest/DOM/ProdRes/TestVerwachteInvoerAPI.cls.xml =================================================================== diff -u -r2161 -r2169 --- vhUnitTest/DOM/ProdRes/TestVerwachteInvoerAPI.cls.xml (.../TestVerwachteInvoerAPI.cls.xml) (revision 2161) +++ vhUnitTest/DOM/ProdRes/TestVerwachteInvoerAPI.cls.xml (.../TestVerwachteInvoerAPI.cls.xml) (revision 2169) @@ -75,7 +75,7 @@ // // Uitvoer Invoer // +------------+ +------------+ - // | P1 50 | ---40----> | P1 210 | + // | P1 50 | ----40---> | P1 210 | // | P1 170 | ---170---> | | // | | +------------+ // | | +------------+ @@ -184,15 +184,117 @@ Set SamenvoegVoorstellen = VerwachteInvoerAPI.GeefSamenvoegVoorstellen(VerwachteUitvoerIDs) Do $$$AssertEquals(SamenvoegVoorstellen.Count(),1,"Er is 1 samenvoeg voorstel") Set SamenvoegVoorstel = SamenvoegVoorstellen.GetAt(1) - Do $$$AssertEquals(SamenvoegVoorstel.Aantal,15+18,"33 producten kunnen samengevoegd worden") Do $$$AssertEquals(SamenvoegVoorstel.ProductID,"P2","P2 kan worden samengevoegd") + Do $$$AssertEquals(SamenvoegVoorstel.Aantal,15+18,"33 producten kunnen samengevoegd worden") + // Voor de splitsing die we gaan doen eerst de huidige toestand controleren + Set Reservatie1LinkIterator = Reservatie1.GeefInvoerUitvoerLinkIterator() + Set InvoerUitvoerLink = Reservatie1LinkIterator.Next() + Do $$$AssertEquals(InvoerUitvoerLink.GeefAantalProducten(),40,"40 producten gelinkt") + Do $$$AssertEquals(InvoerUitvoerLink.GeefVerwachteInvoer(),VerwachteInvoer1,"De verwachte invoer") + Do $$$AssertEquals(InvoerUitvoerLink.GeefVerwachteUitvoerReservatie(),Reservatie1,"De reservatie") + Do $$$AssertFalse(Reservatie1LinkIterator.HasNext(),"Er is geen volgende link") + + Set Reservatie1LinkIterator = Reservatie2.GeefInvoerUitvoerLinkIterator() + Set InvoerUitvoerLink = Reservatie1LinkIterator.Next() + Do $$$AssertEquals(InvoerUitvoerLink.GeefAantalProducten(),170,"170 producten gelinkt") + Do $$$AssertEquals(InvoerUitvoerLink.GeefVerwachteInvoer(),VerwachteInvoer1,"De verwachte invoer") + Do $$$AssertEquals(InvoerUitvoerLink.GeefVerwachteUitvoerReservatie(),Reservatie2,"De reservatie") + Do $$$AssertFalse(Reservatie1LinkIterator.HasNext(),"Er is geen volgende link") + + // Eerste verwachte invoer splitsen in 170 - 40 + + Set VerwachteInvoerInfo = ##class(DOM.ProdRes.dto.VerwachteInvoerInfo).%New() + Set VerwachteInvoerInfo.Aantal = 40 + Set VerwachteInvoerInfo.ProductID = "P1" + Set VerwachteInvoerInfo.TransactieReferentie = "UT invoer1" + Set VerwachteInvoerInfo.TransactieLijnReferentie = "UT invoer1 lijn2" + Set NieuweVerwachteInvoer = VerwachteInvoerAPI.SplitsVerwachteInvoer(VerwachteInvoer1.%Id(),VerwachteInvoerInfo) + + // Nagaan of de splitsing correct was en of de invoer-uitvoer-linken correct zijn herlegd + + Set Reservatie1LinkIterator = Reservatie1.GeefInvoerUitvoerLinkIterator() + Set InvoerUitvoerLink = Reservatie1LinkIterator.Next() + Do $$$AssertEquals(InvoerUitvoerLink.GeefAantalProducten(),40,"40 producten gelinkt") + Do $$$AssertEquals(InvoerUitvoerLink.GeefVerwachteInvoer(),NieuweVerwachteInvoer,"De verwachte invoer bij reservatie 1") + Do $$$AssertEquals(InvoerUitvoerLink.GeefVerwachteUitvoerReservatie(),Reservatie1,"De reservatie") + Do $$$AssertFalse(Reservatie1LinkIterator.HasNext(),"Er is geen volgende link") + + Set Reservatie2LinkIterator = Reservatie2.GeefInvoerUitvoerLinkIterator() + Set InvoerUitvoerLink = Reservatie2LinkIterator.Next() + Do $$$AssertEquals(InvoerUitvoerLink.GeefAantalProducten(),170,"170 producten gelinkt") + Do $$$AssertEquals(InvoerUitvoerLink.GeefVerwachteInvoer(),VerwachteInvoer1,"De verwachte invoer bij reservatie 2") + Do $$$AssertEquals(InvoerUitvoerLink.GeefVerwachteUitvoerReservatie(),Reservatie2,"De reservatie") + Do $$$AssertFalse(Reservatie1LinkIterator.HasNext(),"Er is geen volgende link") + + // De splitsing terug samenvoegen + + Set VerwachteInvoerIDs = ##class(%ListOfDataTypes).%New() + Do VerwachteInvoerIDs.Insert(VerwachteInvoer1.%Id()) + Do VerwachteInvoerIDs.Insert(NieuweVerwachteInvoer.%Id()) + Set SamengevoegdeVerwachteInvoer = VerwachteInvoerAPI.VoegVerwachteInvoerenSamen(VerwachteInvoerIDs,"2011-09-23 08:57:19",VerwachteInvoer1.GeefTransactieReferentie(),VerwachteInvoer1.GeefTransactieLijnReferentie()) + + Do $$$AssertEquals(SamengevoegdeVerwachteInvoer.GeefAantal(),210,"Het aantal producten is terug samengevoegd") + Set InvoerUitvoerLinkIterator = SamengevoegdeVerwachteInvoer.GeefInvoerUitvoerLinkIterator() + Do $$$AssertTrue(InvoerUitvoerLinkIterator.HasNext(),"De verwachte invoer heeft zeker 1 invoer-uitvoer-link") + Do InvoerUitvoerLinkIterator.Next() + Do $$$AssertTrue(InvoerUitvoerLinkIterator.HasNext(),"De verwachte invoer heeft ook een 2de invoer-uitvoer-link") + Do InvoerUitvoerLinkIterator.Next() + Do $$$AssertFalse(InvoerUitvoerLinkIterator.HasNext(),"De verwachte invoer heeft geen 3de invoer-uitvoer-link") + + // Opnieuw opsplitsen maar nu met 180 - 30, nu moeten er een invoer-uitvoer-link opgesplitst worden + + Set VerwachteInvoerInfo = ##class(DOM.ProdRes.dto.VerwachteInvoerInfo).%New() + Set VerwachteInvoerInfo.Aantal = 30 + Set VerwachteInvoerInfo.ProductID = "P1" + Set VerwachteInvoerInfo.TransactieReferentie = "UT invoer1" + Set VerwachteInvoerInfo.TransactieLijnReferentie = "UT invoer1 lijn2" + Set NieuweVerwachteInvoer = VerwachteInvoerAPI.SplitsVerwachteInvoer(VerwachteInvoer1.%Id(),VerwachteInvoerInfo) + + // Nagaan of de splitsing correct was en of de invoer-uitvoer-linken correct zijn herlegd + + Set Reservatie1LinkIterator = Reservatie1.GeefInvoerUitvoerLinkIterator() + Set InvoerUitvoerLink = Reservatie1LinkIterator.Next() + Do $$$AssertEquals(InvoerUitvoerLink.GeefAantalProducten(),10,"10 producten gelinkt") + Do $$$AssertEquals(InvoerUitvoerLink.GeefVerwachteInvoer(),VerwachteInvoer1,"De verwachte invoer bij reservatie 1") + Do $$$AssertEquals(InvoerUitvoerLink.GeefVerwachteUitvoerReservatie(),Reservatie1,"De reservatie") + Do $$$AssertTrue(Reservatie1LinkIterator.HasNext(),"Er is een volgende link") + + Set InvoerUitvoerLink = Reservatie1LinkIterator.Next() + Do $$$AssertEquals(InvoerUitvoerLink.GeefAantalProducten(),30,"30 producten gelinkt") + Do $$$AssertEquals(InvoerUitvoerLink.GeefVerwachteInvoer(),NieuweVerwachteInvoer,"De verwachte invoer bij reservatie 1") + Do $$$AssertEquals(InvoerUitvoerLink.GeefVerwachteUitvoerReservatie(),Reservatie1,"De reservatie van de gesplitste link") + Do $$$AssertFalse(Reservatie1LinkIterator.HasNext(),"Er is geen volgende link") + + Set Reservatie2LinkIterator = Reservatie2.GeefInvoerUitvoerLinkIterator() + Set InvoerUitvoerLink = Reservatie2LinkIterator.Next() + Do $$$AssertEquals(InvoerUitvoerLink.GeefAantalProducten(),170,"170 producten gelinkt") + Do $$$AssertEquals(InvoerUitvoerLink.GeefVerwachteInvoer(),VerwachteInvoer1,"De verwachte invoer bij reservatie 2") + Do $$$AssertEquals(InvoerUitvoerLink.GeefVerwachteUitvoerReservatie(),Reservatie2,"De reservatie") + Do $$$AssertFalse(Reservatie1LinkIterator.HasNext(),"Er is een volgende link") + + // De splitsing terug samenvoegen, ook de gesplitste invoer-uitvoer-link moet samengevoegd zijn + + Set VerwachteInvoerIDs = ##class(%ListOfDataTypes).%New() + Do VerwachteInvoerIDs.Insert(VerwachteInvoer1.%Id()) + Do VerwachteInvoerIDs.Insert(NieuweVerwachteInvoer.%Id()) + Set SamengevoegdeVerwachteInvoer = VerwachteInvoerAPI.VoegVerwachteInvoerenSamen(VerwachteInvoerIDs,"2011-09-23 08:57:19",VerwachteInvoer1.GeefTransactieReferentie(),VerwachteInvoer1.GeefTransactieLijnReferentie()) + + Do $$$AssertEquals(SamengevoegdeVerwachteInvoer.GeefAantal(),210,"Het aantal producten is terug samengevoegd") + Set InvoerUitvoerLinkIterator = SamengevoegdeVerwachteInvoer.GeefInvoerUitvoerLinkIterator() + Do $$$AssertTrue(InvoerUitvoerLinkIterator.HasNext(),"De verwachte invoer heeft zeker 1 invoer-uitvoer-link") + Do InvoerUitvoerLinkIterator.Next() + Do $$$AssertTrue(InvoerUitvoerLinkIterator.HasNext(),"De verwachte invoer heeft ook een 2de invoer-uitvoer-link") + Do InvoerUitvoerLinkIterator.Next() + Do $$$AssertFalse(InvoerUitvoerLinkIterator.HasNext(),"De verwachte invoer heeft geen 3de invoer-uitvoer-link") + // Opkuis data Do VerwachteUitvoer.%DeleteId(VerwachteUitvoer.%Id()) Do VerwachteInvoer1.%DeleteId(VerwachteInvoer1.%Id()) Do VerwachteInvoer2.%DeleteId(VerwachteInvoer2.%Id()) Do VerwachteInvoer3.%DeleteId(VerwachteInvoer3.%Id()) + Do NieuweVerwachteInvoer.%DeleteId(NieuweVerwachteInvoer.%Id()) ]]> @@ -213,22 +315,24 @@ %Status