审核给定用户在SalesForce.com中可以看到的记录

时间:2012-07-03 18:10:05

标签: salesforce soql salesforce-service-cloud

我正在尝试确定一种方法来审核给定用户可以看到哪些记录;

  

对象类型

     

记录类型

     

记录数

理想情况下,还可以查看用户可以看到的每个对象/记录类型的字段。

我们需要经常对不同的用户和不同的组织重复这一点,所以我们希望避免手动确定这一点。

我的第一个想法是使用合作伙伴WSDL创建一个应用程序,但是想问一下是否有更简单的方法或现有的解决方案。

全部谢谢

2 个答案:

答案 0 :(得分:0)

我认为您可以使用documentation来解决它,使用类似于此的查询:

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

以下查询返回查询用户拥有的记录   读访问权。

此外,您应该添加限制1并从记录元数据中获取对象类型,记录类型等。

答案 1 :(得分: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();
}