Salesforce 将图像插入visualforce电子邮件模板(无硬编码ID)

Salesforce 将图像插入visualforce电子邮件模板(无硬编码ID),salesforce,visualforce,Salesforce,Visualforce,在visualforce电子邮件模板中包含图像的“官方”解决方案建议在模板中使用硬编码ID来引用存储为文档的图像文件 有没有更好的方法避免硬编码实例ID和OID?我尝试使用合作伙伴URL获取实例ID,但出现以下错误 错误:对实体“oid”的引用必须以“;”结尾定界符 使用: {!左($Api.Partner\u Server\u URL\u 140,FIND(“.com/”,$Api.Partner\u Server\u URL\u 140)+3)/ 替换“” 在 “na2.salesforc

在visualforce电子邮件模板中包含图像的“官方”解决方案建议在模板中使用硬编码ID来引用存储为文档的图像文件

有没有更好的方法避免硬编码实例ID和OID?我尝试使用合作伙伴URL获取实例ID,但出现以下错误

错误:对实体“oid”的引用必须以“;”结尾定界符

使用: {!左($Api.Partner\u Server\u URL\u 140,FIND(“.com/”,$Api.Partner\u Server\u URL\u 140)+3)/

替换“”

“na2.salesforce.com/servlet/servlet.ImageServer?id=01540000000RVOe&oid=00Dxxxxxxxxx&lastMod=1233217920”


我应该改用静态资源吗?

我来到这里,是为了寻找与Visualforce电子邮件模板中硬编码ID和OID相关的问题的答案。我找到了解决方法

首先,我需要创建一个Visualforce组件:

<apex:component access="global" controller="LogomarcaController">
    <apex:image url="{!LogoUrl}" />
</apex:component>

在相应的控制器类中,我创建了一个SFInstance属性来获取正确的URL Salesforce实例,LogoUrl属性来连接SFInstance和ID…最后,我使用了自定义设置(Config_Gerais__c.getInstance().ID_Documento_Logomarca_c)来配置图像的ID(在我的例子中,是Document对象)在沙箱或生产上:

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;
    }
}
}
public类LogomarcaController{
公共字符串LogoUrl{
得到{
id orgId=UserInfo.getOrganizationId();
字符串idDocumentoLogomarca=Config\u Gerais\uuu c.getInstance().ID\u Documento\u Logomarca\uu c;
返回this.SfInstance+'/servlet/servlet.ImageServer?id='+idDocumentoLogomarca+'&oid='+orgId;
}
}
公共字符串实例
{
得到{
字符串SFInstance=URL.getSalesforceBaseUrl().toExternalForm();
list 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];
如果(!SFInstance.contains('sybf')//托管包前缀,如果需要
{
SFInstance='sybf.+SFInstance;
}
返回'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:我的一些变量、属性和注释是用我的母语(葡萄牙语)编写的。如果您在理解它们时遇到一些问题,请询问我!

我们遇到了类似的问题,在尝试了各种解决方案后,以下方法对我们有效。在我们的情况下,图像作为内容资产上载()

解决方案:

?oid={!$Organization.Id}&height=50&width=50“/>