여러 레코드를 얻는 Ajax 호출

개요



다음과 같이 선택된 여러 사용자 레코드의 이메일 주소를 검색하는 양식을 만듭니다.


양식



1. 사용자 선택과 선택한 사용자의 이메일 주소를 표시하는 두 개의 필드를 만듭니다.
컨테이너 변수는 필드의 너비를 줄이는 데 사용됩니다.

2. 변수 사용자를 List Collector 유형으로 만듭니다.

3. 「리스트 콜렉터」타입은 디폴트에서는 선택 가능한 항목 일람과 선택된 항목 일람의 2개의 일람을 표시합니다만, 이번은 일람을 하나로 하기 위해서 항목 변수의 속성에 「glide_list」를 지정합니다.

4. 이메일 주소 유형은 "다중 줄 텍스트"로 설정합니다.


스크립트 인클루트



서버 측에서 실행되는 스크립트를 작성합니다.

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

    var ajax = new GlideAjax('getUserEmail');     //呼び出すスクリプトインクルード名
    ajax.addParam('sysparm_name', 'getEmail');    //呼び出すメソッド名
    ajax.addParam('sysparm_uid', newValue);       //引き渡す値。選択されたユーザのsys_id(コンマ区切り)
    ajax.getXMLAnswer(function(answer) {          //サーバスクリプトを呼び出す
        if (answer.length > 0) {                  //メールアドレスを取得できた場合はメールアドレスをメール一覧フィールに設定
            var emailArray = answer.split(',').sort();  //コンマ区切りのメールアドを配列に変換
            g_form.setValue('email_addresses', emailArray.join('\r\n')); //配列を改行区切りの文字列に変換してメールフィールドに設定
        }
    });
}

스크립트 포함



주의가 필요하기 때문에 push() 하는 요소가 String 가 아니면 최초의 값이 반복해 추가되는 것입니다. 각 레코드 데이터를 올바르게 추가하려면 값을 toString()하여 문자열로 변환합니다.

var getUserEmail = Class.create();
getUserEmail.prototype = Object.extendsObject(AbstractAjaxProcessor, {
    getEmail: function() {
        var user_ids = this.getParameter('sysparm_uid'); //クライアントから送られて来るユーザのsys_idを取得。sys_idはコンマ区切り
        var user_lookup = new GlideRecord('sys_user');   //ユーザテーブルを参照する
        user_lookup.addQuery('sys_id', 'IN', user_ids);  //user_idsに含まれるsys_idを取得
        user_lookup.query();                             //クエリーを実行
        var returnArray = [];                            //結果を保管する配列
        while (user_lookup.next()) {                     //結果レコードをループ
            returnArray.push(user_lookup.email.toString()); //結果レコードのメールアドを配列に追加
        }
        return returnArray.join(',');                    //配列をコンマ区切り文字列に変換
    },
    type: 'getUserEmail'
});

좋은 웹페이지 즐겨찾기