Существует ли простой и простой способ убедиться на 100%, что метаданные, которые вы сохранили, - это метаданные, которые вы получили?Нет. Есть способ, но это не просто и не просто.
Ключи метаданных не заменяются.Можно иметь несколько объектов метаданных с одинаковым именем ключа.Однако они будут иметь разные идентификационные номера.Вы можете доказать это самому себе с помощью приведенного ниже кода.
Приведенный ниже код добавляет метаданные 3 раза с одним и тем же именем и значением ключа.Затем он получает все метаданные, проходит по объекту, регистрирует имя, идентификатор и значение.Наконец, он удаляет объект метаданных.
function testMetaData() {
var ss = SpreadsheetApp.getActive();
for (var i = 0;i<3;i++) {//Loop 3 times
ss.addDeveloperMetadata('keyOne','valueOne');//Add metadata with the same key name and value
}
var mtaData = ss.getDeveloperMetadata();
Logger.log(mtaData.length)//The number of meta data objects in the spreadsheet
mtaData.forEach(//Loop through every element of the meta data
function(thisMetaData) {
Logger.log(thisMetaData.getValue())
Logger.log(thisMetaData.getId())
Logger.log(thisMetaData.getKey())
thisMetaData.remove();//Remove this metadata
}
)
}
Поскольку может быть несколько объектов метаданных с одним и тем же именем ключа, вам нужно быть очень осторожным при настройке и получении метаданных.Если метаданных не задано, вы можете добавить метаданные, затем получить метаданные, затем получить первый и единственный элемент, а затем получить идентификатор этого элемента.Затем сохраните идентификатор в Сервисе свойств.Единственный способ убедиться, что полученные вами метаданные - это ожидаемые метаданные, - это проверить идентификационный номер.
Если метаданные уже добавлены и их несколькообъекты метаданных с тем же именем ключа, и вы не знаете требуемый идентификатор, тогда вы можете удалить эти объекты метаданных с тем же именем ключа и начать заново.
Как только у вас есть идентификаторметаданных, то вы можете найти эти конкретные метаданные по идентификатору, и не будет никаких дубликатов.Очевидно, вам нужно знать идентификатор, но код должен знать имя ключа, если вы используете имя ключа.Таким образом, в любом случае вам нужно как-то иметь ключ или идентификатор.
function getMetaDataByID() {
var finder,
id,
mtaData,
numberOfMetaDataObjectsWithTheSameKeyName = 0,
ss;
ss = SpreadsheetApp.getActive();
addDeveloperMetadata('myKeyName','valueOne');//
mtaData = ss.getDeveloperMetadata();
Logger.log(mtaData.length)//The number of meta data objects in the spreadsheet
mtaData.forEach(//Loop through every element of the meta data
function(thisMetaData) {
var thisKey;
thisKey = thisMetaData.getKey();
Logger.log(thisMetaData.getValue())
Logger.log(thisMetaData.getId())
Logger.log(thisKey)
if (thisKey === 'myKeyName') {
numberOfMetaDataObjectsWithTheSameKeyName++;
PropertiesService.getDocumentProperties().setProperty('id_Of_My_MetaData', thisMetaData.getId());
}
}
)
Logger.log('numberOfMetaDataObjectsWithTheSameKeyName: ' + numberOfMetaDataObjectsWithTheSameKeyName)
//Now get the metadata by ID
id = PropertiesService.getDocumentProperties().getProperty('id_Of_My_MetaData');
Logger.log('id: ' + id);
finder = ss.createDeveloperMetadataFinder()
.withId(id)
.find()[0];
var metaDataValue = finder.getValue();
Logger.log('metaDataValue: ' + metaDataValue)
}