Bernd Mueller · Mar 6, 2019 go to post

ah, i see that you have contacted support in the meantime and a WRC problem is already logged for this.
If the issue is solved, please update the solution here as well.

Bernd Mueller · Oct 16, 2019 go to post

Hi,
you can test your Node environment within a simple windows command window (CMD.exe):

C:\>node -v
v0.10.26

C:\>node
> x=require('cache.node')
{ Cache: [Function: Cache] }
> y = new x.Cache
{}
> y.version()
'Node.js Adaptor for Cache: Version: 1.0.63 (CM)'
>

Do you have renamed cache0100.node into cache.node an copied it into location specified in environment variable NODE_PATH ? e.g. NODE_PATH=C:\Program Files\nodejs
 

If not, you need to specify path to cache.node within require(), e.g. x=require('c:/mypath/tocachenode/cache')
HTH,
Bernd

Bernd Mueller · Oct 16, 2019 go to post

Hi,
are you all set now? Or do you still get the same error? Please confirm.

You can add parameter debug: "debug.log" with the open() if it still does not work in order to hopefully get more information!?

Anyway, if you are local anyway you should use native connectivity mode instead tcp since it get's you better performance.
 

Bernd

Bernd Mueller · Jun 16, 2016 go to post

Hi, you can use CSPGateway event-log to log request- and response content coming through and from the server.

 Since REST is coming through http you can also use any external network trace tool like tcpdump, wireshark, fiddler, etc.

To test REST services you can use Curl command-line tool or ARC (Advanced REST Client) chrome extension, etc.

HTH,

Bernd

Bernd Mueller · Aug 25, 2016 go to post

Steve,

starting with ZM 1.1.1 the "event" object is now passed to all event-handlers (unselect/onevent/onchange) as the optional last argument. User could now make use of it in their template client methods if needed (e.x. handle propagation-related issues, etc.)
This is missing in the documentation so far but is already addressed to be added shortly.

HTH,

Bernd

Bernd Mueller · Sep 1, 2016 go to post

yes, with the html5 type $input layout object you have to add onkeypress:true to it in order that onevent() gets triggered.

And in onevent(eventType,key,value,docViewId,event), you can do for example :

//$input onkeypress:trueif (eventType== 'keypress') {var keyCode= event.keyCode|| event.which;console.log('keyCode :' + keyCode);if (keyCode== '13') {// Enter pressed -> Do somethingzenPage.doSomething(value);}}

HTH,
Bernd

Bernd Mueller · Sep 2, 2016 go to post

Hi Peter,
this is very specific issue and hard to say with the information you've provided so far.
Are you sure this is related to Zen/Caché/CSPGateway and not a client-browser issue?

We need more information on this for a further investigation.

What changes are made that makes it stop working?

What client-browser/version you are using, what Caché version on server?

I assume you are using an "old" IE version, right?

The navigation to the #2 page called from #1 does work and loaded correctly?
Only the DXImageTransform did not work as expected in that case?
Calling #2 directly makes it working?

Did you try using IE-Developer-Tools (F12) to inspect and compare page-source and component loadings of both?
Any errors in the console, etc.?

Maybe it's better for you to report this in the WRC, so that support can continue with you on this!?

Regards,
Bernd

Bernd Mueller · Oct 10, 2016 go to post

if you already have pcl documents available, then probably using 3rd party pcl to pdf converter command-line tool would be the easiest solution for you. You can use $ZF(-1, <oscommand>) call-out from within COS to invoke conversion process.

(for example: VeryPDF PCL Converter, etc.)

HTH,
Bernd

Bernd Mueller · Oct 10, 2016 go to post

on Unix and Windows you can use PIPES:

s prog="whoami",oldIO=$IO open prog:"QR" use prog read result c prog use oldIO w !,result
Bernd Mueller · Nov 7, 2016 go to post

Hi Nikita,

do you've tried Set %session.EndSession=1 in your Logout()?

Regards,
Bernd

Bernd Mueller · Nov 7, 2016 go to post

how did you login? Do you use url-name/value params or http-basic-authentication with the first initial request?

Can you log/check %session.SessionId and %session.NewSession?

Bernd Mueller · Nov 7, 2016 go to post

i am using curl with basic-auth and this seems to work for me:

curl -v -u _SYSTEM:<password> http://localhost:<port>/playground/index


Every request results in new session. The same for logout request.

I assume that the client browser remains the first http-basic-auth credentials and reusing it for the second (logout) request as well.

If i skip the basic-auth in curl request for the logout i will get 401 Unauthorized which is expected.

HTH,
Bernd

Bernd Mueller · Jun 20, 2017 go to post

Hi,
ssl/tls (https) support for the atelier connections is planned for Atelier 1.1

It should work via external webserver too.

Did you get a response from http://<webserverip>:<port>/api/atelier/ in browser? (or postman, arc, etc.)

What version of Caché/HS you are running on server? (> write $ZV)

HTH,
Bernd

Bernd Mueller · Jun 20, 2017 go to post

Hi Jeffrey,

it seems this is a specific configuration issue which needs a more deeper look. (further logging, etc.)

I would suggest you to contact WRC support so that we can continue investigation.

Thanks and Regards,
Bernd

Bernd Mueller · Aug 1, 2017 go to post

Hi James,
it seems you are correct, direct marco evaluation is not yet supported.
As a workaround, you can define class-parameters for the $$$ macros you wanna use in your installer/manifest class:

Parameter CacheVersion = {$$$CacheVersion};
...

which then can be referenced in XDATA manifest that way: (parameter expression)

${#CacheVersion}


HTH,
Bernd

Bernd Mueller · Jan 28, 2018 go to post

Hi Soufiane,
as you can see in the GetAccessTokenFromRequest() method, the access token is taken from the http authorization bearer header or from the encoded entity body's access_token parameter.  As described in RFC6750, see here: https://tools.ietf.org/html/rfc6750

Your client need to send that way. Not within the url as a name/value param.

On resource server side you then need to continue with this, see section "Code Requirements" here: http://docs.intersystems.com/latest/csp/docbook/DocBook.UI.Page.cls?KEY=GOAUTH_resource

Be also aware on the prerequisites and code requirements also.

HTH,
Bernd

Bernd Mueller · Jan 30, 2018 go to post

i would start using "postman" to try out google restful api for your particular needs. To see what exactly you need to sent (request) and what you get in return (response). With that in place you can start coding some kind of wrapper methods using %Net.HttpRequest for doing the same requests and preparing the appropriate results from the response for your further processing, as you've already figured out before by using postman.

HTH, Bernd

Bernd Mueller · Feb 1, 2018 go to post

if we can not allocate a license for a REST call/request we report a "503 Service unavailable" error by default.

Please note: Studio, Terminal and SMP allocates a license-slot. Every unauthenticated REST request will retain a license-slot for at least 10 sec. after request is finished.

Bernd Mueller · Feb 6, 2018 go to post

if i remember correctly you do not need to create a custom tag in order to use your customer version of the lookup-class. You can use the default CSP:search tag and provide your modified custom lookup-class by the "searchpage" attribute.

<csp:Search name="FindPerson"
    searchpage="%ZCSP.PageLookup.cls?SEARCH&..."
    onselect="onFindCustomer"
    classname="Sample.Person"
    ...

Bernd Mueller · Jun 6, 2018 go to post

Hi,
underscore in method names are *not* supported and possible, I am afraid.

Besides the SoapAction already mentioned by Eduard you can try if adjusting the SoapMessageName and SoapRequestMessage keywords
at the method level in your WebService are helping to get what you want.

Here is an example:

Method AddInteger(Arg1 As %Integer = 0, Arg2 As %Integer = 0) As %Integer [ SoapAction = Add_Integer, SoapMessageName = Add_Integer_Response, SoapRequestMessage = Add_Integer, WebMethod ]
{
  Quit Arg1 + Arg2
}

HTH,

Bernd

Bernd Mueller · Nov 9, 2018 go to post

To let *all* (and custom) CGI-Variables coming through, you probably need to set the extra environment variables in the CSP Gateway configuration.

You can set/specify via the "Extra CGI Environment Variables" Setting in the "Application Access" section in CSP Gateway Management.

If you enter a * here, *all* CGI-Variables will be sent/tranmitted and provided to Caché-Server-Side in the %request.CgiEnvs multidimensional property.

HTH,

Bernd

Bernd Mueller · Mar 6, 2019 go to post

Hi,
i would start with a SOAP-LOG ("ios") to see what is sent out and what SoapAction is used from within Caché soap client.
see SOAP Logging docs here.

Use/install 3rd party tool "soapUI" (there is a free version), import WSDL and try to sent request from here. See if you can make it working and chekc http-log in soapUI to see what soapUI is exactly sending out to the service.

Some WebServices requires SOAPAction http-header to be quoted. To achieve this you need to use SOAPACTIONQUOTED param in your WebClient class, e.g.

Parameter SOAPACTIONQUOTED = 1;

HTH,
Bernd

Bernd Mueller · Oct 16, 2019 go to post

Hi,
for tcp connection mode you need to specify superserver-port, not webserver port.
HTH,
Bernd

Bernd Mueller · Mar 27, 2020 go to post

Hi,

i would start with the xml-structure you expect and which probably/hopefully is already defined by an xml-schema.

You can import xml-schemas into IRIS to generate XML-enabled classes which extends %XML.Adaptor.

https://docs.intersystems.com/irislatest/csp/docbook/Doc.View.cls?KEY=G…

If you do not have a xml-schema, you need to create it or your xml-enabled classes manually. (extending %XML.Adaptor)

https://docs.intersystems.com/irislatest/csp/docbook/Doc.View.cls?KEY=G…

If you have that ready, let your XML-enabled classes also extend %JSON.Adaptor.

https://docs.intersystems.com/irislatest/csp/docbook/Doc.View.cls?KEY=G…

Use %JSON.Adaptor to import the JSON data (i think DynamicObject is also supported here directly)
into your XML enabled class with the help of %JSONImport() method.

Then use XMLExport..() method (inherited from %XML.Adaptor) to export as XML data.
I have not tried this so far but i think it should work :)

HTH,
Bernd