• citydiver
  • NEWBIE
  • 0 Points
  • Member since 2012

  • Chatter
    Feed
  • 0
    Best Answers
  • 0
    Likes Received
  • 0
    Likes Given
  • 7
    Questions
  • 9
    Replies

主従関係のデータ取得についてお尋ねします。

 

SOQLではカスタムオブジェクトであっても、「子オブジェクトから親オブジェクトへのリレーション」と「親オブジェクトから子オブジェクトへのリレーション」が可能だと理解しています。

そこで、Force.com SOQL and SOSL Reference (http://www.salesforce.com/us/developer/docs/soql_sosl/Content/sforce_api_calls_soql_select_examples.htm)のRelationship query: child-to parent with custom objectsの項目に記載されている例文を試してみたのですが、エラーになってます。子オブジェクトから親オブジェクトに遡ってデータを取得することはできないのでしょうか?

 

該当のSOQL:

SELECT Id, FirstName__c, Mother_of_Child__r.FirstName__c FROM Daughter__c WHERE Mother_of_Child__r.LastName__c LIKE 'C%'

お世話になっております。

Select for update を使用して行ロックをしたいと思い、その際のテストコードの書き方に苦慮しております。

 

ネットを検索したところ、http://www.tgerm.com/2011/04/visualizing-record-locking-in-soql-ie.html に良さそうなサンプルがあり、試してみたのですが結果は予想と異なるものでした。

以下、テストしたコードです。

 

public class TestRecordLocking {

 

  testmethod public static void testLocking() {
    Account accoutU1 = new Account(Name = 'Abhinav Gupta');
    insert accoutU1;
    accoutU1 = [Select Id, Name, Website from Account where Id =:accoutU1.id for update];
    accoutU1.website = 'www.salesforce.com';

    User u2 = [Select Id from user where id !=:UserInfo.getUserId() limit 1];
    System.runAs(u2) {
      Account accountU2 = [Select Id, Name, Website from Account where Id =:accoutU1.id ];  
      accountU2.WebSite = 'www.yahoo.com';
      update accountU2;
      system.debug('####accountU2####'+accountU2.WebSite);     //#1
    }
    update accoutU1;
    system.debug('####accountU1####'+accoutU1.website);          //#2
  }


  testmethod public static void testLocking2() {

    Account accoutU1 = new Account(Name = 'Abhinav Gupta');
    insert accoutU1;
    accoutU1 = [Select Id, Name, Website from Account where Id =:accoutU1.id for update];
    accoutU1.website = 'www.salesforce.com';

    User u2 = [Select Id from user where id !=:UserInfo.getUserId() limit 1];
    System.runAs(u2) {
      Account accountU2 = [Select Id, Name, Website from Account where Id =:accoutU1.id ];
      delete accountU2;      //#3
    }
    update accoutU1;         //#4
  }
}

 

testLocking()では、行ロックをかけたレコードに、runAs()で別のユーザーとしてアップデートをかけています。

私は、アップデート時に例外が発生すると思ったのですが、普通にアップデートがかかり(#1)、その後元の

ユーザーで上書きアップデート(#2)されています。

 

また、testLocking2()では、別のユーザーでdeleteさせてみたのですが、これも#3の部分でレコードが削除され、

#4で例外が発生します。

 

これは、Select for update が効いていないということなのでしょうか?あるいはrunAsの使い方に問題が

あるのでしょうか?

 

どうか、ご教授願います。宜しくお願いします。

カスタム設定に、性別コードを登録して使用しています。

入力時にはオプションボタンを使用し、

画面に表示する際には、getInstanceを使い、コードを名称に変換しています。

 

以下のコードで、lstオブジェクトのGender__c項目のを拾って、

カスタム設定CSGender__cのDispName__cの値を取得しているのですが、

テストメソッドからこのメソッドを呼び出したときにCSGender__cがnullでエラーになります。

 

public string getGenderName(){

         string gn;

         if(lst.Gender__c==null){

             gn='' ;

         }else{

             gn=CSGender__c.getInstance(lst.Gender__c).DispName__c;

         }

         return gn;

 }

 

画面を読み込む際には正しくDispName__cの値を表示しており、間違いなく動作していると

思うのですが、なぜテストでエラーになるのかわかりません。

試しに

  CSGender__c.getInstance(’1’).DispName__c

のように、lst.Gender__cの部分を固定値で試しても取得できませんでした。

 

どうか、ご教授宜しくお願いします。

お世話になります。

 

下記の情報をもとに、selectoptionsの値をカスタム設定に定義して使用してみたのですが、

selectoptionsの値がうまく整列させることができません。

カスタム設定の値は、ソートすることはできないのでしょうか?

あるいはコントローラ側でソートしてから追加しなければならないのでしょうか?

 

宜しくご教授お願いします。

 

Jeff Douglas Technology, Coding and Bears… OH MY! Using List Custom Settings in Salesforce.com

http://blog.jeffdouglas.com/2010/01/07/using-list-custom-settings-in-salesforce-com/

お尋ねします。

カスタムオブジェクトのページレイアウトの項目で、表示専用の項目を作ろうとしています。

項目のプロパティで「参照のみ」にチェックを入れてレイアウトを保存しても、表示専用にならず、

編集も保存もできてしまいます。他にどこか設定が必要なのでしょうか?

よろしくご教授下さい。

主従関係のオブジェクトで、子オブジェクトにデータが追加された際に動作するトリガを作成中です。

現在テスト用のクラスを作成しているのですが、子オブジェクトへのレコードの追加でつまづいています。

 

親オブジェクトをParent__c、子オブジェクトをChild__cとするとして、 こんな感じに書いてみたのですが、

リレーションの項目(ParentName__c)に 書き込めず、エラーとなりました。

 

ParentNm=[select Name from Parent__c where ParentItem__c = 'parentitem1'][0].Name;

 

Child__c[] child = new Child__c[] {

  new K_Outai__c(ParentName__c = ParentName, ChildItem__c = 'childitem1')

  new K_Outai__c(ParentName__c = ParentName, ChildItem__c = 'childitem2')

};

insert child;

 

参照項目なので書き込めないのは理解できるのですが、レコードを追加する手段がどうにもわかりません。

ご教授のほど、宜しくお願いします。

VisualForce にてコマンドリンクを使用して別ウインドウを表示しています。

 <apex:commandLink onclick="window.open('(URL)', 'WindowName')">Link</apex:commandLink>

このウインドウにパラメータを渡したいのですが、いろいろ調べてみてもやり方がよくわかりません。

 

コントローラを用いてこのようなやり方も試しましたが、これだと確かにパラメータは渡せるのですが、

別のタブが開いてしまい、別のウインドウにはならないようです。

<apex:commandLink action="{!NewPage}" target="_blank" >Link</apex:commandLink><br/>

public PageReference NewPage() {

  return Page.TargetPage;    

}

 

狙いとしては、標準オブジェクトのルックアップウインドウのようななものを作れて、それにパラメータを

渡せれば良いのですが、良い方法がありましたら教えてください。宜しくお願いします。

主従関係のデータ取得についてお尋ねします。

 

SOQLではカスタムオブジェクトであっても、「子オブジェクトから親オブジェクトへのリレーション」と「親オブジェクトから子オブジェクトへのリレーション」が可能だと理解しています。

そこで、Force.com SOQL and SOSL Reference (http://www.salesforce.com/us/developer/docs/soql_sosl/Content/sforce_api_calls_soql_select_examples.htm)のRelationship query: child-to parent with custom objectsの項目に記載されている例文を試してみたのですが、エラーになってます。子オブジェクトから親オブジェクトに遡ってデータを取得することはできないのでしょうか?

 

該当のSOQL:

SELECT Id, FirstName__c, Mother_of_Child__r.FirstName__c FROM Daughter__c WHERE Mother_of_Child__r.LastName__c LIKE 'C%'

お世話になっております。

Select for update を使用して行ロックをしたいと思い、その際のテストコードの書き方に苦慮しております。

 

ネットを検索したところ、http://www.tgerm.com/2011/04/visualizing-record-locking-in-soql-ie.html に良さそうなサンプルがあり、試してみたのですが結果は予想と異なるものでした。

以下、テストしたコードです。

 

public class TestRecordLocking {

 

  testmethod public static void testLocking() {
    Account accoutU1 = new Account(Name = 'Abhinav Gupta');
    insert accoutU1;
    accoutU1 = [Select Id, Name, Website from Account where Id =:accoutU1.id for update];
    accoutU1.website = 'www.salesforce.com';

    User u2 = [Select Id from user where id !=:UserInfo.getUserId() limit 1];
    System.runAs(u2) {
      Account accountU2 = [Select Id, Name, Website from Account where Id =:accoutU1.id ];  
      accountU2.WebSite = 'www.yahoo.com';
      update accountU2;
      system.debug('####accountU2####'+accountU2.WebSite);     //#1
    }
    update accoutU1;
    system.debug('####accountU1####'+accoutU1.website);          //#2
  }


  testmethod public static void testLocking2() {

    Account accoutU1 = new Account(Name = 'Abhinav Gupta');
    insert accoutU1;
    accoutU1 = [Select Id, Name, Website from Account where Id =:accoutU1.id for update];
    accoutU1.website = 'www.salesforce.com';

    User u2 = [Select Id from user where id !=:UserInfo.getUserId() limit 1];
    System.runAs(u2) {
      Account accountU2 = [Select Id, Name, Website from Account where Id =:accoutU1.id ];
      delete accountU2;      //#3
    }
    update accoutU1;         //#4
  }
}

 

testLocking()では、行ロックをかけたレコードに、runAs()で別のユーザーとしてアップデートをかけています。

私は、アップデート時に例外が発生すると思ったのですが、普通にアップデートがかかり(#1)、その後元の

ユーザーで上書きアップデート(#2)されています。

 

また、testLocking2()では、別のユーザーでdeleteさせてみたのですが、これも#3の部分でレコードが削除され、

#4で例外が発生します。

 

これは、Select for update が効いていないということなのでしょうか?あるいはrunAsの使い方に問題が

あるのでしょうか?

 

どうか、ご教授願います。宜しくお願いします。

カスタム設定に、性別コードを登録して使用しています。

入力時にはオプションボタンを使用し、

画面に表示する際には、getInstanceを使い、コードを名称に変換しています。

 

以下のコードで、lstオブジェクトのGender__c項目のを拾って、

カスタム設定CSGender__cのDispName__cの値を取得しているのですが、

テストメソッドからこのメソッドを呼び出したときにCSGender__cがnullでエラーになります。

 

public string getGenderName(){

         string gn;

         if(lst.Gender__c==null){

             gn='' ;

         }else{

             gn=CSGender__c.getInstance(lst.Gender__c).DispName__c;

         }

         return gn;

 }

 

画面を読み込む際には正しくDispName__cの値を表示しており、間違いなく動作していると

思うのですが、なぜテストでエラーになるのかわかりません。

試しに

  CSGender__c.getInstance(’1’).DispName__c

のように、lst.Gender__cの部分を固定値で試しても取得できませんでした。

 

どうか、ご教授宜しくお願いします。

お世話になります。

 

下記の情報をもとに、selectoptionsの値をカスタム設定に定義して使用してみたのですが、

selectoptionsの値がうまく整列させることができません。

カスタム設定の値は、ソートすることはできないのでしょうか?

あるいはコントローラ側でソートしてから追加しなければならないのでしょうか?

 

宜しくご教授お願いします。

 

Jeff Douglas Technology, Coding and Bears… OH MY! Using List Custom Settings in Salesforce.com

http://blog.jeffdouglas.com/2010/01/07/using-list-custom-settings-in-salesforce-com/

お尋ねします。

カスタムオブジェクトのページレイアウトの項目で、表示専用の項目を作ろうとしています。

項目のプロパティで「参照のみ」にチェックを入れてレイアウトを保存しても、表示専用にならず、

編集も保存もできてしまいます。他にどこか設定が必要なのでしょうか?

よろしくご教授下さい。

主従関係のオブジェクトで、子オブジェクトにデータが追加された際に動作するトリガを作成中です。

現在テスト用のクラスを作成しているのですが、子オブジェクトへのレコードの追加でつまづいています。

 

親オブジェクトをParent__c、子オブジェクトをChild__cとするとして、 こんな感じに書いてみたのですが、

リレーションの項目(ParentName__c)に 書き込めず、エラーとなりました。

 

ParentNm=[select Name from Parent__c where ParentItem__c = 'parentitem1'][0].Name;

 

Child__c[] child = new Child__c[] {

  new K_Outai__c(ParentName__c = ParentName, ChildItem__c = 'childitem1')

  new K_Outai__c(ParentName__c = ParentName, ChildItem__c = 'childitem2')

};

insert child;

 

参照項目なので書き込めないのは理解できるのですが、レコードを追加する手段がどうにもわかりません。

ご教授のほど、宜しくお願いします。

VisualForce にてコマンドリンクを使用して別ウインドウを表示しています。

 <apex:commandLink onclick="window.open('(URL)', 'WindowName')">Link</apex:commandLink>

このウインドウにパラメータを渡したいのですが、いろいろ調べてみてもやり方がよくわかりません。

 

コントローラを用いてこのようなやり方も試しましたが、これだと確かにパラメータは渡せるのですが、

別のタブが開いてしまい、別のウインドウにはならないようです。

<apex:commandLink action="{!NewPage}" target="_blank" >Link</apex:commandLink><br/>

public PageReference NewPage() {

  return Page.TargetPage;    

}

 

狙いとしては、標準オブジェクトのルックアップウインドウのようななものを作れて、それにパラメータを

渡せれば良いのですが、良い方法がありましたら教えてください。宜しくお願いします。