Sorting by Numbered Filenames

edited April 5, 2024
Hi I am trying to follow a similar method to this post: https://forums.zotero.org/discussion/79924/sort-by-filename

The code at the end of the thread:

var s = new Zotero.Search();
s.addCondition('libraryID', 'is', Zotero.Libraries.userLibraryID);
s.addCondition('itemType', 'is', 'attachment');
var ids = await s.search()
for (let id of ids) {
let item = Zotero.Items.get(id);
let parentItemID = item.parentItemID;
if (!parentItemID) {
continue;
}
let parentItem = Zotero.Items.get(parentItemID);
let title = item.getField('title');
if (parentItem.getField('date') !== '') {
continue;
}
if (title.match(/^[0-9]{4}( |$)/)) {
let year = title.substr(0, 4);
parentItem.setField('date', year);
}
await parentItem.saveTx();
}

"This will add the year from every child attachment to the parent item if the parent item doesn't already have a value in its Date field."

I want to add the filename of the child attachment to the parent item in a field I am not using like "Series" and then sort by the filename values. The filename values are numbered 1-50.

Here is the code I am trying to run:

var s = new Zotero.Search();
s.addCondition('libraryID', 'is', Zotero.Libraries.userLibraryID);
s.addCondition('itemType', 'is', 'attachment');
var ids = await s.search()
for (let id of ids) {
let item = Zotero.Items.get(id);
let parentItemID = item.parentItemID;
if (!parentItemID) {
continue;
}
let parentItem = Zotero.Items.get(parentItemID);
let title = item.getField('title');

if (title.match(/^[0-9]{2}( |$)/)) {
let filename = title.substr(0, 2);
parentItem.setField('series', filename);
}

else if (title.match(/^[0-9]{1}( |$)/)) {
let filename = title.substr(0, 1);
parentItem.setField('series', filename);
}
await parentItem.saveTx();
}

When I try to run it in Zotero: Tools>Developer>Run JavaScript, I get the following error:

Return value:
===>undefined<=== (undefined)

How do I fix this?

Thank you
Sign In or Register to comment.