Hvordan kan man definere og bruge en SSJS funktion på en XPage

John Dalsgaard • 5. september 2024

Definer en lokal SSJS funktion uden at bruge et 'library'

Jeg har længe været irriteret over ikke at kunne definere en server side Javascript (SSJS) funktion på en enkelt XPage eller oftere en Custom Control.


Man kan naturligvis altid tilføje en funktion til et 'script library', men måske skal funktionen kun bruges indenfor denne ene kontrol (mange steder) og ved at lægge den i et globalt 'library' så vil vi "forurene" systemet som helhed.


Så i dag slog en idé ned i mig, da jeg sad og redigerede en Custom Control. Jeg prøvede den af - og den virker...!!


Jeg prøvede simpelthen at tilføje en funktion til en datacontext variabel:

    <xp:this.dataContexts>

        <xp:dataContext var="localSSJS">

            <xp:this.value><![CDATA[#{javascript:   

                // Sneak a method in here that can be called from the entire this CC

                var getCellStyle = function(id){

                    var selected = document.getValue(FN_RiscCellId) == id;

                    return 'matrixCell'+getLabel('color5x5Matrix'+id, compositeData.formName) + (selected ? ' circle' : '');

                }

            }]]></xp:this.value>

        </xp:dataContext>

    </xp:this.dataContexts>

Og senere kunne jeg bruge koden i Custom Control'en som her:

    <xp:td id="td11">

        <xp:this.styleClass><![CDATA[#{javascript:getCellStyle('2.5')}]]></xp:this.styleClass>

            :
   
        :
    </xp:td>

Og voilà - vi har en funktion defineret inden for. én XPage eller Custom Control som vi kan bruge mange steder for at undgå at duplikere logik - og stadigvæk uden at tilføje den til et globalt 'script library'!

Blog

Af John Dalsgaard 26. maj 2025
Efter lang ventetid og 3 EAPs (early access products) bliver den nye version snart frigivet
Af John Dalsgaard 26. maj 2025
After a long wait and 3 EAPs (early access products) it will soon be released
Flere indlæg