+ Start a Discussion
m-nakanom-nakano 

リストビュー内カスタムボタンによるレコードの一括更新

リストビュー内に「一括更新」ボタンを設置し、他画面に遷移することなく
各レコードの特定の項目(選択リスト)を更新する挙動をさせたいと思っています。
具体的に言うと、選択リストの初期値「未採用」になっているものを
ボタン押下で値「採用」に変更するといったものです。

下記コードだと、値が取得できずにエラーになってしまいます。
何かおかしな点があればご指摘お願いします。
{!REQUIRESCRIPT("/soap/ajax/30.0/connection.js")}

var st = "{!Contact.sample__c}";

if ( st == "未採用" ) {
	alert( "更新するデータがありません。" );
} else {
	if ( confirm( "ステータスを変更します。よろしいですか?" ) ) {
		var update_SObject = new sforce.SObject( "Contact" );
		update_SObject.Id = st ;
		update_SObject.Status = "採用";

		var updateRecords = [];
		updateRecords.push( update_SObject );

		// データ更新
		result = sforce.connection.update( updateRecords );

		// 画面を再読み込み
		parent.location.href = parent.location.href;
	}
}



 
Best Answer chosen by m-nakano
Shingo YamazakiShingo Yamazaki
nakano 様

こちらのコードではいかがでしょうか。

 
{!REQUIRESCRIPT('/soap/ajax/35.0/connection.js')};

var ids = {!GETRECORDIDS($ObjectType.Contact)},
    idsStr = ids.toString().replace(/,/g, "','");
    query = "SELECT Id, Sample__c FROM Contact WHERE Id IN ('" + idsStr + "')",
    records = sforce.connection.query(query).getArray('records');

if (records.length === 0) {
    alert('1つ以上選択してください');
} else {
    var objs = [];
    for (var i = 0; i < records.length; i++) {
        if (records[i].Sample__c === "未採用") {
            var obj = new sforce.SObject('Contact');
            obj.id = records[i].Id;
            obj.Sample__c = "採用";
            objs.push(obj);
        }
    }
    var results = sforce.connection.update(objs);
    window.location.reload();
}
(confirm 部分は省略しております)

参考:http://dackdive.hateblo.jp/entry/2015/05/11/103900
(以前私が似たようなことをやろうとして調査したメモです)

All Answers

Shingo YamazakiShingo Yamazaki
nakano 様

こちらのコードではいかがでしょうか。

 
{!REQUIRESCRIPT('/soap/ajax/35.0/connection.js')};

var ids = {!GETRECORDIDS($ObjectType.Contact)},
    idsStr = ids.toString().replace(/,/g, "','");
    query = "SELECT Id, Sample__c FROM Contact WHERE Id IN ('" + idsStr + "')",
    records = sforce.connection.query(query).getArray('records');

if (records.length === 0) {
    alert('1つ以上選択してください');
} else {
    var objs = [];
    for (var i = 0; i < records.length; i++) {
        if (records[i].Sample__c === "未採用") {
            var obj = new sforce.SObject('Contact');
            obj.id = records[i].Id;
            obj.Sample__c = "採用";
            objs.push(obj);
        }
    }
    var results = sforce.connection.update(objs);
    window.location.reload();
}
(confirm 部分は省略しております)

参考:http://dackdive.hateblo.jp/entry/2015/05/11/103900
(以前私が似たようなことをやろうとして調査したメモです)
This was selected as the best answer
m-nakanom-nakano
Shingo Yamazaki 様

リプライありがとうございます。
提示していただいたコードで無事想定通りの挙動を実現できました!
実はご参考のリンク先でお勉強させていただいていた者です。
重ねてありがとうございました。

 
Shingo YamazakiShingo Yamazaki
nakano 様

無事に解決したとのことで、良かったです。
リンクの記事もお役に立てたようで何よりです。