これはAPEXコード関連の質問であり、VisualForceコントローラークラスに固有です。
質問
既知のAccountIdでレコードを更新しようとしています。ただし、sObject宣言でIDを設定すると、SalesForceはIDの末尾に文字列「IAR」を追加します。
誰かが私が間違っていることを教えてくれませんか。これを間違った方法で行っている場合は、quicksave()またはupdate()以外のカスタムメソッドからレコードを更新する正しい方法を教えてください。
説明
基本的に、ユーザーはIDがエンコードされた状態でこのページにアクセスし、IDまたはレベルのいずれかを持ちます。これは、文字列を受け取る関数decode()によって処理されます。「id」/「level」。次に、アカウント変数「acc」を作成します。この変数は、「insert acc;」というステートメントで挿入または更新する前に、すべてのアカウント情報を格納するために使用されます。「acc.id=salesForceID」では「acc」のIDを設定できないため、「acc」の作成時に設定することにしました。次のAPEXコードは、コンストラクターが「acc」変数を宣言しているときに発生します。
渡されたURL変数
/application?id = 001Q000000OognA
APEXコントローラクラス(要約)
salesForceID = decode('id');
debug1 = 'salesForceID: ' + salesForceID;
acc = new Account(id = salesForceID);
debug2 = 'Account ID: ' + acc.id;
デバッグ出力
salesForceID:001Q000000OognA
アカウントID:001Q000000OognAIAR
コメント
与えられたコードの簡潔さをお詫びします。これはセキュリティ上の理由によるものです。基本的に、accを挿入/アップサート/更新する前に、accのIDを設定しようとしています。「IAR」を追加する理由や、入力されたAccountIdを指定してレコードを更新する別の方法についての説明に感謝します。IDをURL変数として渡すと、SalesForceが自動的にこれを行うことを理解しています。ただし、3つの別々のユースケースがあるため、ページに複数の変数を渡します。
ご協力いただきありがとうございます。