FileMaker: Есть ли способ создать порядок экспорта в скрипте?

#filemaker

#filemaker

Вопрос:

Вопрос: Есть ли способ создать порядок экспорта во время выполнения скрипта? Я бы предпочел решение, основанное на FileMaker или называемое FileMaker на AppleScript, если это возможно.

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

Пример: Если пользователь выбрал единицы, проданные с суммированием по поставщикам за квартал, я хотел бы иметь возможность выбора скриптом:

Группировать по:

  1. четверть
  2. поставщик

Порядок экспорта

  1. четверть
  2. сводка единиц измерения по кварталам
  3. поставщик
  4. сводка единиц измерения по поставщику

Очевидно, что существует множество перестановок, поэтому настройка экспорта для каждого отдельного экспорта для каждого набора параметров неосуществима.

Ответ №1:

Если целевой формат основан на тексте (т. Е. разделен табуляцией или запятой), тогда я бы экспортировал в XML и написал XSLT, чтобы суммировать его по мере необходимости. Для передачи параметров в XSLT я обычно экспортирую небольшой XML-файл в ту же папку.

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

1. Я не очень хорошо знаком с экспортом XML / XSLT из FileMaker, но меня здесь беспокоит ограничение данных, к которым имеет доступ конечный пользователь. Допустим, например, что мы хотим поделиться с поставщиком количеством единиц их продукта, которое мы продали, но не тем, какой доход мы получили от их продуктов. Если бы у меня был XML-экспорт общего назначения, обе эти точки данных были бы в XML-файле. Кажется, их можно скрыть с помощью XSLT, но умный поставщик мог бы посмотреть на значение XML. Есть ли способ дополнительно отфильтровать выходные данные, чтобы они были не просто скрыты, а фактически отсутствовали?

2. Извините за поздний ответ. Это не проблема: при экспорте в XML FileMaker не оставляет исходный XML, только результат преобразования. Не будет места для восстановления информации.

Ответ №2:

Решение, о котором я могу подумать, заключается в экспорте вычислений, а не исходных полей. В приведенном вами примере предположим, что пользователь может экспортировать до двух полей. Вы создаете два поля вычисления и два текстовых поля. Текстовые поля хранят имя поля для экспорта, а поля вычисления используют Evaluate (или GetField ) для получения содержимого полей. Это усложняется, если вы также экспортируете поля даты и времени, но это все еще выполнимо. Если вам нужно включить имена полей в экспорт, вы создаете дополнительную запись и выполняете свои вычисления, чтобы эта запись содержала имена полей, выбранных пользователем.

Нетривиально, но все же возможно.

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

1. Это отличная идея. Проблема, с которой я сталкиваюсь, заключается в том, что, поскольку я использую сводные данные, мне пришлось бы иметь поле вычисления для каждого из возможных критериев сортировки (до 7) и каждого из возможных значений экспорта (до 4).) (Все эти значения приведены для того, чтобы я мог, используя мой пример в первом вопросе, получить итоговое значение единиц измерения за весь квартал в дополнение к итоговому значению единиц измерения для каждого поставщика в течение этого квартала.)

Ответ №3:

Основываясь на предложениях Михаила и Чака, я думаю, что лучшим методом для этого конкретного проекта будет создание содержимого файла .csv в глобальном поле, а затем экспорт содержимого поля. Основная схема того, что я делаю:

 Go to the first record
Loop
  WriteTheRows (see below), comma delimited, to a global field
  Set $thisGroup to the count of records summarized by this summary field
  Exit Loop If Get (CurrentRecord)   $thisGroup >= Get (FoundCount)
  Go to record [Get (CurrentRecord)   $thisGroup]
End Loop
Export Field Contents [global field]
  

WriteTheRows — это пользовательская функция, которая выполняет следующее:
Выходные данные, которые я пытаюсь написать, могут быть отсортированы одновременно по 7 различным критериям (например: я мог бы суммировать продажи поставщиков по кварталам или я мог бы суммировать продажи за квартал по поставщикам)

 Compare the highest level sort field's value to the last value we found for the highest level sort field.
   If they're different WriteALine to the global field for this sort field, the next sort field, all sort fields down to the lowest level.
   If they're the same, compare the (highest level sort field - 1) to the stored value for the (highest level sort field - 1)
      If they're the same, WriteALine to the global field for the (highest level sort field - 1) on down to the lowest level sort field
      ... repeat until we're down to the lowest sort field
  

WriteALine — это еще одна пользовательская функция, которая добавляет соответствующие метки, запятые и значения, используя GetSummary (revenueSummary ; Evaluate ( «summaryField» amp; summaryfielddnumber ), как предлагает Чак в своем ответе.