function readOnly(count){ }
Starting November 20, the site will be set to read-only. On December 4, 2023,
forum discussions will move to the Trailblazer Community.
+ Start a Discussion
kanaTarokanaTaro 

テンプレートを使ったEメール送信でWhatIdを指定して活動とひもづけすることはできますか?

お世話になります。

 

GAE For JavaのSalesforce連携をつかって、

SingleEmailMessageを送信したいと思っています。

 

#やりたいこと

・E-メールテンプレートを指定し、カスタムオブジェクトの項目内容で置換し、

E-メールを送信する。

 

・活動履歴にレコードを追加する。

(これにより、カスタムオブジェクトの関連リストに表示される)

 

 

書いたコード

(2010/7/21 無駄なコメント記述を削除しました)

 

SingleEmailMessage[] message = new SingleEmailMessage[1];
SingleEmailMessage msg = new SingleEmailMessage();
message[0] = msg;
   
message[0].setSaveAsActivity(false);
 

message[0].setTemplateId("00X10000000N78zEAC");

message[0].setTargetObjectId(リードのID);

message[0].setWhatId(カスタムオブジェクトのID);

   String[] toAddresses = new String[] { "メールアドレス" };
   message[0].setToAddresses(toAddresses);
   try {
       
    PartnerConnection connection = Connector.newConnection(config);
    SendEmailResult[] result = connection.sendEmail((Email[])message);

 

============= 以下省略 ===================

 

このソースを実行すると、以下のエラーメッセージが出力されます。

 

The email failed to send: WhatId is not available with saveAsActivity for sending emails to Leads.

 

ちなみに、該当カスタムオブジェクトの活動の記録は許可になっています。

そのため、

Salesforce画面カスタムオブジェクトから、「メールの送信」ボタンをクリックし、

テンプレートを使用したメールを送ると、WhoIdがカスタムオブジェクトのIDになった

Taskのレコードができ、メールも送ることができます。

 

Salesforce画面でできることと、同じことは外部APIからできないのでしょうか?

ue123ue123

message[0].setSaveAsActivity(false);

 

が原因ではないでしょうか?

削除するか、trueにしてみてください。

kanaTarokanaTaro

ue123さん

 

message[0].setSaveAsActivity(false);

 

trueにする、または、記述を省略(デフォルト値:true)にした場合も、

メール送信エラーとなります

 

sendEmail()メソッドから返却される結果メッセージ:

 

『WhatId is not available with saveAsActivity for sending emails to Leads.』

 

 

ttsuchittsuchi

エラーはTargetObjectにリードを指定しながら、WhatIDを指定しているためだと思います。

UIでメール送信する場合も、リードを指定するとカスタムオブジェクトは指定できなくなりますよね?

kanaTarokanaTaro

>エラーはTargetObjectにリードを指定しながら、WhatIDを指定しているためだと思います。

>UIでメール送信する場合も、リードを指定するとカスタムオブジェクトは指定できなくなりますよね?

 

本来ならば、TargetObjectIdは省略したいのですが、

TargetObjectIdをしていない、メールの送信に失敗するので、仕方なくLeadのレコードを指定します。

 

ちなみに、UIでメール送信する際には、

あて先(TargetObjectId)には取引先責任者(Contact)しか指定できない認識です。

 

また、あて先(TargetObjectId)に取引先責任者を指定し、関連先(WhatId)にカスタムオブジェクトを指定する

ことはできるとも認識しています。

 

プログラムとして作りたいことと、現状をまとめます

 

・あて先(TargetObjectId)は省略したい

⇒TargetObjectIdを省略すると送信エラー

 

・関連先(WhatId)にはカスタムオブジェクトを指定したい

⇒TargetObjectIdにLeadを指定しつつ、WhatIdを指定していると送信エラー

 

・関連先となる活動のオブジェクトは活動を許可しているので、メール送信をしたら活動に保存したい

⇒SaveAsActivity(true)にすると送信エラー

 

※標準のUIでは、やりたいことができると確認しています。

 

現在提供されいているAPIでは、

プログラムではUIと同じことはできないのかなと諦めて、

プログラムをゴリゴリ書いて解決しています。

 

⇒テンプレート本文を取得処理作成

⇒カスタムオブジェクトの値で文章置換処理作成

⇒メール送信

⇒活動オブジェクトに保存する処理を作成

 

 

ue123ue123

kanaTaroさん

 

ue123です。

 

ttsuchiさんのおっしゃられる通りTargetObjectIdに取引先責任者が指定された場合のみ、WhatIdを指定することが

できるとリファレンスに記載されておりました。

 

http://www.salesforce.com/us/developer/docs/apexcode/Content/apex_classes_email_outbound_single.htm

 

・あて先(TargetObjectId)は省略したい

⇒TargetObjectIdを省略すると送信エラー

→setTemplateIdを使うとTargetObjectIdが必須みたいですね。HtmlやPlainTextだ省略して送信できました。

 

・関連先(WhatId)にはカスタムオブジェクトを指定したい

⇒TargetObjectIdにLeadを指定しつ つ、WhatIdを指定していると送信エラー

→上記のとおりです。

 

・関連先となる活動のオブジェクトは活動を許可しているので、メール送信をしたら活動に保存したい

⇒SaveAsActivity(true) にすると送信エラー

→TargetObjectIdにLeadを指定しているためのエラーのため関係なしと思われます。

 

やるとするならば、ダミー取引先責任者を作成して、TargetObjectIdにダミー取 引先責任者を指定するでしょうか。

 

一応こちらでは、

TargetObjectIdを取引先責任者にして、SaveAsActivity(true)で、指定したwhatIdの活動履歴は作成されました。

Force.com上ですが。。。