2017-09-13 5 views
0

私はサンドボックスから取り組んでおり、カスタムオブジェクトMember_Vendor_del__cの下でVendor_Rep__c(Lookup Field)を自動的に更新しようとしています。メンバーベンダーのレコードが作成または編集されたときに、ベンダーの担当者を更新することを希望します。Salesforceの検索フィールドを更新するには、Apexクラスまたはトリガーだけが必要ですか?

私は私が必要とするものを習得する必要がなくなったと考え始めているVisualforceページを作成しました。すでに掲載いくつかの質問、いくつかのApex開発者ガイドの記事を読んで、そしていくつかのチュートリアルビデオを見た後、また

public class contactsearch { 

public List<Contact>searchContact(string ContactType, string MemberState, String VendorID) 
{ 
    return [Select Name From Contact 
      Where Contact_Type__c = 'Vendor Rep' AND States__c = :MemberState AND Contact_Vendor_ID__c = :VendorID limit 1]; 

    } 
} 

:また、いくつかの助けを借りて、私はApexのクラスのために以下のコードを作成した

、私は以下のトリガーを作成しました。 (私も私は必要なものを達成するためにクラスが必要イムわからない)

trigger VendorRepUpdateTrigger on Member_Vendor_del__c (before insert, before update) { 

for (Member_Vendor_del__c u : trigger.new){ 
    if (u.Vendor_Rep__c == null){ 

     u.Vendor_Rep__c = [Select Name 
          From Contact 
          Where Contact_Type__c = 'Vendor Rep' AND States__c = :member_vendor_del__c.Member_State__c AND Contact_Vendor_ID__c = :member_vendor_del__c.Vendor_ID__c limit 1]; 

     } 
    } 
} 

私は私のトリガー

Schema.SObjectFieldの「無効なバインド式タイプでライン6については、以下のエラーメッセージが出続けますString型の列の場合 "

このエラーを受け取り、このトリガーをプロダクションにして100%作業するにはどうすればよいですか?私はApexクラスが必要なのでしょうか?

答えて

0

メンバーベンダーレコードの作成または編集時にベンダー担当者を更新するには、トリガーを使用する必要があります。

この問題を解決するには、コードを変更する必要があります。エラーメッセージの理由は、IDの代わりに参照フィールドを文字列( "名前"フィールド)に更新しようとしているためです。

次の変更を行う場合は、問題が解決されると思います。

trigger VendorRepUpdateTrigger on Member_Vendor_del__c (before insert, before update) { 
    for (Member_Vendor_del__c u : trigger.new){ 
     if (u.Vendor_Rep__c == null){ 

      u.Vendor_Rep__c = [Select Id 
           From Contact 
           Where Contact_Type__c = 'Vendor Rep' AND 
           States__c = :u.Member_State__c AND 
           Contact_Vendor_ID__c = :u.Vendor_ID__c limit 1]; 

      } 
     } 
    } 

しかし、コードは大量にコード化されていません。あなたのコードを大量にするために、forループの外側のSOQLクエリを使用して、forループ内のそのSOQL結果を使用します。

+0

私は名前の代わりにIDの代わりに名前を使用しようとしていると信じていますが、私はそれにショットを付けます。 また、「bulkify」に精通していません。私は間違いなく最後の終了中括弧の直前にSOQLクエリを移動することができます。 forループ内にSOQL結果を追加するために必要なことは何か特別なことはありますか? –

+0

私はあなたのコードに別の変更を加えました、そして、それは実際の問題だと私は信じています。フィールドのバインディングは、SOQLクエリの条件のsObjectを使用して行われます。私は "member_vendor_del__c.Member_State__c"と "member_vendor_del__c.Vendor_ID__c"の代わりに "u.Member_State__c"と "u.Vendor_ID__c"を使用しました。上記のコードを試してみてください投稿 –

+0

提案された変更を行いましたが、 5行目のメッセージ:。 リストからID –

関連する問題