• sasamo
  • NEWBIE
  • 5 Points
  • Member since 2014

  • Chatter
    Feed
  • 0
    Best Answers
  • 0
    Likes Received
  • 0
    Likes Given
  • 0
    Questions
  • 2
    Replies

Hi guys,

 

I have a very strange problem with a custom DateTime field. When I write any date+time value, the date will write correctly but the time portion will always be written at 01:00:00 For example the java Date object contains 2013-09-24T15:53:27.000Z (as confirmed by a trace output statement) then when the field is written to Salesforce it will display as "24/09/2013 01:00". Fields are being written in the usual way:

 

javaDate=new Date();

SimpleDateFormat sdf = new SimpleDateFormat( "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'" );
String strFormattedDate = sdf.format(javaDate);

System.out.println("javaDate="+strFormattedDate);

 

SObject[] records=new SObject[0];

records[0].setType("CustomTable__c");

records[0].setField("DateCreated__c", javaDate);

saveResults = conn.create(records);

 

Any idea why this is happening? Is it something about my custom Date/Time field "DateCreated__c" ???

 

Thanks,

Mark.

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

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の使い方に問題が

あるのでしょうか?

 

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