Я случайным образом генерирую DocumentID и InstanceID, но сталкиваюсь с проблемой при установке свойств DocumentID и InstanceID для объекта xmp.
Как я могу установить сгенерированные DocumentID и InstanceID на мои allXMP?
var xmpFile = new XMPFile(linkFilepath, XMPConst.FILE_INDESIGN, XMPConst.OPEN_FOR_UPDATE);
var allXMP = xmpFile.getXMP();
// Retrieve values from external links XMP.
var documentID = allXMP.getProperty(XMPConst.NS_XMP_MM, 'DocumentID', XMPConst.STRING);
var instanceID = allXMP.getProperty(XMPConst.NS_XMP_MM, 'InstanceID', XMPConst.STRING);
documentID = randomString(32);
instanceID = randomString(32);
// ???? Here I need to set DocumentID and InstanceID to allXMP
if (xmpFile.canPutXMP(allXMP)) {
xmpFile.putXMP(allXMP);
xmpFile.closeFile(XMPConst.CLOSE_UPDATE_SAFELY);
}



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Вы можете использовать метод setProperty() в библиотеке AdobeXMPScript, чтобы создать и установить значение для DocumentID и InstanceID.
Ниже приведены несколько вспомогательных функций для добавления DocumentID и InstanceID.
// Note: This function works on macOS only
function generateUUID() {
var cmd = 'do shell script "uuidgen | tr -d " & quoted form of "-"';
return app.doScript(cmd, ScriptLanguage.applescriptLanguage);
}
// Add an XMP property and Value.
function addXmpPropertyAndValue(filePath, xmpProperty, xmpValue) {
var xmpFile = new XMPFile(filePath, XMPConst.FILE_UNKNOWN, XMPConst.OPEN_FOR_UPDATE);
var allXMP = xmpFile.getXMP();
allXMP.setProperty(XMPConst.NS_XMP_MM, xmpProperty, xmpValue);
if (xmpFile.canPutXMP(allXMP)) {
xmpFile.putXMP(allXMP);
}
xmpFile.closeFile(XMPConst.CLOSE_UPDATE_SAFELY);
// Useful for testing purposes....
alert('Added: ' + xmpProperty + '\n' +
'value: ' + xmpValue + '\n\n' +
'Path: ' + filePath, 'Updated XMP', false);
}
Чтобы добавить instanceID, вызовите функцию addXmpPropertyAndValue следующим образом:
// The `linkFilepath` argument should be the filepath to the Link you want to update
addXmpPropertyAndValue(linkFilepath, 'InstanceID', 'xmp.iid:' + generateUUID());
Чтобы добавить DocumentID, вызовите функцию addXmpPropertyAndValue следующим образом:
// The `linkFilepath` argument should be the filepath to the Link you want to update
addXmpPropertyAndValue(linkFilepath, 'DocumentID', 'xmp.did:' + generateUUID());
Дополнительное примечание:
При создании значений для DocumentID и InstanceID в рекомендациях указывается:
An ID should be guaranteed to be globally unique (in practical terms, this means that the probability of a collision is so remote as to be effectively impossible). Typically 128- or 144-bit numbers are used, encoded as hexadecimal strings
The excerpt (above) can be found on page 19 of Partner's guide to XMP for Dynamic Media (PDF)
К сожалению, Расширить скрипт не предоставляет встроенной функции для создания глобального уникального идентификатора (GUID). Однако macOS включает uuidgen, которая представляет собой утилиту/библиотеку командной строки для
создание уникальных идентификаторов (UUID/GUID).
Вспомогательная функция (выше):
function generateUUID() {
var cmd = 'do shell script "uuidgen | tr -d " & quoted form of "-"';
return app.doScript(cmd, ScriptLanguage.applescriptLanguage);
}
работает только на macOS. Он использует AppleScript для запуска команды uuidgen.
Вы можете сгенерировать идентификатор таким образом вместо текущего вызова функции randomString(32).