2

セールスフォースページにjavascript関数があり、連絡先の1つに未解決のケースがあるかどうかを検証しています。この関数は、apexgetterを呼び出して値を取得します。私が直面している問題は、apexgetterが常に間違ったブール値を返していることです。デバッグしてみましたが、すべてが機能しているようですが、何らかの理由で返されたブール値が間違っています。

頂点関数:

 public Boolean openCase{
   get{

        if (Contacts.size() > 0){
            for(cContact wContact: dicContacts.values()){
                 if(wContact.selected){                     
                     if(wContact.con.account.Number_of_open_Financial_Review_Cases__c > 1){

                        return true;
                    } 
                 }           
            }                     
    return false;
   }
   set{}

}

js関数:

 function validateOpenCases(sendEmail){

    doIt = true;
    oc = {!openCase};   // <<== problem here
    alert(oc);
      if (oc)
      {
       doIt=confirm('blabla?');
      }
      if(doIt){
            // do stuff
      }
      else{
        // do nothing
      }
  }
4

1 に答える 1

3

Apexオブジェクト/変数をJavaScriptで直接バインドしないでください(あなたが持っているように{!openCase};)。私は以前にこれに関して多くの問題を抱えていました。代わりに、JavaScriptRemotingまたはAjaxToolkitを使用してください。


アップデート

もう1つのオプションは、非表示のVisualforce入力を使用して、バインドされたVisualforce値を格納することです。次に、JavaScriptでその値を取得できます。

次に例を示します。

<apex:page controller="myController">
    <script>
        function getInputEndingWith(endsWith)
        {
            // put together a new Regular Expression to match the 
            // end of the ID because Salesforce prepends parent IDs to
            // all elements with IDs
            var r = new RegExp("(.*)"+endsWith+"$"); 

            // get all of the input elements
            var inputs = document.getElementsByTagName('input');

            // initialize a target
            var target;

            // for all of the inputs
            for (var i = 0; i < inputs.length; ++i)
            {
                // if the ID of the input matches the
                // Regular Expression (ends with)
                if (r.test(inputs[i].id))
                {
                    // set the target
                    target = inputs[i];
                    // break out of the loop because target 
                    // was found
                    break; 
                }
            }

            // return the target element
            return target;
        }

        function validateOpenCases(sendEmail)
        {
            doIt = true;
            oc = getInputEndingWith("OpenCase").value;

            alert(oc);

            if (oc === "true") {
                doIt = confirm('Are you sure?'); 
            }
            if (doIt) {
                // do stuff
            }
            else {
                // do nothing
            }
        }
    </script>

    <apex:form>
        <apex:outputpanel>
            <apex:inputhidden id="OpenCase" value="{!openCase}" />
        </apex:outputpanel>
        <input type="button" class="btn" onclick="validateOpenCases('Send');" value="Validate" />
    </apex:form>
</apex:page>
于 2012-04-20T14:58:14.560 に答える