2

これは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つの別々のユースケースがあるため、ページに複数の変数を渡します。

ご協力いただきありがとうございます。

4

1 に答える 1

4

001Q000000OognAは、「標準」の15文字のSalesforceIDです。15文字のIDでは大文字と小文字が区別されます。

001Q000000OognAIARは、大文字と小文字を区別しない18文字バージョンのIDです。

どちらでも構いません。違いを気にする必要はありません。何らかの理由でパラメータなどで15文字のバージョンを使用する必要がある場合は、最後の3桁を安全に切り捨てることができます。

詳細はこちら: http: //www.salesforce.com/us/developer/docs/api/Content/field_types.htm

于 2011-07-14T04:38:40.533 に答える