Mihoko Iijimaさん
調査協力いただきありがとうございます!
その方法で試してみます!
- コメントを投稿するにはログインしてください
Mihoko Iijimaさん
調査協力いただきありがとうございます!
その方法で試してみます!
Iwamotoさん
こんにちは。
情報共有いただきありがとうございます!
$ZTIMEZONEは秒のオフセットを返してくれるのですね!
オフセットの単位がわからず使いこなせなかったのですが、
頂いた方法で対応できそうです。
Hashimoto さん
こんにちは。
なるほど、この辺のお話ですね。
https://irisdocs.intersystems.com/iris20211/csp/docbookj/DocBook.UI.Pag…
実行パフォーマンスとか気にして、今まで利用したことなかったですが、
一度実験してみようと思います。ありがとうございます!
Hashimoto さん
こんにちは。
コメントいただきありがとうございます!
確かに、ObjectScript内ではそのようなAPIも使えそうですね!
SQL関数として同様の振舞をするものがあればもっと良かったのですが、
自分の方ではなかなか見つけられませんでした。
Minamotoさん
こんにちは。ご回答いただきありがとうございます!
丁寧に教えていただきありがとうございます。
ローカル時刻で扱おうとすると、なかなか癖があるものなんですね。。
一度記載いただいた方法で試してみます!
Minamoto さん
ご回答ありがとうございます!
SQL自体にObjecsScriptのコマンドを埋め込む発想はありませんでした。
記載いただいた内容含め、検討してみます。
Kakechi さん
回答いただきありがとうございます。
内容理解できました!私のケースでは対応必要そうです。
相談に乗っていただきありがとうございました!
Kakechi さん
回答いただきありがとうございます。
内容理解できました!私のケースでは対応必要そうです。
相談に乗っていただきありがとうございました!
Kakechi さん
回答いただきありがとうございます!
BSもBOも標準のまま利用するのであれば開放処理がシステム内で行われると理解しました。
私が作成しているシステムでは、BS/BP/BOをそれぞれ標準を継承してカスタマイズしたり、
Batch.RecordをObjectScript内でループさせて利用するような処理もあるのですが、
この場合には%UnSwizzleAt()が必要との理解でよろしいでしょうか?
例)
BSでファイル検知を行い、RecordMapの仕組みを利用してファイルからBatchクラスを生成。
↓
BOに連携し、BatchクラスをObjectScript内のクラスに譲与。
↓
取得したBatch.Recordの内容をループで回しながら処理を実行。
このループの中では%UnSwizzleAt()が必要?
もしくはInteroperabilityのプロセスで実行する処理の中では、
BatchクラスのRecordの内容は勝手に開放される?
Kakechi さん
貴重な情報を公開いただきありがとうございます!
Relationshipオブジェクトの理解が浅く申し訳ないのですが、一点だけ教えてください。
今回の場合、Relationshipオブジェクトをループで回した際にのみ事象が発生するという理解なのですが、
Interoperabilityで利用可能なRecordMap利用時に生成される、Batchクラス内の
Recordsプロパティも上記に該当するのでしょうか?
今私が携わるシステムではRecordMapを多用しており、
数万件のデータをこの仕組みを用いて取り込みをおこなっているため、
上記の事象が発生するのではないかと懸念しております。
こんな感じのメソッドを作って、登録済みのクラス全体をチェックかける仕組みを構築してみました。
ClassMethod CheckAllClass()
{
Do $SYSTEM.OBJ.GetClassList(.classes, "/application=1/generated=0")
Set class = ""
For {
Set class = $ORDER(classes(class))
If (class = "") {
Quit
}
If ($EXTRACT(class,1,4) = "csp.") {
Continue
}
Write !,"****************コンパイルチェック開始****************",!
Write "TARGET : "_class,!
#; 各種チェッククラスの実行。
Set hasErr = '##class(AbstractMethodChecker).%New().IsCorrectDefine(class)
Set hasErr = hasErr + '##class(ClassNamingChecker).%New().IsCorrectDefine(class)
Set hasErr = hasErr + '##class(DefineNamingChecker).%New().IsCorrectDefine(class)
Set hasErr = hasErr + '##class(MethodImplChecker).%New().IsCorrectImpl(class)
Write "****************コンパイルチェック完了****************",!
If (hasErr > 0) {
Write "コンパイルエラーがあります。",!
}
}
}Minamoto さん
こんにちは。ご回答いただきありがとうございます!
> しかしImportDirなどObjectScriptのメソッドにはこのような機能がないため、SourceControlの処理は実行されません。
やはりそうでしたか。私の方でもそもそも仕組みがないのではないかと疑っていました。
確かにExport前にチェックできていれば問題はないのですが、
チェック観点を追加した際に水平展開的に全体に仕掛けようと思った際に
どうやろうかなぁ、と試行錯誤していた状態です。
もう少しやり方は検討させていただきますが、本課題はいったんクローズさせていただきます。
Minamotoさん
ご回答いただきありがとうございます!
私が求めていた形はUDL形式と言うんですね。無知でした。
頂いた内容で進めていこうと思います。
> Create tableで作成されたタイミングでExportということに関しては、
> 現状、タスクで定期的にクラスをサーチするというベタな方法しか思いつきません。。。
そうですよね。こちらでもこのやり方で実装しようと思っています。
全てのコードを外だししてGIT管理したいが、IRIS内で自動生成された
ファイルたちをどうやって楽に取得するかを考えておりました。
疑問点は解消されましたので、クローズさせていただきます。
解決策に書いた以上のことはあまり何もしてないのですが、
buildspec.ymlの内容を転記させていただきます。![]()
build: commands: - mkdir -p /user/local/work - cd .. - mv * /user/local/work - cd /user/local/work - chmod -R 777 /user/local/work - iris start IRIS - su - irisowner -c "iris terminal IRIS \"##CLASS(%SYSTEM.OBJ).ImportDir(\\\"/user/local/work\\\",\\\"*.cls;*.mac;*.int;*.inc;*.dfi\\\",\\\"ck\\\",,1)\" " | tee result.txt - find result.txt | xargs grep -n "error" | wc -l - | if find result.txt | xargs grep -n "error" | wc -l >0; then false; fi
Iwamoto さん
ご連絡いただきありがとうございます。
docker起動時にユーザ指定できるのは知りませんでした!
まだまだいろいろなことができそうなので、こちらでも触ってみるようにします。
自己解決しました! 以下のように実行することで、irisownerのユーザでIRIS内の命令を直接実行できるようになりました。
su - irisowner -c "iris terminal IRIS \"##CLASS(%SYSTEM.OBJ).ImportDir(\\\"参照パス\\\",\\\"*.cls;*.mac;*.int;*.inc;*.dfi\\\",\\\"ck\\\",,1)\" "
一旦問題は解消されたので課題は閉じさせていただこうと思うのですが、 Codebuildの使い方について他にベストプラクティス等あれば 情報いただけますと幸いです。
Minamoto さん
Alertでログが取れそうなことが確認できました!ありがとうございます。
ただ、ParseOnlyをTrueにするとVer 2020.1ではやはり通知が来ていなさそうなので、
別途サポートに問い合わせるようにします。
Minamoto さん
ご回答いただきありがとうございます!
Ens.Alert機能自体あまり利用したことがなかったため、
確認に時間がかかっているところとなります。
RecordMap読み込みにおいてはParseOnlyをTrueにしてるのですが、
この時にアラートが飛んできていないような気がしていて、その点の確認中です。
解消しましたら改めてご連絡させて頂きます!
Kaminakaさん、こんにちは。
ご回答ありがとうございます!
非活動タイムアウトとか標準の仕組みで上手く作成できないかな、
とはいろいろ考えていたのですが、やっぱりその方法がよさそうですね。
一度その方針で進めてみます!有難うございました!
Minamoto さん
情報ありがとうございます!
RegisteredObjectにそんな便利APIがあったんですね。
まさに利用したいAPIはそちらでしたので、利用させていただきます!
Minamoto さん
早々にコメントいただきありがとうございます!
頂いた内容で、やりたかったことが対応できそうです。