Question Tom Philippi · Jan 31, 2018

I am running InterSystems Ensemble 2016.2 on ubuntu and trying to connect to a remote MS SQL server database.

Insofar, I have successfully configured my ubuntu machine to connect to the remote MS SQL server database using unix-odbc. That is:

  • Telnet connection works
  • tsql (test sql) connection works
  • isql command succesfully connects to sql server and I am able to execute queries on ubuntu.
  • The DSN for the isql command are defined in /etc/odbc.ini and /etc/odbcinst.ini and should be available systemwide.
  • The DSN in the odbcinst.ini uses the microsoft odbc driver 13 for Sql Server for linux.
1
0 761
Question Tom Philippi · Jan 17, 2018

We are trying to make an ODBC connection via our intersystems ensemble (2016.2 running on ubuntu). However, when I am testing the connection I receive a pop-up that: "Http object response incomplete or invalid.0,#R". Note that the iodbctrace.log remains empty (and it is working because on the first try it registered a 459 error that I should activate kerberos, which I did). Any advise where I should look?
I have taken the following actions:

1. Expand the cacheodbc.

5
0 1732
Question Tom Philippi · Jan 8, 2018

I have a database which needs to be synced to another system and considering to use the SQL Inbound adapter to 'watch' the database. The other system, however, has a bulk API so I'd prefer to send multiple SQL rows in a single message to that system. The SQL Inbound adapter seems to trigger a single call (to a process or business operation) per SQL-row. However, the documentation here: http://docs.intersystems.com/latest/csp/docbook/DocBook.UI.Page.cls?KEY… in example 5 seems to suggest that if I exclude a KeyFieldName I get multiple rows in my EnsLib.

3
0 861
Question Tom Philippi · Dec 13, 2017

Recently viewed a demo on the new Dynamic Objects in InterSystems (we are still running 2016.1); together with the upcoming IRIS data platform I started thinking about possibilities of building dynamic databases. That is, I can imagine some projects were it might be really nice to store dynamic objects and then run sql queries on them without ever defining the fields of the dynamic objects (i.e. not at storage, but only if you run your sql query). If there is any system where this might be possible it is InterSystems Cache.

3
0 860
Question Tom Philippi · Nov 28, 2017

When executing a business process I'd like to share the Login Token from an external system retrieved via one of my business operations across multiple process instances. This means I need to persist the token somewhere. What would be the best approach/pattern to implement this?

The primary idea I had was to store the token and a timestamp in a persistable object and then write a single method in the Business Operation that retrieves the token.

1
0 376
Question Tom Philippi · Nov 27, 2017

I am calling a business rule from one of my business processes and I noticed that when the business rule reports an error that the business process calling that rule just stops without any errors. Resultingly it fails to trigger the scope - catch-all construction that is surrounding the business rule. I know that it is possible to view the errors in business rules in the business rules log, but I really like to push an error message to Ens.Alert or something similar when my business rules report an error. How do I achieve that?

2
0 381
Question Tom Philippi · Nov 27, 2017

How do I set an URL when I post a httpRequest via SendFormArray of my Ensemble Business Operation. Here is my code: 

Class CareHome.RestApiClient Extends EnsLib.REST.Operation
{
Parameter INVOCATION = "Queue";
Method Login(pRequest As CareHome.Request.LoginRequest, Output pResponse As Ens.StringResponse)
{

set tURL = ..Adapter.URL_"login/login"


set httpRequest = ##class(%Net.HttpRequest).%New()
 set httpRequest.ContentType="application/json"
 do ..ObjectToJSONStream(pRequest,.jsonStream,"aeliw")
 set httpRequest.EntityBody = jsonStream
  
 set tSC = ..Adapter.SendFormDat

1
0 952
Question Tom Philippi · Nov 23, 2017

I have an Ensemble installation and just build my first RestService (using %CSP.Rest that forwards them to my Business Service). This works nice and fine when I use postman to make REST calls over http (port 57772). However when I attempt to make a request using https over port 443 I receive the following error:

<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html>
    <head>
        <title>404 Not Found</title>
    </head>
    <body>
        <h1>Not Found</h1>
        <p>The requested URL /csp/healthshare/fcoffice/rest/ping was not found on this server.
7
0 1009
Question Tom Philippi · Nov 21, 2017

Initial questions have been answered. Expanded the post with actual code (see below)

So, I'd like to update one (and preferably) more context-fields in my ensemble BPL business process based upon the information in the request that initiates said BPL proces. I got a few questions about that:

1. First, I can't get it to work. Specifically, in the BPL process I call the business rule with my request as context and expect it to put it results in context.Boolean. The business rule nicely updates the context.Boolean but the conditional logic looks at specific fields in the request (i.e. if request.

5
0 761
Question Tom Philippi · Nov 7, 2017

I have an Ensemble installation with an FTP business operation which I would like to connect to a server over SSL in explicit mode (see also: https://www.rebex.net/kb/tls-ssl-explicit-implicit/default.aspx). I keep running into timeouts while attempting to do this via Ensemble. Does Ensemble actually support SSL in explicit mode??? Because I can't seem to find any setting where to switch it on.

1
0 614
Question Tom Philippi · Oct 11, 2017

I just deployed my production from test to acceptance but I found that the deployment misses some Soap Webclient classes which are used by my business operation components. I have used the management portal to create the deployment (i.e. production settings -> Export) and I expected that all classes used by the production were automatically included. Apparantly, that is not the case. Is this default behaviour for Ensemble? And can I somehow force Ensemble to automatically include these classes?

1
0 347
Question Tom Philippi · Aug 23, 2017

I have a call in a business process that returns a response which may contain a collection of error message. I use the following code in my response builder to extract the messge value from the first error and map them to a context variable:

Set    context.ErrorMessage   callresponse.result.GetAt(1).errors.GetAt(1).message


This works nicely when an error comes up, however when no error is returned (i.e. the collection is empty) I receive an error: ERROR <Ens>ErrException: <INVALID OREF>zOnResponse2+4^Calarm.UserRegistrationProces.Context.1 -- logged as '-' number - @' Set status=1,context.

2
0 391
Question Tom Philippi · Aug 22, 2017

I have been building Business Processes in Ensemble for a few months and in a process i'd use a combination of data from the request that started the process and context variables that where filled by earlier calls in the process as input for a data transformation. I do not know how to achieve that.

What I do currently is that in my process I first call a data transformation and then make a call to an operation. For the data transformation I use as input the request that started the business process and as output the request that I will use to initiate the call to the operation.

6
0 1641
Question Tom Philippi · Aug 16, 2017

So I have an ensemble soap client which I use to send a message. The target web service is, however, giving a soapfault stating that my message misses the "SoapAction http header".

When I copy paste the message from my Cache Soap Log and fire it from Soap UI I get a proper response from the target web service. This suggests that my intersystems installation is somehow not including or losing some http headers. 

I am running Ensemble 2016.2 SUSE on an ubuntu machine.

Here is the InterSystems message with the http headers from Soap UI:

POST https://test.salesforce.com/services/Soap/c/40.

2
0 1087
Question Tom Philippi · Aug 16, 2017

I'd like to access and view the soap log. Apparently there is a global for that (^ISCSOAP) (http://docs.intersystems.com/latest/csp/docbook/DocBook.UI.Page.cls?KEY…), but insofar I have been unsuccessful finding the exact cache command for viewing the soap log or changing it so that it logs both incoming and outgoing traffic. Can anyone enlighten me?

I.e. I am trying stuff like:

set ^ISCSOAP("Log") = io   

write ^ISCSOAP("Log)

but those don't work.

5
1 4520
Question Tom Philippi · Aug 15, 2017

I have an imported WSDL from SalesForce and I am trying to send a login-request to the SalesForce-servers via InterSystems. The login requires a username and a password in the body, and an organizationId in the header. I am having trouble filling the organizationId in the header.

Via SoapUI I can send a successfull message to the SalesForce-servers. The message should look like this:

4
0 3168
Question Tom Philippi · Aug 14, 2017

I am trying to import the SalesForce Enterprise WSDL in InterSystems Ensemble Studio using the SOAP Add-In. However, when I do so I receive a class dependency loop, Error #5316 during compilation. The WSDL is the standard WSDL provided with SalesForce and works fine in SoapUI. In the SalesForce WSDL it is allowed for an object A to include an object B as an element, while at the same time object B is allowed object A as an element. I think this is what causes the class dependency loop for InterSystems. Does anyone has any suggestion how I can circumvent this error?

7
0 890
Question Tom Philippi · Aug 7, 2017

Okay, so I ran into a rather odd bug. I have a remote test machine (tst-intersystems) running for which I accidently opened a lot of windows in my Studio (i.e. 500+). The result is that the studio runs out of memory and crashes. Now, every time I try to connect to this remote machine studio immediately attempts to open all windows effectively not allowing me to start studio anymore.

2
0 757
Question Tom Philippi · May 18, 2017

I am getting an ERROR #5002 in a soap service defined in ensemble. Odd thing is that I allready have a functioning business service running as a soap service, but we needed another, but that one returns an error:

<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:s="http://www.w3.
3
0 4278
Question Tom Philippi · May 9, 2017

I'd like to have production specific settings for different environments (OTAP). I have set the system default settings on my production to override the default settings. However, this does not seem to work. It is my understanding that the system default settings override the settings I have set on the production (I thought I heard my Sales Engineer say this). However, reading the documentation I am not sure of this reading either. However, when I clear the values for the adapters on my production my system default settings are still not apply.

8
0 1165
Question Tom Philippi · Apr 20, 2017

We are in the process of setting enabling SSL on a soap web service exposed via InterSystems, but are running into trouble. We have installed our certificates on our webserver (Apache 2.4) and enabled SSL over the default port 57772. However, we now get an error when sending a soap message to the web service (it used to work over http). Specifically the CSP gateway refuses to route te emssage the soap web service:

1
0 1270
Question Tom Philippi · Apr 18, 2017

I have built an Ensemble SOAP service (EnsLib.SoapService.Service) as a business service which accepts soap requests from another application. To secure the traffic between the SOAP service and the application i'd like to enable SSL. I see that in the management portal I can upload the certificates, chains and keys and save them as an SSL / TLS configuration. However, it is not clear to me how I apply this SSL / TLS configurtion to the soap service I am running.

2
0 1859
Question Tom Philippi · Mar 18, 2017

I have a Enslib.REST.operation which I want to use to send a JSON message. In Ensemble I am using the request message to the Business operation as an input for ObjectToJsonStream function so I can send it out (this is the way to go right?). However, I am now running into the fact that one of the attributes (template_name) contains an underscore and that I am not allowed to use the underscore to define the property in my ensemble RequestMessage:

Property template_name As %String;

What's the best way to resolve this?

1
0 444
Question Tom Philippi · Mar 15, 2017

I am relatively new to ensemble, but I am trying to build a REST operation using the enslib.Rest.Operation but I can't seem to get it to work at all. I am completely at loss here because the errors I am receiving are very unclear. I have tried a few different variants using PostURL and SendFormDataArray but I got errors on all variants. Suggestions are welcome.

The call I am trying to product is a simple ping message to the Mandrill APIat https://mandrillapp.com/API/1.0/users/ping.json&nbsp;(for more details see: https://mandrillapp.com/api/docs/users.JSON.html#method=ping).

2
0 1111
Question Tom Philippi · Feb 20, 2017

I have a business operation in an ensemble production to which I can send a test message which requires a date input. However, I can not seem to find out how I write the date in the test message. 1980-01-01, 01-01-1980, 50000 (cache integer encoding). But I constantly get an error:  <ZODAT> zDateOfBirthDisplayToLogical+1^Ckey.Customer.1

2
0 663
Question Tom Philippi · Feb 16, 2017

I have one Ensemble EnsLib.File.OutboundAdapter which has several methods, each writing a different file. In my Ensemble Production I have configured this FileAdapter to write to a certain directory, but i'd rather have each method write to a different (sub)directory instead of writing all files to the same directory. How can I achieve that without splitting the methods into different business operations?

The current code just sets the filename and the output:

set tSC = ..Adapter.PutString(filename,output)

3
0 666