Timo Lindenschmid · May 31, 2024 go to post

From a SMS point of view this is major hell.
If you are coding you application currently, then rather then checking a database for settings instead of using global mappings, code your application that it checks a "higher-priority global first" then defaults to the global default mapping.

example core config uses ^ %SYS for instance wide config and ^SYS for local namespace config.

In this scenario you would not even need a %ALL namespace global mapping.

Timo Lindenschmid · May 28, 2024 go to post

Hi Alin,
I can see that you are using cygwin to interact with *nix version of python.
Any reason why you are not using the windows version? 
Best regards
Timo

Timo Lindenschmid · May 21, 2024 go to post

Without seeing the whole class. I would look at the Fetch method it needs to iterate your temp storage and output each row.

Timo Lindenschmid · May 14, 2024 go to post

Hi,

try querying the /api/monitor/metrics endpoint and see if that provides you the details you need.

As i never have used SolarWinds i cannot comment on parsing this data for display in SolarWinds

Timo Lindenschmid · May 9, 2024 go to post

Hi,

if i remember correctly, there was a breaking change that requires the use of single quotes in SQL as a string delimiter. Double quotes are only allowed to be used for field/table names that use special chars etc.

Timo Lindenschmid · Apr 29, 2024 go to post

Hi, check the module mappings in the IIS server.

You need to have mappings for csp, cls, cxw going to the ISC plugin/module.

Timo Lindenschmid · Apr 25, 2024 go to post

Hi Pravin,

afaik this is not possible.

I would suggest revisiting the design. If you need custom code to be able to extend your production, then include code hooks that will be called if implemented.

e.g.

In your production class include code during processing that checks for classes inheriting froma specific abstract class you also defined and call the respective method. Now any customisation can be done by inheriting from the abstract class and overwriting the respective methods.

Timo Lindenschmid · Apr 24, 2024 go to post

not sure for the old version but if available 

zn"%SYS"w##class(Backup.General).IsWDSuspended()

That will return 1 if WD is suspended and 0 if WD is active and running.

Timo Lindenschmid · Apr 22, 2024 go to post

So the SSL test actually succeeded, so the port connection works. But instead of a normal http success code it got server unavailable. Is your target server answering correctly?

Timo Lindenschmid · Apr 18, 2024 go to post

couple of options:

1. $order the global checking the list content as others have already mentioned

2. if there is a SQLIndex defined for the field. You can check the index location directly via objectscript, this would save you ordering through possibly billions of lines of data
3. define the SQL column to for Reference to use columnar storage, also single global retrieve to get a $list of rowids.

Timo Lindenschmid · Apr 16, 2024 go to post

ahh now your question is getting a bit clearer.

If you look for a better management for your API endpoints might be worth looking into ISC API manager: InterSystems API Manager | InterSystems Components and Tools

Else you can use delegated auth to validate incoming IP addresses, also you can make use of Apache's virtual server config to server different content on different ports using Apache access controls for additional filtering and redirecting, which is essentially what you suggest here. 

Timo Lindenschmid · Apr 14, 2024 go to post

Just a bit of thought, from your post i think 57772 is the port of the private webserver previously packaged with IRIS?

If so. don't use it for production workloads, its not configured or designed for that purpose, also due to security concerns the private web server has been deprecated and is no longer included in newer IRIS versions. (ref: Discontinue Apache web server installations (aka Private Web Server (PWS)) (intersystems.com) )

Timo Lindenschmid · Apr 10, 2024 go to post

Easiest way is to enable the TeamsChanel email address:

use the supplied email address as a TO address and the alert will popup in the channel as seperate message.

Timo Lindenschmid · Apr 5, 2024 go to post

Hope i understood your problem correctly.

This sort of sounds like a "DataMigration" task, loading legacy information into the current IRIS database.
If you know an exact date where the value was available in the current messages, a onetime load based on an extract for legacy messages would be enough i think.

Then amend the messaging code to add the field if its not there, based on the lookup table, this should only happen for legacy messages, not new messages as they would already have the field.
 

Timo Lindenschmid · Apr 2, 2024 go to post

if you are using a dedicated web static folder in a separate web application definition. Make sure the ../csp folder content is being also updated with content from the new Ensemble version. (usually in [installdir]/csp/)

also ensure browser has cache cleared etc. 

Timo Lindenschmid · Mar 22, 2024 go to post

another option is to use a list

setx=$listfromstring("1,4,6,8,9,12")
   SET ptr=0WHILE$LISTNEXT(x,ptr,y) {
      WRITE !,y
   }
Timo Lindenschmid · Mar 19, 2024 go to post

Most annoying "feature" when i started to learn objectscript was the very strict left to right processing

e.g. if a>0 & b< 0 {} get evaluated as (((a>0) & b) <0) not as you would expect (a>0) & ( b<0)

also very strange variable casting from number to string.

e.g
set a=1
set b="7 dwarves"

w a+b

actually return 8 instead of e.g. concatted string "17 dwarves"  or a variable casting error as in other languages 
But meanwhile i love it :D

Timo Lindenschmid · Mar 13, 2024 go to post

size 258 249

all unit tests passed

ClassMethod Type(a...) As%String
{
 s (f,r)=0,c=2 i $g(a){f i=1:1:a{s$p(b,",",*+1)=$zstrip(a(i),"*"," ")} f{q:(c=$l(b,","))  s p=$l($p(b,",",$i(c)-1))-$l($p(b,",",c)),f=$s(p>0:-1,p<0:1,1:0) i f,r,r'=f{ret "Unsorted"} s:f r=f}} ret $s(r<0:"Decreasing",r>0:"Increasing",1:"Constant")
}
Timo Lindenschmid · Mar 5, 2024 go to post

Just wondering my initial thought was that just use the master process to initiate the transaction check the returned stati and rollback if it has failed. 

This can be done with WQM easily enough.

Set queue=$system.WorkMgr.%New()
  If (queue="") { 
  // Report Error, can check %objlasterror for %Status code
  }
  
  TSTARTFor i=1:1:100 {
  	Set sc=queue.Queue("##class(MyClass).ClassMethod",i) 
  	If$$$ISERR(sc) {
  	// report error
  	}
  }
  
  Set sc=queue.Sync() 
  If$$$ISERR(sc) {
    // A worker encounteres an issueTROLLBACK
  } and {
    // no errros reported by workersTCOMMIT  
  }


That should work just fine, i haven't tested it though.

Timo Lindenschmid · Mar 5, 2024 go to post

Hi Anna,

this would iterate through a file line by line checking if the line contains a keyword and then outputting the line. also it will continue outputting until another condition resets the found variable to 0.

Set stream=##class(%FileCharacterStream).%New()
    Set stream.Filename="c:\myfile.txt"set keyword="MyTestWord"set found=0While 'stream.AtEnd {
        Set line=stream.ReadLine()
        if (line [ keyword) {
            // the line contains the keyword out put linew !,line
            set found=1continue
        }
        if (found=1) {
            // keyword was previously found so continue outputting linew !,line
        }
    }
Timo Lindenschmid · Feb 29, 2024 go to post

If you mean something like this?

This is essentially only displaying a "good" functional spec definition plus /// supplied documentation.

Timo Lindenschmid · Feb 11, 2024 go to post

Hi Abdulaziz,

In TrakCare you can attach any type of file to a patient record. But that does not transcribe an audio file into a text. (I think that is what you are after in case of dictation.)

TrakCare fully relies as far as i know on 3rd party software atm to provide dictation features.

Best Regards

Timo
 

Timo Lindenschmid · Feb 7, 2024 go to post

Hi, there was a breaking change after upgrading some IRIS version in regards to credential stored in IRIS for ldap connections.

Can the user logon to SMP using LDAP successfully? If not, then it might be worth a try deleting the user account for the user marked as LDAP. in IRIS, It will get recreated on next successful login.

Timo Lindenschmid · Feb 7, 2024 go to post
ClassMethod MultiTap(t) As%String
{
 f{s f=$f(" _ADGJMPTW,__BEHKNQUX,__CFILORVY,_______S_Z",$e($$$UPPER(t),$i(i)))-1q:f=0s$p(e,f#11-1,*+(f\11+1))=""} q e
}

Size 123

Timo Lindenschmid · Feb 6, 2024 go to post

Roberts approach is correct for mapping the class into another namespace. You have to use package mapping to map the class AND Global mapping to map the storage location. 

Timo Lindenschmid · Feb 5, 2024 go to post

Your approach is actually correct. Just in class Bna.Init.Main extend Bna.Utils.Sql.

Then call the get method using set status=..SelectFirstColsInArray(query, .userIds)

That should work.

Timo Lindenschmid · Feb 1, 2024 go to post

Having an instance frozen for 8minutes is not so good in my experience.

Have you considered to move to snapshot based external backups? Using ShadowCopies on windows and LVM snaps on Linux? This will reduce the freeze time to the time used to actually take the snapshot. Then CommVault can backup the snapshot drive while IRIS continues on unfrozen.

Timo Lindenschmid · Feb 1, 2024 go to post

Hi,

This sounds like a misconfiguration on the webgateway.

PWG get configured automatically by IRIS for all web applications. Not sure if this happens for the external webgateway.

There also could be an issue with webgateway integration into external apache.

Also worth to check audit database in IRIS. To see if any errors get logged.

Hope this helps.

Best Regards

Timo