@Yuji Ohata さん、こんにちは。

ご連絡ありがとうございます。コミュニティチームで確認しまして応募方法を以下に変更することとしました。

グループ「IRIS contest」は不要

タグの「コンテスト」のみの設定でご応募お願いいたします。(この後、関連記事を修正します)

(記事に関連するタグは、もちろん設定いただいて大丈夫です)

ご連絡いただき助かりました!ありがとうございました。

ご応募お待ちしてます!

いつの間にか、:py も追加されていました。(Pythonシェルへ切り替わります。)

USER>:py
 
Python 3.9.5 (default, Jan 13 2023, 15:20:22) [MSC v.1927 64 bit (AMD64)] on win32
Type quit() or Ctrl-D to exit this shell.
>>> import datetime
>>> datetime.datetime.now()
datetime.datetime(2023, 4, 13, 11, 16, 43, 487481)
>>>

もちろん、以下メソッドの実行でも切り替わります。

do ##class(%SYS.Python).Shell()

laugh

@Ohata.Yujiさん、こんにちは

単独で作成されているグローバル変数に対してSQLを発行するためには、クラス定義のストレージの定義を「デフォルトストレージ」から「SQLストレージ」に変更する必要があります。

丁度、似たグローバル構造に対してSQLストレージを作成する例がFAQトピックにありました。

既存のグローバルデータをオブジェクトやSQLインタフェースから利用する方法はありますか?

(添付の参考資料にあるPDFのP2~9までの ^KIONデータに対する定義が対象です。SQLストレージを作成する場合、スタジオのインスペクタを使っていただくと作りやすいかと思います。)

こんな感じで試してみました。

(^Testの右辺のデータを Data1プロパティで操作できるように定義してみました)

Class Gbl.Test Extends %Persistent [ StorageStrategy = MyGlobalStorage ]
{

Property Key1 As %Integer [ Required, SqlColumnNumber = 2 ];

Property Key2 As %String [ Required, SqlColumnNumber = 3 ];

Property Data1 As %String;

Index KeyIndex On (Key1, Key2) [ IdKey, Unique ];

ClassMethod createdata()
{
	set ^Test(1,2)="A"
	set ^Test(1,3)="B"
	set ^Test(2,1)="C"
	set ^Test(2,2)="D"
}

Storage MyGlobalStorage
{
<SQLMap name="GblMap">
<Data name="Data1">
<Delimiter>"^"</Delimiter>
<Piece>1</Piece>
</Data>
<Global>^Test</Global>
<RowIdSpec name="1">
<Expression>{L1}</Expression>
<Field>Key1</Field>
</RowIdSpec>
<RowIdSpec name="2">
<Expression>{L2}</Expression>
<Field>Key2</Field>
</RowIdSpec>
<Subscript name="1">
<Expression>{Key1}</Expression>
</Subscript>
<Subscript name="2">
<Expression>{Key2}</Expression>
</Subscript>
<Type>data</Type>
</SQLMap>
<StreamLocation>^Gbl.TestS</StreamLocation>
<Type>%Storage.SQL</Type>
}

}

DBeaverからの参照はこんな感じです。

このようなイメージであっていますでしょうか。

現在16記事が投稿されていますがその中の1つは、🗾日本のコミュニティメンバーからの投稿です👍

投票は英語記事への「いいね👍」で行っています。ぜひ日本からの投稿を応援してください📣

さて、今回のお題ですが、レベルを問わない InterSystems IRIS のチュートリアルです。

  • いつも使っているこの使い方、実は初めて使う人には良い内容かも!
  • 最初こんな風に使っていたけど、実はこの使い方のほうがいいかも!

など、ご経験された内容を新しいコミュニティメンバーに共有するイメージでぜひ投稿してみてください。

投稿は直接英語版コミュニティに投稿いただいても、まずは日本語で日本のコミュニティに投稿いただいてもどちらでも大丈夫です(#チュートリアル のタグをつけて投稿いただければ、日本のコミュニティからご連絡いたします)。

なお英字にした際、URLやコマンド実行例を除き「400単語以上の記述が必要」となりますので、ご注意ください。

英単語のカウントは、コミュニティのエディタをデフォルトモード「WYSIWYG」にした状態で右下に表示されます。確認にご利用ください。

Hiroseさん、こんにちは。

独自のアプリケーションのパスのハンドラーマッピングの設定で、

要求パス(*.cspなど)の設定画面にある「要求の制限」ボタンクリック後に開く画面内「要求のマップ先が次の場合のみハンドラーを呼び出す」のチェックボックスに、チェックが入っていましたら、外してみていただけますでしょうか。

Ohataさん、もしかして、shaCdカラムのタイプですが、埋め込みクラス(%SerialObject)で作成したクラスをタイプとして定義されていたりしますか?

テーブル定義ではなく、クラス定義として以下作成してテストしてみたら、カラム名=Null でヒットしました。

参照元クラス:Test.Person

Class Test.Person Extends %Persistent
{

Property Name As %String;
Property Address As Address;
}


​​​​​埋め込みクラス:Test.Address

Class Test.Address Extends %SerialObject
{

Property Zip As %String;
Property Pref As %String;
}

(Test.PersonのAddressプロパティがTest.Addressを参照する定義)

以下のテストをしたところ、Ohataさんと同じ状況になりました(SELECTの実行ですが、管理ポータルのODBCモードとODBCクライアントで試しています)

insert into Test.Person (Name) values('テスト太郎')

select * from Test.Person where Address=NULL この結果👉 

select * from Test.Person where Address is NULL この結果👉 0件

違う状況でしたらすみません・・。

皆さん、こんにちは!

期間が10日間延長され、応募締め切りが31日までに変わりました!まだまだ間に合います💨
​​ぜひ IRIS+Python に関係する記事を投稿しコンテストへ参加してみてください!laugh
(参加者全員に🎁賞品🎁あります!)

開発者の皆さん、こんにちは!

アプリケーションの応募期間が1週間延長され、5月9日~29日までとなりました!yes

奮ってご参加ください!laugh


スケジュール

🛠 アプリケーション開発と応募期間:

  • 2022年5月9日 (00:00 EST): コンテスト開始!
  • 2022年5月29日 (23:59 EST): 応募締め切り

 投票期間(1週間)

  • 2022年5月30日 (00:00 EST): 投票開始!
  • 2022年5月15日 (23:59 EST): 投票終了

@TAKI KURITA さん、こんにちは! 

エラーですが、IRIS 2021.1コミュニティエディションに組み込まれているライセンスの期限切れが原因のようです(関連記事はこちら)。大変申し訳ありません。

今、Gitの先を見ると Dockerfile のイメージ:タグ名の指定が、新しいタグ名に更新されているようですので(@Hiroshi Sato さんありがとうございます!)、もう1度 ソースを Pull した後、docker-compose up -d --build をお試しいただけないでしょうか。

@Kobata Makoto さん、こんにちは。

ちょっと状況が違うかもしれませんが、私の環境(Visual Studio2019、IRISは2021.2と2021.1)ですと、
MAXSTRINGエラーがでて途中で終わってしまいました。(おそらく、Write()メソッドに360万文字越えの情報を渡したときにエラーが出ていそうです)

試しに、以下のように Write()メソッドに分割して渡したところ、5MBの画像データもIRISに保存できました。

Dim obj As IRISObject = native.ClassMethodObject("User.Sample", "%New")
Dim prop As IRISObject = obj.GetObject("binaryData")
Dim filename As String = "C:\kit\test.png"
Dim inputFile = IO.File.Open(filename, IO.FileMode.Open)
Dim bytes = New Byte(5000) {}

While inputFile.Read(bytes, 0, bytes.Length) > 0
 prop.InvokeStatusCode("Write", bytes)
End While

obj.InvokeStatusCode("%Save")