Фильтр API Airtable для возврата всех записей с определенной записью в столбце связанной сущности

#airtable

#воздухопроницаемый

Вопрос:

Мне нужно иметь возможность фильтровать таблицу Airtable через общедоступный API (используя Airtable.Net client>), чтобы он возвращал только строки, которые имеют определенную запись в связанном поле записи.

Поле настроено таким образом, чтобы разрешать несколько связанных записей.

Я пробовал:

  • {fieldname} = "<the entity's object_id>"
  • FIND("<the entity's object_id>", ARRAYJOIN({fieldname}, ' ')) > 0

и я работал в предположении, что, поскольку все, что API Airtable возвращает для связанного столбца, представляет собой массив идентификаторов объектов в виде строк, то это то, что я бы искал, но оба они не возвращают строк.

Кто-нибудь может сказать мне, как создать формулу фильтра, которая будет фильтровать на основе присутствия связанного объекта в столбце.

Спасибо!

Ответ №1:

Вы были очень близки. При использовании FIND() в поле связанной записи вам необходимо выполнить поиск по значению основного поля внешней записи (той, которую вы видите в пользовательском интерфейсе). Как правило, при работе со связанными записями, сводными записями, поисковыми запросами или другими значениями типа массива Airtable обрабатывает их как строки в механизме формул.

Если мы посмотрим на шаблон User Studies в качестве примера: https://airtable.com/shrmLyfKRQYHMoeyT

Таблица сеансов обратной связи содержит поле связанной записи, запрошенные функции / упомянутые жалобы, в таблицу функций / жалоб.

Если бы я хотел, чтобы все отзывы были помечены как «Лучший поиск», тогда мое значение filterByFormula выглядело бы следующим образом:

 FIND("Better search", {Features Requested/Complaints Mentioned})
 

Иногда требуется иметь возможность использовать FIND и ссылаться на базовые идентификаторы записей Airtable для внешних записей. Для этого мы можем создать сводную таблицу в локальной таблице, которая объединяет все идентификаторы записей внешних записей. Для этого:

  1. В вашей внешней таблице (Функции / жалобы в этом примере) создайте новое поле формулы с именем «Идентификатор записи» и используйте формулу RECORD_ID() . Теперь в этом поле будет отображаться идентификатор базовой записи для каждого поля вашей внешней таблицы
  2. В вашей локальной таблице (сеанс обратной связи) создайте новое сводное поле под названием «Идентификаторы внешних записей». В этом поле должно использоваться поле связанной записи, которое ссылается на вашу внешнюю таблицу. А затем выберите поле идентификатора записи, которое мы создали на предыдущем шаге. Наконец, формула ARRAYJOIN(values)

Теперь в нашей локальной таблице у нас есть разделенная запятыми строка каждого идентификатора внешней записи. Итак, если бы мы хотели выполнить тот же поиск, используя идентификатор внешней записи, а не основное поле:

  FIND("recvyl20eHSARMtVj", {Foreign Record IDs})
 

Поиск нескольких связанных записей

Это решение хорошо работает, когда вам нужно только найти локальные записи, которые имеют единственную связанную связь с записью. Если нам нужно было найти все записи со ссылками на функции «Лучший поиск» или «Мобильное приложение», то вам следует использовать эту OR функцию для объединения нескольких FIND функций вместе. Поскольку все это основано на проверке строковых значений, вы не можете гарантировать, что связанные записи представлены в определенном порядке.

Эта просьба:

     FIND("Better search,Mobile app", {Features Requested/Complaints Mentioned})
 

будет предоставлять только записи, в которых связанная запись содержит именно «Лучший поиск», за которым следует «Мобильное приложение». Вместо этого мы хотим сделать:

     OR(
        FIND("Better search", {Features Requested/Complaints Mentioned}), 
        FIND("Mobile app", {Features Requested/Complaints Mentioned})
    )
 

Комментарии:

1. community.airtable.com/t / … — это распространенная проблема, с которой люди сталкиваются с API

2. Спасибо — все это имеет смысл. Единственный вопрос, который у меня сейчас есть, — есть ли способ через API узнать, какой столбец является основным? Человек, который разработал базу Airtable, имеет множество настроек, и во многих случаях они переименовали основной столбец. Исходя из моих экспериментов, я предполагаю, что это первый столбец в документации API, но есть ли другой способ? (Полное раскрытие, у меня есть генератор классов, который использует страницу API для создания библиотеки классов с определениями таблиц в базе, и, учитывая, что существует более 200 таблиц и изменений схемы, мне нужно максимально автоматизировать.)

3. Основным полем всегда является крайний левый столбец, который должен быть первым полем, появляющимся в документации API для каждой таблицы (я не думаю, что это гарантировано, но, похоже, оно соответствует)