記事へ Yuji Ohata · 2022年9月14日 Minamotoさん ご回答いただきありがとうございます。そちらの方法も検討したのですが、SELECTで*を使って取得した場合や、複数のテーブルを結合してアクセスした際に、番号を把握しにくいというのと、SQLのメンテナンスによって列番号が変わった際の保守性が低いという所より、見送りました。 やはりパフォーマンス劣化は避けられなさそうでしょうか…。 DynamicObjectに対して、「.name」でアクセスするのと、「%Get()」で動的にアクセスするのでは、実質動作に差異がないと思っていたのですが、SQLからの取得結果へのアクセスとなると、内部でカラム番号の変換処理が必要になってる、という事なんですね。。。(であれば、何故直接「.name」でアクセスするのが早いのかは気になりますが…。)
記事へ Yuji Ohata · 2022年6月19日 Minamoto さん ありがとうございます!トランザクションと関係なくコミットできるのであれば、1000件アップデートによるテーブルロックも防げそうですし、期待動作が得られそうです。 頂いた方法で試してみたいと思います。
記事へ Yuji Ohata · 2022年6月15日 Minamoto さん ご回答いただきありがとうございます!記載頂いたものについては、私が欲していたものなのですが、よくよく考えるとミラーリングを行っている都合上、ジャーナルに書かれないデータが出来てしまう事にリスクを感じています。($INCREMENTもそうでしたね。。。) そのため、わがままな要望となってしまい大変恐縮なのですが、ジャーナルには書かれるが、親のトランザクションを無視して更新を確定させたいです。 IRISの仕組み的に難しそうでしょうか・・・?
記事へ Yuji Ohata · 2022年3月8日 Toshihiko Minamoto さん 情報ありがとうございます!初歩的なところに項目あったのですね、恥ずかしながら気づいておりませんでした。 疑問点は解消されましたので、クローズさせていただきます。
記事へ Yuji Ohata · 2022年2月27日 Hiroseさん こんにちは。恥ずかしながらDjangoについて殆ど知見はないですが、先日こんな投稿があったので、参考になるかもしれません。 https://community.intersystems.com/post/welcome-django
記事へ Yuji Ohata · 2022年2月2日 Iwamotoさん こんにちは。情報共有いただきありがとうございます! $ZTIMEZONEは秒のオフセットを返してくれるのですね!オフセットの単位がわからず使いこなせなかったのですが、頂いた方法で対応できそうです。
記事へ Yuji Ohata · 2022年2月1日 Hashimoto さん こんにちは。なるほど、この辺のお話ですね。 https://irisdocs.intersystems.com/iris20211/csp/docbookj/DocBook.UI.Page... 実行パフォーマンスとか気にして、今まで利用したことなかったですが、一度実験してみようと思います。ありがとうございます!
記事へ Yuji Ohata · 2022年2月1日 Hashimoto さん こんにちは。コメントいただきありがとうございます! 確かに、ObjectScript内ではそのようなAPIも使えそうですね!SQL関数として同様の振舞をするものがあればもっと良かったのですが、自分の方ではなかなか見つけられませんでした。
記事へ Yuji Ohata · 2022年1月27日 Minamotoさんこんにちは。ご回答いただきありがとうございます! 丁寧に教えていただきありがとうございます。ローカル時刻で扱おうとすると、なかなか癖があるものなんですね。。一度記載いただいた方法で試してみます!
記事へ Yuji Ohata · 2021年12月6日 Minamoto さん ご回答ありがとうございます! SQL自体にObjecsScriptのコマンドを埋め込む発想はありませんでした。記載いただいた内容含め、検討してみます。
記事へ Yuji Ohata · 2021年8月26日 Kakechi さん 回答いただきありがとうございます。内容理解できました!私のケースでは対応必要そうです。 相談に乗っていただきありがとうございました!
記事へ Yuji Ohata · 2021年8月26日 Kakechi さん 回答いただきありがとうございます。内容理解できました!私のケースでは対応必要そうです。 相談に乗っていただきありがとうございました!
記事へ Yuji Ohata · 2021年8月26日 Kakechi さん 回答いただきありがとうございます!BSもBOも標準のまま利用するのであれば開放処理がシステム内で行われると理解しました。 私が作成しているシステムでは、BS/BP/BOをそれぞれ標準を継承してカスタマイズしたり、Batch.RecordをObjectScript内でループさせて利用するような処理もあるのですが、この場合には%UnSwizzleAt()が必要との理解でよろしいでしょうか? 例)BSでファイル検知を行い、RecordMapの仕組みを利用してファイルからBatchクラスを生成。↓BOに連携し、BatchクラスをObjectScript内のクラスに譲与。↓取得したBatch.Recordの内容をループで回しながら処理を実行。 このループの中では%UnSwizzleAt()が必要?もしくはInteroperabilityのプロセスで実行する処理の中では、BatchクラスのRecordの内容は勝手に開放される?
記事へ Yuji Ohata · 2021年8月25日 Kakechi さん 貴重な情報を公開いただきありがとうございます!Relationshipオブジェクトの理解が浅く申し訳ないのですが、一点だけ教えてください。 今回の場合、Relationshipオブジェクトをループで回した際にのみ事象が発生するという理解なのですが、Interoperabilityで利用可能なRecordMap利用時に生成される、Batchクラス内のRecordsプロパティも上記に該当するのでしょうか? 今私が携わるシステムではRecordMapを多用しており、数万件のデータをこの仕組みを用いて取り込みをおこなっているため、上記の事象が発生するのではないかと懸念しております。
記事へ Yuji Ohata · 2021年8月17日 こんな感じのメソッドを作って、登録済みのクラス全体をチェックかける仕組みを構築してみました。 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 "コンパイルエラーがあります。",! } } }
記事へ Yuji Ohata · 2021年8月17日 Minamoto さんこんにちは。ご回答いただきありがとうございます! > しかしImportDirなどObjectScriptのメソッドにはこのような機能がないため、SourceControlの処理は実行されません。やはりそうでしたか。私の方でもそもそも仕組みがないのではないかと疑っていました。 確かにExport前にチェックできていれば問題はないのですが、チェック観点を追加した際に水平展開的に全体に仕掛けようと思った際にどうやろうかなぁ、と試行錯誤していた状態です。 もう少しやり方は検討させていただきますが、本課題はいったんクローズさせていただきます。
記事へ Yuji Ohata · 2021年6月7日 Minamotoさん ご回答いただきありがとうございます!私が求めていた形はUDL形式と言うんですね。無知でした。頂いた内容で進めていこうと思います。 > Create tableで作成されたタイミングでExportということに関しては、> 現状、タスクで定期的にクラスをサーチするというベタな方法しか思いつきません。。。そうですよね。こちらでもこのやり方で実装しようと思っています。 全てのコードを外だししてGIT管理したいが、IRIS内で自動生成されたファイルたちをどうやって楽に取得するかを考えておりました。 疑問点は解消されましたので、クローズさせていただきます。
記事へ Yuji Ohata · 2021年5月20日 解決策に書いた以上のことはあまり何もしてないのですが、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