Right now I am mostly platying around with EpiServer 4.62 in VS 2005 and trying to learn how it works. However my goal is to add a "Weekly Poll" like function to the example website I am currently "working" on.
What I am considering is how to save the results. Do I make a new table in the EpiServer database and use that or is thier any built in funcionality suited for this in EpiServer?
Yes Xform would do it. Our hard to find code sample section has some xform samples which can help you get started.
And yes, we are planning on improving this section with more examples and better layout, community funcs etc.
I am trying to use page propertys to store the results, however episerver wont commit the data to the database.
This is how I try to save the result.
CurrentPage.Property["res3"].Value = x;
It dosent give me any errors and it sets the value to x, it just wont commit to the database. Any suggestions?
You need to call DataFactory.Instance.SavePage(CurrentPage, ...) to commit the changes to database.
Thank you for the answer Johan.
I am using episerver 4.62 so I dont have that exact structure but I found.
I can use that method to save then publish it and it works, however I get a new version of the page for every vote, in the "Version List" of editmode.
This is perectly logical but is thier any way I can prevent this?
I think you can use a saveaction argument other than Publish, namely a bitmasked option:
SaveAction action = SaveAction.Publish | SaveAction.ForceCurrentVersion;Global.EPDataFactory.Save(page, action);
Thanks for the tip, however not sure how you mean. First save then "instead" of publish I use the combo?If thats what u mean it dont work, it creates a new version then it stays unpublished.
I tryed doing just the publish combo with no save and that gives me a server error at runtime. "The INSERT statement conflicted with the FOREIGN KEY contraint "FK_tblWorkProperty_tblWorkPage ..."
I also tryed combining "ForceCurrentVersion" with save, since to me that seems the most logical thing to do. However that also gives an error like the one above.
Anyhow I think ur onto something with "Forcecurrentversion", it seems like the solution just not sure how to use it.
Yes, you should only save once, using a combined saveaction of either publish + forcecurrent or save + forcecurrent, don't remember which. I thought I had used it successfully once, but perhaps I ran into some trouble myself and skipped it.
A workaround is to limit the number of page versions (will affect all pages) and use a scheduled task to remove old page versions. I think a scheduled task like that is more or less standard in 4.62?
Hm, I should've read a little more carefully what you're trying to do:
Its probably not a good idea to store votes in a property. Think about what happens if the editor decides to republish a previous version of the page, then you'd loose a bunch of votes...
I'd also suggest you go the XForm route, that way votes are stored outside page versioning.
ForceCurrentVersion has been "defect" since the second world war, atleast on the most installation I've made.
Either you delete the previous version, or you can set a limit for page versions to be saved in web.config or in the admin-area.
Thanks for all the information everyone!
Johan: Yeah I kinda feelt from the start it may not have been the best idea to use propertys considering u can manipulate the votes if you are admin. However it feelt like an easy way to get started. Now the new versions add upp to the list of reasons not to use propertys.
Erik: Yeah seems like ForceCurrentVersion aint the most healthy flag ever made, maybe it was corrupted by the germans.
I am just a rookie so I dont really know anything about xforms but I will take a look at it on monday or in the weekend if I feel like it.
Again, thank you everyone that contributed and have a nice weekend!
ForceCurrentVersion requires that the page you have "GetPage'd" has been loaded with a complete Page Reference (id and work id). If you just do GetPage(new PageReference(123)) it won't work.