Index: Prod/Kenmerk/DataDefinitie.cls.xml =================================================================== diff -u -r1565 -r1580 --- Prod/Kenmerk/DataDefinitie.cls.xml (.../DataDefinitie.cls.xml) (revision 1565) +++ Prod/Kenmerk/DataDefinitie.cls.xml (.../DataDefinitie.cls.xml) (revision 1580) @@ -116,14 +116,27 @@ + +************** !!!! **************** !!! *************************************** +KenmerkGroep en KenmerkNaam dienen ENKEL voor indexen te kunnen maken. +Deze mogen NOOIT door programma code gebruikt worden of aangeroepen worden !!! +************** !!!! **************** !!! *************************************** %String +1 + +************** !!!! **************** !!! *************************************** +KenmerkGroep en KenmerkNaam dienen ENKEL voor indexen te kunnen maken. +Deze mogen NOOIT door programma code gebruikt worden of aangeroepen worden !!! %String +1 + +************** !!!! **************** !!! *************************************** IsNew:%Library.Boolean=1 0 %Library.Status @@ -258,7 +271,7 @@ %Status + + + +1 +UnID:%String,GroepID:%String +1 +Groep = :GroepID) OR (:GroepID=$$$CodeAllGroups)) ) &sql(OPEN crsDP) - For &sql(FETCH crsDP) Quit:SQLCODE Do ##class(Prod.Kenmerk.DataDefinitie).%DeleteId(DDefID) + For &sql(FETCH crsDP) Quit:SQLCODE Set HasDeleteKenmerk = 1 Do ##class(Prod.Kenmerk.DataDefinitie).%DeleteId(DDefID) &sql(CLOSE crsDP) - Quit + Quit HasDeleteKenmerk ]]> @@ -490,6 +523,7 @@ Quit:(FromUnID="")||(ToUnID="") $$$ERROR($$$GeneralError,$$$msgUnIDisEmpty) Set sc=$$$OK + If $G(lbGroepIDs)="" Set sc=$$cvpCopyGroep(FromUnID,ToUnID,"*",.lbExcludeGroepIDs) ; Alle groepen Else Do . For i=1:1:$LL(lbGroepIDs) Do Quit:($$$ISERR(sc)) @@ -828,6 +862,19 @@ ORDER BY Waarde + + +JBL + 2011-06-30 +Performanter ophalen kenmerken +%Library.SQLQuery +KenmerkGroepen:%String,UnIDs:%String + + SELECT UnID, KenmerkNaam, Waarden + FROM Prod_Kenmerk.DataDefinitie + where KenmerkGroep IN ( :KenmerkGroepen ) AND UnID In ( :UnIDs ) + ORDER BY ID + + 1 KenmerkUnID Index: DOM/PM/ProductAPI.cls.xml =================================================================== diff -u -r1507 -r1580 --- DOM/PM/ProductAPI.cls.xml (.../ProductAPI.cls.xml) (revision 1507) +++ DOM/PM/ProductAPI.cls.xml (.../ProductAPI.cls.xml) (revision 1580) @@ -61,13 +61,15 @@ Geef de enige kenmerkenset van het opgegeven PRNr 1 PRNr:%Integer,KenmerkenGroep:%String +DOM.PM.ProductKenmerkenSet Geef meerdere kenmerkenset van het opgegeven PRNr, bij multiples 1 PRNr:%Integer,KenmerkenGroep:%String +DOM.PM.ProductKenmerkenSets Index: vhUnitTest/APPS/PM/TestKenmerkenService.cls.xml =================================================================== diff -u -r1539 -r1580 --- vhUnitTest/APPS/PM/TestKenmerkenService.cls.xml (.../TestKenmerkenService.cls.xml) (revision 1539) +++ vhUnitTest/APPS/PM/TestKenmerkenService.cls.xml (.../TestKenmerkenService.cls.xml) (revision 1580) @@ -63,7 +63,7 @@ do $$$AssertEquals(ProductenKenmerken.Kenmerken.GetAt(2).KenmerkenGroepen.GetAt(1).Sets.GetAt(1).Kenmerken.Count(),15,"Juiste aantal gedefineerde kenmerken.") - do $$$AssertEquals(ProductenKenmerken.Kenmerken.GetAt(2).KenmerkenGroepen.GetAt(1).Sets.GetAt(1).Kenmerken.GetAt(1).Naam,"ProductType","Kenmerknaam is correct ingevuld.") + do $$$AssertEquals(ProductenKenmerken.Kenmerken.GetAt(2).KenmerkenGroepen.GetAt(1).Sets.GetAt(1).Kenmerken.GetAt(1).Naam,"Diepte","Kenmerknaam is correct ingevuld.") ]]> @@ -92,7 +92,7 @@ do $$$AssertEquals(ProductenKenmerken.Kenmerken.GetAt(1).KenmerkenGroepen.GetAt(1).Sets.GetAt(2).Kenmerken.Count(),19,"Juiste aantal gedefineerde kenmerken ProductKenmerken2.") - do $$$AssertEquals(ProductenKenmerken.Kenmerken.GetAt(1).KenmerkenGroepen.GetAt(1).Sets.GetAt(2).Kenmerken.GetAt(1).Naam,"ProductType","Kenmerknaam is correct ingevuld.") + do $$$AssertEquals(ProductenKenmerken.Kenmerken.GetAt(1).KenmerkenGroepen.GetAt(1).Sets.GetAt(2).Kenmerken.GetAt(1).Naam,"BOWeten","Kenmerknaam is correct ingevuld.") ]]> Index: APPS/PM/KenmerkenService.cls.xml =================================================================== diff -u -r1563 -r1580 --- APPS/PM/KenmerkenService.cls.xml (.../KenmerkenService.cls.xml) (revision 1563) +++ APPS/PM/KenmerkenService.cls.xml (.../KenmerkenService.cls.xml) (revision 1580) @@ -51,92 +51,125 @@ $$$chkRequiredParameter(PRNrs) $$$chkIsObject(PRNrs) - Set ProductenKenmerken = ##class(APPS.PM.dto.Kenm.ProductenKenmerken).%New() Set ProductAPI = ##class(DOM.DomeinContext).Instance().GeefProductAPI() + Set ProductService = ##class(APPS.PM.ProductService).%New() - // nadien nagaan of er iets in kenmerkGroepen zit if ('$IsObject(KenmerkGroepen) || (KenmerkGroepen.Count() = 0)) { Set KenmerkGroepen = ##class(Prod.Kenmerk.MetaGroep).GetAllMetaGroupsAsList() } - Set ProductAPI = ##class(DOM.DomeinContext).Instance().GeefProductAPI() - Set ProductService = ##class(APPS.PM.ProductService).%New() - Set RS=##class(%ResultSet).%New("Prod.Kenmerk.MetaDefinitie:FilterMetaDefsViaGroep") + + /// UnIDs verzamelen + Set SQLUnIDs = "" + Set SQLUnIDsReedsToegevoegd = 0 Set PRNrIterator = ##class(TECH.ListIterator).%New(PRNrs) While (PRNrIterator.HasNext()) { - Set PRNr = PRNrIterator.Next() - + Set PRNr = PRNrIterator.Next() Set Product = ProductAPI.GeefProduct(PRNr) - Set ProductKenmerken = ##class(APPS.PM.dto.Kenm.ProductKenmerken).%New() - Set ProductKenmerken.PRNr = PRNr - - Set KenmerkGroepIterator = ##class(TECH.ListIterator).%New(KenmerkGroepen) - While (KenmerkGroepIterator.HasNext()) - { - Set KenmerkGroep = KenmerkGroepIterator.Next() - - Set ProductKenmerkenGroep = ##class(APPS.PM.dto.Kenm.ProductKenmerkenGroep).%New() - Set ProductKenmerkenGroep.Sets = ##class(%ListOfObjects).%New() - Set ProductKenmerkenGroep.Naam = KenmerkGroep - - Set KenmerkenSets = ProductAPI.GeefProductKenmerkenSets(PRNr, KenmerkGroep) - + If ($IsObject(Product)){ + /// UnIDs verzamelen van dit PRNr Set UnIDs = ##class(%ListOfDataTypes).%New() Set Multiples = Product.GeefMultiples() If (Multiples.Count() > 0){ Set UnIDs = Multiples }Else{ Do UnIDs.Insert(PRNr) } + + /// UnIDs naar SQLUnIDs Set UnIDIt = ##class(TECH.ListIterator).%New(UnIDs) - While (UnIDIt.HasNext()){ - Set UnID = UnIDIt.Next() - Set Kenmerken = ##class(%ListOfObjects).%New() - - Set tmpStatus=RS.Execute(KenmerkGroep) - If $$$ISOK(tmpStatus) - { - While (RS.Next()) - { - Set DataDefID= ##class(Prod.Kenmerk.DataDefinitie).BuildDataDefinitionID(KenmerkGroep,UnID,RS.Get("Kenmerk")) - If ##class(Prod.Kenmerk.DataDefinitie).%ExistsId(DataDefID) - { - Set tmpDataDef=##class(Prod.Kenmerk.DataDefinitie).%OpenId(DataDefID) - Set ProductKenmerk = ##class(APPS.PM.dto.Kenm.ProductKenmerk).%New() - Set ProductKenmerk.Naam = tmpDataDef.GeefKenmerk().Kenmerk - Set ProductKenmerk.Waarden = tmpDataDef.Waarden - Do Kenmerken.Insert(ProductKenmerk) - } - } + While (UnIDIt.HasNext()){ + If (SQLUnIDsReedsToegevoegd){ + Set SQLUnIDs = SQLUnIDs_", " } - - /// Enkel Set toevoegen als er kenmerken zijn voor die set. - If (Kenmerken.Count() > 0){ - Set ProductKenmerkenSet = ##class(APPS.PM.dto.Kenm.ProductKenmerkenSet).%New() - Set ProductKenmerkenSet.UnID = UnID - - /// GeneratieType - Set KenmerkenSet = KenmerkenSets.GeefKenmerkenSet(UnID) - If (KenmerkenSet.GeefKenmerkWaarden("GeneratieType").Count() > 0){ - Set ProductKenmerkenSet.GeneratieType = KenmerkenSet.GeefKenmerkWaarden("GeneratieType").GetAt(1) - }Else{ - Set ProductKenmerkenSet.GeneratieType = ##class(APPS.PM.enu.GeneratieType).Single() - } + Set SQLUnIDs = SQLUnIDs _"'"_UnIDIt.Next()_"'" + Set SQLUnIDsReedsToegevoegd = 1 + } + }Else { + Set ErrorMsg = "GeefProductKenmerken() : Het product met PRNr '"_PRNr_"' bestaat niet." + Do ##class(TECH.ExceptionHandler).Throw(##class(TECH.Exceptions.BaseException).%New(##class(TECH.enu.ExceptionCode).GeneralError(),ErrorMsg)) + } + } - Set ProductKenmerkenSet.Kenmerken = Kenmerken - Do ProductKenmerkenGroep.Sets.Insert(ProductKenmerkenSet) - } - } - + /// Kenmerkgroepen verzamelen + Set SQLKenmerken = "" + Set KenmerkGroepIterator = ##class(TECH.ListIterator).%New(KenmerkGroepen) + If (KenmerkGroepIterator.HasNext()){ + Set SQLKenmerken = SQLKenmerken_"'"_KenmerkGroepIterator.Next()_"'" + } + While (KenmerkGroepIterator.HasNext()){ + Set SQLKenmerken = SQLKenmerken_", '"_KenmerkGroepIterator.Next()_"'" + } + + + /// voorbereidend werk + Set ProductenKenmerken = ##class(APPS.PM.dto.Kenm.ProductenKenmerken).%New() + Set ProductKenmerken = ##class(APPS.PM.dto.Kenm.ProductKenmerken).%New() + Set ProductKenmerkenGroep = ##class(APPS.PM.dto.Kenm.ProductKenmerkenGroep).%New() + Set ProductKenmerkenSets = ##class(APPS.PM.dto.Kenm.ProductKenmerkenSet).%New() + Set Kenmerken = ##class(%ListOfObjects).%New() + + /// DataDefinities ophalen + Set RS=##class(%ResultSet).%New() + Set SQLStatement = "SELECT ID, UnID, KenmerkGroep, KenmerkNaam, Waarden FROM Prod_Kenmerk.DataDefinitie where KenmerkGroep IN ( "_SQLKenmerken_" ) AND UnID In ( "_SQLUnIDs_" ) ORDER BY UnID, KenmerkGroep" + d WLIP^vhDBG(127,SQLStatement) + Do RS.Prepare(SQLStatement) + + Set tmpStatus = RS.Execute(SQLKenmerken,SQLUnIDs) + If $$$ISOK(tmpStatus) + { + Set tmpUnID = "" + Set tmpKenmerkGroep = "" + Set tmpPRNr = "" + + While (RS.Next()) + { + Set PRNr = ##class(BL.Kenm.ProdMulti).GetCommonID(RS.Data("UnID")) + + /// Als PRNr veranderd. + If (tmpPRNr '= PRNr){ + Set ProductKenmerken = ##class(APPS.PM.dto.Kenm.ProductKenmerken).%New() + Set ProductKenmerken.PRNr = PRNr + Do ProductenKenmerken.Kenmerken.Insert(ProductKenmerken) + } + + /// Als kenmerkgroep verandert /// Enkel groepen toevoegen als er sets aanwezig zijn - If (ProductKenmerkenGroep.Sets.Count() > 0) { - Do ProductKenmerken.KenmerkenGroepen.Insert(ProductKenmerkenGroep) - } - } - Do ProductenKenmerken.Kenmerken.Insert(ProductKenmerken) - } + If ((tmpKenmerkGroep '= RS.Data("KenmerkGroep")) || (tmpPRNr '= PRNr)){ + Set ProductKenmerkenGroep = ##class(APPS.PM.dto.Kenm.ProductKenmerkenGroep).%New() + Set ProductKenmerkenGroep.Naam = RS.Data("KenmerkGroep") + Do ProductKenmerken.KenmerkenGroepen.Insert(ProductKenmerkenGroep) + } + + + /// Nagaan of dit record nog bij vorige hoort. + If (tmpUnID '= RS.Data("UnID")) { + Set ProductKenmerkenSet = ##class(APPS.PM.dto.Kenm.ProductKenmerkenSet).%New() + Set ProductKenmerkenSet.UnID = RS.Data("UnID") + /// GeneratieType + Set KenmerkenSets = ProductAPI.GeefProductKenmerkenSets(PRNr, tmpKenmerkGroep) + Set KenmerkenSet = KenmerkenSets.GeefKenmerkenSet(RS.Data("UnID")) + If (KenmerkenSet.GeefKenmerkWaarden("GeneratieType").Count() > 0){ + Set ProductKenmerkenSet.GeneratieType = KenmerkenSet.GeefKenmerkWaarden("GeneratieType").GetAt(1) + }Else{ + Set ProductKenmerkenSet.GeneratieType = ##class(APPS.PM.enu.GeneratieType).Single() + } + Do ProductKenmerkenGroep.Sets.Insert(ProductKenmerkenSet) + } + + Set ProductKenmerk = ##class(APPS.PM.dto.Kenm.ProductKenmerk).%New() + Set ProductKenmerk.Naam = RS.Data("KenmerkNaam") + Set tmpDataDef=##class(Prod.Kenmerk.DataDefinitie).%OpenId(RS.Data("ID")) + Set ProductKenmerk.Waarden = tmpDataDef.Waarden + Do ProductKenmerkenSet.Kenmerken.Insert(ProductKenmerk) + + Set tmpPRNr = PRNr + Set tmpUnID = RS.Data("UnID") + Set tmpKenmerkGroep = RS.Data("KenmerkGroep") + } + } $$$TECHErrorTrapOff Quit ProductenKenmerken @@ -344,7 +377,7 @@ Catch Set $ZTRAP = "" Set Exception = ##class(TECH.ExceptionHandler).Catch() - Set ErrorMsg = "BewaarProductenKenmerken heeft de wijzigingen niet kunnen opslaan :"_Exception.GeefOmschrijving()_", "_$ECODE + Set ErrorMsg = "BewaarProductenKenmerken heeft de wijzigingen niet kunnen opslaan : "_$C(13,10)_Exception.ToString() Do OperatieScope.Gefaald(##class(TECH.Exceptions.BaseException).%New(Exception.GeefExceptionCode(),ErrorMsg)) Quit 0 ]]> @@ -380,9 +413,9 @@ Quit GewijzigdePRNrs Catch Set $ZTRAP = "" - Set UnIDsOutput = $$LCVT^vhLib(##class(TECH.ListUtils).ListToListbuild(UnIDs)) Set Exception = ##class(TECH.ExceptionHandler).Catch() - Set ErrorMsg = "VerwijderKenmerkenSets heeft de KenmerkenSets niet kunnen verwijderen. "_Exception.GeefOmschrijving() + Set UnIDsOutput = $$LCVT^vhLib(##class(TECH.ListUtils).ListToListbuild(UnIDs)) + Set ErrorMsg = "VerwijderKenmerkenSets heeft de KenmerkenSets "_UnIDsOutput_" niet kunnen verwijderen. "_$C(13,10)_Exception.ToString() Do OperatieScope.Gefaald(##class(TECH.Exceptions.BaseException).%New(Exception.GeefExceptionCode(),ErrorMsg)) Set $ECODE = "" Do GewijzigdePRNrs.Clear() /// Omdat operatie gefaald is, en rollback plaats vond, de GewijzigdePRNrs leeg maken. @@ -413,6 +446,20 @@ Set UnID = UnIDIt.Next() Set PRNr = ##class(BL.Kenm.ProdMulti).GetCommonID(UnID) Set ProductKenmerkenSets = ProductAPI.GeefProductKenmerkenSets(PRNr,KenmerkGroep) + + /// Indien UnID niet bestaat, kan er geen nieuwe kenmerkenset gecreeerd worden + If ('$Data(^Prod.Ken.DataDefinitieD(UnID))){ + Set ErrorMsg = "Kan MaakNieuweKenmerkenSets("_KenmerkGroep_","_UnID_") niet uitvoeren omdat dit geen bestaand UnID is." + Do ##class(TECH.ExceptionHandler).Throw(##class(TECH.Exceptions.BaseException).%New(##class(TECH.enu.ExceptionCode).GeneralError(),ErrorMsg)) + } + + /// Indien UnID een Auto is, kan er geen nieuwe kenmerkenset gecreeerd worden + Set KenmerkenSet = ProductKenmerkenSets.GeefKenmerkenSet(UnID) + If ($IsObject(KenmerkenSet) && (KenmerkenSet.GeefKenmerkWaarden("GeneratieType").GetAt(1) = ##class(APPS.PM.enu.GeneratieType).Auto())){ + Set ErrorMsg = "Kan MaakNieuweKenmerkenSets("_KenmerkGroep_","_UnID_") niet uitvoeren omdat dit een Auto product is." + Do ##class(TECH.ExceptionHandler).Throw(##class(TECH.Exceptions.BaseException).%New(##class(TECH.enu.ExceptionCode).GeneralError(),ErrorMsg)) + } + Set NieuweGewijzigdePRNrs = ProductKenmerkenSets.MaakNieuweKenmerkenSet(UnID) Set GewijzigdePRNrs = ##class(TECH.ListUtils).CopyList(NieuweGewijzigdePRNrs,GewijzigdePRNrs) } @@ -421,7 +468,8 @@ Catch Set $ZTRAP = "" Set Exception = ##class(TECH.ExceptionHandler).Catch() - Set ErrorMsg = "MaakNieuweKenmerkenSet heeft de KenmerkenSets niet kunnen aanmaken: "_Exception.GeefOmschrijving() + Set UnIDsOutput = $$LCVT^vhLib(##class(TECH.ListUtils).ListToListbuild(UnIDs)) + Set ErrorMsg = "MaakNieuweKenmerkenSet heeft de KenmerkenSets "_UnIDsOutput_" niet kunnen aanmaken: "_$C(13,10)_Exception.ToString() Do OperatieScope.Gefaald(##class(TECH.Exceptions.BaseException).%New(Exception.GeefExceptionCode(),ErrorMsg)) Do GewijzigdePRNrs.Clear() /// Omdat operatie gefaald is, en rollback plaats vond, de GewijzigdePRNrs leeg maken. Quit GewijzigdePRNrs Index: DOM/PM/impl/ProductKenmerkenSets.cls.xml =================================================================== diff -u -r1565 -r1580 --- DOM/PM/impl/ProductKenmerkenSets.cls.xml (.../ProductKenmerkenSets.cls.xml) (revision 1565) +++ DOM/PM/impl/ProductKenmerkenSets.cls.xml (.../ProductKenmerkenSets.cls.xml) (revision 1580) @@ -120,6 +120,12 @@ Set NewUnID = ProdMulti.AddMultiple(BronUnID,.Status) + If (NewUnID = ""){ + Set ErrorMsg = "Het gegeneerde nieuwe UnID '"_NewUnID_"' voor reeds bestaande UnID '"_BronUnID_"' is niet correct." + Set ErrorMsg = ErrorMsg_$C(13,10)_$$ParseStatus^vhLib(NewUnID) + Do ##class(TECH.ExceptionHandler).Throw(##class(TECH.Exceptions.BaseException).%New(##class(TECH.enu.ExceptionCode).GeneralError(),ErrorMsg)) + } + If ($$$ISERR(Status) && (NewUnID '= "")){ Set ErrorMsg = "Kon geen nieuwe kenmerkenset aanmaken : "_$$ParseStatus^vhLib(Status) Do ##class(TECH.ExceptionHandler).Throw(##class(TECH.Exceptions.BaseException).%New(##class(TECH.enu.ExceptionCode).GeneralError(),ErrorMsg)) @@ -150,13 +156,21 @@ Verwijderen van een kenmerkenset voor opgegeven UnID (Multiple) Indien er maar één multiple meer overschiet wordt het product automatisch een gewoon product zonder multiple. +VerwijderAutoProducten : mag enkel op true gezet worden als het intern wordt aangeroepen. Return : Lijst met PRNr's die verwijderd zijn. Opgelet : er worden voor multiples geen TECH.Events.KenmerkModifiedEventData events geraised ! -UnID:%String +UnID:%String,VerwijderAutoProducten:%Boolean=0 %ListOfDataTypes DoelSubUnID){ Index: vhDeploy/JBL/vhDeploy20110629x1147.cls.xml =================================================================== diff -u --- vhDeploy/JBL/vhDeploy20110629x1147.cls.xml (revision 0) +++ vhDeploy/JBL/vhDeploy20110629x1147.cls.xml (revision 1580) @@ -0,0 +1,47 @@ + + + +1 +svn.Deploy +0 + + +Indexen opbouwen van Prod.Kenm.DataDefinitie + + + +1 + + + + +1 +Kenmerk As KenmerkNaam2, Kenmerk->Groep->Code As KenmerkGroep2 from Prod_Kenmerk.DataDefinitie") + Do RS.Execute() + Set Teller = 0 + Set RSUpdate = ##class(%ResultSet).%New() + Do RSUpdate.Prepare("Update Prod_Kenmerk.DataDefinitie Set KenmerkNaam = ?, KenmerkGroep = ? where ID = ?") + + While (RS.Next()){ + w:((Teller#100)=0) RS.Data("ID"),! + Set Teller = Teller + 1 + Do RSUpdate.Execute(RS.Data("KenmerkNaam2"),RS.Data("KenmerkGroep2"),RS.Data("ID")) + } + + Write Teller_" aantal kenmerken geupdate.",! + Write ! + + /// Rebuild Indices + w "Rebuild indices van 'Prod.Kenmerk.DataDefinitie'",! + Do ##class(Prod.Kenmerk.DataDefinitie).%BuildIndices() +]]> + + +