APPS.PM.OL.Common,Prod.Product,BL.Derde.KlantSpecifiek 1 %RegisteredObject 0 Default kolomNr (of list-index) voor het PRNr 2 TextHeader voor de Kolom van de PRNrs. ProductNr (read-only) Bevat de KolomNr (of list-index) voor het PRNr. De default kan mogelijk aangepast worden indien de overeenkomstige header "ProductNr (read-only)" in een andere kolom staat. %String 1 Bijhouden van de HeaderKenmerken voor de identificatie van de overeenkomstige Data-kolommen (DEPRECATED) ProductKenmerken 1 Hoofdgroep van de Kenmerken (=MetaGroep) = "OL" %String 1 BL-object voor het behandelen van de Multiples (= meerdere kenmerken-sets per product) BL.Kenm.ProdMulti 1 Beheert en bepaalt de KortTekstPatroon-objecten nodig voor het zoeken van varianten van een Master KortTekstPatroonFactory 1 APPS.PM.OL.MasterAutoGenerator 1 Houdt de KenmerkWaardeMap-objecten in het geheugen, zodat ze niet telkens opnieuw moeten geopend worden KenmerkWaardeMap list 1 Beheert de verwerkingslog van de huidige import, voor iedere lijn (uit de excel) ImportLog 1 Beheert de verwerkingslog van de huidige import, voor iedere lijn (uit de excel) APPS.PM.OL.ImportChecker 1 Houdt info van de huidige import bij, voor de producten gekoppeld aan dit object (MASTER = meerdere OL-producten. %String 1 initvalue:%CacheString 1 %Status Oproepen via s sc=##class(APPS.PM.OL.ExcelImport).Import() w sc,! 1 %Status Oproepen via s sc=##class(APPS.PM.OL.ExcelImport).AfterImport(flagReadOnly) w sc,! 1 flagReadOnly:%Boolean %Status Dir:%String,FName:%String %Status Pieces:%String,Sep:%String 1 %List SubNode:%String 1 %Status Parse data columns (kenmerken) only for ConsistencyCheckBeforeImport() 1 %Status IsBeforeImport:%Boolean=0 1 "_PatroonCode)) } If ($D(..arErrors)) { Write "#Error entries: "_$G(..arErrors),! Write $$ArrayToText^vhLib("arErrors",##this,"arErrors"),! Write "Writing errors to file ... " Kill arErrors Merge arErrors=..arErrors Set arConfig("HDR","I")=$LB("Lijn","Info") Set arConfig("REF")="" Do ArrayToTabDelim^vhLib(.arErrors,"\\Notes01\Shared\W V\OL_Masters_ImportLog.txt", ,.arConfig) Kill %arErrors } Else { If IsBeforeImport { Write "Data is correct ingelezen.",! } Else { Write "Er zijn geen fouten.",! } } Quit ]]> 1 %Status 0) ..liPRNr=Pos // Row is Header or Data Set RowIsHeader=($LG(lbData,..liPRNr)'?4.7N)&&($G(HeaderRowCheck2,1)) Quit:('RowIsHeader) $$$OK // Parse all header columns If Pos>0 Do . ; Check all other header columns . w $$$LCVT(lbData),!,! Quit $$$OK ]]> VerwerkLijn() Parse data columns (kenmerken) en verwerk de kenmerken-set lbData:%List,LijnID:%String 1 %Status Controle dat deze lijn mag verwerkt worden, i.e. - geldig GeneratieType - geen conflicten met reeds verwerkte kenmerken-sets (multiples of non-multiples) ProdKM:ProductKenmerken 1 %Status 0 { ; Conflict : UnID is reeds verwerkt Quit $$$ERROR($$$GeneralError,"Dit product is reeds verwerkt (UnID="_ProdKM.UnID_").") } ElseIf ProdKM.TeVerwijderen { ; Geen conflicten, want een kenmerken-set mag steeds verwijderd worden Set sc=$$$OK } ElseIf ProdKM.IsNonMultipleUnID { ; Bewaren van de non-multiple : conflict indien een multiple kenmerken-set reeds eerder bewaard is Set blnConflict=0 For i=1:1:$LL(lbVerwerkteUnIDs) Set:(..ImportLog.IsUnIDBewaard($LI(lbVerwerkteUnIDs,i),PRNr)) blnConflict=1 Quit:(blnConflict) Quit:(blnConflict) $$$ERROR($$$GeneralError,"Conflict met een andere verwerkte kenmerken-set (UnID="_ProdKM.UnID_").") } Else { ; Bewaren van een multiple kenmerken-set : conflict indien de non-multiple reeds eerder bewaard is Set blnConflict=(..ImportLog.IsUnIDBewaard(PRNr,PRNr)) Quit:(blnConflict) $$$ERROR($$$GeneralError,"Conflict met een andere verwerkte kenmerken-set (UnID="_ProdKM.UnID_").") } Quit sc ]]> Wissen van de Kenmerken voor dit product (UnID) ProdKM:ProductKenmerken 1 %Status ProdKM:ProductKenmerken 1 %Status Vervolledigen van de kenmerken en ProdKM properties (na het inlezen van de lbData) ProdKM:ProductKenmerken 1 %Status Parse data columns (kenmerken) into ProdKM + vervolledigen van de kenmerken en ProdKM properties ProdKM:ProductKenmerken,lbData:%List 1 %Status KMW = $LB("Orgalux.com","Keller","SFS","VerkoopHandboek") Set lbWebsitesShopsKMW=$$$lbWebsitesShopsKMW Set iBegin=$I(iCol) Set iEnd=iBegin+$LL(lbWebsitesShopsKMW)-1 Set iCol=iEnd Set lbDataChk=$LI(lbData,iBegin,iEnd) Set lbWebSites=$$ListFromSplittedColumns(lbDataChk,lbWebsitesShopsKMW) Do $$$ProdKenmSetAt(lbWebSites,"WebSites") Quit ParseKMDataMeubelToepassingen() ; lbData=$LB("Keuken","Badkamer","Dressing","Woonkamer") Set lbMeubelToepKMW=$$$lbMeubelToepassingenKMW Set iBegin=$I(iCol) Set iEnd=iBegin+$LL(lbMeubelToepKMW)-1 Set iCol=iEnd Set lbDataChk=$LI(lbData,iBegin,iEnd) Set lbToepassingen=$$ListFromSplittedColumns(lbDataChk,lbMeubelToepKMW) Do $$$ProdKenmSetAt(lbToepassingen,"MeubelToepassing") Quit ParseKMDataZoneToepassingen() ; lbData=$LB( [checkbox columns] ) --> KMW = $LB( 30 items ) Set lbZoneToepassingenKMW=$$$lbZoneToepassingenKMW ;For i=1:1:$$$MaxCntZoneToep Set $LI(lbZoneToepassingenKMW,i)="ZTP."_i_"?" Set iBegin=$I(iCol) Set iEnd=iBegin+$LL(lbZoneToepassingenKMW)-1 Set iCol=iEnd Set lbDataChk=$LI(lbData,iBegin,iEnd) Set ListZoneToepas=$$ListFromSplittedColumns(lbDataChk,lbZoneToepassingenKMW) Do $$$ProdKenmSetAt(ListZoneToepas,"ZoneToepassing") Quit Quit ParseKMDataSamenstellingsTypes() ; lbData=$LB( [checkbox columns] ) --> KMW = $LB("Orgalux.com","Keller","SFS") Set lbSamenstellingsTypesKMW=$$$lbSamenstellingsTypesKMW Set iBegin=$I(iCol) Set iEnd=iBegin+$LL(lbSamenstellingsTypesKMW)-1 Set iCol=iEnd Set lbDataChk=$LI(lbData,iBegin,iEnd) Set lbSamenstellingsTypes=$$ListFromSplittedColumns(lbDataChk,lbSamenstellingsTypesKMW) Do $$$ProdKenmSetAt(lbSamenstellingsTypes,"SamenstellingsType") Quit ParseKMDataInformatie() ; lbData=$LB("Afbeelding (read-only)","Langtekst NL (read-only)","Productgamma","SubType","Kleur","Hoogte (in mm)","Breedte (in mm)","Diepte (in mm)") Set tmpVal=$LG(lbData,$I(iCol)) Set AfbeeldingLB=tmpVal ; --> KM=Sleutel , TextType=LB Set tmpVal=$LG(lbData,$I(iCol)) Set LangTekst=tmpVal ; --> KM=Sleutel , TextType=O Set tmpVal=$LG(lbData,$I(iCol)) Set ProductGammas=$S(tmpVal="":"", 1:$$PiecesToList^vhLib(tmpVal,";")) Set tmpVal=$LG(lbData,$I(iCol)) Do $$$ProdKenmSetAt(tmpVal,"SubType") Set tmpVal=$LG(lbData,$I(iCol)) Do $$$ProdKenmSetAt(tmpVal,"Kleur") Set tmpVal=$LG(lbData,$I(iCol)) Do ProdKM.AddKenmerkViaFormule("ProductHoogte",tmpVal) ; Do $$$ProdKenmSetAt(tmpVal,"ProductHoogte") Set tmpVal=$LG(lbData,$I(iCol)) Do ProdKM.AddKenmerkViaFormule("ProductBreedte",tmpVal) ; Do $$$ProdKenmSetAt(tmpVal,"ProductBreedte") Set tmpVal=$LG(lbData,$I(iCol)) Do ProdKM.AddKenmerkViaFormule("ProductDiepte",tmpVal) ; Do $$$ProdKenmSetAt(tmpVal,"ProductDiepte") Set SleutelVTL=$$$Replace($$$Replace(LangTekst," ",$$$TAB),"~",$$$CRLF) Do $$$ProdKenmSetAt(ProductGammas,$$$kenmerkMateriaal) ; "ProductType" ;Set AfbeeldingLB=$$$Replace(AfbeeldingLB,"http://res.vanhoecke.be/OLProdCat/","") ;Set AfbeeldingLB=$$$Replace(AfbeeldingLB,"ViaSleutelK/","") Quit ParseKMDataAangeraden() ; lbData=$LB(LadeBreedteMin,LadeBreedteMax) Set tmpVal=$LG(lbData,$I(iCol)) Do ProdKM.AddKenmerkViaFormule("LadeBreedteMinAangeraden",tmpVal) Set tmpVal=$LG(lbData,$I(iCol)) Do ProdKM.AddKenmerkViaFormule("LadeBreedteMaxAangeraden",tmpVal) Quit ParseKMDataVereisten() ; lbData=$LB(LadeBreedteMin,LadeBreedteMax,Wanddikte,BreedteSpeling,LadeDieptes) Set tmpVal=$LG(lbData,$I(iCol)) Do $$$ProdKenmSetAt(tmpVal,"LadeBreedteMin") Set tmpVal=$LG(lbData,$I(iCol)) Do $$$ProdKenmSetAt(tmpVal,"LadeBreedteMax") Set tmpVal=$LG(lbData,$I(iCol)) Set WandDiktes=$S(tmpVal="":"", 1:$$PiecesToList^vhLib(tmpVal,";")) Set tmpVal=$LG(lbData,$I(iCol)) Set BreedteSpeling=tmpVal Set tmpVal=$LG(lbData,$I(iCol)) Set LadeDieptes=$S(tmpVal="":"", 1:$$PiecesToList^vhLib(tmpVal,";")) Do $$$ProdKenmSetAt(LadeDieptes,"Diepte") Do $$$ProdKenmSetAt(WandDiktes,"WandDikte") Quit ParseKMDataFamilies() ; lbData=$LB( [checkbox columns] ) --> KMW = $LB("NietBlumLade","Alle_TBX_geen_bevestigingen_nodig","TBX_plus_Reling_of_BXglas","TBX_plus_Boxside_Ew_of_Dw","TBX_intivo","TBX_antaro_Reling") Set lbFamiliesKMW=$$$lbFamiliesKMW Set iBegin=$I(iCol) Set iEnd=iBegin+$LL(lbFamiliesKMW)-1 Set iCol=iEnd Set lbDataChk=$LI(lbData,iBegin,iEnd) Set lbLadeFamilie=$$ListFromSplittedColumns(lbDataChk,lbFamiliesKMW) Do $$$ProdKenmSetAt(lbLadeFamilie,"LadeFamilie") Quit ParseKMDataLadeTypes() ; lbData=$LB( [checkbox columns] ) --> KMW = $LB("N","M","M/Z","B","B/Z","D","D/Z","K","K/Z","C","C/Z") Set lbLadeTypesKMW=$$$lbLadeTypesKMW Set iBegin=$I(iCol) Set iEnd=iBegin+$LL(lbLadeTypesKMW)-1 Set iCol=iEnd Set lbDataChk=$LI(lbData,iBegin,iEnd) Set lbLTypes=$$ListFromSplittedColumns(lbDataChk,lbLadeTypesKMW) Do $$$ProdKenmSetAt(lbLTypes,"LadeType") Quit ParseKMDataLadeKleuren() ; lbData=$LB( [checkbox columns] ) --> KMW = $LB("zijdewit","terrazwart","grijs","wit","inox","Aluminium") Set lbLadeKleurenKMW=$$$lbLadeKleurenKMW ;Set lbLadeKleurenKMW=lbLadeKleuren Set iBegin=$I(iCol) Set iEnd=iBegin+$LL(lbLadeKleurenKMW)-1 Set iCol=iEnd Set lbDataChk=$LI(lbData,iBegin,iEnd) Set lbKleur=$$ListFromSplittedColumns(lbDataChk,lbLadeKleurenKMW) Do $$$ProdKenmSetAt(lbKleur,"KleurFilter") Quit ParseKMDataTips() ; lbData=$LB("Tip1","Tip2","Tip3","Tip4","Tip5") Set lbBOWeten="" Set MaxTips=$$$MaxCntTips For i=1:1:MaxTips { Set tmpVal=$LG(lbData,$I(iCol)) Set:($L($$$Trim(tmpVal))) lbBOWeten=lbBOWeten_$LB(tmpVal) ; Tip i } Do $$$ProdKenmSetAt(lbBOWeten,"BOWeten") Quit ParseKMDataGeneratieType() ; lbData=$LB(GeneratieType) Set tmpVal=$LG(lbData,$I(iCol)) Set GeneratieType=$$$UCase(tmpVal) Set ProdKM.GeneratieType=GeneratieType Do $$$ProdKenmSetAt(GeneratieType,"GeneratieType") Quit #define Delim $$$DelimSleutelVariaties #define CvtToDelim(%v) $TR($$$Trim(%v),", ",$$$Delim_$$$Delim) ParseKMDataMasterVoorDieptes() ; lbData=$LB($$LCVTSimple^vhLib(MasterVoorD,$$$Delim), VariatiesTekstSleutel,VariatiesFotoSleutel) Set tmpVal=$LG(lbData,$I(iCol)) Set MasterVoorD=$$$CvtToDelim(tmpVal) ; $$PiecesToList^vhLib(tmpVal,$$$Delim) Set tmpVal=$LG(lbData,$I(iCol)) Set SleutelVarTekstD=$$$CvtToDelim(tmpVal) ; $$PiecesToList^vhLib(tmpVal,$$$Delim) Set tmpVal=$LG(lbData,$I(iCol)) Set SleutelVarFotoD=$$$CvtToDelim(tmpVal) ; $$PiecesToList^vhLib(tmpVal,$$$Delim) Do $$$ProdKenmSetAt(MasterVoorD,"MasterVoorDieptes") Do $$$ProdKenmSetAt(SleutelVarTekstD,"SleutelVarTekstD") Do $$$ProdKenmSetAt(SleutelVarFotoD,"SleutelVarFotoD") Quit ParseKMDataMasterVoorBreedtes() ; lbData=$LB($$LCVTSimple^vhLib(MasterVoorB,$$$Delim), VariatiesTekstSleutel,VariatiesFotoSleutel) Set tmpVal=$LG(lbData,$I(iCol)) Set MasterVoorB=$$$CvtToDelim(tmpVal) ; $$PiecesToList^vhLib(tmpVal,$$$Delim) Set tmpVal=$LG(lbData,$I(iCol)) Set SleutelVarTekstB=$$$CvtToDelim(tmpVal) ; $$PiecesToList^vhLib(tmpVal,$$$Delim) Set tmpVal=$LG(lbData,$I(iCol)) Set SleutelVarFotoB=$$$CvtToDelim(tmpVal) ; $$PiecesToList^vhLib(tmpVal,$$$Delim) Do $$$ProdKenmSetAt(MasterVoorB,"MasterVoorBreedtes") Do $$$ProdKenmSetAt(SleutelVarTekstB,"SleutelVarTekstB") Do $$$ProdKenmSetAt(SleutelVarFotoB,"SleutelVarFotoB") Quit ParseKMDataMasterVoorKleurMat() ; lbData=$LB($$LCVTSimple^vhLib(MasterVoorKlr,$$$Delim), VariatiesTekstSleutel,VariatiesFotoSleutel) Set tmpVal=$LG(lbData,$I(iCol)) Set MasterVoorKlr=$$$CvtToDelim(tmpVal) ; $$PiecesToList^vhLib(tmpVal,$$$Delim) Set tmpVal=$LG(lbData,$I(iCol)) Set SleutelVarTekstKlr=$$$CvtToDelim(tmpVal) ; $$PiecesToList^vhLib(tmpVal,$$$Delim) Set tmpVal=$LG(lbData,$I(iCol)) Set SleutelVarFotoKlr=$$$CvtToDelim(tmpVal) ; $$PiecesToList^vhLib(tmpVal,$$$Delim) Do $$$ProdKenmSetAt(MasterVoorKlr,"MasterVoorKleuren") Do $$$ProdKenmSetAt(SleutelVarTekstKlr,"SleutelVarTekstKlr") Do $$$ProdKenmSetAt(SleutelVarFotoKlr,"SleutelVarFotoKlr") Quit ParseKMDataMasterVoorWanddikte() ; lbData=$LB($$LCVTSimple^vhLib(MasterVoorWD,$$$Delim), VariatiesTekstSleutel,VariatiesFotoSleutel) Set tmpVal=$LG(lbData,$I(iCol)) Set MasterVoorWD=$$$CvtToDelim(tmpVal) ; $$PiecesToList^vhLib(tmpVal,$$$Delim) Set tmpVal=$LG(lbData,$I(iCol)) Set SleutelVarTekstWD=$$$CvtToDelim(tmpVal) ; $$PiecesToList^vhLib(tmpVal,$$$Delim) Set tmpVal=$LG(lbData,$I(iCol)) Set SleutelVarFotoWD=$$$CvtToDelim(tmpVal) ; $$PiecesToList^vhLib(tmpVal,$$$Delim) Do $$$ProdKenmSetAt(MasterVoorWD,"MasterVoorWandDiktes") Do $$$ProdKenmSetAt(SleutelVarTekstWD,"SleutelVarTekstWD") Do $$$ProdKenmSetAt(SleutelVarFotoWD,"SleutelVarFotoWD") Quit // Opsplitsen van een list (multi-value kenmerk) in kolommen met waarde 0 of 1, resp. "" of "x", afhankelijk van de kenmerk-waarden in de list. // De volgorde van de resulterende $LB() komt overeen met die van lbColumns (uiteraard!) ListFromSplittedColumns(lbDataChk,lbColumnsKMW) Set lbList="" For i=1:1:$LL(lbColumnsKMW) { Set tmpVal=$LG(lbDataChk,i) Set:($$$ColCheckJaNeeToBool(tmpVal)) lbList=lbList_$LB($LI(lbColumnsKMW,i)) ; :($$$LCase(tmpVal)?1(1"ja",1"x")) } Quit lbList ]]> Read text from file into global ^HULP(SubNode) SubNode as .local 1 1 %Status Read text from file into global ^HULP(SubNode) SubNode as .local This method uses the FileMgr (BL) for file-handling 1 1 %Status Error logging per lijn LijnID:%String,sc:%Status 1 ", "", "", "OL.BO506010BESTEKLADE", "", "", "", "", "", "", "", "", "", "x", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "http://res.vanhoecke.be/Images/ORGALUX/BO506010.jpg", "{-O}", "ORGALINE", "", "", "", "", "", "", "", "", 50, "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "Antislipmat_AanTeRaden_SepBestellen", "", "", "", "") ;Set lbDataMasterVoor=$LB("master", "45;50;55;60;65", "", "", "", "", "", "") Set lbDataBasis=$LB("", 375545, "", "15OL09WNB01C35/OL OLB N5040S39BESTNOOT ", "", "", "", "OL.BN5040S3BEST NOOT", "", "", "", "", "", "", "", "", "", "x", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "http://res.vanhoecke.be/Images/ORGALUX/BN5040S3.jpg", "Kruidenhouder met 7 aluminium kruidendoosjes met stift, inzet voor 6 liggende kruiden en messenblok voor 3 messen", "WOODLINE_Noot", "", "", "", "", 40, 40, "", "", 50, "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "Messenblok geleverd zonder messen", "Stift", "Past_niet_in_Binnenlade", "", "") Set lbDataMasterVoor=$LB("master", "50;60;65", "60", "22;23;24", "90-120", "", "", "Beuk;Noot", "", "", "", "", "", "", "") Set lbData=lbDataBasis_lbDataMasterVoor Set sc=..%New().RunUnitTest(lbData,2) ; ##class(APPS.PM.OL.ExcelImport).%New() Quit sc Quit $$$ISOK(sc) } Method RunUnitTest(lbData As %String, liPRNr As %Integer) As %Status { Set LijnID=1 Set ..liPRNr=$G(liPRNr, ..#liPRNrDFL) // Parse DataLijn : ;Set sc=BLImport.ParseDataLijn(lbData,LijnID) Set PRNr=$LG(lbData,..liPRNr) Quit:(PRNr'?4.7N) $$$OK Set ProdKM=##class(ProductKenmerken).%New(..KenmerkGroepID, LijnID, ..BLProdMulti) // Inlezen Data-lijn + Vervolledigen Kenmerken Set sc=..ParseKenmerken(ProdKM,lbData) Quit:($$$ISERR(sc)) sc // Controleer dat deze lijn mag verwerkt worden (GeneratieType / conflicten) Set sc=..AllowVerwerkKenmerken(ProdKM) Quit:($$$ISERR(sc)) sc // Propageer de MASTER-kenmerken naar de varianten (AUTOs-kenmerken) If ProdKM.GeneratieType=$$$gtMaster { Set sc=..GenereerVarianten(ProdKM) ; Zal de data ook effectief BEWAREN in de Prod.Kenmerk.DataDefinities !!! Quit:($$$ISERR(sc)) sc } Quit sc } */ ]]>