我正在尝试将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>
答案 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
}
}
}