You need to sign in to do that
Don't have an account?

ログインしているユーザに紐づいているカスタムオブジェクト情報の取得
カスタムオブジェクトとVisualforceページを作成しています。
カスタムオブジェクトの中にはカスタム項目で
Userテーブルから参照する項目があります。
その項目がログインユーザのレコードだけを
Visalforceページに表示させたいと考えています。
String userid = UserInfo.getUserId();
sObject x = [select Id , Name from CustomObject where Field__c = :userid];
自分のユーザーIDを取得して、それをSOQLに
渡せばできると思ったのですが、上手くいきません。
また、whereで指定できる項目には制限があるのでしょうか。
何か上手くできる方法があればご教授頂けると幸いです。
以上、宜しくお願いいたします。
ぱっと見た感じでは、コードの書き方には問題が無いように見えますので、「上手くいかない」症状をもう少しだけ具体的に記載していただけると、原因がわかるかも知れません。
「もしかしたら、原因かもしれない」と思われる点を、挙げておきます。
返信が遅れてしまい申し訳ありません。
以下のようなソースを書いています。
【Visualforceページ】
<apex:pageBlockTable title="自分の保守状況" value="{!customobject1}" var="u">
<apex:column >
<apex:facet name="header">問合せ番号</apex:facet>
<apex:outputLink value="/{!u.id}">{!u.name}
</apex:outputLink>
</apex:column>
</apex:pageBlockTable>
【コントローラー】
public List<CustomObject1__c> getCustomObject1(){
String userid = UserInfo.getUserId();
User[] myuser = [select Id,Name from User where id = :userid];
return [select Id , Name from CustomObject1__c Field2__c = :userid];
}
ちなみにこの状態で保存しようとすると、以下のエラーが出力されます。
「expecting right square bracket,found '='」
ご教授頂けると幸いです。
また、ちょっと話が変わるかも知れませんが、色々なサンプルソースや
ガイドブックをみていると、SOQLの書き方に疑問を感じます。
普通のSQLだと、「select Id, Name from テーブル名」と実行すると
Id と Name の2つの列が出力されると思います。
ただ、SOQLで「User[] myuser = [select Id,Name from User where id = :userid];」
と実行した場合、変数myuserには Id と Name の2つが入っていることになるの
でしょうか?
初心者のような質問で申し訳ありませんが、ご教授頂けると幸いです。
宜しくお願いいたします。
このエラーについては、return文のSOQLに”where”が抜けているだけかと思います。
SOQLのイメージは、その通りです。
上記のSOQLでは、Id項目とName項目のみに値が入っているUserオブジェクトが、検索条件にヒットしたレコードの数だけ配列となり、変数myuserに格納されます。
where句が抜けているとは思ってもいませんでした…。
本当にすいません。
where句を付けて試していたら、今度は以下のような
エラーメッセージが出力されました…。
「Invalid bind expression type of LIST:SOBJECT:User for column of type Id」
Field2__c のデータ型はUserオブジェクトを参照している項目なのですが、
それがいけないのでしょうか?
何回もすいませんが宜しくお願い致します。
ちょっと質問なのですが ↓ のように書き換えたらエラーになったということでしょうか?
String userid = UserInfo.getUserId();
User[] myuser = [select Id,Name from User where id = :userid];
return [select Id , Name from CustomObject1__c Field2__c = :userid];
これだとたぶんエラーは出ないと思うのですが
間違ってたらすいませんがもしかしてこんなのを書いてたりしませんか?
↓ みたいな書き方をすると同じエラーメッセージがでます
Id userid = UserInfo.getUserId();
User[] myuser = [select Id,Name from User where id = :userid];
return [select Id , Name from CustomObject1__c where Field2__c = :myuser];
エラーメッセージはIDの項目に対してListのSobjectでwhere書いているのでエラーになっていますが
ちょうどいい感じに使ってないmyuserがいるのでちょっとそんな気がしました
良い直し方ではありませんが簡単に動くようにするのであれば
追記・修正
WorkBookで同じように現在のユーザーのIDを取得して
SOQLを使って値を取得する方法を見たところStringで受けていました
UserInfo.getUserID()の戻り値もStringになっていますし
IDで受けるよりもStringで受けるのが正しいのかもしれません
①
String userid = UserInfo.getUserId();
String myUserId = [select Id,Name from User where id = :userid].Id;
return [select Id , Name from CustomObject1__c where Field2__c = :myUserId];
② ①を短くしたもの
return [select Id , Name from CustomObject1__c where Field2__c = :UserInfo.getUserId()];
こんな感じでいかがでしょうか?
返信が遅くなりました。
出来ました!!
1点確認したいのですが、データ型をIDにするとありますが
ID型というのは、元々存在するデータ型なのでしょうか?
宜しくお願い致します。
>ID型というのは、元々存在するデータ型なのでしょうか?
元々がどこを指すのかにもよりますが、ID型は定義されています
リファレンスとか見ると載ってますよ
(日本語の説明が書いてる資料もどこかあった気がしますが忘れました)
ご回答ありがとうございました!
また何かありましたら宜しくお願い致します。