Допустим, у меня есть пользовательские метаданные, созданные в моей организации: MyCustomMetadata.

Загрузка его записи в браузере организации:

  • Используемая команда: sfdx force:source:retrieve -m CustomMetadata:MyCustomMetadata.MyCustomMetadataRecord
  • Файл получен: MyCustomMetadata.MyCustomMetadataRecord.md-meta.xml

Через мдапи:

  • Используемая команда: sfdx force:mdapi:retrieve -u MyOrgAlias -r "./" -k package.xml
  • Получен файл: MyCustomMetadata.MyCustomMetadataRecord.md

Содержимое package.xml:

<?xml version="1.0" encoding="UTF-8"?>
<Package xmlns="http://soap.sforce.com/2006/04/metadata">
    <types>
        <members>MyCustomMetadata.MyCustomMetadataRecord</members>
        <name>CustomMetadata</name>
    </types>
    <version>45.0</version>
</Package>

Есть разница в расширении файла, суффикс -meta.xml добавляется при использовании Org Browser / force:source:retrieve.

В чем причина этого и есть ли последствия взаимозаменяемого использования этих двух команд?

3
Przemysław Długoszewski-Tamoń 18 Мар 2020 в 16:44

1 ответ

Лучший ответ

С введением SFDX мы также получили новое представление метаданных/кода, известное как «исходная форма».

Это отличается от традиционного представления, которое называется «Форма API метаданных».

Исходная форма должна быть более гибкой для структуры проекта в системах управления версиями (git, subversion и т. д.), а также важна для управления отправкой и извлечением кода из/в организации с нуля.

Форма API метаданных в основном используется для работы с API метаданных (например, sfdx force:mdapi:deploy)

Также есть разница в том, как структурированы метаданные/код. В качестве быстрого примера возьмем настраиваемые поля SObject...

  • Форма API метаданных хранит метаданные поля внутри определения метаданных объекта.
  • Исходная форма разбивает метаданные поля на отдельные файлы метаданных, хранящиеся в подкаталоге объекта (который по умолчанию является файлом метаданных в подкаталоге папки «объекты»).

По крайней мере, расширения файлов различаются, так что есть какой-то способ легко программно различать два формата.

Смешивание форм API исходного кода и метаданных не является хорошей идеей. Старайтесь придерживаться одного набора команд, если можете. Если вы не можете, то именно поэтому у нас есть возможность конвертировать между ними (sfdx force:mdapi:convert и sfdx force:source:convert)

8
Derek F 18 Мар 2020 в 17:11
Я бы добавил, что расширения теперь правильно определяют тип контента («тип файла»), тогда как в API метаданных этого не было. Например, здесь вы видите, что экземпляр пользовательского типа метаданных представляет собой XML-файл. Другой пример: ранее статический ресурс JavaScript имел (в API метаданных) расширение .resource, но теперь (в исходном формате) имеет расширение .js.
 – 
Phil W
18 Мар 2020 в 19:53