Tips & Tricks – Voorkom performance problemen in CRM Voorkom performance problemen in CRM Introductie Zodra een SAP CRM systeem wordt ingericht is het vaak onvermijdelijk, dat er soms problemen optreden met de performance. Dat is op zich niet zo verwonderlijk, want het CRM systeem wordt in zeer veel verschillende omgevingen ingezet en het is welhaast onmogelijk om de optimale instellingen voor elke omgeving bij de installatie en inrichting vast te stellen. Daarvoor kunt u nu deze tip gebruiken. Hierbij wordt een groot aantal punten doorgenomen met daarnaast ook nog waardevolle SAP Notes. CRM WebClient Laten we maar gelijk met de deur in huis vallen. SAP heeft voor de performance diverse SAP Notes uitgebracht, die specifiek betrekking hebben op CRM WebClient. Dat zijn er best wel veel, maar ik wil u er 3 niet onthouden. Om SAP Notes te kunnen bekijken, dient u toegang te hebben tot SDN. Om de CRM WebClient binnen een netwerk beter te laten functioneren, leest u de volgende SAP Note en kijkt u welke acties voor u van toepassing zijn. In deze SAP Note staan ook vele verwijzingen naar specifiekere SAP Notes. 1162605 Netwerk performance voor CRM (IC) WebClient Om voor de CRM WebClient de juiste instellingen te krijgen, gebruikt u deze SAP Note. Ook hierin staan verwijzingen naar andere SAP Notes. 1162685 SAP CRM WebClient performance Om bij de gebruiker het geheugengebruik met CRM WebClient onder controle te houden gebruikt u deze SAP Note. 1281896 Hoog geheugengebruik en CRM WebClient VNSG magazine jaargang 18 NR. 1 MAART 2014 Blad 1 Tips & Tricks - Voorkom performance problemen in CRM CRM WebClient UI Framework Om de zaak beter te laten functioneren, zult u bij het inrichten van CRM WebClient UI rekening moeten houden met een paar regels. Het is geen dwingende regelgeving, maar uw gezond verstand is leidend. 1. Plaats uitsluitend de benodigde views/assignment blokken in de UI. Niet gebruikte views/assignment blokken gebruiken zeer vaak het “lazy load” modus. Dit laatste betekent, dat de ongebruikte blokken pas op het laatste moment worden geladen (als de UI het scherm opbouwt) en dat werkt vertragend. 2. Plaats geen “dure” code in de methode DO_PREPARE_OUTPUT van de view controller. Deze methode wordt namelijk bij elke scherm CRM systeem interactie uitgevoerd. Natuurlijk is dat handig om zeer specifieke taken uit te voeren, maar u dient er rekening mee te houden, dat hierdoor de performance negatief kan worden beïnvloed, als er uitgebreide activiteit moet plaatsvinden. Gebruik bij voorkeur de methode DO_INIT_CONTEXT als er componenten (initieel) moeten worden voorzien van gegevens. 3. Het is aanlokkelijk om complexe binding te gebruiken, maar toch moet u complexe binding voorkomen. Complexe binding is de koppeling van een knooppunt (node), die in zich eveneens koppelingen naar andere knooppunten (nodes) heeft. Een update van de complexe node leidt dan tot de update van alle gekoppelde nodes, met performance verlies tot gevolg. 4. Gebruik nooit de component set ALL in de UI componenten. Dit kost onnodig veel geheugen en het is vrijwel nooit noodzakelijk. Kies altijd de minimaal nodige component set. 5. Als u events registreert in de processen, vergeet dan niet om de events weer te déregistreren, zodra ze niet meer nodig zijn. Geregistreerde events nemen ruimte in het geheugen in en die ruimte kunt u wel voor iets anders gebruiken. CRM WebClient UI Front-end Als u bezig bent met de front-end en daarvoor JavaScript, HTML en zelfs CSS gebruikt, moet u ook rekening houden met een aantal zaken, die invloed hebben op de performance. 1. Bij het zogenaamde renderen van de browserpagina’s wordt CPU gebruikt. Hierbij is vooral de complexheid van JavaScript en HTML een mogelijke oorzaak van performance problemen. Optimaliseer JavaScript zoveel mogelijk. En gebruik geen uitgebreide CSS voor uw HTML code als met een compactere hetzelfde kan worden gebruikt. VNSG magazine jaargang 18 NR. 1 MAART 2014 Blad 2 Tips & Tricks - Voorkom performance problemen in CRM 2. Als u een JavaScript laat uitvoeren bij het OnLoad event, houdt er dan rekening mee, dat telkens wordt uitgevoerd, als het front-end scherm in de browser opnieuw wordt opgebouwd. Dat is al het geval bij een kleine wijziging (bijvoorbeeld het wijzigen van een knop van uit naar aan). Als die JavaScripts veel code bevatten, dan duurt het laden van schermen langer. 3. Kijk uit met DOM operaties in het JavaScript. DOM elementen hebben (mogelijk) onvoorspelbaar gedrag, evenals de hen omringende elementen. De oorzaak is veelal de gebruikte browser (met name de wat oudere versies). Hierdoor worden veel scherm elementen opnieuw opgebouwd bij elke wijziging van het DOM element. Bijvoorbeeld het wijzigen van de stijl van het DOM element <table>, als deze een groot aantal regels bevat, zorgt ervoor, dat het gehele element opnieuw moet worden opgebouwd. En dat kost extra tijd. 4. De hoeveelheid regels in de CSS zorgt ervoor, dat de browser voor elk element, die regels moet doorlopen. Beperk daarom de CSS tot datgene wat u nodig heeft. Het gebruik van generieke “all-purpose” CSS sheets moet worden voorkomen. 5. Zorg ervoor, dat in uw HTML code alle tags worden gesloten. Dus in plaats van alleen <br> te specificeren, specificeer <br></br>. Vertrouw er dus niet op, dat WebClient UI dit soort “fouten” voor u oplost. Dat gebeurd wel, maar gaat ten koste van de performance. 6. Kijk goed uit bij complexe HTML code. In feite moet u die zoveel mogelijk proberen te vermijden. Dit is vooral waar bij geneste <table> tags. BSP De vorige paragraaf was generiek voor HTML, CSS en JavaScript. Toch behoren die onderdelen ook tot de BSP’s in SAP CRM. De Business Server Pages maken gebruik van HTML (via XHTML) en inline script blokken. 1. Beperk zoveel mogelijk het gebruik van inline script blokken op BSP views, waarvan de inhoud regelmatig wijzigt. Omdat de WebClient UI normaal gebruik maakt van ADH (Automatic Delta Handling) worden de inline script bij elke wijziging meegenomen, met performance verlies tot gevolg. Probeer inline script alleen op stabiele schermen te gebruiken. Er is echter een ander alternatief. Maak een aparte view aan, met daarin alleen het inline script. De ADH pikt deze dan maar eenmalig op voor plaatsing in de documentheader. 2. Hetzelfde geldt natuurlijk ook voor inline stijl blokken en daarbij kunt u hetzelfde alternatief gebruiken. VNSG magazine jaargang 18 NR. 1 MAART 2014 Blad 3 Tips & Tricks - Voorkom performance problemen in CRM 3. Het gebruik van een horizontale scrollbar kent ook een performance probleem. Met name het zetten van chtmlb:configCellerator op scrollable (in vorige versies: chtmlb:configTable) leidt tot performance verlies. Als u toch wilt scrollen, overweeg dan het gebruik van div rondom de tabel (met een overflow in de x-richting). 4. Als u verticale scrollbars wilt gebruiken, zorg er dan voor dat SAP Note 1247380 is opgenomen in uw systeem. 1247380 THTMLB cellerator resizing performance 5. Minimaliseer het aantal zichtbare kolommen en rijen in tabel elementen. Minimaliseer ook de tabelinhoud op de back-end. Beide hebben invloed op de performance. Maak op de back-end desnoods een eigen interne tabel met alleen de noodzakelijke kolommen en records erin. 6. Bij event afhandeling moet u geen items kruisen in de direct uit te voeren programma logica voor de callback. Gebruik in plaats daarvan de “end of document” processen. Omdat het direct uitvoeren daarmee tegelijk de overige items aantikt en vice versa worden de callback meerdere malen uitgevoerd en dat willen we natuurlijk niet. Back-end Natuurlijk gebruikt u knooppuntbomen (trees) en tabellen. En natuurlijk wilt u die configureren. Daarbij is het van belang, dat de back-end niet teveel tijd kwijtraakt met het renderen van de webpagina’s waarop dat soort elementen aanwezig zijn. 1. In veel gevallen bevatten de UI componenten context nodes, die geen implementatie hebben van een P-Getter methode. En als die wel aanwezig is, levert die methode geen waarde terug. Dit leidt tot het heuristisch bepalen van het type van een kolom van een tabel. En dat is een erg dure actie. Maak daarom voor elke kolom een P-Getter methode en lever daarmee altijd het type van de kolomvelden aan. Dit voorkomt het heuristisch bepalen van het type. 2. Implementeer SAP Note 1179315 voor een sterke verbetering van de performance voor trees en tabellen. 1179315 - CRM Web UI: Backend performance of configurable tables/trees 3. Als de context node een herdefinitie van de methode GET_P_T_TABLE bevat, implementeer dan SAP Note 1277270. Dit geldt alleen, indien SAP Note 1179315 (hierboven) is geïmplementeerd. 1277270 - WEBCUIF: Wrong field types after note 1179315 VNSG magazine jaargang 18 NR. 1 MAART 2014 Blad 4 Tips & Tricks - Voorkom performance problemen in CRM 4. Plaats geen dure code (uitgebreide handling) in field exits. Telkens als de rendering van het veld plaatsvindt, wordt de exit code doorlopen. Het veld is onderdeel van een groter element? Dan wordt de veld exit ook doorlopen als een ander onderdeel van dat element wordt aangepast. En natuurlijk ook bij het renderen van de webpagina zelf. 5. Meten is weten Natuurlijk wilt u de performance meten. Standaard heeft de WebClient (vanaf SAP CRM 7.0) de mogelijkheid om de performance na te gaan. Ook heeft SAP een speciaal gereedschap hiervoor. 1. Druk op de toetscombinatie CTRL+SHIFT+F7. Hiermee wordt rechtsboven een nieuw scherm (workframe area) geopend met daarin de back-end en front-end rendering tijden worden weergegeven. De back-end rendering (ABAP verwerking) is 100% accuraat. De front-end rendering geeft alleen de onderste limiet van de rendering weer, maar is natuurlijk een indicatie over de werkelijke front-end render tijd. 2. De Performance Measurement Tool van SAP is beschikbaar via SAP Note 1041556. 1041556 - SAP HTTP PlugIn for IE In deze SAP Note staan nog verwijzingen naar andere gerelateerde SAP Notes. De metingen met dit gereedschap kunnen verder worden vergeleken met STAD records. Via transactie STAD haalt u analyse gegevens naar voren over de performance van de back-end. Figuur 1 - Transactie STAD VNSG magazine jaargang 18 NR. 1 MAART 2014 Blad 5 Tips & Tricks - Voorkom performance problemen in CRM 3. Natuurlijk kunt u ook de standaard SQL tracer van SAP gebruiken. Dat is bijzonder handig bij de ontwikkeling van uw eigen BSP pagina’s. Terwijl u ontwikkelt, kunt u delen alvast tussentijds testen op performance. Dat is beter dan achteraf performance issues oplossen. U roept de SQL tracer op via transactie ST05. Figuur 2 - Transactie ST05 CRM functie customizing CRM functies maken gebruik van acties. Daarbij gelden ook regels voor de performance. 1. Houd de condities zo simpel mogelijk, onafhankelijk of het een geplande actie of een start actie is. Dit zorgt ervoor, dat het vaststellen van de actie (en rapport selectie) snel is en blijft. 2. In plaats van op workflow gebaseerde condities, overweeg het gebruik van de BADI’s EVAL_SCHEDCOND_PPF of EVAL_STARTCOND_PPF om een (veel) betere performance te krijgen. Bij workflow wordt namelijk een parser gebruikt en wordt de data generiek toegankelijk gemaakt, waardoor er een performance probleem kan ontstaan. 3. Gebruik verschillende PPF profielen voor verschillende business scenario’s. Het is iets meer werk maar zorgt ervoor, dat de runtime erg snel blijft omdat er minder condities gecontroleerd worden en er minder acties geladen worden. VNSG magazine jaargang 18 NR. 1 MAART 2014 Blad 6 Tips & Tricks - Voorkom performance problemen in CRM Tot slot nog een lijstje met SAP Notes 1. Help 1251767 - Automatic Delta Handling: Checking 2. Algemeen 1162605 - Network performance for CRM (IC) Webclient 1048388 - General Performance improvements of BSP transactions 3. Front-end 1255130 - WEBCUIF: Frotend performance w.r.t PAI and table lines 1252586 - WEBCUIF: Light-DDLB for improved performance 1256218 - WEBCUIF: Cellerator tag: Resizing performance enhancement 1280372 - Web Client UI: Performance when using F4 with help objects 1283980 - THTMLB cellerator sizing performance fix 1300154 - JavaScript circular reference fix in thtmlbUtil eventing 1301750 - Severe JavaScript memory leak fix 1302789 - JavaScript memory leak fix for IC in CRM 2007 1318610 - Frontend Selection for Web Client UI tables 1326441 - Debugging authority check performance improvement 4. Back-end 1244479 - CRM WebClient: Runtime related issues Bovenal gebruik uw gezond verstand. Even een pas op de plaats en nadenken helpt beter, dan snel een BSP in elkaar draaien. Deze tip geeft u aanknopingspunten om de performance wat beter te doorgronden op een CRM systeem. Deze tip is aangeleverd door Superp Technology Consultants BV (http://www.superp.nl/). Voor vragen of extra informatie over dit onderwerp kunt u via email contact opnemen met Robbie Veenstra (mailto:[email protected]). VNSG magazine jaargang 18 NR. 1 MAART 2014 Blad 7