function readOnly(count){ }
Starting November 20, the site will be set to read-only. On December 4, 2023,
forum discussions will move to the Trailblazer Community.
+ Start a Discussion
マスターキートン!マスターキートン! 

1対1のリレーション作成について

1対1でリレーション作成は、主従関係または参照関係で設定すると思いますが、
其の場合、1対多のレコードができてしまうかと思います。
1対1に制限するには、どのような方法ができますでしょうか。
トリガーで、1対1以上を登録したときに、エラーを出すという方法は考えられますが、
その場合、データ保存時となるため、データを記載していた場合、無駄になってしまうかと思うので
トリガーでない方法で何かあるでしょうか
 
Best Answer chosen by マスターキートン!
Taiki YoshikawaTaiki Yoshikawa
・既に紐付きがあるかのチェックはトリガが必要になる。
・標準ページはJavaScriptで操作できない(ボタンの非表示、値の自動セットなど)
・値入力前に既に紐付が行われているか確認できるようにしたい場合はチェックボックス項目などを用意して画面に表示する。

こんな感じです。

All Answers

Taiki YoshikawaTaiki Yoshikawa
Apexトリガをつかった対応にはなると思いますが、例えばチェックボックス項目を用意して紐付け時にチェックをつけて確認できるようにする方法があると思います。

あとはVisualforceページを用意して1対1でのみデータを作成できるようにするようなやり方で対応できそうです。
マスターキートン!マスターキートン!
ご回答有り難うございます。

イメージ的には、Salesforceのあるオブジェクトの詳細ページ(標準機能の)から、
そのページの関連リスト欄にある、新規登録ボタンにおいて、
既にレコード、そのオブジェクトのレコードがあればボタンを非活性にできればと思いましたが(javascriptでelement.disabled=true;等)
そういったことコントロールが(crossoriginとなって)できなさそうでした。

仮に埋め込めた場合、そのリンク先のページにはGETで飛べてしまうかと思いますので、
合わせて、そのリンク先ページ自体に、javascriptで既に登録済みですというようなことが必要となり、
こちらについては、visualforceを埋め込みながらjavascriptを埋め込んで非同期でレコードチェックして
あればアラートといったことはできそうですが。



>あとはVisualforceページを用意して1対1でのみデータを作成できるようにするようなやり方で対応できそうです。

VisualforceからSalesforce標準のページ機能をレンダリングすることができるようであれば、
そのページに置き換えるという方法で対応できそうな気が少ししますが、どうなのでしょうか。
Salesforceのページをドラッグアンドドロップで配置できる機能は潰さずに実装したいです。








 
Taiki YoshikawaTaiki Yoshikawa
Salesforceの標準ページはJavaScriptをつかって操作できないようになっています。
次のリンク先のヘルプページに詳細が記載されています。

Visualforceページが異なるドメイン(visual.force.com)から提供される
https://help.salesforce.com/apex/HTViewSolution?id=000175168&language=ja
Taiki YoshikawaTaiki Yoshikawa
こちらも類似の内容について記載されていました。

ホームページコンポーネントのお知らせ、および、カスタムリンクの変更について
https://help.salesforce.com/apex/HTViewSolution?id=000229719&language=ja
マスターキートン!マスターキートン!
早速のご回答いただき、ありがとうございます。
​なるほど。勉強になりました。

簡単に纏めさせていただくと、
Visualforceからjsいれた制御については、クロスドメイン違反になってしまうので、
今回のような場合は、トリガーの実装となる。

間違いあれば、ご指摘いただければ幸いです。




 
Taiki YoshikawaTaiki Yoshikawa
・既に紐付きがあるかのチェックはトリガが必要になる。
・標準ページはJavaScriptで操作できない(ボタンの非表示、値の自動セットなど)
・値入力前に既に紐付が行われているか確認できるようにしたい場合はチェックボックス項目などを用意して画面に表示する。

こんな感じです。
This was selected as the best answer
マスターキートン!マスターキートン!
ご回答有り難うございます。
承知しました。