+ Start a Discussion
kojkoj 

getとDBからのデータ比較について

ご存知の方がいらっしゃいましたら、ご教授お願いします。

visualforceページで{!Account.ID}から取得したIDをgetでApexクラスに渡し、
Apexクラスで取得したDBのIDと比較を行います。


        dID = ApexPages.currentPage().getParameters().get('ID');
        List<Account> resultList = [select id, Name from Account];
        for(Account a : resultList ){
                    if(dID != a.ID ) {
                       //処理①
                    }else{
                       //処理②
                    }
        }

常に処理①を通るような結果になってしまいます。
データでは、dIDとa.IDが同じものがありますので、
処理②を通るケースがあるはずなのですが。

getでデータを渡したとき、もしくは、DBからデータを取得したときに
ゴミが入っているのでしょうか。

ご存知の方がいらっしゃいましたら、お教え下さい。

ikouikou

getで取得したIDは15桁、DBから取得したIDは18桁になっていないでしょうか?

 

System.debug('ID=' + dID);

とかでデバッグを出して確認してみてください。

 

追記補足:

 もしそうだとしたら、18桁IDの前15桁で比較すれば良いと思います。

kojkoj

大変助かります。ありがとうございます。

さっそく確認してみます。

kojkoj

さっそく試みてみなしたが、うまく動作しませんでした。

テキスト関数のMIDの使用方法が悪いのでしょうか?

 

dID = ApexPages.currentPage().getParameters().get('ID');
        List<Account> resultList = [select id, Name from Account];
        for(Account a : resultList ){

      if(dID = MID(a.ID,1,15)){

                      //処理①             

              }else{

                      //処理②

              }

        }

 

pontaponta

substringを使用したらどうでしょうか?

 

 

dID = ApexPages.currentPage().getParameters().get('ID');
        List<Account> resultList = [select id, Name from Account];
        for(Account a : resultList ){
      if(dID = a.ID.substring(0,15)){
                      //処理①             
              }else{
                      //処理②
              }
        }

 

 

kojkoj

substringも試みたのですが、以下のメッセージが出力されます。

Method does not exist or incorrect signature: [Id].substring(Integer, Integer)

 

MIDの場合も、同じようなエラーメッセージが出力されてしまう状況です。

 

pontaponta

idにsubstringは使えないのかな

それなら

String.valueOf(a.id).substring(0,15)

としたらどうでしょうか

kojkoj

よいヒントになりました。ありがとうございます。

無事やりたいことができました。