Hi Eliot,

Both branches of try/catch must either be updating or non-updating, and I
assume that acrolinx:getUserDataMap() is non-updating.

Hope this helps,
Christian



Eliot Kimber <eliot.kim...@servicenow.com> schrieb am Sa., 19. Aug. 2023,
00:33:

> In BaseX 10:
>
>
>
> In an updating function I have a call to another updating function that
> uses update:output()  to log messages.
>
>
>
> If that function call is included, BaseX says that expressions must be all
> updating, but if I remove the call, BaseX is happy.
>
>
>
> The calling function is:
>
> declare %updating
>
>   %rest:path('/now/rest/analytics/store-latest-acrolinx-users' )
>
> function now:storeAcrolinxUsers() {
>
>   let $acrolinxMap as map(*)? :=
>
>     try {
>
>       acrolinx:getUserDataMap()
>
>     } catch * {
>
>       util:logToConsole(
>
>         'storeAcrolinxUsers'
>
>         ,``[`{$err:code}` - `{$err:description}`]``
>
>         ,'warn'
>
>       )
>
>     }
>
>   return
>
>   if (exists($acrolinxMap))
>
>   then
>
>   let $doc as element() := acrolinx:serializeAcrolinxUserMap($acrolinxMap)
>
>   let $fileName as xs:string := 'acrolinx-users_' ||
> replace($doc/@timestamp, ':', '~') || '.xml'
>
>   return db:put(analyticsmgmt:getAnalyticsDatabase(), $doc,
> relpath:newFile('acrolinx/users', $fileName))
>
>
>
> };
>
>
>
> The offending function is util:logToConsole(), which is declared as:
>
> declare %updating function util:logToConsole(
>
>   $functionName as xs:string,
>
>   $message as xs:string,
>
>   $logLevel as xs:string
>
> ) {
>
>   let $logMessage as xs:string := '[' || upper-case($logLevel) || '] ' ||
> $functionName || '(): ' || $message
>
>   return
>
>   (
>
>     update:output(prof:dump($logMessage)) ,
>
>     update:output($logMessage)
>
>   )
>
> };
>
>
>
> This is declared as an updating function and returns “updating” functions.
>
>
>
> If I comment out the call to util:logToConsole() in the first function,
> then BaseX is happy.
>
> If I use the non-updating version of logToConsole(), util:logToLog(), then
> BaseX is also happy.
>
>
>
> So my question is: why is BaseX complaining about the use of this updating
> function in an updating function?
>
> There must be some subtlety that I’m missing but I have not yet figured
> out what it is.
>
>
>
> Thanks,
>
>
>
> Eliot
>
> _____________________________________________
>
> *Eliot Kimber*
>
> Sr Staff Content Engineer
>
> O: 512 554 9368
>
> M: 512 554 9368
>
> servicenow.com <https://www.servicenow.com>
>
> LinkedIn <https://www.linkedin.com/company/servicenow> | Twitter
> <https://twitter.com/servicenow> | YouTube
> <https://www.youtube.com/user/servicenowinc> | Facebook
> <https://www.facebook.com/servicenow>
>

Reply via email to