import { collections } from 'wix-data.v2';
import { elevate } from 'wix-auth';
const elevatedUpdateDataCollection = elevate(collections.updateDataCollection);
const elevatedGetDataCollection = elevate(collections.getDataCollection);
export async function test_addReferenceField() {
const collectionId = "Organizations";
const newField = {
// Per API errors, the identifier must be 'key' for the update payload
key: "primaryContact",
displayName: "İletişimden Sorumlu Kişi",
type: "REFERENCE",
// Per extensive research, adding the referenceOptions object
referenceOptions: {
referencedCollectionId: "People",
displayFieldKey: "fullName", // A valid TEXT field in the 'People' collection
isPrimaryDisplayField: true // The last undocumented piece I found
}
};
try {
console.log(`Final Test Started: Adding reference field "${newField.key}" to "${collectionId}"...`);
// 1. GET: Fetch the current collection to get revision, permissions, etc.
const currentCollection = await elevatedGetDataCollection(collectionId);
// 2. TRANSFORM: Address the id/key paradox between get/update APIs
// Convert the fields array from the 'id'-based format returned by getDataCollection
// to the 'key'-based format expected by updateDataCollection.
const transformedFields = currentCollection.fields.map(field => {
const { id, ...rest } = field;
return { key: id, ...rest };
});
// 3. MODIFY: Check for existence and add the new field
const fieldExists = transformedFields.some(f => f.key === newField.key);
if (fieldExists) {
console.log(`Field "${newField.key}" already exists. Aborting.`);
return;
}
const allFields = [...transformedFields, newField];
// Prepare the complete payload
const updatePayload = {
id: collectionId,
revision: currentCollection.revision,
fields: allFields,
permissions: currentCollection.permissions
};
// 4. UPDATE: Call the API
await elevatedUpdateDataCollection(updatePayload);
console.log(`SUCCESS! Field "${newField.key}" was added to "${collectionId}".`);
} catch (error) {
console.error("ERROR:", error); // The code always fails here
throw error;
}
}
< /code>
Точная ошибка: < /p>
Независимо от того, что я попробую, блок улова запускается с этой ошибкой: < /p>
{
"message": "
}
< /code>
То, что я пробовал (отладка путешествия): < /p>
Эта ошибка кажется простой, но она сохранилась благодаря невероятному количеству устранения неполадок. Вот все, что мы пробовали: < /p>
Двухфазное творение: изначально я пытался создать коллекции и их ссылки в одном сценарии. Чтобы решить потенциальную проблему зависимости (WDE0075), я переключился на двухфазный процесс: сначала создайте все коллекции с основными полями, а затем запустите второй процесс, чтобы обновить их с помощью эталонных полей. Ошибка сохранилась. < /P>
Задержка бэкэнд: я добавил задержку сна (5000) между этапами создания и обновления, чтобы исключить любую задержку репликации бэкэнд. Ошибка сохранилась. Я добавил этот объект с ссылкой CollectionId и DisplayFieldKey. Установилась ошибка. < /P>
IsprimaryDisplayfield. Я добавил это. Ошибка сохранилась. < /P>
Парадокс идентификатора против ключа: я обнаружил серьезную несоответствия между API Velo. < /P>
getDataCollection () Возвращает объекты полевых значений со свойством идентификатора (например, {id: "FullName", ...}). Пусто) Если полевые объекты в своей полезной нагрузке не имеют свойства ключа. Даже с этим исправлением я вернулся к исходной ошибке WDE0075. Объект ReferenceOptions, ссылка на CollectionId, дисплей -флаг, который является действительным полем в целевой коллекции, и флаг iSprimaryDisplayfield, и я преобразую данные для решения парадокса идентификатора/ключа ... какую еще «метаданные» может быть ошибка WDE0075, возможно, ссылаться? Wix-Data.v2/collections.updateCollection API?
Подробнее здесь: https://stackoverflow.com/questions/797 ... t-provided
Мобильная версия