go to post li scott · Mar 6, 2024 you try try ClassMethod AESEncode(str As %String, key){ Set text=$ZCONVERT(str,"O","UTF8") set len=$l(text) if (16-len#16)'=0{ for ii=1:1:(16-len#16){ set text=text_$c(16-len#16) } }else{ for ii=1:1:16{ set text=text_$c(16) } } s stream=##class(%GlobalCharacterStream).%New() d stream.Write(text) s textstr="" while 'stream.AtEnd{ set subtx=stream.Read(16) Set textstr =textstr_$system.Encryption.AESEncode(subtx,key) } Set ret=$SYSTEM.Encryption.Base64Encode(textstr) s ret = $replace(ret,$c(13,10),"") q ret} /** * 解密 */ClassMethod AESDecode(str As %String, key){ s ret = ##class(%SYSTEM.Encryption).Base64Decode(str) s ret = ##class(%SYSTEM.Encryption).AESDecode(ret, key) s ret = $zcvt(ret, "I", "UTF8") set len=$l(ret) set lastch=$e(ret,len,len) set pos=0 for index=1:1:16 { if $c(index)=lastch{ set pos=index quit } } s ret = $e(ret,1,len-pos) q ret}
go to post li scott · Apr 28, 2020 Thank you very much, but I am not using production.There is a setQueryTimeout method in the% Net.Remote.Java.JDBCGateway class of IRIS, but this method does not exist in Ensemble2016, what should I do? The code in IRIS is as follows:ClassMethod jdbc() As %String{ #dim %JDBCGateway as %Net.Remote.Java.JDBCGateway s SQLConName="INC0001" s gc=$$GetJConnection^%apiGTW(SQLConName) i gc="" QUIT "-1^"_$$$ERROR($$$GTWCConnectionError) set myquery= "select top 1 * from SQLUser.OE_OrdTeeth" " q:myquery="" "-1^sql can't empty" /// prepare sql s command=$ZCONVERT($p(myquery," ",1),"U") If (command["CALL") { s sqlhstmt=%JDBCGateway.prepareCall(gc,myquery) } else { s sqlhstmt=%JDBCGateway.prepareStatement(gc,myquery) } if (sqlhstmt < 0) { q "-1^"_%JDBCGateway.getErrorText() } s sqlerr=%JDBCGateway.setQueryTimeout(sqlhstmt,5) if sqlerr<0{ q "-1^"_%JDBCGateway.getErrorText() } s sqlerr=%JDBCGateway.execQuery(sqlhstmt) if sqlerr<0{ q "-1^"_%JDBCGateway.getErrorText() } /// dump result s colcount=%JDBCGateway.getColumnCount(sqlhstmt) s hasdata=%JDBCGateway.next(sqlhstmt) while hasdata = 1 { s tpseudoid=%JDBCGateway.getString(sqlhstmt,1) s hasdata=%JDBCGateway.next(sqlhstmt) } //matches while hasdata d %JDBCGateway.removeResultSet(gc) q}
go to post li scott · Apr 26, 2020 Due to objective reasons, I cannot upgrade to IRIS.Can you give me an example of setting query timeout through JDBC in Ensemble2016. thank you very much!
go to post li scott · Apr 26, 2020 In IRIS as you said, but there is no such method in Ensemble2016, I use Ensemble2016
go to post li scott · Apr 13, 2020 StopProduction() Stop the currently running production in an Ensemble namespace: Do ##class(Ens.Director).StopProduction() StartProduction() Start the specified production in the Ensemble namespace, as long as no other production is running: Do ##class(Ens.Director).StartProduction("myProduction") RecoverProduction()Clean up a Troubled instance of a running production so that you can run a new instance in the Ensemble namespace: Do ##class(Ens.Director).RecoverProduction()