- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
08-01-2022 11:03 PM
毎度お世話になります。
掲題の件、クライアントのUI アクションからMIDサーバースクリプトを実行させる処理を行っております。
MIDサーバー側処理は、取得してきたある情報を関連するレコードにセットしてアップデートを行うというシンプルな処理です。(本件に不要な処理や中間ディスパッチャクラス等は省略させていただいております)
var Class1 = Class.create();
Class1.prototype = {
initialize: function(table_name, sys_id) {
sys_id = (sys_id === undefined) ? null : sys_id;
try{
this.targetTable = new GlideRecord(table_name);
}catch(e){
throw new Error(e);
}
if (sys_id)
this.targetRecordId = sys_id;
},
update: function(json) {
try{
this.targetTable.addActiveQuery();
this.targetTable.query();
var ret = this.targetTable.get(this.targetRecordId);
//各カラムの値を設定
for (var key in json) {
this.targetTable.setValue(key, json[key]);
}
//target tableの更新処理
var sys_id = this.targetTable.update();
//デバッグ様に書き換え
throw new Error('GlideRecord.update() was failed. return sys_id: ' + sys_id + ', getTableName: ' + this.targetTable.getTableName() + ', get: ' + JSON.stringify(ret));
}catch(ex){
throw new Error(ex);
}
return true;
},
}
このupdate内にあるtargetTable.update()はGlideRecordのupdateなはずなのですが、このデバッグ結果を見ると、以下の様にtrueが返ってきてしまいます。
前置きが長くなりましたが、以下有識者の方教えていただけないでしょうか。
- MIDサーバー側のGlideRecordはServiceNow本体のGlideRecord(Reference)と同一のものなのでしょうか?
- GlideRecord.update処理に係る詳細デバッグ方法をご存知でしたらご教示いただけないでしょうか
- 同様のケースがございましたらご教示いただけないでしょうか。
よろしくお願いいたします。
Solved! Go to Solution.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
08-02-2022 06:16 AM
MIDServer Script include 内の GlideRecord 変数をScriptで解析してみました。結果として下記の定義となっていました。ServiceNow InstanceのGlideRecordと比べて圧倒的にfunctionの数が少なく、Fieldの参照(例:current.name)もありませんでした。そのため中身の処理は別物であると考えて良さそうです。
GlideRecord.update処理のデバッグは、この処理の中身を確認する事はできないので、ServiceNow側でBusinessRuleにログを入れたり、通信ログを確認するぐらいになるかと思います。
GlideRecord.update で True False を返すということなら、それに従って処理を作るしかないと思います。sys_idの取得ならgetValue('sys_id')。RestAPIでテーブルを参照や更新するのも場合によっては良いかもしれません。
ーーーーーー解析結果ーーーーーーー
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
08-02-2022 06:16 AM
MIDServer Script include 内の GlideRecord 変数をScriptで解析してみました。結果として下記の定義となっていました。ServiceNow InstanceのGlideRecordと比べて圧倒的にfunctionの数が少なく、Fieldの参照(例:current.name)もありませんでした。そのため中身の処理は別物であると考えて良さそうです。
GlideRecord.update処理のデバッグは、この処理の中身を確認する事はできないので、ServiceNow側でBusinessRuleにログを入れたり、通信ログを確認するぐらいになるかと思います。
GlideRecord.update で True False を返すということなら、それに従って処理を作るしかないと思います。sys_idの取得ならgetValue('sys_id')。RestAPIでテーブルを参照や更新するのも場合によっては良いかもしれません。
ーーーーーー解析結果ーーーーーーー
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
08-03-2022 02:11 AM
iwai様
いつも迅速かつ的確なご回答いただきましてありがとうございます!
オブジェクト解析までいただきまして大変感激いたしております!
差し支えなければで結構なのですが、この解析手順を展開いただく事は可能でしょうか?
また、その後色々と検証を重ねた結果、お恥ずかしながら更新出来ていないのはテーブル列が読み取り専用になっていることが原因でした。。。これを外すとMIDサーバー側のGlideRecord.updateでも更新出来ました。読み取り専用でもインサートによるフィールドセットが出来ていたため更新も問題無いものと誤認しており、大変お騒がせ致しました。。。
ただ、実行成否に関わらずtrueを返してくる様で、運用に耐えうるか疑問も感じているため、ご提案いただいたTable APIの利用も検討しております。
本件につきましてご協力いただいたこと、重ねて御礼申し上げます。
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
08-03-2022 06:03 AM
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
08-08-2022 04:14 AM
iwai様
解析につきましても詳解誠にありがとうございます!
いただいた情報をベースに当方でも解析出来る様にしようと思います!
重ねて御礼申し上げます。