2011-10-28 5 views
1

私は徐々にsalesforceのハングアップを受けており、アカウントとチャンスなどの間でリンクするフィールドをいくつか取得しようとしています。SalesForce:カスタムフィールドとアカウントアクティビティデータのリンク

私の現在の問題はアカウントアクティビティの詳細です。我々が持っているこのアカウントで

アカウント所有者 アカウント名 タイプ ウェブサイト 電話番号 ともっと...

:私は、次のようなアカウントに接続されたデータと詳細を表示アカウントのセットを持っていますアカウントにリンクしている電話、ミーティング、電子メールの詳細を示すアクティビティのフィード。アカウントアクティビティ内の各イベントには、Typeフィールドがあります。フィールドは、会議、通話、またはメールのいずれかです。私がやろうとしています何

は、アカウントアクティビティを見て、前回の会議の日付が表示され、メインアカウント内のカスタムフィールドを作成しますので、sudoのコードの面で、それはのようになります。

SELECT DueDate WHERE type=Meeting and DueDate <= TODAY()

これらの行に沿って何か(私はthatsは基本的にSQLを知っています)。

私の上司が私がそれを理解したら、彼は私にパイントを買うと言ったので、誰もが華麗になるのを助けることができたら、特に午後5時までに!

ありがとうございます。

---------- EDIT ---------

私はこのような何かしようとしています:

CASE(TEXT(Activity.Type)、 会議、TODAY - LastActivityDate)

、カスタマーの式フィールドを作成し、そうすることによってタイプと呼ばれるイベントのフィールドに取得しようとイム:

Activity.Type

のThは動作しませんが、LastActivityDateから取得された推測でした。私はこれについてすべて間違っているかもしれないので、何かが助けになるでしょう。乾杯!

---------- EDIT ---------

This is an image of the field that I am trying to access, I cannot seem to find any way to accessing this Type field

+0

カスタム式フィールドを1つだけ使用する方法はないと思います。イベントが挿入または更新されるたびに、アカウントのカスタムフィールド(たとえば、Last_Event_Type__c)に書き込むEventオブジェクトのトリガを指定する必要があります。そのカスタムフィールドを使用して、試していたときと同じように式の比較を行うことができます。 何かのように: 'CASE(TEXT(Last_Event_Type__c)、Meeting、TODAY - LastActivityDate) ' –

+0

この@MatthewKeefeのおかげで、このようなコードをどこに置くかは、アカウントのカスタム数式フィールド行事? – lukehillonline

+0

@MatthewKeefeあなたのコードを試しましたが、 'Last_Event_Type__c'または' Last_Event_Type'を有効と認識しません。他のアイデア? – lukehillonline

答えて

0

あなたは式でそれを行うことができない、とあなたが本当にLastActivityDateフィールドを使用することはできませんなぜなら、「会議」だけでなく、すべての種類のイベントを追跡するからです。

これを達成する1つの方法は、アカウントの "Last_Meeting_Date__c"フィールド(そのフィールドを作成する必要があります)を更新する、Eventオブジェクトにafter-insert/after-updateトリガーを作成することです。ここで

は、コードは次のとおりです。

trigger EventUpdateAccountMeetingDate on Event (after insert, after update) { 
     Map<String,Date> acctToDate = new Map<String,Date>(); 
    for(Event e : Trigger.new){ 
     if(e.Type=='Meeting' && e.AccountId!=null && (!acctToDate.containsKey(e.AccountId) || acctToDate.get(e.AccountId) < e.activityDate)){ 
       acctToDate.put(e.accountId, e.activityDate); 
     } 
    } 
    if(acctToDate.size()>0){ 
     List<Account> accts = [select id, Last_Meeting_Date__c from Account where id in :acctToDate.keyset()]; 
     List<Account> acctsToUpdate = new List<Account>(); 
     for(Account a : accts){ 
      if(a.Last_Meeting_Date__c==null || a.Last_Meeting_Date__c<acctToDate.get(a.id)){ 
       a.Last_Meeting_Date__c = acctToDate.get(a.id); 
       acctsToUpdate.add(a); 
      } 
     } 
     if(acctsToUpdate.size()>0){ 
      update acctsToUpdate; 
     } 
    } 
} 

私はそれがこのトリガーのコードカバレッジを高めるために要求されます場合は必ずそれを展開しようと、そうではないしませんでした。テストクラスを作成する必要があるかもしれません。

関連する問題