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



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

我最初的方法是尝试在SQL中做到这一点,但是表单数据很难处理,因为它是JSON和本地SQL数据的混合。我没有运行SQL Server 2016,所以不支持JSON。

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

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

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

我已经尝试遍历上述Record集合并手动处理单个项目,并且我已经尝试了RecordStorage.BuildRecord()方法,希望能够组装数据,但也没有运气。

您必须使用API获取字段名。当Forms还是Contour的时候,所有的东西都在数据库中,使得查询这样的东西变得很容易。

我认为你需要使用FormStorage来获取表单的详细信息,你应该能够从中获得字段

我想我应该分享一个例子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
        }
    }
}

相关内容

  • 没有找到相关文章

最新更新