Userテーブルを参照したList型フィールド(ReadOnly)の自動セットの挙動について

d-aizawa
Kilo Sage

コミュニティの皆様、いつもお世話になっております。

ChangeRequestテーブルに、「u_Assigned to(TLAgent)」フィールドを下記内容で作成しました。

・Label:u_Assigned to(TLAgent)
・Name:u_assigned_to_tl_agent

・Type:List

・Reference:User(sys_user)
(・ReadOnly:True)

 

上記フィールドに、自動でユーザがセットされるよう、OnChange型のClientScriptを作成しました。

ClientScriptの処理の概要としては、AssignmentGroupにグループが登録されたタイミングで、

グループのフィールド情報(u_tl_agent)などを取得して、ユーザを自動セットするという内容になります。

function onChange(control, oldValue, newValue, isLoading, isTemplate) {
    if (isLoading || newValue === '') {
        return;
    }

    //Type appropriate comment here, and begin script below
    var tlSet = g_form.getReference('assignment_group', callback);

    function callback(tlSet) {
        g_form.setValue('assigned_to', tlSet.u_tl);
        g_form.setValue('u_assigned_to_tl_agent', tlSet.u_tl_agent);
    }
}


「u_Assigned to(TLAgent)」フィールドのReadOnlyがFalseの場合、
上記スクリプトが想定通りに実行されることを確認済(スクショ①)ですが、
ReadOnlyがTrueの場合だと、一度レコードを保存しないとユーザが自動セットされません。(スクショ②)
以下2点確認させてください。
1.原因について、List型フィールドに何か制約や制限事項があるのではないかと考えておりますが、

List型フィールドもしくは上記に関する既知のエラーや公式ナレッジ等ございましたら、
ご教示頂けないでしょうか。

2.u_Assigned to(TLAgent)を読み取り専用にしたいというよりかは、
自動セットされたユーザを更新されないようにしたいというのが根本なので、

ReadOnlyにして検証していたのですが、何か良い代替案があれば教えて頂きたいです。
(起票時から読み取り専用にするのではなく、UI Policyで条件を設定して読み取り専用にする等、
試行錯誤中です)

よろしくお願いいたします。

※スクリーンショット

daizawa_3-1690848886261.png

 

daizawa_2-1690848877589.png

 

 

 

 

1 件の受理された解決策

d-aizawa
Kilo Sage

上記について、Now Supportに問合せしたところ、

Now Supportのインスタンスでも再現されたと回答があり、

PRBとして確認して頂けると回答がありました。

また類似の事象で、下記のナレッジ(PRB)があり、確認後、根本原因が同様である場合は、

同様に対応されるとのことです。

https://support.servicenow.com/kb?id=kb_article_view&sysparm_article=KB1224679

 

※一旦状況の回答待ちという状況ですので、本投稿はクローズとさせて頂きます。

元の投稿で解決策を見る

3件の返信3

Yamada Ryosuke
Tera Contributor

下記でいかがでしょうか。

■ClientScript

function onChange(control, oldValue, newValue, isLoading, isTemplate) {
    if (isLoading || newValue === '') {
        return;
    }

    var ga = new GlideAjax("global.u_change_request_util"); /
    ga.addParam('sysparm_name', 'getUserList');
    ga.addParam('sysparm_group', newValue);

    ga.getXMLAnswer(function(answer) {
        g_form.setValue('u_assigned_to_tl_agent', answer); 
    });
}

■ScriptInclude

var u_change_request_util = Class.create();
u_change_request_util.prototype = Object.extendsObject(AbstractAjaxProcessor, {
    getUserList: function() {
        var groupId = this.getParameter("sysparm_group");
        var gr = new GlideRecord('sys_user_grmember');
        gr.addQuery('group', groupId);
        gr.query();
        returnArray = [];
        while (gr.next()) {
            returnArray.push(gr.getValue('user'));
        }

        return returnArray.toString(); //配列を文字列にして返す
    },
    type: 'u_change_request_util'
});

 

Yamada様、ご返信ありがとうございます。

Client ScriptをgetReferenceではなく、GlideAjaxで試しましたが、
状況は変わらないままです。。
ブラウザコンソールを確認しましたが、特にエラーは表示されておりませんでした。
他に気づき等ございましたら、ご連絡をお願いいたします。

d-aizawa
Kilo Sage

上記について、Now Supportに問合せしたところ、

Now Supportのインスタンスでも再現されたと回答があり、

PRBとして確認して頂けると回答がありました。

また類似の事象で、下記のナレッジ(PRB)があり、確認後、根本原因が同様である場合は、

同様に対応されるとのことです。

https://support.servicenow.com/kb?id=kb_article_view&sysparm_article=KB1224679

 

※一旦状況の回答待ちという状況ですので、本投稿はクローズとさせて頂きます。