I have a standard newsletter form from the shopware6 CMS.
Now people can register and get a success message but is there also an easy way to clear the input fields after the submit? Can I just give the form an ID and reset the form or is this not recommended? Anyone has an idea how to achieve this or is this just a bad idea at all?
The Shopware standard behavior is indeed a bit confusing here. Especially due to the success message being shown below the form, it might get unnoticed.
But instead of clearing the form, I would suggest to hide the form and just show the success message in it's place.
This might be also a good take for an improvement as a pull request to the Shopware platform / core.
Related
I have a form built in Kentico and want to change the form action to point to a marketing automation vendor website (eloqua) to process the form. I noticed that there's no way to change the Action on the Form app, so I thought of using js to replace the action dynamically. I'm not sure whether it'll work, but another immediate problem I have is the field name/id generated by Kentico is so long (> 70 characters - e.g. p$lt$ctl02$pageplaceholder$p$lt$ctl03$On_lineForm$viewBiz$Company$txtText) and exceeds the length allowed by the vendor. Is there a way to shorten those names/ids?
To clarify, the reason I need to edit the name because the vendor allows to map (copy/paste) html name to whatever name it's using. I've tried pasting the whole string from one Kentico field and got the error message of exceeding character limit.
First part of the question, how do i direct a form to submit to another site?
In ASP.Net, the only way is to use javascript to alter the 's action url. Since you want to be careful where you edit this, i would use jQuery to replace the "Submit" button on your form with a javascript function that will alter the form before submission (so you don't mess up other postbacks)
$("button.MySubmitButton").click(function() {
$("form").attr("action", "http://TheVendor.com/PostLocation");
});
Next question is to alter the field names. If you absolutely MUST have form element IDs sub 70 characters, you will have to use Javascript again and it will break any postback-related functionality of the elements, so make sure the form is "as is" before doing it.
Again there is security concern because when you post to another location, you are sending ALL the data, including hidden asp.net inputs that contain viewstates and the like. You may want to take the time to 'eliminate' right before you submit any field that you don't want sent to the other site.
Something like this (Test it out a bit first though)
$("input:not(id*='txtName'):not(id*='txtEmail'),select:not(id*='ddlQuestion')").remove();
As #trevor-j-fayas points out, you can use javascript to point a form action to another url. While this does work you may end up writing a lot of javascript to not only point the form to a new url but also to do some data massaging (changing id's, doing url formatting, etc) before sending it to the target.
Additionally you lose some of the benefits of using a Kentico Form because the data never actually gets submitted back to Kentico such as email alerts.
I have worked in a similar scenario where were we sending data to Eloqua but instead of doing it client side we did it from the server by using either:
The OnOnAfterSave event on the BizForm control itself
The global BizForm submit hook BizFormInfo.TYPEINFO.Events.Insert.After
After the form is submitted to Kentico, our custom hook code runs which sends the data to Eloqua. In either hook you can fully access the Form metadata, field names, and submitted values. You can then craft an HTTP POST request and submit it asynchronously using a class such as HttpClient.
Is not a good idea from the architecture stand point and most likely not going to work without opening a huge hole in their vendor web site security. First of all how are they going to process the from if they don't know the field names, what if form fields change etc. Secondly you going to run into hell of trouble trying to submit form one site to another etc. What if the vendor site is not responding etc.
What you need to do is submit the form back to kentico web site i.e. process it on kentico web site and send email notification with results to marketing automation vendor website (the easy way for now) and redirect user to vendor web site.
Redirection and email - you can do out of the box without any programming. Actually to do all the above requires no programming and you get all the information recorded on your Kentico site.
Just for reference before mentioning the problem I would like to say that I have asked to same question on IBM Lotus forum(http://www-10.lotus.com/ldd/ndseforum.nsf/xpTopicThread.xsp?documentId=2AD7C8F89D8930E685257BD50022A9E9) and I have not received any reply for the same in last 2 weeks.
So, I have a typical xpage dropdown menu with say around 40-50 leaf nodes, Every leaf node submits a specific value (using submitValue property) which is then evaluated and action is performed. However, the problem is that, after the action is performed if I try to refresh the page i get the browser notification for re-submission (I believe that it is some kind of programming error by me, however I don't know how to resolve it.)
One example to make it more clear:
I have a delete node inside the dropdown. It basically deletes the selected entries from the view(generated using repeat control) and then refreshes the view content. But at this point of time if I try to refresh the page then I get the notification of re-submission by the browser. If I accept it, then it tries to delete it again (which I prevent it but still this shouldn't happen) and if I don't accept it, it just doesn't refresh the page.
Any reply would be appreciated.
Thank you in advance. Hoping to hear some suggestions. (Please let me know if event he code is required)
I believe you need to implement the Post/Redirect/Get pattern to avoid re-posting on refresh.
Here's a solution by Tommy Valand for XPages for that pattern: http://dontpanic82.blogspot.dk/2010/06/xpages-avoid-saving-duplicate-documents.html
I'm trying to figure out if it is possible to use ServiceStack Razor for old-fashioned server-side form validation.
By way of example: a GET to a url returns a razor template with a form. When the user POSTs the form, request DTO is validated and if there were errors, the user is shown the same form, with original values re-populated as and fields in error marked somehow. If, on the other hand the request DTO is valid, the service will redirect the user to another page.
Is that scenario possible?
If so, how would one go about implementing it? I presume I'll have to write certain filters or features for this to work, however I'm wondering what strategy will require minimum amount of coding.
(I understand javascript validation is possible, however my question is specifically whether it is possible to round-trip the form with server-side validation).
Take a look at ss-validation.js, it can be used to apply validation errors to your form based on ServiceStack's ResponseStatus.
So we write all our validation code server side using FluentValidation, then on round trip ss-validation reads ResponseStatus and applies markup.
Out of the box is assumes Bootstrap style validation, but it's fairly easy to modify to suit your needs, e.g. we amended to display inline icon tool tips instead of inline/block messages, and provide an error summary.
After a lot of spelunking of the ServiceStack codebase, it seems it is theoretically possible to achieve the desired scenario.
The code already contains ModelMetadata and ModelMetadataProviders classes, and some of the HTML helpers are ported from System.Web.Mvc.
Sadly, the classes are not fully wired, so I guess it will require solid amount of work to get everything working correctly as one would expect.
What's is the best way to prevent multiple submission when I'm using XPages?
For "classic web" solution is below.
How to Block Multiple Submissions of the Same Document from the Web
http://www-304.ibm.com/support/docview.wss?uid=swg21089865
Using jQuery, the solution is below.
http://www.norio.be/blog/2008/09/using-jquery-prevent-multiple-form-submissions
But I don't know the way in Xapges. How to prevent it in XPages or Dojo?
It is best not to apply such client-side techniques, because combined with an unreliable internet connection the user may find that the submission fails but be unable to retry.
A much more robust solution is to deduplicate on the server side, which can be done in a variety of ways; these are some that come to mind:
Define the semantics of your form contents so that it doesn't matter if you receive two requests (e.g. if it is updating a record, then a second update just changes nothing).
If you have seen the exact same submission before (compare all the relevant fields), ignore it.
Generate a serial number when you send the form to the client. Don't accept submissions that have a serial number you've seen before — or do something useful; for example, if it is a blog posting or comment form, then a second submission should be treated as an edit to the post created by the first submission.
You can prevent a submit by using XSP.addQuerySubmitListener and return false. This is not the easiest function to get working. So I suggest you take a look at the function in the book 'Xpages Portable Command Guide' or try my project multiple file uploader on OpenNTF. Download the project source code here.
I have a form which has about 15 fields a user has to input..I'm looking for a way to not scare the user's off.
I wanna see if someone implemented forms with too many fields differently or if anyone has any ideas
If not all the fields are necessary because they depend on some choice, you could only display the relevant fields once the choice has been made. You could also visually distinguish non-mandatory fields so that it's clear from the outset how much work has to be done by the user and how much is optional.
If everything is mandatory, then you could either go the Windows way and show tons of small windows in sequence and annoy everyone who just wants to get it done, but you'd not scare people who get scared by seeing lots of forms - a page counter is crucial, though. However, you could start with a small wizard view, but immediately offer an "advanced" option that would allow those who want to show everything at once, while still offering a guided tour as the default.
Try to keep it in steps - maybe organize about 3 different pages filled with the forms.
Example: Contact info, they hit continue. Then they hit another page, except with the forms for ordering an item. Then the third page is for payment fields.