Site Guest User access to ContentVersion

在Salesforce环境中,解决访客身份上传文件至ContentVersion并成功关联至自定义对象记录的问题。通过调整代码中ContentVersion的Origin属性,确保ContentDocumentId可被正确查询。

刚刚从一个坑里爬出来。记录分享一下。

需求:

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的字段介绍。

问题解决!

 

### USER_SITE的含义 `USER_SITE` 代表用户级别的Python包安装目录,是用户在使用 `pip install --user` 命令安装Python包时,包会被安装到的具体路径。在不同操作系统上,其默认值有所不同。例如,在Linux和macOS上,通常是用户主目录下的 `.local/lib/pythonX.Y/site-packages` 目录;在Windows上,通常是用户主目录下的 `AppData\Roaming\Python\PythonX.Y\site-packages` 目录,其中 `X.Y` 代表Python的版本号。通过命令 `python -m site` 可以查看 `USER_SITE` 的具体值,示例如下: ```plaintext ▶ [~]$ python -m site sys.path = [ '/home/wangji', '/usr/lib/python310.zip', '/usr/lib/python3.10', '/usr/lib/python3.10/lib-dynload', '/home/wangji/.local/lib/python3.10/site-packages', '/usr/local/lib/python3.10/dist-packages', '/usr/lib/python3/dist-packages', ] USER_BASE: '/home/wangji/.local' (exists) USER_SITE: '/home/wangji/.local/lib/python3.10/site-packages' (exists) ENABLE_USER_SITE: True ▶ [~]$ ``` ### USER_SITE的作用 `USER_SITE` 提供了一种在用户级别安装和管理Python包的方式,无需管理员权限。这在共享环境或不想影响系统全局Python环境的情况下非常有用,用户可以在自己的用户目录下管理这些包,避免与系统级别的包产生冲突。 ### USER_SITE与sys.path的关系 `sys.path` 是Python解释器在导入模块时会搜索的路径列表。`USER_SITE` 通常会包含在 `sys.path` 中,当 `ENABLE_USER_SITE` 为 `True` 时,Python解释器会将 `USER_SITE` 路径添加到 `sys.path` 中,这样在导入模块时就会搜索该路径下的包。例如,上述示例中 `/home/wangji/.local/lib/python3.10/site-packages` 既是 `USER_SITE` 的值,也在 `sys.path` 列表中。 ### USER_SITEUSER_BASE的关系 `USER_BASE` 是用户级别的安装基础目录,`USER_SITE` 是基于 `USER_BASE` 构建的具体包安装目录。通常 `USER_SITE` 是 `USER_BASE` 下的一个子目录,例如 `USER_BASE` 为 `/home/wangji/.local`,`USER_SITE` 为 `/home/wangji/.local/lib/python3.10/site-packages` [^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值