+ Start a Discussion
TOM*TOM* 

Javascriptでの選択項目値の読み取り方法

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

Viewのチェックボックスにチェックが入ったレコードを更新するカスタムボタンを作成しているのですが、
選択項目の値によって更新可能にしたり、更新不可能にしたりしたいと考えています。

var records ={!GETRECORDIDS($ObjectType.Object__c)};
var newRecords =[];
var obj = new sforce.SObject("Object__c");
obj.id = records[n];
obj.Status__c ="更新終了";
newRecords.push(obj);
で選択項目値の変更は可能だったのですが、

var records ={!GETRECORDIDS($ObjectType.Object__c)};
var newRecords =[];
var obj = new sforce.SObject("Object__c");
if(obj.Status__c =="更新終了"){
   alert("既に更新を行っています")
   }
   ・・・

では、選択項目値を読み取る事が出来ない様でした。
基礎的な内容で恐縮ですが、どの様にすれば項目値を読み取る事が可能なのかお教え願いませんでしょうか?

minoawminoaw

GETRECORDIDS で取得できるのはIDのみなので、
AJAX Toolkit など使ってIDからデータを取得し直さないといけません。

以下は、商談ビューで選択されたデータについて、フェーズを「Closed Won」に変更するサンプルです。

ご参考までに。

 

{!REQUIRESCRIPT('/soap/ajax/24.0/connection.js')}
(function() {
    function iterateRecords(soql, callback) {
        var qr = sforce.connection.query(soql),
            it = new sforce.QueryResultIterator(qr),
            continueLoop;
        while (it.hasNext()) {
            continueLoop = callback(it.next());
            if (continueLoop === false) {
                return false;
            }
        }
        return true;
    }
    function getErrorMessages(results) {
        var messages = [],
            i = 0,
            len = results.length,
            r;
        for (; i < len; i++) {
            r = results[i];
            if (! r.getBoolean("success")) {
                messages = messages.concat(getMessagesOfAResult(r));
            }
        }
        return messages;
    }
    function getMessagesOfAResult(res) {
        var messages = [],
            errors = res.getArray("errors"),
            i = 0,
            len = errors.length,
            e;
        for (; i < len; i++) {
            e = errors[i];
            messages.push(e.message + "  " + getErrorFields(e));
        }
        return messages;
    }
    function getErrorFields(error) {
        var fields = error.getArray('fields');
        if (fields.length > 0) {
            return "[" + fields.join(",") + "]"
        } else {
            return "";
        }
    }
    
    
    var ids = {!GETRECORDIDS($ObjectType.Opportunity)},
        query = "SELECT Name, StageName, Id FROM Opportunity WHERE Id IN ('" + ids.join("','") + "')",
        updateRecords = [],
        iteratedAll,
        updateResults,
        messages,
        iteratee = function(opp) {
            var sobject;
            if (opp.StageName === "Closed Won" || opp.StageName === "Closed Lost") {
                alert(opp.Name + " は既にクローズされています。");
                return false;
            } else {
                sobject = new sforce.SObject("Opportunity");
                sobject.Id = opp.Id;
                sobject.StageName = "Closed Won";
                updateRecords.push(sobject);
            }
        };
    
    iteratedAll = iterateRecords(query, iteratee);
    if (! iteratedAll) {
        return;
    }
    updateResults = sforce.connection.update(updateRecords);
    messages = getErrorMessages(updateResults);
    if (messages.length > 0) {
        alert(messages.join("\n"));
        return;
    }
    location.reload();
    
})();