RESTでIRISへの接続をお試しいただきありがとうございます。
また、サンプルコードへのご指摘ありがとうございます。
確かに、タグが抜けておりました。大変失礼いたしました。
サンプル(UploadTest.html)に足りないタグを追加しました。
お手数をおかけしますが、ご確認をよろしくお願いいたします。
<button id="btn">Upload</button>
<div></div> ←このタグを追加
- コメントを投稿するにはログインしてください
RESTでIRISへの接続をお試しいただきありがとうございます。
また、サンプルコードへのご指摘ありがとうございます。
確かに、タグが抜けておりました。大変失礼いたしました。
サンプル(UploadTest.html)に足りないタグを追加しました。
お手数をおかけしますが、ご確認をよろしくお願いいたします。
<button id="btn">Upload</button>
<div></div> ←このタグを追加
Ohata様
こんにちは、ご質問ありがとうございます。
Interoperabilityの場合、RecordMapのBatchサービスでは内部で対応しているため明示的に%UnSwizzleAt() する必要はありません。
また、オペレーションについても UnSwizzleRecordsプロパティ(デフォルトはTrue:チェックあり)により、処理後にメモリから解放されるため、こちらについても明示的に %UnSwizzleAt() する必要はありません。
UnSwizzleRecordsプロパティを 0 (False:チェックなし) に指定し大量のデータを処理する場合には、正しく開放処理を行わないと <STORE> エラーになる場合がありますのでご注意ください。
.png)
Ohata様
継承しているBOのクラスが、EnsLib.RecordMap.Operation.Batch* のクラスである場合は、 UnSwizzleRecords プロパティをオーバーライドして変更していない限り、デフォルトの True(=1) となるため、明示的に %UnSwizzleAt() する必要はありません。
「BatchクラスをObjectScript内のクラスに譲与」というのが、例えば %Persistent などのユーザ作成クラスに対してである場合は、別途 %UnSwizzleAt() していただく必要があります。
どのような構成にしているかによって変わってくるところはありますので、詳細についてのご相談があれば弊社サポートセンター(jpnsup@intersystems.com)までお気軽にお問い合わせください。
記事を更新しました。
「irisinstall setserviceusername」コマンドでサービス起動ユーザをLOCAL_SYSTEMから変える場合、ユーザ権限が不足するため、共有メモリの割り当て時にLarge Page(ラージページ)の使用ができなくなるので注意が必要です。
記事の最後に <<注意2>> で追記しておりますのでご確認ください。
情報ありがとうございます!
__name__で呼べるとは、スマートでいいですね。
早速記事に反映させていただきました。
2022/7/5
記事の内容を更新しました。
検証結果事例を追加しました。
※2.IRIS ライセンスサーバポート を修正しました(修正前:4001、修正後:4002)
IRISでは、ライセンスサーバの既定のポート番号は「4002」になります。
Cacheの場合は「4001」でした。
ユーティリティ一覧に、^SYSLOG を追加しました。
^SYSLOG ユーティリティは、共有メモリの一部分に記録している IRIS内部のエラーログ情報を収集します。
このログには、システムに何らかの問題が生じている場合の重要な診断情報が含まれることがあります。
「★ファイルをバイト単位で読み込む」方法を追加しました。
バイト単位で読み込みたい場合は、%Strean.FileBinaryを使い「無変換」で取り込み、それを Unicode に手動で変換する方法を使用します。
日本語を含むファイルをバイト単位で読み込む場合、日本語文字の途中で切れてしまう場合があります。
その場合は、$ZCONVERT() 関数を使用して手動で変換する際に、handle オプションを指定します。
記事後半に、「2>&1」で 標準エラー出力(2) を 標準出力(1) にリダイレクトする方法を追記しました。
2023.1以降のバージョンより、共有メモリヒープ(gmheap)や ロックに使用する共有メモリ(locksiz) の既定値が「0」に変更されましたので、記事後半、【注目】以降に追記しました。
Hashimotoさん、コメントありがとうございます。
複数ソースを指定する場合は、*(アスタリスク)が使用できます。
また、,(カンマ)区切りで指定することも可能です。
使用例:
USER>write$SYSTEM.OBJ.Export("t*.mac","c:\temp\test3.xml","/exportversion=cache2018.1")
XMLエクスポートの開始 08/22/202410:46:59
ルーチンをエクスポート中: test.mac
ルーチンをエクスポート中: test2.mac
ルーチンをエクスポート中: test3.mac
ルーチンをエクスポート中: test4.mac
ルーチンをエクスポート中: test5.mac
ルーチンをエクスポート中: testLoop.mac
ルーチンをエクスポート中: testLoop2.mac
ルーチンをエクスポート中: testLoop3.mac
ルーチンをエクスポート中: testStrean.mac
ルーチンをエクスポート中: testsql.mac
エクスポートが正常に完了しました。
1
USER>write$SYSTEM.OBJ.Export("test3.mac, test4.mac","c:\temp\test4.xml","/exportversion=cache2018.1")
XMLエクスポートの開始 08/22/202410:53:45
ルーチンをエクスポート中: test3.mac
ルーチンをエクスポート中: test4.mac
エクスポートが正常に完了しました。
1
USER>
確かに、「エクスポートしたXMLのExportタグをCache用に書き換えてインポート」の方法も使えますね。
ただ、/exportversion の場合でも、エクスポートシステムとインポートシステム間のコードの互換性は保証されませんので注意が必要です。
IRIS2024.1 のバージョンより、%SYS.Python クラスの ToList メソッドが日本語対応したので、記事を更新しました。
コードも、わかり易いように少し変えました。
こちら大変便利な記事ですね。参考にされているユーザさんも多いかと思います。
実際に実装する際、アクセストークンの有効期限(60分)が切れた後、再度認可コードから取得するのはちょっと不便・・・ということがあるかと思います。
そんな時には、リフレッシュトークンを利用してアクセストークンを再発行することも可能です。一度発行されたリフレッシュトークンは、ほぼ無期限で使えます(6か月使用されないと無効化されます)。
その手順をご紹介します。
【方法】
1.Refresh Token を取得します
記事の手順の「 認可コードをもとに Google から Access Token を取得 」の箇所で、Google から戻ってきたJSONより、refresh_token を取得しておきます。
write json,!!
{
"access_token": "...
"expires_in": 3599,
"refresh_token": "1//0e-nCKyf_", <-- ここ/*----------------*/set RefreshToken={}.%FromJSON(json)."refresh_token"; JSON から "refresh_token" の値を取得
2.Refresh Token を使用して、新しいAccess Token を取得します
set req = ##class(%Net.HttpRequest).%New()
set req.SSLConfiguration="GMAILSSL"; 手順(4)で設定した SSL構成名do req.SetParam("client_id","123-abc.googleusercontent.com") ; 手順(2)で入手した クライアントIDdo req.SetParam("client_secret","GOCSPX-xyz999") ; 手順(2)で入手した クライアントシークレットdo req.SetParam("refresh_token",RefreshToken) ; 1.で取得したリフレッシュトークンdo req.SetParam("redirect_uri","http://127.0.0.1/test.html") ; 手順(2)で設定した リダイレクト先do req.SetParam("grant_type","refresh_token")
do req.SetParam("access_type","offline")
do req.Post("https://accounts.google.com/o/oauth2/token") ; Google から Access Token を取得するためのリクエストset resData = req.HttpResponse.Data
set json=resData.Read(10000) ; Google から戻ってきたJSON//write json,!!set AccessToken={}.%FromJSON(json)."access_token"; JSON から "access_token" の値を取得write AccessToken,!!
これで新しい AccessToken が取得できました。
「Access Token を指定して Gmail から送信」の手順でメールの送信ができるようになります。
★2025/07/25 追記★
★4)-3 非同期DRの環境にミラーデータベースを追加する手順として 、
2025.1以降のバージョンより追加された、「ミラーメンバーからの自動データベースダウンロード」機能を使用して、プライマリから簡単にミラーデータベースをダウンロードする方法を追記しました。