You need to sign in to do that
Don't have an account?
マスターキートン!
1対1のリレーション作成について
1対1でリレーション作成は、主従関係または参照関係で設定すると思いますが、
其の場合、1対多のレコードができてしまうかと思います。
1対1に制限するには、どのような方法ができますでしょうか。
トリガーで、1対1以上を登録したときに、エラーを出すという方法は考えられますが、
その場合、データ保存時となるため、データを記載していた場合、無駄になってしまうかと思うので
トリガーでない方法で何かあるでしょうか
其の場合、1対多のレコードができてしまうかと思います。
1対1に制限するには、どのような方法ができますでしょうか。
トリガーで、1対1以上を登録したときに、エラーを出すという方法は考えられますが、
その場合、データ保存時となるため、データを記載していた場合、無駄になってしまうかと思うので
トリガーでない方法で何かあるでしょうか
・標準ページはJavaScriptで操作できない(ボタンの非表示、値の自動セットなど)
・値入力前に既に紐付が行われているか確認できるようにしたい場合はチェックボックス項目などを用意して画面に表示する。
こんな感じです。
All Answers
あとはVisualforceページを用意して1対1でのみデータを作成できるようにするようなやり方で対応できそうです。
イメージ的には、Salesforceのあるオブジェクトの詳細ページ(標準機能の)から、
そのページの関連リスト欄にある、新規登録ボタンにおいて、
既にレコード、そのオブジェクトのレコードがあればボタンを非活性にできればと思いましたが(javascriptでelement.disabled=true;等)
そういったことコントロールが(crossoriginとなって)できなさそうでした。
仮に埋め込めた場合、そのリンク先のページにはGETで飛べてしまうかと思いますので、
合わせて、そのリンク先ページ自体に、javascriptで既に登録済みですというようなことが必要となり、
こちらについては、visualforceを埋め込みながらjavascriptを埋め込んで非同期でレコードチェックして
あればアラートといったことはできそうですが。
>あとはVisualforceページを用意して1対1でのみデータを作成できるようにするようなやり方で対応できそうです。
VisualforceからSalesforce標準のページ機能をレンダリングすることができるようであれば、
そのページに置き換えるという方法で対応できそうな気が少ししますが、どうなのでしょうか。
Salesforceのページをドラッグアンドドロップで配置できる機能は潰さずに実装したいです。
次のリンク先のヘルプページに詳細が記載されています。
Visualforceページが異なるドメイン(visual.force.com)から提供される
https://help.salesforce.com/apex/HTViewSolution?id=000175168&language=ja
ホームページコンポーネントのお知らせ、および、カスタムリンクの変更について
https://help.salesforce.com/apex/HTViewSolution?id=000229719&language=ja
なるほど。勉強になりました。
簡単に纏めさせていただくと、
Visualforceからjsいれた制御については、クロスドメイン違反になってしまうので、
今回のような場合は、トリガーの実装となる。
間違いあれば、ご指摘いただければ幸いです。
・標準ページはJavaScriptで操作できない(ボタンの非表示、値の自動セットなど)
・値入力前に既に紐付が行われているか確認できるようにしたい場合はチェックボックス項目などを用意して画面に表示する。
こんな感じです。
承知しました。