1

特定のユーザーが表示できるレコードを監査する方法を決定しようとしています。

オブジェクトの種類

レコードの種類

レコード数

理想的には、ユーザーが表示できる各オブジェクト/レコード タイプのフィールドも確認できます。

これは、さまざまなユーザーやさまざまな組織で頻繁に繰り返す必要があるため、手動で決定することは避けたいと考えています。

私が最初に考えたのは、パートナーの WSDL を使用してアプリを作成することでしたが、より簡単な方法や既存のソリューションがないかどうかを尋ねたいと思います。

皆さんありがとう

4

2 に答える 2

0

次のようなクエリを使用して、ドキュメントに従って解決できると思います。

SELECT RecordId
     FROM UserRecordAccess
     WHERE UserId = [single ID]
     AND RecordId = [single ID]      //or Record IN [list of IDs]
     AND HasReadAccess = true

次のクエリは、クエリされたユーザーが読み取りアクセス権を持っているレコードを返します。

さらに、制限1を追加し、レコードメタデータからオブジェクトタイプ、レコードタイプなどを取得する必要があります。

于 2012-07-03T22:27:44.783 に答える
0

最終的に、以下 (Partner WSDL を使用した C#) を使用して、ユーザーがどのような種類のオブジェクトを表示できるかを把握しました。

私自身が使用するための簡単なユーティリティです(読み取り - 製品コードではありません)。

var service = new SforceService();

var result = service.login("UserName", "Password");

service.Url = result.serverUrl;
service.SessionHeaderValue = new SessionHeader { sessionId = result.sessionId };

var queryResult = service.describeGlobal();

int total = queryResult.sobjects.Count();

int batcheSize = 100;
var batches = Math.Ceiling(total / (double)batcheSize);


using (var output = new StreamWriter(@"C:\test\sfdcAccess.txt", false))
{

    for (int batch = 0; batch < batches; batch++)
    {
        var toQuery =
            queryResult.sobjects.Skip(batch * batcheSize).Take(batcheSize).Select(x => x.name).ToArray();

        var batchResult = service.describeSObjects(toQuery);

        foreach (var x in batchResult)
        {
            if (!x.queryable)
            {
                Console.WriteLine("{0} is not queryable", x.name);
                continue;
            }

            var test = service.query(string.Format("SELECT Id FROM {0} limit 100", x.name));

            if(test == null || test.records == null)
            {
                Console.WriteLine("{0}:null records", x.name);
                continue;
            }

            foreach (var record in test.records)
            {
                output.WriteLine("{0}\t{1}",x.name, record.Id);
            }

            Console.WriteLine("{0}:\t{1} records(0)", x.name, test.size);
        }
    }
    output.Flush();
}
于 2012-08-01T23:18:26.397 に答える