![]() |
Desktop Development »
Dialogs and Windows »
Dialogs
Intermediate
License: The GNU General Public License (GPL)
Bug Submitter DialogBy jeroen de dauwDialog that enables user to submit various types of bugs via a webservice |
VB (VB 7.x, VB 8.0, VB 9.0, VB 6), .NET (.NET 1.0, .NET 1.1, .NET 2.0, .NET 3.0, .NET 3.5), Visual Studio, PHP, Dev
|
|
Advanced Search Add to IE Search |
|
|
|
||||||||||||||||
This dialog enables user to submit various types of bugs with build in validation. The submitted information is then sent to a webservice.
I have a few small applications that I developed to improve my coding knowledge. An easy way for users to submit feedback on my applications and report bugs would be very useful in all of them. I created this dialog for this purpose, while keeping in mind that it should be stable, user friendly, and very easy to implement in any of my applications.
The dialog itself can be integrated without much work into your application, but the webservice will require some attention.
Here you have a simple example of showing the dialog:
With New BugSubmitter
.SubmitterFile = "BN+converter-pro.php"
.SubmitterPath = "http://service.bn2vs.com/bugs"
.ApplicationVersion = GetAppVersion("[M].[m].[b].[r]")
.ShowDialog()
End With
GetAppVersion is a simple sub that returns the application version formatted as a string. You can also manually get the version data or use a static value.
''' <summary>Returns the version of the application</summary>
''' <param name="format">The format of the version.
''' [M]: Major
''' [m]: Minor
''' [b]: Build
''' [r]: Revision</param>
Public Function GetAppVersion(Optional ByVal format As String = _
"v[M].[m].[b]") As String
With My.Application.Info
GetAppVersion = format.Replace("[M]", .Version.Major.ToString)
GetAppVersion = GetAppVersion.Replace("[m]", .Version.Minor.ToString)
GetAppVersion = GetAppVersion.Replace("[b]", .Version.Build.ToString)
GetAppVersion = GetAppVersion.Replace("[r]", .Version.Revision.ToString)
End With
End Function
That's all the code you need to display the dialog! Now let's have a closer look at some of the properties.
Before the bug report is submitted, the information is validated. This can be either done with an error provider when the user hits the submit button, or with live validation that will only enable the submit button when all fields are valid.
''' <summary>Gets or sets if an error provider should be used
''' to notify a user of errors.
''' When false, live validation will only enable the submit button when all fields
''' are valid</summary>
Public Property UseErrorProvider() As Boolean
Get
Return m_useErrorProvider
End Get
Set(ByVal value As Boolean)
m_useErrorProvider = value
End Set
End Property
The dialog has some events related to the submission progress, but you don't need to bother about these in most cases. There are three steps in the submission progress:
Every state will be clearly indicated to the user.
Now you can work with the dialog and understand how it works. Let's have a look at the webservice.
In my applications, I have chosen to use a PHP webservice that generates an email with the submitted data and then sends it over to my inbox. The example here follows the same principle, but keep in mind you can handle the submitted data any way you want, like for example storing it in a database. Also note you can use ASP or any other server script to write the webservice in.
This is a little script I created to easily construct multiple email webservices for different applications:
<?php
/**
* BN+ bug report mailer
*
* common.php
* Version 1.0.0
*
* By De Dauw Jeroen - jeroendedauw@gmail.com
* April 2009
*/
// Deny access when one of the arguments is not provided
if (empty($_GET['type']) || empty($_GET['description']) ||
empty($_GET['version'])) die("Hack attempt");
// Get the URL arguments
$type = $_GET['type'];
$description = str_replace("[amp]", "&", $_GET['description']);
$email = strlen($_GET['email']) > 0 ? $_GET['email'] : "None provided";
$version = $_GET['version'];
// Include the phpmailer class
require_once '../includes/phpMailer/class.phpmailer.php';
// Create a new instance of a phpmailer
$mail = new PHPMailer();
// Set the sender data
$mail->From = "bug-report@your-server.com";
$mail->FromName = "Bug reporter @ your-server.com";
// Create the mail with a simple layout
$body = "
<table border='1' width='100%'>
<tr bgcolor='gray'>
<td colspan='2'><u>Bug report for $app_name</u></td>
</tr>
<tr><td width='200'>Application version:</td><td>$version</td></tr>
<tr><td>Bug type:</td><td>$type</td></tr>
<tr><td>Bug description:</td><td>$description</td></tr>
<tr><td>User email:</td><td>$email</td></tr>
<tr bgcolor='gray'>
<td colspan='2'>Report send on ".date("F j, Y, g:i a")." (unix: ".time().")</td>
</tr>
</table>
";
// Set the mail subject, body and the address of the receiver(s)
$mail->Subject = "$mail_subject $type";
$mail->Body = $body;
$mail->AltBody = "Your client does not support html emails. Data cannot be accessed.";
$mail->AddAddress("your-mail@your-server.com", "yourName");
// Send the email, and display either a success message and the mail contents,
// or in case of failure the error details
// Displaying this is not required. You can also just send the mail with $mail->Send()
if ($mail->Send()) {
echo "Mail send successfully.<br />\n\n\n\n\n\n\n\n";
echo $body;
}
else {
echo "Error sending mail. ".$mail->ErrorInfo;
}
?>
A mail sent by this script will look similar to this one:
Now only a few lines of code are needed for each BugSubmitter:
<?php
/**
* BugSubmitter demo bug report mailer
*
* your-application-webservice.php
* Version 1.0.0
*
* By De Dauw Jeroen - jeroendedauw@gmail.com
* April 2009
*/
$app_name = "BugSubmitter demo application";
$mail_subject = "BUG REPORT: BugSubmitter demo:";
require_once 'common.php';
?>
Note that in this example, I assume you are either using this webservice only once, or sending all mails to the same address. If this is not the case, you can easily add a new variable in your-application-webservice.php, before you include common.php, containing the address for that webservice, and then add it to the mailer address list in common.php.
This was a nice exercise for me in creating a .NET dialog that loosely communicates with a webservice. I'm very happy with the result, and I'm now using this dialog in all of my .NET applications. I also got quite some positive feedback from people, and the request to better document this dialog, which prompted me to create this article.
| You must Sign In to use this message board. | |||||||||||||||||||||||||||||||||||||||||||
|
|||||||||||||||||||||||||||||||||||||||||||
|
|||||||||||||||||||||||||||||||||||||||||||
|
|||||||||||||||||||||||||||||||||||||||||||
|
|||||||||||||||||||||||||||||||||||||||||||
General
News
Question
Answer
Joke
Rant
Admin
|
PermaLink |
Privacy |
Terms of Use
Last Updated: 28 Apr 2009 Editor: Deeksha Shenoy |
Copyright 2009 by jeroen de dauw Everything else Copyright © CodeProject, 1999-2009 Web10 | Advertise on the Code Project |