Eduard Lebedyuk · Dec 20, 2016 go to post

You should have FHIR package, which includes dtls to transform hl7 messages into json or xml. You can either use that or write your own solution based on that.

Eduard Lebedyuk · Dec 20, 2016 go to post

Have you checked how much time does it take to load all records from database on a server?

Eduard Lebedyuk · Dec 9, 2016 go to post

How do you propose it should be handled instead?

You  provided two ways, by which you can control string/number output, and they seem to cover most of the cases.

Eduard Lebedyuk · Dec 8, 2016 go to post

Hello.

I have provided more comprehensive documentation for Ensemble Workflow REST API project.

Do you think there's something else I need to add to it?

Eduard Lebedyuk · Dec 7, 2016 go to post

On the other note, if you use REST on 2016.1+ you can enable CORS support in a more organised way:

Class cors.REST Extends %CSP.REST
{
/// This parameter influences the CORS support. The default is an empty string meaning 'not specified'.
/// If set to true (1) then CORS processing is ON. If set to false (0) then CORS processing is OFF.
/// If left unset "" then the decision to process CORS is delegated to the setting on the URL map route.
Parameter HandleCorsRequest;    

XData UrlMap [ XMLNamespace = "http://www.intersystems.com/urlmap" ]
{
<Routes>
<Route Url="/:test" Method="GET" Call="Test" Cors="true"/>
</Routes>
}

/// This is the CORS request handler. User should override this method in their subclass
/// if they don't want the default behavior
ClassMethod OnHandleCorsRequest(pUrl As %String) As %Status
{

    #; The default implementation is simply to dispatch to the
    #; default handler
    Quit ..HandleDefaultCorsRequest(pUrl)
}

}

Note, that if you're okay with HandleDefaultCorsRequest then you don't need to redefine  OnHandleCorsRequest method and need supply only HandleCorsRequest or Cors attribute on per path basis.

Eduard Lebedyuk · Dec 7, 2016 go to post

In some cases Access-Control-Allow-Origin: * is not a valid value, so I usually determine origin host and supply it:

Do %response.SetHeader("Access-Control-Allow-Origin",..GetOrigins())

And GetOrigins method:

/// Get Origin from %request object
ClassMethod GetOrigins() As %String
{
    set url = %request.GetCgiEnv("HTTP_REFERER")
    return $p(url,"/",1,3) // get http(s)://origin.com:port
}

Also, sometimes additional headers may be required, here's one of the more permissive sets:

Do %response.SetHeader("Access-Control-Allow-Origin",..GetOrigins())
Do %response.SetHeader("Access-Control-Allow-Credentials","true")
Do %response.SetHeader("Access-Control-Allow-Methods","GET, PUT, POST, DELETE, OPTIONS")
Do %response.SetHeader("Access-Control-Max-Age","10000")
Do %response.SetHeader("Access-Control-Allow-Headers","Content-Type, Authorization, Accept-Language, X-Requested-With")
Eduard Lebedyuk · Dec 7, 2016 go to post

What do you mean? Do you want to call RESTForms from some other (non-web) context? Can you please expand your question.

Eduard Lebedyuk · Dec 6, 2016 go to post

is the import smart enough to figure out if a row already exists

As you can't specify an ID column during import, then no, SQL import wizard would only insert new rows.

is there some other utility that can check for keys first?

You can:

  • export/import underlying global(s)
  • use 3rd party SQL database explorers to generate UPDATE DDL statements from your data (DataGrip can do it for example), and then import this DDL into new namespace
Eduard Lebedyuk · Dec 6, 2016 go to post

Deploy?

I think packed with the rest of the solution would be okay, and during installation you can automatically check GitHub for latest release and download it, if is's newer.

Eduard Lebedyuk · Dec 5, 2016 go to post

Why not use SFTP for that?

The following method shows how you can get a list of the files on a server, via SFTP:

Method SFTPDir(ftpserver, username, password) As %Status
{
    set ssh = ##class(%Net.SSH.Session).%New()
    do ssh.Connect(ftpserver)
    do ssh.AuthenticateWithUsername(username,password)
    do ssh.OpenSFTP(.sftp)
    do sftp.Dir(".",.files)
    set i=0
    while $data(files(i))
    {
        write $listget(files(i),1),!
        set i=i+1
        // set st = sftp.Get(files(i), "C:\Temp\myfile.ext")
    }
    quit $$$OK
}

To download file(s) uncomment the line. Documentation.

Eduard Lebedyuk · Nov 30, 2016 go to post
SELECT
NON EMPTY %KPI("PluginDemo","HighScoreCount",,"%CONTEXT")
ON 1
FROM [PATIENTS]
%FILTER ([HOMED].[H1].[ZIP].&[32006],[HOMED].[H1].[ZIP].&[32006])

Or, with %OR:

SELECT
NON EMPTY %KPI("PluginDemo","HighScoreCount",,"%CONTEXT")
ON 1
FROM [PATIENTS]
%FILTER %OR({[HOMED].[H1].[ZIP].&[32006],[HOMED].[H1].[ZIP].&[32006]})
Eduard Lebedyuk · Nov 27, 2016 go to post

You'll need need to provide more information about your setup.

TCIP

Do you mean TCP? If so you can open TCP listener and parse incoming data from your GPS device. Documentation.

Eduard Lebedyuk · Nov 23, 2016 go to post

Not the best solution, but DeepSee filters by default have a search input, you can enter part of the filter value and only filter values that have it would be shown (after pressing enter).

Eduard Lebedyuk · Nov 22, 2016 go to post

If you want to propagate mappings across all namespaces you can create %All namespace and map there. All mappings into %All namespace are visible everywhere (except for samples and docbook) .

Eduard Lebedyuk · Nov 22, 2016 go to post

Yes,  %DeepSee.UI.Architect:GetTimeLevelClasses accepts only classes from %DeepSee.Time package.

Eduard Lebedyuk · Nov 17, 2016 go to post

You'll also need to modify %GetName method to return "HourNumber24".

Also must this new class be in %DeepSee package or can I write new class in user-space?