Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Setelah Anda membatasi permintaan yang tidak valid ke server laporan dengan menambahkan pernyataan kondisional ke kode Anda, Anda harus menyediakan penanganan pengecualian yang memadai dengan menggunakan blok coba/tangkap. Teknik ini memberikan lapisan perlindungan lain terhadap permintaan yang tidak valid. Katakanlah permintaan ke server laporan dibungkus dalam blok percobaan dan permintaan itu menyebabkan server laporan melemparkan pengecualian. Pengecualian tertangkap dalam blok tangkapan, sehingga mencegah aplikasi Anda berakhir secara tak terduga. Setelah pengecualian tertangkap, Anda dapat menggunakan pengecualian untuk menginstruksikan pengguna untuk melakukan sesuatu yang berbeda. Atau, Anda hanya dapat memberi tahu pengguna, dengan cara yang ramah, bahwa terjadi kesalahan. Anda kemudian dapat menggunakan blok akhirnya untuk membersihkan sumber daya apa pun. Idealnya, Anda harus menghasilkan rencana penanganan pengecualian umum untuk menghindari duplikasi blok coba/tangkap yang tidak perlu.
Contoh berikut menggunakan blok coba/tangkap untuk meningkatkan keandalan kode penanganan pengecualian.
// C#
private void PublishReport()
{
int index;
string reservedChar;
string message;
// Check the text value of the name text box for "/",
// a reserved character
index = nameTextBox.Text.IndexOf(@"/");
if ( index != -1) // The text contains the character
{
reservedChar = nameTextBox.Text.Substring(index, 1);
// Build a user-friendly error message
message = "The name of the report cannot contain the reserved character " +
"\"" + reservedChar + "\". " +
"Please enter a valid name for the report. " +
"For more information about reserved characters, " +
"consult the online documentation";
MessageBox.Show(message, "Invalid Input Error");
}
else // Publish the report
{
Byte[] definition = null;
Warning[] warnings = {};
string name = nameTextBox.Text;
try
{
FileStream stream = File.OpenRead("MyReport.rdl");
definition = new Byte[stream.Length];
stream.Read(definition, 0, (int) stream.Length);
stream.Close();
// Create report with user-defined name
rs.CreateCatalogItem("Report", name, "/Samples", false, definition, null, out warnings);
MessageBox.Show("Report: {0} created successfully", name);
}
// Catch expected exceptions beginning with the most specific,
// moving to the least specific
catch(IOException ex)
{
MessageBox.Show(ex.Message, "File IO Exception");
}
catch (SoapException ex)
{
// The exception is a SOAP exception, so use
// the Detail property's Message element.
MessageBox.Show(ex.Detail["Message"].InnerXml, "SOAP Exception");
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "General Exception");
}
}
}