0

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

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

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

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

这将获取记录,但不确定从何处获取字段名称。我什至没有在UF表格中看到它们。我可以通过生成 JSON 输出,GenerateRecordDataAsJson()但只能获取字段名称的 Guid。

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

4

2 回答 2

1

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

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

于 2016-08-31T15:01:37.507 回答
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
        }
    }
}
于 2020-06-27T03:00:15.917 回答