在visualforce电子邮件模板中包含图像的“官方”解决方案建议在模板中使用硬编码ID来引用存储为文档的图像文件。
https://help.salesforce.com/HTViewHelpDoc?id=email_template_images.htm&language=en_US
是否有更好的方法可以避免硬编码实例ID和OID?我尝试使用合作伙伴URL来获取实例ID,但是我收到了以下错误
错误错误:对实体“oid”的引用必须以“;”结尾分隔符。
使用: {!LEFT($ Api.Partner_Server_URL_140,FIND( “com /”,$ Api.Partner_Server_URL_140)3)/
替换“https://na2.salesforce.com/”
在
“na2.salesforce.com/servlet/servlet.ImageServer?id=01540000000RVOe&oid=00Dxxxxxxxxx&lastMod=1233217920”
我应该使用静态资源吗?
答案 0 :(得分:2)
我到了这里寻找与Visualforce电子邮件模板中的硬编码ID和OID相关的问题的答案。好吧,我找到了解决方法。
首先,我需要创建一个Visualforce组件:
<apex:component access="global" controller="LogomarcaController">
<apex:image url="{!LogoUrl}" />
</apex:component>
在相应的控制器类中,我创建了一个 SFInstance 属性来获取正确的URL Salesforce Instance, LogoUrl 属性来连接SFInstance和ID ......最后我使用自定义设置( Config_Gerais__c.getInstance()。ID_Documento_Logomarca__c )来配置沙箱或生产中的图像ID(在我的情况下,文档对象):
public class LogomarcaController {
public String LogoUrl {
get {
id orgId = UserInfo.getOrganizationId();
String idDocumentoLogomarca = Config_Gerais__c.getInstance().ID_Documento_Logomarca__c;
return this.SfInstance + '/servlet/servlet.ImageServer?id=' + idDocumentoLogomarca + '&oid=' + orgId ;
}
}
public String SfInstance
{
get{
string SFInstance = URL.getSalesforceBaseUrl().toExternalForm();
list<string> Dividido = SFInstance.split('.visual', 0);//retira o restante a partir de .visual
SFInstance = dividido[0];
dividido = SFInstance.split('://',0);//retira o https://
SFInstance = dividido[1];
if(!SFInstance.contains('sybf')) //managed package prefix, if you need
{
SFInstance = 'sybf.'+ SFInstance;
}
return 'https://'+SFInstance;
}
}
}
最后,我在Visualforce模板中添加了组件:
<messaging:emailTemplate subject="Novo Ofício - {!relatedTo.name}" recipientType="User" relatedToType="Oficio__c" >
<messaging:htmlEmailBody >
<c:Logomarca />
</messaging:htmlEmailBody>
<messaging:plainTextEmailBody >
</messaging:plainTextEmailBody>
</messaging:emailTemplate>
PS:我的一些变量,属性和注释都是用我的母语(葡萄牙语)。如果您在理解它们时遇到一些问题,请问我!
答案 1 :(得分:0)
我们遇到了类似的问题,在尝试了各种解决方案之后,以下方法对我们有效。在我们的示例中,图片作为内容资产(https://help.salesforce.com/articleView?id=000320130&type=1&language=en_US&mode=1)上传
解决方案:
<img src="{!LEFT($Api.Partner_Server_URL_260,FIND('/services',$Api.Partner_Server_URL_260))}/file-asset-public/<Image_Name_Here>?oid={!$Organization.Id}&height=50&width=50"/>