有没有办法通过apex代码创建远程站点设置?setup->new remote->name->url->active->保存使用远程站点创建所需的这些步骤。
sulc1iza1#
不是天生的。远程站点设置是系统配置(元数据)的一部分,其中大部分不能通过从Apex运行插入/更新/删除来修改。那太危险了想象一下,添加一些恶意站点(将其列入白名单),发送一些敏感数据,然后删除设置的代码...在部署过程中调用Metadata API、Tooling API等都有一些技巧。例如,您可以创建一个创建RemoteProxy记录(工具API)或RemoteSiteSetting(元数据API)的REST callout。您可以自己制作XML,或者查看Andy福塞特的库,以获取对Metadata API的Apex调用:https://github.com/financialforcedev/apex-mdapi没有亲自使用它,但我听说好东西。可悲的是,这是一种鸡和蛋的情况--要从Apex调用任何一个API(甚至调用“self”,调用你已经在使用的SF服务器)--你需要一个现有的远程站点设置或命名凭据。再次-安迪F。演示了一个从JavaScript创建第一个远程站点的方法。所以这不是100%自动的,但是,在你需要的每个沙箱中访问1个配置类Visualforce页面并不是世界末日。
我不知道你为什么要写xcode。我不是一个Mac的人,但如果你在部署过程中自动化的东西,快速创建演示组织/沙箱与一些脚本,那么也许你应该看看SF蚂蚁迁移工具或SFDX命令。
8e2ybdfx2#
是的,可以使用元数据服务API,这是非常常用的。它可以从Salesforce here获得。在async(即@future)方法中这样做允许您从Aura或LWC中这样做。如果没有在标注中换行,则会出现以下错误:
@future
"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的信息。
2ul0zpep3#
下面是一个通过元数据API创建远程站点设置的脚本,无需MetadataService。
createRemoteSiteSetting(new Map<String, String>{ 'fullName' => 'TEST', // remote site setting name 'description' => '', // description 'url' => 'https://domain.invalid' // remote site URL }); /* SCRIPT */ final static String API_VERSION = '58'; public void createRemoteSiteSetting(Map<String, String> settingMap) { String endpoint = Url.getOrgDomainUrl().toExternalForm() + '/services/Soap/m/' + API_VERSION + '/'; HttpRequest req = new HttpRequest(); req.setEndpoint(endpoint); req.setMethod('POST'); req.setHeader('SOAPAction', 'create'); req.setHeader('Content-Type', 'text/xml'); String body = generateEnvelope(settingMap); System.debug(body); req.setBody(body); HttpResponse response = new Http().send(req); System.debug('response status code: ' + response.getStatusCode()); System.debug('response: ' + response.getBody()); } public String generateEnvelope(Map<String, String> settingMap) { return '<?xml version="1.0" encoding="UTF-8"?>\n' + '<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:apex="http://soap.sforce.com/2006/08/apex" xmlns:cmd="http://soap.sforce.com/2006/04/metadata" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">\n' + ' <soapenv:Header>\n' + ' <cmd:SessionHeader>\n' + ' <cmd:sessionId>' + UserInfo.getSessionId() + '</cmd:sessionId>\n' + ' </cmd:SessionHeader>\n' + ' </soapenv:Header>\n' + ' <soapenv:Body>\n' + ' <create xmlns="http://soap.sforce.com/2006/04/metadata">\n' + ' <metadata xsi:type="RemoteSiteSetting">\n' + ' <fullName>' + settingMap.get('fullName') + '</fullName>\n' + ' <description>' + settingMap.get('description') + '</description>\n' + ' <disableProtocolSecurity>false</disableProtocolSecurity>\n' + ' <isActive>true</isActive>\n' + ' <url>' + settingMap.get('url') + '</url>\n' + ' </metadata>\n' + ' </create>\n' + ' </soapenv:Body>\n' + '</soapenv:Envelope>'; }
字符串
3条答案
按热度按时间sulc1iza1#
不是天生的。远程站点设置是系统配置(元数据)的一部分,其中大部分不能通过从Apex运行插入/更新/删除来修改。那太危险了想象一下,添加一些恶意站点(将其列入白名单),发送一些敏感数据,然后删除设置的代码...
在部署过程中调用Metadata API、Tooling API等都有一些技巧。例如,您可以创建一个创建RemoteProxy记录(工具API)或RemoteSiteSetting(元数据API)的REST callout。您可以自己制作XML,或者查看Andy福塞特的库,以获取对Metadata API的Apex调用:https://github.com/financialforcedev/apex-mdapi没有亲自使用它,但我听说好东西。
可悲的是,这是一种鸡和蛋的情况--要从Apex调用任何一个API(甚至调用“self”,调用你已经在使用的SF服务器)--你需要一个现有的远程站点设置或命名凭据。再次-安迪F。演示了一个从JavaScript创建第一个远程站点的方法。所以这不是100%自动的,但是,在你需要的每个沙箱中访问1个配置类Visualforce页面并不是世界末日。
我不知道你为什么要写xcode。我不是一个Mac的人,但如果你在部署过程中自动化的东西,快速创建演示组织/沙箱与一些脚本,那么也许你应该看看SF蚂蚁迁移工具或SFDX命令。
8e2ybdfx2#
是的,可以使用元数据服务API,这是非常常用的。它可以从Salesforce here获得。在async(即
@future
)方法中这样做允许您从Aura或LWC中这样做。如果没有在标注中换行,则会出现以下错误:字符串
下面的代码改编自这个blog。
型
有关无效会话ID here的信息。
2ul0zpep3#
下面是一个通过元数据API创建远程站点设置的脚本,无需MetadataService。
字符串