Eduard Lebedyuk · Jan 9, 2017 go to post

you are entirely correct. 

Good to hear.

$$$SIMSRCDOMENT

If I change algorithm to $$$SIMSRCDOMENT I don't receive any results (Results local is undefined).

If I choose $$$SIMSRCEQUIVS or $$$SIMSRCSIMPLE I  get Results local as expected.

What may be the reason? I didn't modify the domain between runs.

Method returns $$$OK and %objlasterror is empty using any algorithm.

Eduard Lebedyuk · Jan 9, 2017 go to post
write ##class(Config.CPF).Activate()

Would read and activate current configuration file without system restart.

Eduard Lebedyuk · Jan 9, 2017 go to post

You can search for the references in studio:

  1. Open Studio
  2. Menu -> Edit -> Search in files
    • Find: Dimension/Measure (for example [DateOfSale].[Actual].[DaySold])
    • File type: *.dfi

It should find relevant entities.

Eduard Lebedyuk · Jan 8, 2017 go to post

Hello.

Thank you for this information. I started testing it and %iKnow.Queries.SourceAPI:GetSimilar()  returned the following as a result local:

result(1)=$lb(890,":SQL:2002:20020308X00320",.4737,.9606,57,27,686,.4737)

The list is formed from these values:

$lb(srcId, externalId, percentageMatched, percentageNew, nbOfTgtsInRefSrc, nbOfTgtsInCommon, nbOfTgtsInSimSrc, matchScore)

What does that mean?

  • srcId -sourceId of similar document
  • externalId - external source id of similar document
  • percentageMatched - number of targets common between source and similar documents divided by number of targets in source document
  • percentageNew - number of targets in similar document that is not present in source document divided by total number of targets in similar document
  • nbOfTgtsInRefSrc - number of targets in source document
  • nbOfTgtsInCommon - number of targets common between source and similar documents
  • nbOfTgtsInSimSrc - number of targets in similar document
  • matchScore - seems equal to percentageMatched

Is that correct? Are there documentation on that?

Eduard Lebedyuk · Jan 5, 2017 go to post

Cache Fileserver is an old project of mine which allows file upload/download. Files have IDs, but to download each client get's an unique link active only for his IP for a limited time. You can remove IDs altogether.

Eduard Lebedyuk · Jan 5, 2017 go to post

If you have a web application, you can enforce codepage on a client side, there are several advantages to it:

  • Conversions do not add the load to the server
  • JS client libraries are well equipped to deal with various OSes/browsers combinations

The best approach would be to move to unicode.

Eduard Lebedyuk · Jan 2, 2017 go to post

You can define your own device of terminal type (also see System  - Configuration - Devices you can see other defined Cache terminals) :

Eduard Lebedyuk · Dec 28, 2016 go to post

Possible solution:

write $SYSTEM.Status.GetErrorText($SYSTEM.SQL.SetTCPKeepAlive(3600))

About TCPKeepAlive.

UPD: well, that did not work. I set it to 3600 and later to 30, and it did not help any.

Eduard Lebedyuk · Dec 28, 2016 go to post

The best way to add RESTForms (or any other repository) into your repository is submodules. Submodule is a pointer to specific commit from another repository. On disk it looks like folder. More info on submodules. To add RESTForms execute in git cli:

git submodule add https://github.com/intersystems-ru/RESTForms.git
Eduard Lebedyuk · Dec 26, 2016 go to post

Release page offers releases for both 2016.1 and 2016.2+. And in 2016.2+ $ methods are already removed.

If however you want to use latest commit from repo, then you need to run SMR.

Eduard Lebedyuk · Dec 23, 2016 go to post

Here's an idea on how to do it without triggers altogether.

1. Set IsLeader property only in case member is a leader. So its 1 or NULL.

2. Add unique index on (Team, IsLeader). Unique index can have any number of NULL records.

3. If you try to add more than one leader, you'll get an error:

ERROR #5808: Key not unique: Utils.TeamMember:IsLeaderIndex:^Utils.TeamMemberI("IsLeaderIndex"," 1"," 1") [%SaveData+14^Utils.TeamMember.1:USER]

Sample code:

Class Utils.TeamMember Extends %Persistent
{

Property Team As %String;

Property Member As %String;

Property IsLeader(VALUELIST = ",1");

Index IsLeaderIndex On (Team, IsLeader) [ Unique ];

/// do ##class(Utils.TeamMember).Test()
ClassMethod Test(AddTwoLeaders = {$$$YES})
{
    do ..%KillExtent()
    write $System.Status.GetErrorText(..Add(1, "Alice"))
    write $System.Status.GetErrorText(..Add(1, "Bob"))
    write $System.Status.GetErrorText(..Add(1, "Clover"))
    write $System.Status.GetErrorText(..Add(1, "Dave", 1))
    if AddTwoLeaders {
        write $System.Status.GetErrorText(..Add(1, "Helen", 1))
    }
}

ClassMethod Add(Team, Member, IsLeader = "")
{
    set obj = ..%New()
    set obj.Team = Team
    set obj.Member = Member
    set obj.IsLeader = IsLeader
    quit obj.%Save()
}

}
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")