用于卸载非受管软件包的 Apex 脚本抛出 INSUFFICIENT_ACCESS:访问权限不足错误
Apex script to uninstall an unmanaged package throws INSUFFICIENT_ACCESS: insufficient access rights error
我正在尝试在 apex 中编写一个简单的脚本来处理非托管包的卸载。
代码如下
public static void uninstallPackage() {
String[] fullNames = new String[1];
fullNames[0] = 'SomePackage';
System.debug('fullNames -->'+fullNames);
MetadataService.DeleteResult[] result = createService().deleteMetadata('InstalledPackage',fullNames);
}
private static MetadataService.MetadataPort createService() {
MetadataService.MetadataPort service = new MetadataService.MetadataPort();
service.SessionHeader = new MetadataService.SessionHeader_element();
service.SessionHeader.sessionId = UserInfo.getSessionId();
return service;
}
当我 运行 这个脚本时,我得到以下错误
'INSUFFICIENT_ACCESS:对交叉引用 ID faultcode=sf:INSUFFICIENT_ACCESS faultactor='[=12 的访问权限不足=]
我尝试搜索所有可能的解决方案,但都指出要在正在处理的配置文件上启用修改所有权限这个脚本,是的,我正在使用系统管理员配置文件 运行 这个脚本并且权限已启用。
我尝试使用连接的应用程序来获取会话 ID,但同样未能解决问题。
有人可以帮我解决这个问题吗?
进一步研究发现上述脚本不适用于非托管包。
使用上述脚本,我们能够卸载受管软件包。
我们应该将包的命名空间作为名称参数
由于非托管包没有命名空间,我们将无法卸载非托管包。
我正在尝试在 apex 中编写一个简单的脚本来处理非托管包的卸载。 代码如下
public static void uninstallPackage() {
String[] fullNames = new String[1];
fullNames[0] = 'SomePackage';
System.debug('fullNames -->'+fullNames);
MetadataService.DeleteResult[] result = createService().deleteMetadata('InstalledPackage',fullNames);
}
private static MetadataService.MetadataPort createService() {
MetadataService.MetadataPort service = new MetadataService.MetadataPort();
service.SessionHeader = new MetadataService.SessionHeader_element();
service.SessionHeader.sessionId = UserInfo.getSessionId();
return service;
}
当我 运行 这个脚本时,我得到以下错误 'INSUFFICIENT_ACCESS:对交叉引用 ID faultcode=sf:INSUFFICIENT_ACCESS faultactor='[=12 的访问权限不足=]
我尝试搜索所有可能的解决方案,但都指出要在正在处理的配置文件上启用修改所有权限这个脚本,是的,我正在使用系统管理员配置文件 运行 这个脚本并且权限已启用。
我尝试使用连接的应用程序来获取会话 ID,但同样未能解决问题。
有人可以帮我解决这个问题吗?
进一步研究发现上述脚本不适用于非托管包。 使用上述脚本,我们能够卸载受管软件包。 我们应该将包的命名空间作为名称参数 由于非托管包没有命名空间,我们将无法卸载非托管包。