2012-06-19 41 views
4

我必須使用電子郵件模板向salesforce中的用戶發送電子郵件。此模板包含自定義對象的合併字段類型。使用電子郵件模板的salesforce中的setWhatId

Messaging.SingleEmailMessage mail = new Messaging.SingleEmailMessage(); 
mail.setTargetObjectId(user.get(0).id); 


mail.setTargetObjectId(user.get(0).Id) 
mail.setTemplateId(specifier.get(0).Template_id__c); 
mail.saveAsActivity = false; 
mail.setWhatId(custom_object.Id); 

如果指定targetObjectId領域的接觸我的文檔閱讀 ,你可以指定一個whatId爲好。這有助於進一步確保模板中的合併字段包含正確的數據。該值必須是以下類型之一: 賬戶 資產 運動 案例 合同 機會 訂購 產品 解決方案 定製

,但如果我們將電子郵件發送到用戶不聯繫,然後如何分配在上面的代碼中,自定義對象中的合併字段類型爲自定義對象

回答

1

不確定這是可行的,但它取決於您的自定義對象與將接收合併電子郵件的用戶之間的關係。用戶和CustomObject之間是否有一對一的關係?如果是這樣的話,也許可以添加對每個用戶對象引用的單個自定義對象實例的引用,然後使用CustomObject__r.CustomField__c將自定義公式字段添加到用戶對象上即可。

在自定義公式字段的用戶對象上:

TEXT(CustomObject__r.CustomField__c) 

那麼你的模板可以改變成用戶模板和合並字段將實際指向您的自定義對象實例的公式字段。但是如果你在User和CustomObject__c之間有一對一或多對多的關係,我認爲你運氣不好。

+0

這仍然是這種情況嗎?我在一個對象上有一對多的關係。 – chrisjlee

2

這是一個GIGANTIC整體在他們的電子郵件方法,並且多年來一直讓我煩惱。特別給出的工作流程電子郵件警報似乎沒有問題爲用戶發送電子郵件模板。唉,如果你的目標是用戶,你不能使用setWhatId()。但你可以vote爲他們添加該功能,

我已經解決了這個問題,我通常創建一個與用戶名稱和電子郵件地址相同的聯繫人,用它來發送電子郵件,然後刪除它。儘管處理聯繫對象上的驗證規則可能成爲一項挑戰,但這種方法運行良好。請參閱他們的dev boards進行全面討論。

1

你可以得到模板,如下所示替換合併域:

EmailTemplate template = [SELECT Id, Subject, HtmlValue, Body FROM EmailTemplate WHERE Name = 'Case Update']; 
Case modifiedCase = [SELECT Account.Id, Account.Name, Owner.FirstName, Owner.LastName, CaseNumber, Subject, LastModifiedBy.FirstName, LastModifiedBy.LastName from Case where Id=:modifiedCaseId]; 

String subject = template.Subject; 
subject = subject.replace('{!Case.Account}', modifiedCase.Account.Name); 
subject = subject.replace('{!Case.CaseNumber}', modifiedCase.CaseNumber); 
subject = subject.replace('{!Case.Subject}', modifiedCase.Subject); 

String htmlBody = template.HtmlValue; 
htmlBody = htmlBody.replace('{!Case.Account}', modifiedCase.Account.Name); 
htmlBody = htmlBody.replace('{!Case.OwnerFullName}', ownerFullName); 
... 

Messaging.SingleEmailMessage email = new Messaging.SingleEmailMessage(); 
email.setSubject(subject); 
email.setHtmlBody(htmlBody); 
Messaging.sendEmail(new Messaging.SingleEmailMessage[] {email}); 

至於沒有新的字段在模板中添加這將正常工作。管理員可以混淆電子郵件的格式而不需要更改代碼。