Skip to content

Экспорт задач

По умолчанию в навигаторе задач доступен модуль экспорта в CSV. Вы можете добавлять свои модули, реализуя класс IssuesExportModule.

java
@Component
public class IssuesExportCSV implements IssuesExportModule {
    private final I18nResolver i18n;
    private final FieldManager fieldManager;

    public IssuesExportCSV(I18nResolver i18n,
                           FieldManager fieldManager) {
        this.i18n = i18n;
        this.fieldManager = fieldManager;
    }

    @Override
    public String getName() {
        return i18n.getText("app.issue.export.csv.label");
    }

    @Override
    public void doExport(SearchResult<Issue> result, final OutputStream stream, ExportParams exportParams) throws IOException {
        String separator = exportParams.getExtraParams().get("separator");
        Writer writer = new OutputStreamWriter(stream, StandardCharsets.UTF_8);
        ...
        writer.flush();
    }

    @Override
    public ExportFileInfo getExportFileInfo(ExportParams exportParams) throws ValidateException {
        // Проверяем параметры формы из веб-компонента, возвращаем имя файла и тип
        if (exportParams.getExtraParams() == null || exportParams.getExtraParams().isEmpty()) {
            throw new ValidateException("separator", i18n.getText("app.issue.export.svc.separator.required"));
        }

        if (exportParams.getExtraParams().get("separator").length() != 1) {
            throw new ValidateException("separator", i18n.getText("app.issue.export.svc.separator.error"));
        }

        return new ExportFileInfo(Constants.DATE_TIME_FORMAT.format(LocalDateTime.now()) + ".csv", "text/plain");
    }
}

Фронтенд

vue
<script setup lang="ts">
import { onBeforeMount, PropType } from "vue";
import { Errors } from "luna";

interface ExtraParams {
  includeFieldNames: string,
  separator: string,
}

defineProps({
  errors: Object as PropType<Errors>
});

const extraParams = defineModel<ExtraParams>();

onBeforeMount(() => {
  if (!extraParams.value.separator) {
    extraParams.value.separator = ";";
  }
});

</script>

<template>
  <div class="extra-params">
    <div class="field-group">
      <label for="csv-extra-params-separator">{{ $i18n.t("Separator") }}</label>
      <input id="csv-extra-params-separator" type="text" class="input" v-model="extraParams.separator">
      <div class="error" v-if="errors?.separator">{{ errors?.separator }}</div>
    </div>
    <div class="field-group">
      <strong>{{ $i18n.t("Add header") }}</strong>
      <fieldset class="checkbox-group">
        <div class="checkbox-item">
          <input id="yes" type="checkbox" value="true" v-model="extraParams.includeFieldNames">
          <label for="yes">{{ $i18n.t("Yes") }}</label>
        </div>
      </fieldset>
    </div>
  </div>
</template>

Дескриптор

yaml
issuesExportModules:
  - key: IssuesExportCSV
    name: Export issues to CVS
    className: ru.slie.luna.issue.export.IssuesExportCSV
    webComponent:
      path: frontend/CVSExtraParams.js