2016-03-03 26 views
6

Nella documentazione per xdmp:invoke, è possibile passare parametri come secondo argomento.marklogic richiama la funzione con i parametri

Per xdmp:invoke-function questa opzione non è disponibile. C'è qualche soluzione per raggiungere questo obiettivo?

Il mapping di un elenco a una funzione è semplice. Quello che sto cercando di ottenere è un tipo di funzione orientata all'aspetto che controlla i messaggi di log di successo e non riusciti e di registro per tutte le funzioni che vengono chiamate in questo modo. Qualcosa di simile:

declare function my-mapper ($array, $fn) { 
    (: standard logging and checks :) 

    for $a in $array 
    return try { 
     (: now call the function with parameter :) 
     xdmp:invoke-function($fn($a),<options>...</options>) 

    } catch ($e) { 
     (: standard housekeeping if something goes wrong :)  
     ... 
    } 
}) 


my-mapper($array, function ($item) { 
    (: do stuff with item :) 
}) 

C'è un modo per ottenere questo in XQuery utilizzando MarkLogic?

risposta

9

Si esegue un modulo principale senza accesso al contesto che lo ha chiamato e l'altro esegue una funzione con tutto il contesto. Penso che l'idea è che non è necessario passare i parametri attraverso l'impianto idraulico di invocazione perché è possibile passarli alla funzione come parte della chiamata a xdmp:invoke-function. Avresti solo bisogno di avvolgerlo in una funzione 0-arity:

xdmp:invoke-function(
    function() { $fn($a) }, 
    <options>...</options>)