Umbraco表单 - 通过代码(不是UI)将数据导出为CSV

时间:2016-08-28 19:21:17

标签: umbraco umbraco7 umbraco-contour

我正在尝试将Umbraco Forms数据导出为CSV,使用从条目表UI导出时生成的确切格式,我正在尝试严格按照代码执行此操作。最终结果是我想作为每天或每隔几个小时导出数据的任务运行,并将.csv文件保存到服务器上的文件夹中。这将用于批量导入到其他系统,并且在这种情况下,表单工作流将不起作用。

我最初的方法是尝试在SQL中执行此操作,但是表单数据很难处理,因为它是JSON和本机SQL数据的混合。我没有运行SQL Server 2016,因此没有JSON支持。

我一直在搜索Forms API,发现了一些可能有用的东西,但似乎找不到我需要的东西。到目前为止,我已经尝试过:

Umbraco.Forms.Data.Storage.RecordStorage.GetAllRecords()

这会获取记录,但不确定从哪里获取字段名称。我甚至没有在UF表中看到它们。我可以通过GenerateRecordDataAsJson()生成JSON输出,但只获取字段名称的Guids。

我已经尝试循环上面的Record集合并手动处理单个项目,我尝试了RecordStorage.BuildRecord()方法,希望能汇集数据,但也没有运气。< / p>

2 个答案:

答案 0 :(得分:1)

您必须使用API​​获取字段名称。当Forms仍然是Contour时,一切都在数据库中,这样就很容易(ish)查询这样的东西。

我认为您需要使用FormStorage来获取表单的详细信息,您应该可以从中获取字段。

答案 1 :(得分:0)

自从我最近遇到同样的要求以来,我想为Umbraco 8和Forms 8.4.1共享一个示例。

public class ExportController : UmbracoApiController
{
    IRecordReaderService RecordReaderService;

    public ExportController(
        IRecordReaderService recordReaderService)
    {
        RecordReaderService = recordReaderService;
    }

    [HttpGet]
    public void Export()
    {
        var formId = new System.Guid("f9ea767a-0e4e-4c90-85f1-53ef42c60793");
        var pageSize = 50;
        var formResults = RecordReaderService.GetRecordsFromForm(formId, 1, pageSize);
        foreach (var entry in formResults.Items)
        {
            var firstName = entry.ValueAsString("firstName"); // Use field alias
            // Output data or other
        }
    }
}