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 • 1. oktober 2026
Jeg bryder mig ikke om formuleringen "vibe coding" men kan du få AI til at hjælpe med at udvikle i Notes/Domino? Ja, det kan du godt...
Af John Dalsgaard • 1. oktober 2026
I do not like the term "vibe coding" but can you have AI help you code in Notes/Domino? Yes, you can...