Blog Layout

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

John Dalsgaard • sep. 05, 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 22 Oct, 2024
In today's IT landscape it is quite normal that you have to call "services" in client driven website - and that can easily be across domains...
Af John Dalsgaard 05 Sep, 2024
Definer en lokal SSJS funktion uden at bruge et 'library'
Flere indlæg
Share by: