使用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:
答案 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应用程序的访问权限。