c# - Reading data from sitecore webforms for marketeers database -
i want build custom interface (a separate aspx page) manage data put webforms marketeers (wffm) database, , 1 form. must possible edit data , select records particular sortings , pagings. database configured sqlite.
is possible , recommended, or plain xml saved wffm database? , how should go it?
this doable, though select query data out of wffm bit funky because stored loose in 1 huge table called "field" trail of guids tie stored values form came , field.
provided below part of export excel utility wrote wffm data. builds datatable object submitted form results. adapt other structure without work though.
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 field formid=@formid order 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 field formid in (select id form formitemid=@formitemid) order 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 = 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 form 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; } }
Comments
Post a Comment