Salesforce 如何解决将recordType设置为lookupfield值时出现“System.Callout异常:IO异常:读取超时”错误的MetadataAPI

Salesforce 如何解决将recordType设置为lookupfield值时出现“System.Callout异常:IO异常:读取超时”错误的MetadataAPI,salesforce,metadata,apex,picklist,sfdc-metadata-api,Salesforce,Metadata,Apex,Picklist,Sfdc Metadata Api,我正在使用元数据API在字段中添加选取列表值“自定义”。我创建了一个记录类型AAM_T,它必须与我添加到选取列表中的值相关联,但与运行时一样: service.updateMetadata新MetadataService.Metadata[]{recordType}; 导致错误“System.Callout异常:IO异常:读取超时” MetadataService.PickListValue objPickListValue = new MetadataService.PickListValue

我正在使用元数据API在字段中添加选取列表值“自定义”。我创建了一个记录类型AAM_T,它必须与我添加到选取列表中的值相关联,但与运行时一样: service.updateMetadata新MetadataService.Metadata[]{recordType}; 导致错误“System.Callout异常:IO异常:读取超时”

MetadataService.PickListValue objPickListValue = new MetadataService.PickListValue();
objPickListValue.fullName = 'custom';
objPickListValue.default_x = false;

MetadataService.RecordType recordType = (MetadataService.RecordType) 
                                        service.readMetadata('RecordType',
                                        new String[] { 'Account.AAM_T'}).getRecords()[0];

MetadataService.RecordTypePicklistValue[] recordPickListType =  recordType.picklistValues;

if(recordPickListType.size() > 0){
   for(MetadataService.RecordTypePicklistValue rpk : recordPickListType) {
       if(rpk.picklist == picklistToUpdate){
            rpk.values.add(objPickListValue);
            break;
       }
    }

    try{
         service.updateMetadata( new MetadataService.Metadata[] { recordType });
       } catch(Exception ex){
          system.debug('@@@getStackTraceString : '+ex.getStackTraceString());
          //Result: System.CalloutException: IO Exception: Read timed out -- null
          system.debug('@@@getMessage : '+ex.getTypeName() 
                       + ': ' + ex.getMessage() + ' -- ' + ex.getCause());

        }

  }

您可以像其他任何Web服务一样尝试此功能。对我工作

MetadataService.MetadataPort服务=新建MetadataService.MetadataPort


服务超时×=120000

例如,如果部署必须运行单元测试或触发复杂的共享更改,则超时是可以的。1您是否已在组织中验证其正常/失败?在安装->部署状态?2您知道您应该获取部署的id,然后您可以继续轮询结果,继续询问checkDeployStatus。如果我没有错,部署状态与基于文件的调用相关,因为我只更新不需要基于文件的调用的记录类型。我遵循了Om Prakash的最后一个示例,但由于我的记录类型有多个选择列表要编辑,这可能会限制Salesforce从元数据API响应的160秒超时。