gpt4 book ai didi

c# - 从营销人员数据库的 sitecore 网络表单中读取数据

转载 作者:太空宇宙 更新时间:2023-11-03 13:35:02 24 4
gpt4 key购买 nike

我想构建一个自定义界面(一个单独的 aspx 页面)来管理放入 webforms for marketeers (WFFM) 数据库的数据,并且只针对一个表单。必须可以编辑数据并选择具有特定排序和分页的记录。数据库配置为 SQLite。

这是否可能并被推荐,或者它只是保存到 WFFM 数据库中的纯 xml?我应该怎么做?

最佳答案

这是完全可行的,尽管从 WFFM 中获取数据的选择查询有点古怪,因为所有内容都松散地存储在一个名为“字段”的巨大表中,只有一串 GUID 将存储的值绑定(bind)回什么形式他们来自什么领域。

下面提供的是我为 WFFM 数据编写的导出到 Excel 实用程序的一部分。它根据提交的表单结果构建一个 DataTable 对象。不过,您可以不费吹灰之力就将其调整为其他结构。

public string connectionStringWFFM = "user id=sitecore_admin;password=xxx;Data Source=SitecoreDBServer.com;Database=Sitecore_WebForms";

protected DataTable BuildDataTable(Item formItem)
{
List<FormResult> formResults = FormResults(formItem.ID.Guid);
List<Field> distinctFields = DistinctFields(formItem.ID.Guid);

var dt = new DataTable();
dt.Columns.Add("Submission_DateTime", typeof (string));
foreach (Field field in distinctFields)
{
var dataColumn = new DataColumn("_" + field.id.ToString("N"), typeof (string));
dataColumn.Caption = field.name.Replace(" ", "_");
dt.Columns.Add(dataColumn);
}

foreach (FormResult formResult in formResults)
{
var connection = new SqlConnection();
connection.ConnectionString = connectionStringWFFM;
var command = new SqlCommand();
command.Connection = connection;
command.CommandText = "select fieldid, value from field where formid=@formid order by fieldid";
command.Parameters.Add("@formid", SqlDbType.UniqueIdentifier).Value = formResult.id;
connection.Open();
SqlDataReader reader = command.ExecuteReader();

DataRow dataRow = dt.NewRow();
dataRow["Submission_DateTime"] = formResult.timestamp.ToString("MM/dd/yyyy HH:mm:ss");
while (reader.Read())
{
dataRow["_" + reader.GetGuid(0).ToString("N")] = reader.GetValue(1).ToString().Replace("<item>", "").Replace("</item>", "");
}
dt.Rows.Add(dataRow);

reader.Close();
connection.Close();
}

return dt;
}

public List<Field> DistinctFields(Guid formitemid)
{
var connection = new SqlConnection();
connection.ConnectionString = connectionStringWFFM;
var command = new SqlCommand();
command.Connection = connection;
command.CommandText = "select distinct fieldid from field where formid in (select id from form where formitemid=@formitemid) order by fieldid";
command.Parameters.Add("@formitemid", SqlDbType.UniqueIdentifier).Value = formitemid;
connection.Open();
SqlDataReader reader = command.ExecuteReader();

var results = new List<Field>();
int count = 0;
while (reader.Read())
{
var field = new Field();
field.id = reader.GetGuid(0);
Database database = Factory.GetDatabase("master");
Item i = database.GetItem(new ID(field.id));
if (i != null && i.DisplayName != null)
{
field.name = i.DisplayName;
}
else
{
field.name = "Field" + count;
}
results.Add(field);
count += 1;
}

reader.Close();
connection.Close();

return results;
}

public List<FormResult> FormResults(Guid formitemid)
{
var connection = new SqlConnection();
connection.ConnectionString = connectionStringWFFM;
var command = new SqlCommand();
command.Connection = connection;
command.CommandText = "select id, timestamp from form where formitemid=@formitemid";
command.Parameters.Add("@formitemid", SqlDbType.UniqueIdentifier).Value = formitemid;
connection.Open();
SqlDataReader reader = command.ExecuteReader();

var results = new List<FormResult>();

while (reader.Read())
{
var result = new FormResult();
result.id = reader.GetGuid(0);
result.timestamp = reader.GetDateTime(1);
results.Add(result);
}

reader.Close();
connection.Close();

return results;
}

public class FormResult
{
public Guid id { get; set; }
public DateTime timestamp { get; set; }
}

public class Field
{
public Guid id { get; set; }
public string name { get; set; }
}

关于c# - 从营销人员数据库的 sitecore 网络表单中读取数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18988872/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com