リスト画面に遷移した際、デフォルトでレコードを1件選択している状態にしたい

d-aizawa
Kilo Sage

コミュニティの皆様

いつもお世話になっております。

リスト画面に遷移した以下のようにレコードが1件デフォルトで選択されている状態にしたいです。

daizawa_0-1667800723665.png

→こちらのリスト画面には、別のリスト画面から遷移できるようにしております。
(リスト画面にUI Actionを作成)

 

→UI Actionなので、漠然とg_listで何かできないか模索していますが、

何か上記を達成できるメソッドがあれば、教えて頂きたいです。

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

 

UI Actionのスクリプト

function resultRequestTaskFacility() {
    var the_list = GlideList2.get('u_facility_hyouji_for_request_task_result');//Database viewからの遷移になります
    var action_id = '50794ba71baa11100fe88665cc4bcbc5';
    var selected = g_list.getChecked();
    var sysId;

    if (selected != '') {
        selected = g_list.getChecked();
        var sysIdList = selected.split(',');
        if (sysIdList.length > 1) {
            alert("1レコードのみ選択してください。");
        } else {
            var facility = new GlideRecord('alm_facility');
            facility.addQuery('sys_id', selected);
            facility.query();
            while (facility.next()) {
                var gr = new GlideRecord('u_temp');
                gr.initialize();
                gr.setValue('u_sys_id', facility.sys_id);
                gr.setValue('u_item', 'result_request_task_facility');
                gr.insert();
            }

            the_list.action(action_id, 'result_request_task_facility', selected);
        }

    } else {
        alert("レコードが選択されていません。");
    }
}

if (typeof window == 'undefined') {
    submit();
}

function submit() {
    var temp = new GlideRecord('u_temp');//一時的な情報を保持する用のテーブルを作成しました
    temp.orderByDesc('sys_created_on');
    temp.addQuery('u_item', 'result_request_task_facility');
    temp.addQuery('sys_created_by', gs.getUserName());
    temp.setLimit(1);
    temp.query();
    while (temp.next()) {
        sysId = temp.getValue('u_sys_id');
    }
    var url = '';//スクリーンショットのリスト画面のURL
    action.setRedirectURL(url);
}
3 REPLIES 3

iwai
Giga Sage

選択する処理として該当するのが

GlideList2.get(input.getAttribute('data-list_id')).rowChecked(input, e);

 

このような記述になりますが、rowCheckedにはElementやEventを渡すこと、この処理単体では終わらずElementのStyle変更は別処理で行っていたりします。この状況から推測すると一般の利用想定はなさそうです。

そこで、単純に、Checkboxをクリックする処理を実装するのはどうでしょうか。

GlideList2.get('u_facility_hyouji_for_request_task_result').table.querySelector('tr.list_row input').click()

 『リスト画面に遷移した以下のようにレコードが1件デフォルトで選択されている状態』
この場合はClientScriptとして、下記のように記述すると、表示直後にCheckboxをクリックします。

function myCheck(){
	var click = false;
	if(typeof GlideList2 != 'undefined'){
		var gl = GlideList2.get('u_facility_hyouji_for_request_task_result');
		if(gl){
			gl.table.querySelector('tr.list_row input').click();
			click = true;
		}
	}
	if(!click){
		setTimeout(myCheck,100);
	}
}
setTimeout(myCheck,100);

 

iwaiさん、ご回答ありがとうございます。

上記について、一旦は保留となっているため、

時間が空いた時にご確認させて頂きます。

コーディングはServiceNowから経験しているので、

javascriptの既存メソッドがあまりわからず、

gl.table.querySelector('tr.list_row input').click();

この処理があまり理解できませんでした。

こちらの処理は具体的にどのような処理になるのでしょうか。

 

お手数をおかけしますが、よろしくお願いいたします。

gl.table には、 ListViewのHTML Table Element (ListViewの要素)が格納されています。

querySelectorによって、最初のチェックボックスを検索して、見つかったElement(チェックボックスの要素)を取得。

そのElementをマウスクリック(クリックと同じ処理)しています。

Element.querySelector() - Web API | MDN (mozilla.org)

HTMLElement.click() - Web API | MDN (mozilla.org)