Javascript Salesforce.com中的onclick Java脚本使用意外令牌非法

Javascript Salesforce.com中的onclick Java脚本使用意外令牌非法,javascript,Javascript,我早上大部分时间都在做这件事,但没有结束。我试图在Salesforce.com中执行一个使用OnClick Java的按钮,但它不断抛出错误。我认为问题可能在于数据中的特殊字符,因为当我只使用文本时,它就起作用了。但是,任何时候出现数字或任何特殊字符,我都会得到错误“意外标记非法”。有谁能帮我看看我做错了什么,当涉及到特殊角色时,我如何避免失败 {!REQUIRESCRIPT("/soap/ajax/28.0/connection.js")} var opptyObj = new sfor

我早上大部分时间都在做这件事,但没有结束。我试图在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);
} 
} 
}

假设这是某种模板,无论呈现什么,都需要正确地转义它插入的字符串中的某些值

鉴于此:

opptyObj.Description="{!Case.Description}";
假设我输入一个由以下内容组成的描述:

“太棒了,”约翰说

在模板中呈现时,结果如下:

opptyObj.Description=""That is awesome," said John.";
正如您可能看到的,结果是语法错误

您需要在以这种方式插入的文本中转义引号字符。在不知道该模板的技术是什么的情况下,我无法给出任何细节,但您希望用
\“
替换
,并用
\
替换
'
\
转义字符,强制将其视为字符串中的文字字符,而不是其他特殊含义

必须在将其插入脚本时执行此操作。本着这种精神:

opptyObj.Description="{!Case.Description.replace(/'/, "\\'").replace(/"/, '\\"')}
具体如何做到这一点取决于此处使用的语言或模板引擎。但结果应该是这样的:

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

RubyonRails,它清理数据以注入Javascript。它执行以下替换。这似乎是一个很好的基线

  • '\\'
    =>
    '\\\'

  • ”更奇怪的是,在案例的描述框中有特定文本,但每当提到多个URL时,就会触发一个错误。这个JavaScript是否由某个东西通过那些
    {!Foo.Bar}
    标记预处理?如果是这样的话,那就是插入破坏JavaScript语法规则的东西。啊!我似乎已经找到了错误的根源。只要在描述框内有返回,我就会得到错误“意外令牌非法”。是否有任何方法可以解决这种格式的返回问题?@AlexWayne这是在salesforce.com内部使用的,因此{..}被用作对对象上特定字段的调用。对象是在对象之前定义的。字段在末尾定义。因此,名为account name的帐户字段看起来像{!account.name}。我希望这会有所帮助。有趣的是,在我的salesforce.com公式编辑器中,它采用了语法,但在使用Chrome执行时仍然存在错误。我已经运行了几个测试,以查看错误可能是什么,但字段中的数据似乎是导致错误的原因。数据包含URL和几个空格,因为它是粘贴到描述中的电子邮件字符串。这会导致像我所经历的那样的错误吗?如果是这样,您的方法是否仍然允许该数据传递给我的另一个对象?基本上,此按钮从Salesforce中的Case对象获取数据,并将数据放入Opportunity对象,然后将两者绑定在一起。当对任何模板引擎的输出(这是一个模板引擎)进行故障排除时,您必须查看输出。那么,当描述把一切都搞砸的时候,什么是文字输出?(免责声明:我对sales force一无所知,但问题似乎很清楚,我只是不知道sales force会给你什么工具来解决它。)不用担心。我对Java知之甚少,所以在这一点上,我们将是瞎子领瞎子。基本上,我在saleforce.com中有一个名为description的输入字段,每次该字段中包含的数据在文本字符串中有一个中断,我都会得到错误“unexpected token liquired”,我怀疑这是因为换行。如果是这样的话,那我就不知道该怎么处理了。salesforce并没有给你多少钱来修复它:)
    opptyObj.Description="{!JSENCODE(Case.Description)}";