0

我早上大部分时间都在做这件事,但没有结束。我正在尝试在 Salesforce.com 中执行一个使用 OnClick Java 的按钮,并且它不断抛出错误。我认为问题可能出在数据中的特殊字符上,因为当我只使用文本时它可以工作。但是任何时间数字或任何特殊字符出现我都会收到错误“意外令牌非法”。谁能帮我看看我做错了什么,以及当涉及特殊字符时如何避免失败?

{!REQUIRESCRIPT("/soap/ajax/28.0/connection.js")} 


var opptyObj = new sforce.SObject("Opportunity");
var caseObj = new sforce.SObject("Case");
var today = new Date();
var sOpptyId = "{!Case.Opportunity__c}";

if( sOpptyId != "")
{ 
alert("This case is already tied to an opportunity!");
} 
else
{ 
opptyObj.AccountId = "{!Case.AccountId}";
opptyObj.CloseDate = sforce.internal.dateTimeToString(today);
opptyObj.Description="{!Case.Description}";
opptyObj.Case__c = "{!Case.Id}";
opptyObj.Name = "{!Case.Subject}";
opptyObj.StageName = "Estimate in Progress";
opptyObj.Created_from_Case__c = "Y";
opptyObj.Type = "New Business";
opptyObj.Amount = ".01";

var opptyresult = sforce.connection.create([opptyObj]);

if (opptyresult[0].success=='false') 
{ 
alert("Opportunity creation failed: " + opptyresult[0].errors.message);
} 
else 
{ 
caseObj.Id = '{!Case.Id}';
caseObj.Opportunity__c = opptyresult[0].id;
caseObj.Status = "Estimate in Progress";

var caseResult = sforce.connection.update([caseObj]);

if(caseResult[0].success == 'false') 
{ 
alert("Case update failed: " + caseResult[0].errors.message);
} 
else 
{ 
alert("An opportunity has been created and linked to this case.");
location.reload(true);
} 
} 
}
4

1 回答 1

0

假设这是某种模板,无论渲染它需要正确转义它插入的字符串中的某些值。

鉴于这种:

opptyObj.Description="{!Case.Description}";

假设我输入了一个包含以下内容的描述:

“这太棒了,”约翰说。

当它在您的模板中呈现时,结果是这样的:

opptyObj.Description=""That is awesome," said John.";

如您所见,结果是语法错误。

您需要在以这种方式插入的文本中转义引号字符。在不知道渲染这个模板的技术是什么的情况下,我不能给你任何细节,但你想"\"'替换\'\转义字符,强制它们被视为字符串中的文字字符,而不是其他特殊含义。

这必须在它被插入脚本时完成。本着这样的精神:

opptyObj.Description="{!Case.Description.replace(/'/, "\\'").replace(/"/, '\\"')}

究竟如何做到这一点取决于这里使用的是什么语言或模板引擎。但是结果应该是这样的:

opptyObj.Description="\"That is awesome,\" said John.";

Ruby on Rails实现了一种escape_javascript方法,该方法对注入 Javascript 的数据进行清理。它执行以下替换。这似乎是一个很好的基线。

  • '\\'=>'\\\\'
  • '</'=>'<\/'
  • "\r\n"=>'\n'
  • "\n"=>'\n'
  • "\r"=>'\n'
  • '"'=>'\\"'
  • "'"=>"\\'"

更新:

据此: http: //www.salesforce.com/us/developer/docs/pages/Content/pages_security_tips_scontrols.htm

看起来你想要这个JSENCODE功能。大概是这样的吧?

opptyObj.Description="{!JSENCODE(Case.Description)}";
于 2013-07-25T18:26:29.727 回答