新しい投稿

查找

質問
· 2020年8月12日

Is there a way to trigger system functions from Alerting in Ensemble

We have a vendor that every couple of days will just stop transmitting messages, but still hold the TCP/IP connection open. No matter how many times we troubleshoot and talk with them, they don't seem to think its an issue with system.  Normally if I just restart the service it will get the data flowing again.

I know ideal is for them to fix the issue, but in the meantime I have setup an Inactivity time out alert.  I was wondering with the correct filtering if there was a way to say if the Inactivity Alert is triggered during the business day, to have the Alert trigger a restart of the service?

Thanks

Scott

3 Comments
ディスカッション (3)3
続けるにはログインするか新規登録を行ってください
記事
· 2020年8月5日 8m read

【はじめてのInterSystems IRIS】セルフラーニングビデオ:アクセス編:IRIS での JSON の操作

IRIS サーバ側で JSON の操作を行う方法を解説します(3つのビデオに分かれています)。

ビデオ① :ダイナミックエンティティの操作練習

ビデオ② :ダイナミックエンティティで利用できるメソッドの練習

ビデオ③ :SQL関数と %JSON.Adapter の使い方

 

なお、このビデオには、以下の関連ビデオがあります。ぜひご参照ください。

 

ビデオ①

このビデオの目次は以下の通りです。

最初~ 復習ビデオ/関連ビデオについて など

2:05~ JSONとは?

3:26~ JSONオブジェクト:ダイナミックエンティティの作成

//%DynamicObjectを使用した例
set json=##class(%DynamicObject).%New()
set json.Name="テスト太郎"
set json.Address="東京都新宿区"
write json.%ToJSON()
// 出力結果は以下の通り
//{"Name":"テスト太郎","Address":"東京都新宿区"}
//リテラルJSONコンストラクタ {} を使用した例
set json={}   // %DynamicObjectと一緒
set json.Name="テスト太郎",json.Address="東京都新宿区"
write json.%ToJSON()
// 出力結果は以下の通り
//{"Name":"山田太郎","Address":"東京都新宿区"}

 

7:25~ JSON配列:ダイナミックエンティティでの作成例

//%DynamicArrayを使用した例
set array=##class(%DynamicArray).%New()
set array."0"="配列1"  //配列はインデックス番号0からスタート
set array."1"="配列2"
write array.%ToJSON()
// 出力結果は以下の通り
//["配列1","配列2"]
//リテラルJSONコンストラクタ [] を使用した例
set array=[]   //%DynamicArrayと一緒
set array."0"="配列1",array."1"="配列2"
write array.%ToJSON()
// 出力結果は以下の通り
//["配列1","配列2"]

 

9:49~ ダイナミックエンティティ操作用のメソッド

※ ビデオ②に続きます

先頭へ戻る

 

ビデオ②

もくじは以下の通りです。

00:00~ %Set()、%Get()、%Remove() オブジェクト編

set obj={}
set obj.Name="山田太郎"
do obj.%Set("Zip","160-0023")
do obj.%Set("Tel","03-5321-6200")
write obj.%ToJSON()
write obj.%Get("Zip")," - ",obj.%Get("Name")
do obj.%Remove("Zip")
write obj.%ToJSON()
set obj.Pref="東京都"
write obj.%ToJSON()
do obj.%Set("City","新宿区")
write obj.%ToJSON()

 

02:02~ %Set()、%Get()、%Remove() 配列編

set array=[]
do array.%Set(0,"最初")
write array.%ToJSON()
set array."4"="最後"   //set array."番号"="値" は array.%Set("番号","値")と同等
do array.%Set(2,"真中")
write array.%ToJSON()
do array.%Pop()
write array.%ToJSON()
do array.%Push("Pushしたデータ")
write array.%ToJSON()
do array.%Remove(1)   // 左から2番目の null を削除
write array.%ToJSON()

 

03:34~ JSON配列 要素の操作:%Size()、%Get()

set array=["最初",null,""]
do array.%Set(4,"最後")   // インデックス番号3 はJSONのnullを設定
write array.%ToJSON()
// 出力結果は以下の通り
["最初",null,"",null,"最後"]

for i=0:1:array.%Size()-1 w array.%Get(i),!
// 出力結果は以下の通り
最初
 
 
 
最後

 

05:20~ 値が有効値かどうか確認する %IsDefined()

set array=["最初",null,""]
do array.%Set(4,"最後")   // インデックス番号3 はJSONのnullを設定
write array.%ToJSON()
// 出力結果は以下の通り
["最初",null,"",null,"最後"]

for i=0:1:array.%Size()-1 {write array.%Get(i)," - 有効値?",array.%IsDefined(i),!}
// 出力結果は以下の通り
最初 - 有効値?1
 - 有効値?1
 - 有効値?1
 - 有効値?0
最後 - 有効値?1

 

07:38~ 反復処理:配列の場合:%GetIterator()

set array=["最初",null,""]
do array.%Set(4,"最後")   // インデックス番号3 はJSONのnullを設定
write array.%ToJSON()
// 出力結果は以下の通り
["最初",null,"",null,"最後"]

set iter=array.%GetIterator()
while iter.%GetNext(.key,.val) { write key," - value=  ",val,! }
// 出力結果は以下の通り
0 - value=  最初
1 - value=
2 - value=
4 - value=  最後

 

09:55~ 反復処理:オブジェクトの場合:%GetIterator()

set obj={"Name":"山田太郎","Zip":"160-0023","Pref":"東京都","City":"新宿区"}
write obj.%ToJSON()
// 出力結果は以下の通り
{"Name":"山田太郎","Zip":"160-0023","Pref":"東京都","City":"新宿区"} set iter=obj.%GetIterator()

set iter=obj.%GetIterator()
while iter.%GetNext(.key,.val) { write key," - value=  ",val,! }
// 出力結果は以下の通り
Name - value=  山田太郎
Zip - value=  160-0023
Pref - value=  東京都
City - value=  新宿区

 

10:11~ JSON null/true/false (ObjectScriptの中での対応)

set array=[null,true,false,1,0,""]
set array."7"="値あり"
for i=0:1:array.%Size()-1 { write i," - ",array.%Get(i),! }
// 出力結果は以下の通り
0 -
1 - 1
2 - 0
3 - 1
4 - 0
5 -
6 -
7 - 値あり

 

11:40~ JSONのデータタイプを確認する= %GetTypeOf()メソッド

set array=[null,true,false,1,0,""]
set array."7"="値あり"
for i=0:1:array.%Size()-1 {write i," - ",array.%Get(i)," - ",array.%GetTypeOf(i),! }
// 出力結果は以下の通り
0 -  - null
1 - 1 - boolean
2 - 0 - boolean
3 - 1 - number
4 - 0 - number
5 -  - string
6 -  - unassigned
7 - 値あり - string

 

12:32~ JSONのデータタイプを指定して値を設定する

set array=[]
do array.%Set(0,"","null")  // 第2引数はスクリプト上のnull
do array.%Set(1,1,"number")  //数字の1として設定
do array.%Set(2,0,"number")  //数字の0として設定
do array.%Set(3,1,"boolean")  // booleanの1=trueとして設定
do array.%Push(0,"boolean")  // booleanの0=false として設定
for i=0:1:array.%Size()-1 { write i," - ",array.%Get(i)," - ",array.%GetTypeOf(i),! }
// 出力結果は以下の通り
0 -  - null
1 - 1 - number
2 - 0 - number
3 - 1 - boolean
4 - 0 - boolean

write array.%ToJSON()
// 出力結果は以下の通り
[null,1,0,true,false]

 

13:38~ ObjectScriptの変数や表現式を [] や {} で使用する方法

set obj={"日付":($ZDATE($H,16)),"時刻":($ZTIME($PIECE($H,",",2)))}
write obj.%ToJSON()
set mgr=$system.Util.ManagerDirectory()
set array=[($system.Util.InstallDirectory()),(mgr)]
write array.%ToJSON()

 

※ ビデオ③へつづきます

先頭へ戻る
 

ビデオ③

もくじは以下の通りです。

00:00~ テーブルデータをJSONオブジェクト、JSON配列で取得する方法 概要

 関連ビデオのご紹介

 (Test.Personの作り方を確認する場合に良いビデオ)
    上記ビデオの 13:20~(スタジオでの操作)/18:44~(VS Code での操作) で作成方法を紹介しています。

 

00:54~   SQL:SELECTでの操作 JSON_OBJECT()関数 説明と実演

 管理ポータル→システムエクスプローラ→SQL を開き対象ネームスペースに移動後
 クエリ実行タブで以下実行します。

SELECT JSON_OBJECT('Name':Name,'Email':Email) ABSENT ON NULL as json from Test.Person

 

02:42~ JSON_OBJECT()例(埋込SQLでの実行例)

Class Test.JSONTest
{
ClassMethod GetAllPerson()
{
	//埋込SQL
	&sql(declare C1 cursor for
	select JSON_OBJECT('Name':Name,'Email':Email) as json into :json from Test.Person)
	&sql(open C1)
	set array=[]
	for {
		&sql(fetch C1)
		if SQLCODE'=0 {
			quit
		}
		set obj={}.%FromJSON(json)
		do array.%Push(obj)
	}
	&sql(close C1)
	write array.%ToJSON()
}  
}
//実行文
do ##class(Test.JSONTest).GetAllPerson()

 

07:00~ SQL:SELECTでの操作 JSON_ARRAY()関数

 管理ポータル→システムエクスプローラ→SQL を開き対象のネームスペースに移動後
 クエリ実行タブで以下実行します。

SELECT JSON_ARRAY(Name,Email ABSENT ON NULL) as array from Test.Person

 

07:50~ JSON_ARRAY()例(ダイナミックSQL実行例)

ClassMethod GetAllPersonArray()
{
    set sql="SELECT JSON_ARRAY(Name,Email ABSENT ON NULL) as array from Test.Person"
    set stmt=##class(%SQL.Statement).%New()
    set status=stmt.%Prepare(sql)
    set rset=stmt.%Execute()
    set root=[]
    while rset.%Next() {
        set array=[].%FromJSON(rset.%Get("array"))
        do root.%Push(array)
    }
    do root.%ToJSON()
}
//実行文
do ##class(Test.JSONTest).GetAllPersonArray()

08:59~ JSONアダプタ(%JSON.Adapter)

set person=##class(Test.Person).%OpenId(1)
set status=person.%JSONExport()
write status

 

10:08~ オブジェクト→JSON文字列を含むストリーム %JSONExportToStream() 説明と実演

set person=##class(Test.Person).%OpenId(1)
set st=person.%JSONExportToStream(.jstream)
write st
write jstream.Read()
write jstream.Rewind()
set jobj={}.%FromJSON(jstream.Read())
write jobj.Name
write jobj.Email

 

12:59~ オブジェクト→JSON文字列にマッピング %JSONExportToString()

set person=##class(Test.Person).%OpenId(1)
set st=person.%JSONExportToString(.jstring)
write st
write jstring
set jobj={}.%FromJSON(jstring)
write jobj.Name
write jobj.Email

 

13:20~ JSON文字列→オブジェクトへのマッピング %JSONImport()

set json={}
set json.Name="ジェイソン", json.Email="json@mail.com"
zwrite json
set p1=##class(Test.Person).%New()
set st=p1.%JSONImport(json)
write st

 

14:24~ 確認できたこと

 


《2024/1/16追記》ビデオには含まれていませんが、バージョン2023.3以降でJSON配列に情報を追加できる add()メソッド、JSON配列同士の結合に便利な addAll()メソッドが追加されました。

USER>set a1=["a","b","c"]

USER>do a1.add("追加")

USER>zwrite a1
a1=["a","b","c","追加"]  ; <DYNAMIC ARRAY>
USER>

USER>set a2=[1,2,3]

USER>do a1.addAll(a2)

USER>zwrite a1
a1=["a","b","c","追加",1,2,3]  ; <DYNAMIC ARRAY>

先頭へ戻る

1 Comment
ディスカッション (1)1
続けるにはログインするか新規登録を行ってください
記事
· 2020年8月2日 2m read

Show Global by SQL SELECT

Globals in Caché / Ensemble / IRIS are normally invisible over SQL access
This example shows how to overcome this limit.
Globals are presented as content of a table with their subscripts and the stored content.
The global to view is passed to SQL by a static WHERE condition that
requires 3 parameters:

  • the global name (required)
  • the start subscript (optional)
  • the stop subscript (optional)

Just providing the global name results in a full global dump.
Globals may also be provided with the extended reference and as this is a SQL table all kinds of additional conditions apply.

Be careful. Correct quoting between SQL and Caché / Ensemble / IRIS could be a challenge

Example:
select * from zrcc_G.dump where zrcc_G.Dump('^|"SAMPLES"|Sample.PersonD',2,4)=1

ID	       Global	        Subscript	      Value
1	^|"SAMPLES"|Sample.PersonD	(2)	$lb("",792533244,"GlobaDynamics Holdings Inc.",64256,"C1787","Y5365","A5","A658","R1770","","Ironhorse,Alice D.","T3710","O3","I4011","W8367","557-37-6758",83059958205089661,"1841-01-02 00:00:00")
2	^|"SAMPLES"|Sample.PersonD	(3)	$lb("",862705606,"TeleLateral Associates",34553,"V8155","T8918","X9","V8732","K1167","","Eisenstien,Peter E.","H208","C8","Q2015","Q3357","702-46-8467",57275722714358892,"2020-06-23 13:27:18")
3	^|"SAMPLES"|Sample.PersonD	(4)	$lb("",677194559,"RoboSoft Group Ltd.",52738,"F4851","Z364","S8","O6888","O4367","","Eagleman,Clint C.","C8051","R6","V1659","C9814","664-33-8809",-53705244349891319,"2020-06-23 13:27:18")

select TOP 15 * from zrcc_G.dump where zrcc_G.Dump('^%SYS','"JOURNAL"')=1

ID	Global	       Subscript	         Value
1	^%SYS	("JOURNAL")	           0
2	^%SYS	("JOURNAL","ALTDIR")   "C:\InterSystems\IRIS\altjournal\"
3	^%SYS	("JOURNAL","CURDIR")   "C:\InterSystems\IRIS\mgr\journal\"
4	^%SYS	("JOURNAL","CURRENT")  "1^C:\InterSystems\IRIS\mgr\journal\20200801.009"
5	^%SYS	("JOURNAL","EXPSIZE")  0
6	^%SYS	("JOURNAL","LAST")     "1^C:\InterSystems\IRIS\mgr\journal\20200801.009"
7	^%SYS	("JOURNAL","LIFESPAN","FILE")	"2,2"
8	^%SYS	("JOURNAL","MAXSIZE")	 1073741824
9	^%SYS	("JOURNAL","PREFIX")   ""
10	^%SYS	("JOURNAL","PURGED","c:\intersystems\iris\mgr\journal\20191104.001")	"2019-11-07 17:38:30"
11	^%SYS	("JOURNAL","PURGED","c:\intersystems\iris\mgr\journal\20191104.002")	"2019-11-07 17:38:30"
12	^%SYS	("JOURNAL","PURGED","c:\intersystems\iris\mgr\journal\20191104.003")	"2019-11-07 17:38:30"
13	^%SYS	("JOURNAL","PURGED","c:\intersystems\iris\mgr\journal\20191104.004")	"2019-11-07 17:38:30"
14	^%SYS	("JOURNAL","PURGED","c:\intersystems\iris\mgr\journal\20191104.005")	"2019-11-08 08:39:47"
15	^%SYS	("JOURNAL","PURGED","c:\intersystems\iris\mgr\journal\20191105.001")	"2019-11-08 08:39:47"

GitHub

1 Comment
ディスカッション (1)0
続けるにはログインするか新規登録を行ってください
ディスカッション
· 2020年7月28日

Why migrate from Caché to IRIS

I'm working with clients planning migrate from Caché to IRIS and I want to summary advantages to go to IRIS. I think is:

  1. IntegratedML - AutoML - Agile machine learning
  2. IAM - InterSystems API Manager
  3. Interoperability
  4. Advanced Reports (JReport)
  5. Cloud Manager/Docker and DevOps support
  6. ZPM - Package manager
  7. Native API - Node.js, Python, Java and .NET interoperability
  8. Core based license x user based license
  9. InterSystems Support and new features
  10. Improved management and monitoring features

Can you help me to think or detail these 10 topics?

12 Comments
ディスカッション (12)5
続けるにはログインするか新規登録を行ってください
質問
· 2020年7月24日

Examples of trigger

 

Hello people!

I am Brazilian and I am starting to work with the latest version of CACHE, and I would like to know where I can see an example of a TRIGGER, I would like to validate the fields before writing the actual data in the database.

in advance, thank you very much! and sorry for any mistake in concordance in english

7 Comments
ディスカッション (7)4
続けるにはログインするか新規登録を行ってください