我正试图导出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
}
}
}