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 8. september 2025
So I had this idea to test out Nomad Web on a brand-new v.14.5 Domino server as an alternative to the normal Notes client - but it had to fit into the "normal" way I give access to our servers...
Af John Dalsgaard 26. maj 2025
Efter lang ventetid og 3 EAPs (early access products) bliver den nye version snart frigivet