确定当前用户是否可以通过Partner API访问Salesforce CRM Content功能

时间:2011-03-28 02:49:11

标签: api salesforce

使用Salesforce Partner API(版本21.0)时,如何确定当前用户/会话是否能够创建新的Content Version

使用describeGlobal()我可以确认ContentVersion和ContentDocument可用作当前组织的对象。

使用describeSObject()我可以确认当前用户会话将ContentVersion标记为可创建。 我还确认插入ContentVersion记录时我设置的字段标记为可创建(PathOnClient,VersionData和FirstPublishedLocationId)。

在我的测试用例中,如果用户可以通过Salesforce Web界面访问“内容”区域,则测试用例将通过正在创建的ContentVersion进行传递。

但是,当我尝试使用开发人员版本组织中的相同代码(无法访问“内容”区域)时,会出现以下消息:

  

FIELD_INTEGRITY_EXCEPTION - 用户无权访问Salesforce内容。字段值无效::内容来源

ContentVersion的可创建合作伙伴API元数据和字段表明这应该有效。

我正在使用C#,但是如果没有可创建的元数据检查,配方Publishing Documents Into a Salesforce CRM Content Personal Workspace中的Java代码就会做同样的事情。

为了尝试排除我的代码作为问题的原因,我已经确认可以使用Force.com Explorer创建ContentVersion:

Force.com Explorer showing attributes for ContentVersion

2 个答案:

答案 0 :(得分:2)

Contentforce在Salesforce中有点时髦,因为它们是收购一家名为Koral的公司的一部分,因此他们的一些行为与其他标准Salesforce对象并不完全相同。

  

我已尝试检查ContentDocument.creatable,但即使对于可以创建内容的用户也是如此。

这是因为ContentDocument永远不可创建,它只支持以下方法: delete(),query(),retrieve(),undelete(),describeSObjects()

要创建ContentDocument,您需要在不设置ContentDocumentId的情况下创建新的ContentVersion对象。

来自Web Services API Developer's Guide

  

这会自动创建父级   文件记录。添加新内容时   你必须的文件版本   指定现有的ContentDocumentId   它启动修订过程   为文件。什么时候最新的   版本发布,标题,   所有者,并发布状态字段   在文件中更新。

检查ContentVersion.creatable应该有效。

答案 1 :(得分:2)

我想我已经明白了。检查ContentVersion是否仅可创建是不够的。

我还需要检查当前用户(由getUserInfo()指示)是否具有UserPermissionsSFContentUser字段并且它是真的。

来自Web Services API Developer's Guide for User.UserPermissionsSFContentUser

  

指示是否为用户分配了一个Salesforce CRM内容用户许可证(true)或未分配(false)。标签是Salesforce CRM用户。 Salesforce CRM Content User许可授予用户对Salesforce CRM Content应用程序的访问权限。