Hi, how can I add a record to contour from codebehind / a usercontrol.
This is my code so far:
//The form RecordStorage recordStorage = new RecordStorage(); FormStorage formStorage = new FormStorage(); Form form = formStorage.GetForm(new Guid("d9b5526e-38e5-48e5-a284-166bf3f5b4b0"));
//Recordservice RecordService recordService = new RecordService(form); recordService.Open();
This creates a record just fine, but I can't figure out how to add field values. I thought something like this should do it, but it don't:
foreach (Field field in form.AllFields) { if (field.Caption == "From") { RecordField rf = new RecordField(); rf.Values = new List<object>(); rf.Values.Add("from_value");
record.RecordFields.Add(Guid.NewGuid(), rf); } }
The rf.Values.Add results in an Object rreference not set...
I know there is a comment above that has been marked as the topic solution; however, the link to the posted blog is dead!
Would anyone kind enough out there, please provide me with a link to the blog which achieves adding records from a user control - or perhaps some snippets of code that helps me!
My code so far is similar to the above - but I've posted it anyway:
foreach (RecordField rf in record.RecordFields.Values)
{
// Check form has the field"Firstname"
if (rf.Field.Caption == "Firstname")
{
var firstName = record.GetRecordField("Firstname");
firstName.Values.Clear();
// Add the inserted text from the textbox to the value of "Firstname"
firstName.Values.Add(txtFirstName.Text);
}
// Check the form has the field "Surname"
if (rf.Field.Caption == "Surname")
{
// Add the inserted text from the textbox to the value of "Surname"
var surname = record.GetRecordField("Surname");
surname.Values.Clear();
surname.Values.Add(txtSurname.Text);
}
}
}
Similar to the OP, when btnSubmit is clicked, a record is inserted into Umbraco Contour - however, the values that are inserted above (Firstname and Surname) are not! Please see screenshot attached:
The GUID in my code matches that of the form that is set up - hence why a record is inserted.
Since my blog is no longer online, I'll just put the post in here.
2010-05-19 12:18:03
I just had to programmatically add records to an Umbraco Contour Form. Since I couldn't find any documentation on how to do this, I thought I would post how I did this.
I have an input box (tbEmail) and a button (btnSubmit). On the click event of btnSubmit I got the following code, that adds a record to the form.
protected void btnSubmit_Click(object sender, EventArgs e) { //The Form var recordStorage = new RecordStorage(); var formStorage = new FormStorage(); var form = formStorage.GetForm(new Guid("my form guid"));
//Recordservice var recordService = new RecordService(form); recordService.Open();
var record = recordService.Record; record.IP = Request.UserHostAddress; record.UmbracoPageId = umbraco.presentation.nodeFactory.Node.GetCurrent().Id; recordStorage.InsertRecord(record, form); foreach (var field in recordService.Form.AllFields) { if (field.Caption == "#Email") { var key = Guid.NewGuid(); var recordField = new RecordField() { Field = field, Key = key, Record = record.Id, Values = new List<object>() { tbEmail.Text } }; var recordFieldStorage = new RecordFieldStorage(); recordFieldStorage.InsertRecordField(recordField); record.RecordFields.Add(key, recordField); } } recordService.Submit(); recordService.SaveRecord(); recordService.Dispose(); }
There was also a comment that makes good sence:
Nice post. I guess this should be in the API documentation. There's a possible issue with not creating all the fields to begin with, as it will be a source of possible problems if you open the form later on and try to access a field which does not exists. Question is if it's better to create all the fields and leave values as a new empty List.
I'm creating records with this method with the /base service. It seems to work but there's a little bug somewhere. After the record is submitted, the contour page shows all values as empty. Then after I do something with the record (like approve, edit) suddenly the values are shown.
I checked in the database and saw that the record in the table UFRecordsXml is missing all form field entries. So in the table there's only the header (first two entries):
After I approve or edit the record in contour, the fields are added to the XML. I guess I'm doing something wrong in the code... My code looks like this:
RecordStorage rs = new RecordStorage();FormStorage fs = new FormStorage();Form form = fs.GetForm(new Guid("707c5d27-bb7c-4de1-8b25-b7e771e730a8"));RecordService recServ = new RecordService(form);recServ.Open(); Record rec = recServ.Record; rec.IP = "192.168.230.111";rec.UmbracoPageId = 1243;rs.InsertRecord(rec, form); foreach (var item in recServ.Form.AllFields){Guid key = new Guid();RecordField rf = new RecordField();rf.Field = item;rf.Key = key;rf.Record = rec.Id;Listrf.Values = vl;switch (item.Caption){ case "Name / Company":rf.Values = new Listbreak; case "Email":rf.Values = new Listbreak; case "Message":rf.Values = new Listbreak; case "Topic":rf.Values = new Listbreak; case "RequestIP":rf.Values = new Listbreak; default:break;}RecordFieldStorage recFieldStorage = new RecordFieldStorage();recFieldStorage.InsertRecordField(rf);recFieldStorage.Dispose(); } recServ.Submit(); recServ.SaveFormToRecord();recServ.Dispose();rs.Dispose();fs.Dispose();
Thank you
Matthias
Updated: Sorry, stupid mistake: I assigned an empty Guid to the fields, that's why trying to add the fields with rec.RecordFields.Add(key, rf); alwasy failed..
Adding records to Contour from usercontrol
Hi, how can I add a record to contour from codebehind / a usercontrol.
This is my code so far:
//The form
RecordStorage recordStorage = new RecordStorage();
FormStorage formStorage = new FormStorage();
Form form = formStorage.GetForm(new Guid("d9b5526e-38e5-48e5-a284-166bf3f5b4b0"));
//Recordservice
RecordService recordService = new RecordService(form);
recordService.Open();
//Record
Record record = recordService.Record;
//Store
record.UmbracoPageId = current.Id;
recordStorage.InsertRecord(record, form);
recordService.Submit();
recordService.SaveRecord();
recordService.Dispose();
This creates a record just fine, but I can't figure out how to add field values. I thought something like this should do it, but it don't:
foreach (Field field in form.AllFields)
{
if (field.Caption == "From")
{
RecordField rf = new RecordField();
rf.Values = new List<object>();
rf.Values.Add("from_value");
record.RecordFields.Add(Guid.NewGuid(), rf);
}
}
The rf.Values.Add results in an Object rreference not set...
Anybody know a solution to this?
Sorry forgot a line in the foreach statement:
RecordField rf = new RecordField();
rf.Field = field;
Just blogged about it: http://bit.ly/c5M5UU
Fabolus thank you so much :-D
Thanks!
Hi guys,
I know there is a comment above that has been marked as the topic solution; however, the link to the posted blog is dead!
Would anyone kind enough out there, please provide me with a link to the blog which achieves adding records from a user control - or perhaps some snippets of code that helps me!
My code so far is similar to the above - but I've posted it anyway:
protected void btnSubmit_Click(object sender, EventArgs e)
{
//Get currentNodeId
dynamic currentNode = new DynamicNode(Node.GetCurrent());
//The form
RecordStorage recordStorage = new RecordStorage();
FormStorage formStorage = new FormStorage();
Form form = formStorage.GetForm(new Guid("1db4b81e-ec1e-45d6-a44e-a89690229d22"));
//Recordservice
RecordService recordService = new RecordService(form);
recordService.Open();
//Record
Record record = recordService.Record;
//Store
record.UmbracoPageId = currentNode.Id;
recordStorage.InsertRecord(record, recordService.Form);
recordService.Submit();
recordService.SaveFormToRecord();
recordService.Dispose();
foreach (RecordField rf in record.RecordFields.Values)
{
// Check form has the field"Firstname"
if (rf.Field.Caption == "Firstname")
{
var firstName = record.GetRecordField("Firstname");
firstName.Values.Clear();
// Add the inserted text from the textbox to the value of "Firstname"
firstName.Values.Add(txtFirstName.Text);
}
// Check the form has the field "Surname"
if (rf.Field.Caption == "Surname")
{
// Add the inserted text from the textbox to the value of "Surname"
var surname = record.GetRecordField("Surname");
surname.Values.Clear();
surname.Values.Add(txtSurname.Text);
}
}
}
Similar to the OP, when btnSubmit is clicked, a record is inserted into Umbraco Contour - however, the values that are inserted above (Firstname and Surname) are not! Please see screenshot attached:
The GUID in my code matches that of the form that is set up - hence why a record is inserted.
Thanks in advance!
Since my blog is no longer online, I'll just put the post in here.
2010-05-19 12:18:03
I just had to programmatically add records to an Umbraco Contour Form. Since I couldn't find any documentation on how to do this, I thought I would post how I did this.
I have an input box (tbEmail) and a button (btnSubmit). On the click event of btnSubmit I got the following code, that adds a record to the form.
There was also a comment that makes good sence:
Nice post. I guess this should be in the API documentation. There's a possible issue with not creating all the fields to begin with, as it will be a source of possible problems if you open the form later on and try to access a field which does not exists. Question is if it's better to create all the fields and leave values as a new empty List.
Thank you very much - this works brilliantly!
Hi,
RecordStorage rs = new RecordStorage();FormStorage fs = new FormStorage();Form form = fs.GetForm(new Guid("707c5d27-bb7c-4de1-8b25-b7e771e730a8"));RecordService recServ = new RecordService(form);recServ.Open(); Record rec = recServ.Record; rec.IP = "192.168.230.111";rec.UmbracoPageId = 1243;rs.InsertRecord(rec, form); foreach (var item in recServ.Form.AllFields){Guid key = new Guid();RecordField rf = new RecordField();rf.Field = item;rf.Key = key;rf.Record = rec.Id;Listrf.Values = vl;switch (item.Caption){ case "Name / Company":rf.Values = new Listbreak; case "Email":rf.Values = new Listbreak; case "Message":rf.Values = new Listbreak; case "Topic":rf.Values = new Listbreak; case "RequestIP":rf.Values = new Listbreak; default:break;}RecordFieldStorage recFieldStorage = new RecordFieldStorage();recFieldStorage.InsertRecordField(rf);recFieldStorage.Dispose(); } recServ.Submit(); recServ.SaveFormToRecord();recServ.Dispose();rs.Dispose();fs.Dispose();I'm creating records with this method with the /base service. It seems to work but there's a little bug somewhere. After the record is submitted, the contour page shows all values as empty.
Then after I do something with the record (like approve, edit) suddenly the values are shown.
I checked in the database and saw that the record in the table UFRecordsXml is missing all form field entries. So in the table there's only the header (first two entries):
After I approve or edit the record in contour, the fields are added to the XML. I guess I'm doing something wrong in the code... My code looks like this:
Thank you
Matthias
Updated:
Sorry, stupid mistake: I assigned an empty Guid to the fields, that's why trying to add the fields with rec.RecordFields.Add(key, rf); alwasy failed..
Now it works fine.
is working on a reply...