У меня проблема с загрузкой метаданных в организацию сборки управляемого приложения Salesforce с помощью инструмента миграции ant. Первоначальная проблема была в довольно крупном приложении, но мне удалось сократить его до 2 файлов, которые демонстрируют проблему: Platform Event и класс Apex (веб-сервис), который публикует его.
объекты / CTIDeviceUpdateEvent__e:
<?xml version="1.0" encoding="UTF-8"?>
<CustomObject xmlns="http://soap.sforce.com/2006/04/metadata">
<deploymentStatus>Deployed</deploymentStatus>
<description>Event raised by AVS when the CTI user updates their outbound device.</description>
<eventType>StandardVolume</eventType>
<fields>
<fullName>NewCtiDevice__c</fullName>
<externalId>false</externalId>
<isFilteringDisabled>false</isFilteringDisabled>
<isNameField>false</isNameField>
<isSortingDisabled>false</isSortingDisabled>
<label>NewCtiDevice</label>
<length>64</length>
<required>true</required>
<type>Text</type>
<unique>false</unique>
</fields>
<fields>
<fullName>UserId__c</fullName>
<externalId>false</externalId>
<isFilteringDisabled>false</isFilteringDisabled>
<isNameField>false</isNameField>
<isSortingDisabled>false</isSortingDisabled>
<label>UserId</label>
<precision>18</precision>
<required>true</required>
<scale>0</scale>
<type>Number</type>
<unique>false</unique>
</fields>
<label>CTI Device Update Event</label>
<pluralLabel>CTI Device Update Events</pluralLabel>
</CustomObject>
классы CtiDeviceUpdateWebService.cls
global with sharing class CtiDeviceUpdateWebService {
webservice static void ctiDeviceUpdate(Integer natterboxUserId, String newCtiDeviceRaw) {
List<CTIDeviceUpdateEvent__e> evlist = new List<CTIDeviceUpdateEvent__e> { new CTIDeviceUpdateEvent__e(UserId__c = 1, NewCTIDevice__c = '2001') } ;
// Call method to publish events
List<Database.SaveResult> results = EventBus.publish(evlist);
// Inspect publishing result for each event
for (Database.SaveResult sr : results) {
if (sr.isSuccess()) {
System.debug('Successfully published event.');
} else {
for(Database.Error err : sr.getErrors()) {
System.debug('Error returned: ' +
err.getStatusCode() +
' - ' +
err.getMessage());
}
}
}
}
}
package.xml:
<?xml version="1.0" encoding="UTF-8"?>
<Package xmlns="http://soap.sforce.com/2006/04/metadata">
<types>
<members>*</members>
<name>CustomObject</name>
</types>
<types>
<members>*</members>
<name>ApexClass</name>
</types>
<version>41.0</version>
</Package>
При развертывании API метаданных я получаю следующий результат:
[sf:deploy] Request for a deploy submitted successfully.
[sf:deploy] Request ID for the current deploy task: 0Af1n00001VmcmHCAR
[sf:deploy] Waiting for server to finish processing the request...
[sf:deploy] Request Status: InProgress
[sf:deploy] Request Status: Failed
BUILD FAILED
/Users/jim.page/Documents/salesforce_ant_43.0/nbavs/build.xml:31:
*********** DEPLOYMENT FAILED ***********
Request ID: 0Af1n00001VmcmHCAR
All Component Failures:
1. classes/CtiDeviceUpdateWebService.cls -- Error: Method does not exist or incorrect signature: void publish(List<CTIDeviceUpdateEvent__e>) from the type EventBus (line 12, column 54)
2. classes/CtiDeviceUpdateWebService.cls -- Error: Invalid type: CTIDeviceUpdateEvent__e (line 9, column 9)
*********** DEPLOYMENT FAILED ***********
Я пробовал разные версии API, разные настройки в метаданных событий разных типов, используя пространство имен моего управляемого пакета, и Google и я вне идей.
Примечание. Когда я просто разворачиваю событие платформы самостоятельно, развертывание работает, и я вижу его в разделе Setup | Platform Events в организации сборки. Но когда веб-служба добавляется в смесь, развертывание не выполняется. Нет проблем с доступом к пользовательским объектам из веб-службы.
Обратите внимание, что этот код отлично работает в dev-организации.