是否可以通过apex代码创建远程站点设置?
设置->新远程->名称-> url->活动->保存 此步骤想使用远程站点创建。
答案 0 :(得分:0)
不是本机的。远程站点设置是系统配置(元数据)的一部分,其中大多数不能通过运行Apex的插入/更新/删除来修改。那很危险。想象一下代码添加了一些恶意站点(将其列入白名单),向其中发送了一些敏感数据,然后删除了设置...
在部署过程中会使用黑客调用Metadata API,Tooling API等东西。例如,您可以设计一个REST标注,以创建RemoteProxy记录(工具API)或RemoteSiteSetting(元数据API)。您可以自己制作XML,也可以查看Andy Fawcett的库中对Metadata API的Apex调用:https://github.com/financialforcedev/apex-mdapi尚未亲自使用过,但我听说不错。
不幸的是,这有点麻烦,要从Apex中调用任一API(甚至是“ self”,也要访问此SF服务器),则需要现有的远程站点设置,或者命名凭证。再次-Andy F.演示了一个利用javascript制作第一个远程站点的黑客。因此它不是100%自动的,但是很好,在您需要的每个沙箱中访问1个类似config的Visualforce页面并不是世界末日...
不确定为什么要标记此xcode。我不是Mac人士,但是如果您在部署过程中使某些东西自动化之后,使用一些脚本快速创建演示组织/沙盒,那么您应该考虑使用SF Ant Migration Tool或SFDX命令。
答案 1 :(得分:0)
是的,非常常用的Metadata Service API可以实现。
可从Salesforce here获得。通过异步(即@future
)方法执行此操作,还可以从Aura或LWC中执行此操作。如果您不包装标注,则会出现以下错误:
"FATAL_ERROR System.CalloutException: Web service callout failed: WebService returned a SOAP Fault: INVALID_SESSION_ID: This session is not valid for use with the API faultcode=sf:INVALID_SESSION_ID faultactor="
下面的代码改编自此blog。
future(callout=true)
public static void createRemoteSite(String fullName, String url) {
//Metadata Service
MetadataService.MetadataPort service = new MetadataService.MetadataPort();
service.SessionHeader = new MetadataService.SessionHeader_element();
service.SessionHeader.sessionId = UserInfo.getSessionId();
//Metadata for remote site settings
MetadataService.RemoteSiteSetting remoteSiteSettings = new MetadataService.RemoteSiteSetting();
remoteSiteSettings.fullName = fullName;
remoteSiteSettings.url = url;
remoteSiteSettings.description = 'Remote site settings created from apex';
remoteSiteSettings.isActive = true;
remoteSiteSettings.disableProtocolSecurity = false;
MetadataService.SaveResult[] results = service.createMetadata(
new List<MetadataService.Metadata>{ remoteSiteSettings }
);
for (MetadataService.SaveResult result : results) {
if (result.success) {
//Success
System.debug(result);
} else {
//Failed
System.debug(result.errors[0].message);
}
}
}
有关无效会话ID here的信息。