刚刚从一个坑里爬出来。记录分享一下。
需求:
Salesforce环境下,以访客身份访问Site,填写表单,并上传文件。
文件需保存为ContentVersion, 关联到一个custom object记录下面。
坑:访客身份创建ContentVersion之后,再去查询ContentVersion的ContentDocumentId时就杯具了,怎么也查询不到(和访客身份的权限有关,也和代码有关)。那么接下来创建ContentDocumentLink就无法进行了。
具体代码 Sample code:
ContentVersion cv = new ContentVersion ();
// See the "SOAP API Developer Guide" for fields meanings
cv.Description = 'xxxx';
cv.ContentLocation = 'S';
cv.PathOnClient = 'xxxxx';
cv.Origin = 'H';
cv.Title = 'xxxxx';
cv.VersionData = fileBody;
// Save the cv
insert cv;
// 杯具发生的地方,下面这个查询总是返回 0 row
cv = [SELECT Id, ContentDocumentId FROM ContentVersion WHERE Id =: cv.Id];
// 试图创建ContentDocumentLink关联到另一个记录上
ContentDocumentLink cl = new ContentDocumentLink(
LinkedEntityId = someRecord.Id,
ContentDocumentId = cv.ContentDocumentId ,
ShareType = 'I'
);
insert cl;
解决过程中尝试了without sharing等方法无果。网上搜了一下终于找到答案。
cv.Origin = 'H'; 这个地方修改成: cv.Origin = 'C';
具体含义请查看"SOAP API Developer Guide"关于ContentVersion的字段介绍。
问题解决!