Evil Dev's Blog

Plots, Schemes, and Plans to take over the Devleoper world.... Mu hahahaha


News

For all those who are interested, the .NET User Group Meetings here in Winnipeg are starting up again next Thursday, check out Winnipeg's .Net user group Home Page for details.

My Stats

  • Posts - 14
  • Comments - 13
  • Trackbacks - 0

Recent Comments


Recent Posts


Article Categories


Archives


Post Categories


Blogs I Like


Cool Sites


 

Today, I was assigned a task at work, which involved taking a CSV format flat file and submit it to a third-party web service. Well the webservice that the data needed to be posted to, is not a .NET based webservice, so the hook-ups needed to be done manually.

The webservice is setup to accept an ISO Standard XML format called ADF, it's an eLead based schema used within the automotive industry to exchange prospect data from system to system. I took a look around Google, but wasn't able to find a .NET library for producing the format, so I set about writing my own. I was lucky enough to get an XDR Schema definition from the third party, which defines their implementation of the standard.

Turns out, there's a neat little console utility provided by Microsoft, in the form of the xsd.exe. One feature of this little tool is to convert XDR format schema declarations, into the more modern "XSD" format that is Microsoft's current standard. Another feature, is to take an existing XSD file, and generate .NET objects that serialize into XML honoring that XSD. Sure, the generated code isn't exactly the most api friendly (using arrays instead of generic lists), and it kind of forces you to initialize everything, instead of intuitively flowing.

Example:
I would like it more if you could do something like this:
Dim prospect As New Prospect()
prospect.ContactInfo.Emails.Add(new Email("something@somedomain.com"))

Instead it's more like this:
Dim prospect As New Prospect()
Prospect.ContactInfo = new ContactInfo()
Dim emails(1) As Email
emails(0) = new Email()
emails(0).EmailAddress = "something@somedomain.com"
Prospect.ContactInfo.Emails = emails

As you can see, it's quite a bit more code and effort, but at the convience of skipping the mundane, repetitive nature of creating your model classes. Especially for a quick and dirty importer tool that's only going to exist for 60 days.

One thing I should note, I have tried using the feature in visual studio to generate an XSD off an existing XML file. It's alright, but I find that the same feature in an app called XMLPad is substantially better. It's much easier to make tweaks to it to add enumerations and tweak xs:datatypes.

Anyways, this is one of those hidden little jems that ships with .NET that I felt I should share. This tool is definately worth a looksy, and why they don't just build a feature like that inside visual studio escapes me completely.
  • Share This Post:
  • Share on Twitter
  • Share on Facebook
  • Share on Technorati

 

Well, this isn't going to be a long post, but I recently had an experience at work that enlightened me to just how good the Support @ Microsoft really is.

A Little Bit of Background

Well, a little bit of history on this topic. At work, it's kind of a tradition, as it probably is at many organizations, that when someone leaves their screen unlocked that you change their desktop wallpaper and lock their computer for them, just to kind of remind them that they forgot to lock their screen, and comically embarrass them a bit.

Well, there's a new guy at work, he's been there about 3 months, and he has a bad habit of leaving his screen unlocked. Well, naturally, someone changed his wallpaper, to a picture of a Shirtless David Hasselhoff lifting weights, and tiled it across both his screens.The Hoff Loves You

Well, needless to say this was quite humorous, and naturally he laughed and logged back into his computer. He then proceeded to change his wallpaper back to what it was.

To his dismay, for some reason whenever he locked his screen, it still showed the tiled picture of the hoff across his desktop, despite changing his wallpaper.

What to do?

Well, what any usual course of action to combat the Hoff invasion, you'd have expected his first move to do some google searches to see what needed to be done to change this back. Well, he had another idea. That's right, he decided he'd skip the googling and go straight to the source of the problem. He emailed support@microsoft.com as follows:

Dear Microsoft,

 

Recently, my wallpaper was changed to a tiled picture of a shirtless David Hasselhoff. After changing my desktop picture, I have noticed that my lockscreen still displays the Hoff, and he’s still shirtless.  How did it get stuck there?

 

Did windows recognize the Hoff and decide that it liked it so much that it should remain my lockscreen background forever? Is this some undocumented feature of Windows Server 2003?

 

Any information on the subject would be greatly appreciated.


And he blind CC'D most of the dev's at the company. It was freakin' hillarious. He did eventually figure out how to get rid of the Hoff. However, this is not the end of my little tale. See the best part, is the fact that in under 24 hours, Microsoft sent him a response!

Hello _______,

 

Thank you for contacting Microsoft Customer Service.

 

I understand from your e-mail that you are unable to change the wallpaper on your Windows Server 2003 computer.

 

There are several ways to obtain support:

 

You may search for self-help articles to resolve your issue:

http://support.microsoft.com/ph/3198

 

You may also post your issue in the Microsoft newsgroups:

http://technet.microsoft.com/en-us/windowsserver/bb430837.aspx

 

If the Microsoft Windows Server 2003 came from your computer manufacturer, they are your primary option for support:

http://www.support.microsoft.com/default.aspx?pr=oemphone 

 

_______, you may also work with a Microsoft Support Professional via e-mail, telephone, and for some products, chat to resolve your issue. Please select the appropriate edition of Windows Server 2003 from the below link to contact the Support Professional. Depending on how you obtained your software, there may be fees to use the Assisted Support option: https://support.microsoft.com/oas/default.aspx?ln=en-us&x=14&y=13&c1=508&gprid=3198&&st=1

 

I hope the issue is resolved soon and appreciate your patience.

 

Thank you,

 

Sandeep

Microsoft Customer Service Representative

 

If you have any feedback about your Online Customer Service experience, please send it to my manager, Harpreet Singh, by clicking the link below. Please be sure to include the name of my manager in the subject field.


Now that's what I call impecible customer service! I must say, with confidence this is a definate WIN for Microsoft!
  • Share This Post:
  • Share on Twitter
  • Share on Facebook
  • Share on Technorati

 

Well, today I spent most of the day, trying to find an alternative way to render an SSRS Report to the page, other than the report viewer control. Based on a comment on my last post on this, I decieded to dig into the ServerReport.Render function.

Well, this sounded/looked promising, and I was quickly able to write a neat little wrapper object, exposing the various formats as properties. I then proceeded to create a special IRequestManager for reports, and some other stuff to nicely integrate it into our existing infrastructure.

I wrote a couple unit tests to test the wrapper, and after a couple minor bug fixes I was ready to rock. I threw together a quick and dirty XSL page, and decieded to go to town and see if I could get a report to render. Well, turns out, there's a little known hitch to this method that isn't easy to find on forums and blogs. It works just beautifully for the PDF/Excel/MHTML output formats, once you have the right headers in place, and Response.BinaryWrite(Report.PDF) etc to the page, it prompts the user to download the pdf, open it and looks great.

But, again, where the kick you when your down, is the HTML rendering. If you try the ServerReport.Render("HTML4.0") method, it fails to render any of the images in the report, and none of the Drill downs/hyperlinks work. Well, I decieded to dig into it, and figure it out. After a couple painstacking trial and error runs, and googlling, still no luck.

I eventually stumbled onto a blog where someone referenced that it wasn't possible to render the images with the server.render, you needed to use server.renderstream functionality. After some more frustrating trial and error and googlling, I finally figured out the issue. Turns out, SSRS renders images in different streams than the html, but that Server.Render returns the Stream ID's of the additional streams, and with a little bit of TLC, you can write those images to files. Tweak the DeviceInfo XML to change the StreamBase to the base path of where your dumping the images, and it works.

CODE EXAMPLE (And yes, it's in VB.):
Dim rv As New Reportviewer
Dim DeviceInfo As String = "<DeviceInfo><StreamBase>PathToMyPage/Images/</StreamBase></DeviceInfo>
Dim StreamIDs() As String
Dim HTMLBytes() As Byte

With rv.ServerReport
.ReportServerURL = "http://myserver/reportserver"
.ReportPath = "/MyPath/MyReportName"
HTMLBytes = .Render("HTML4.0", DeviceInfo, Nothing, Nothing, ".HTML", StreamIDs, Nothing)
For Each streamID as string In StreamIDs
Dim ImageBytes() As Byte = .RenderStream("HTML4.0", streamID, DeviceInfo, nothing, nothing..)
Dim fs As FileStream = File.Create("HardDiskPath to Images Directory used in DeviceInfo/" & streamID, ImageBytes.Length)
fs.Write(imageBytes, 0, ImageBytes.Length)
fs.close()
Next

Response.ContentType = "text/HTML"
Response.Expires = -1440
Response.Write(System.Text.UTF8Encoding.GetString(HTMLBytes)
Response.End()
End With

NOTE: The above Example is strictly from memory I don't have code in front of me, so I may not have called exactly the right functions, but should give you a good idea what I'm getting at.

This still doesn't fix the issue with the drill downs not working, and for now, I don't think we are going to go this route, we'll stick to having the page post back and using the report viewer control. I eventually may dig into this again, as it bugs me. I also don't feel it's a good Idea to be dynamically writing images to the fillesystem on each report request, and the above code is not designed with concurrency in mind, but I figured I had so damn much trouble getting this kind of working, that I'd help the community out and post my findings. Also, it's better to add a web reference to the Reporting Services Web Service for it's Render and RenderStream Methods, and maybe I'll talk on that more some other time.

If anyone knows more about this stuff, I'd love to hear what solutions you have come up with.
  • Share This Post:
  • Share on Twitter
  • Share on Facebook
  • Share on Technorati

 

Well, for a long time I have been a big fan of open source software, and although I'm not specifically a .NET developer, it's my main focus, as everything I do work related is .NET. I've known about The Mono Project for a while, and I typically run Ubuntu as my OS of choice, with XP running in a VM for when I really need it.

Well, I haven't booted up Ubuntu for a while, having been really busy doing work stuff, so today, I decided that it was time to take Ubuntu's Latest version, Jaunty Jackalope for a spin. I had tried it out back when it was beta, but never really had a chance to get into it.

One of the things I typically do on a new Ubuntu install is setup a lamp server, and install mono develop for the odd little app I decide to build on linux. For all you linux nuts out there that are going to bash me for using mono to do most of my linux development, shut it, I don't care about your opinion, .NET is natural for me, and unless I'm doing a serious development project, I tend to use what's the simplest to power out a quick and dirty app.

Well, to my surprise, Ubuntu has finally gotten with it in terms of being up-to-date with Mono. They may not have the most bleeding edge version in the repositories, but they finally have the latest major build, and all the major features available in the IDE. So, that's a nice surprise, that I don't have to download source files and compile mono/mono-develope from scratch.

RANT: Btw, compiling all the mono libraries and mono-develop libraries/plugins is HELL. It's so bad, it's almost warranted to switch from Ubuntu to Suse JUST FOR MONO. Seriously, it's almost worse than having a truck rammed up your ***.
END RANT

Anyway, it's not quite as straight forward as simply going "Add/Remove Applications -> Install MonoDevelop" unfortunately. The default install script for Ubuntu leaves out all the goodies of 2.0, but at least they are in the repository if you need them, you can "sudo apt-get install" whatever it's missing... like... the Integrated Debugger Plugin for instance? How bout the NUnit Framework/Plugin? Yep, that's missing too. They don't even install the SVN plugin by default. And the way Ubuntu's setup, the inhouse Add-In installer has no idea where/how to install these. But a simple Synaptic Search gets you what you need.

So, I finally got everything setup, installed, and configured, true to the nature of Linux (I love linux, but sometimes the repetitive manual configuration tends to work on my nerves).

Now, for something to do. Well a friend of mine asked me a while back if I could write him a little utility app to help him organize/index some files, and one of his requirements is it has to work cross-platform, as he has several machines all running various OS's. So, that's as good as any project, so I'm currently working on that.

If any of you have used a previous version of MonoDevelop, but have not yet upgraded to 2.0, do it. It may not be at VS's overal quality, but it's freakin' amazing. The fact that it now has a working debugger, nunit, asp.net syntax highlighting, and even has WinForms support now. I also believe as of the latest version, it now works cross-platform, so for you windows/mac folks, there's a version for you too.

Anyway, I fire it up, create my classes/projects, pick my target framework and start coding. It's all so fast, so smooth, and the Intellisense has REALLY improved over previous versions. Debugging is as easy as it is in Visual Studio, and a built-in test runner means I'm off to an excellent start.

I'll keep you guys posted on the progress of my project, and will probably make the source code available when it's all complete, but my point is if you've not tried mono, you really need to take this puppy for a spin. It's a great royalty free alternative to Visual Studio. And, it works just fine with native .NET dll's as well.

Link: http://www.mono-project.com/Main_Page
  • Share This Post:
  • Share on Twitter
  • Share on Facebook
  • Share on Technorati

 

Lately I've been noticing a trend in technology that is starting to scare me. I think we've advanced beyond the information age, and are upon a new era of communication and social networking. Gone are the days of actually phoning people, instead we have advanced so far as to invent telephones that instead of calling your friends, you can take full advantage of using a tiny little keyboard to stumble thumb some text message to them. Yes, technology IS advancing.

And I must say, I love Facebook/MySpace/Bebo/Whatever. Now, I can interact with my friends without even getting off my keester! I can instead waste my life away in front of browser window, refreshing the screen vigorously to see if my "friends' have sent me a virtual gift this morning. I can wake up every morning and spend my wonderful breakfast sorting through the massive amount of facebook app invites, or as I affectionately call them * spam *.

Yes, the communication age is amazing, especially twitter. What a neat tool twitter is! Now, I can legally stalk all my favorite celeberaties, no spending money on high-tech binoculars and wall scalling gear, nope, I can now do it relaxing in my underware, just sitting in my lounger, as I go through the endless sea of spam mail that's piling up in my inbox, and making sure I know immediately when any of my favorite celeb's go to the can.

Yes, I don't know where the world would be if we would all have to actually go out to the club to meet women,when you can view the endless ocean of Fake Profile pics and bull sh*t adds on the personals sight of your choice.

You can't even pirate a good movie nowadays without having to do some kind of virtual social interaction.

Why is this the case? Well my theory is that people in general are self consious and naive. They feel because they are not actually in the room with the person, that they are "Safe" they can live their internet lives the way they want and nobody wil be the wiser.

But where is it all going? With every person on the planet carrying a poket camera, you are constantly being watched, everything you do is being recoreded, and that bar fight you got into on the summer before you started university that ended up with you getting your butt kicked, and then strreaking down mainstreet stark naked, will be the first thing on googles list 12 years later when the Steve Jobs is reviewing your job application.

No my friends, I'm not anti-technology, but, do the yourself a favor, and the next time you are digging through your facebook invites and gmail spam, think about it, back in the day people used to spend time with other people.... I know that is SO weird!
  • Share This Post:
  • Share on Twitter
  • Share on Facebook
  • Share on Technorati

 

This is a topic that has been beaten to death. I know it, you know it, but I'm still going to give my version of it, just because I can.

One thing I'm going to try to do different from every other "implementation" of this topic, as actually make it practical. It's great that for good design you should follow <insert design pattern of choice here>. And for the crowd that's going to comeback with "The design pattern isn't as important, so long as your code follows the SOLID Principals", well, what exactly does that entail?

One thing I like to do every once in a while, is just sit down, relax, and imagine myself in the third person. As if I was watching my life on YouTube. Yeah, I know it's silly, but it's really something I think a lot of people need to do more often. Your probably thinking, what does this have to do with the idea of "Good Architect, Bad Architect", well before I get into that, I'll explain a little more as to why I do this.

Sometimes, you need a different outside perspective on things, you need to "see the forest" inspite of the trees. By trying to see things from the outside looking in, it helps me grab a different perspective on things.

I try to apply the same philosophy to whatever I'm developing. Even when I see a clear path through the application, a simple pattern to whatever I'm building, I try to give myself a new perspective. Because what is obvious to me, could be Chinese to the next person who has to look at it.

So, now to the point of my post, what is Good Architecture? Well, I don't care what your pattern of choice is, and I don't care what tools you decide to use in your application. A good Architect should try to see their code from a different perspective. For example, the experienced developer on the team may know the framework he/she is using inside and out, and when they design their code, even on something simple, they dive in, code it, test it, it works, great. They will stop, refactor a bit to make the code "pretty" and say "K, it's done, deploy".

I'm going to take the time now to give you an example of such a scenario. I came across this at work, and as such I'm not going to name any names, nor any direct references. If your reading this, and you know who/what I'm talking about, please keep it to yourself, the idea behind this post is to prove a point, not to point fingers.

Recently, I had one of the newer developers on my team, ask me for help on a task he was assigned, it was a simple enough task, make some tweaks to the system, to have it clear some text boxes on a website after a search was complete. When we dug into the code a bit, we came upon the engine driving this particular feature, being client side it was all being done with javascript.

At first glance, it was an impressive piece of code, the developer had done an excellent job of abstracting a 3rd party api, into a rather pretty javascript object. It was really clean code. I'm thinking great, finally a nice piece of code to dig through. But as we got deeper within the code, to find where we needed to make the change, I noticed something that was really throwing my team mate off. Within the code of the wrapper class, the developer of this particular chunk of code, was making some heavy use of the prototype javascript library. I don't know if your a web developer, or just reading this blog, but the prototype javascript library is a very well known javascript library. It's powerful, and abstracts away a lot of the headache of dealing with cross browser "fun". So, again, this is good practise, but, the code itself was writen, single letter variables passed to these internal functions, etc. I'm very familiar with prototype, having used it a lot in previous projects I've been part of, so I kind of got the just of what he was doing without much effort. But there's no documentation, and in places, single letter variable names (and not even obvious letters chosen) and it's didn't take me long to understand the delima of my team mate.

The point of that story, is just because you have the experience, and know-how to come up with an elegant design, simply taking the time to properly name his variables probably would have made the difference between the new guy being completely lost, and needing to get help, and the same new dev being able to catch on right away, and dive into his code.

I'm a big advocate for documenting code. No matter how clever you feel your design, somebody's not gonna understand it, and if it takes too much effort to understand your code, there is a good chance they won't touch it unless they have to, opting for writing the feature they need separately, and overtime, bloating and complicating the code, and compounding the initial problem until it's a big mess.

So, plan your code for the audience you expect will need to maintain it. If you know beyond a reasonable doubt it will likely be used differently in the future, plan the required components to be re-usable. Keep your code a simple as possible, you don't need an multi-teired enterprise class design on a sitelet that's going to be up for 3 months, and DOCUMENT your code, especially in areas you know won't be easily understood by anyone but you. Oh, and name variables so you know what they are.

That's my take.
  • Share This Post:
  • Share on Twitter
  • Share on Facebook
  • Share on Technorati

 

I was just reading a post on Donald Belchman's Blog today, as part of his series of  "Development Project Archetypes", and one of them was on the "Ooo.... Shiny...." developer.

An incestuous cousin to the Front of the Magazine Architect, this developer is easily distracted by any new technology. Not only will he want to talk about it endlessly, the ‘Oooo…Shiny!’ Developer will simply add the technology to the project without telling anyone. You will find, scattered through the code base, a number of different techniques, tools or frameworks that are used one time and then abandoned. While adding to your technical debt, the ‘Oooo…Shiny!’ Developer is working feverishly to keep adding new entries to the “Experience Using” section of his resume.

Sometimes it is easy enough to counter his predilection for new and shiny simply by placing a pretty glass bead on their keyboard every morning. When that fails, it’s time to up the priority of the code reviews for The “Oooo…Shiny!” Developer. And be merciless.

To view the original article, click here

This article, as well as the link to another article posted by one of his commenters (found here) kind of got me thinking on the subject.

A Little Bit of History

I get asked a lot by family members and friends to go with them to help them buy a new computer. Now, when helping someone pick out a new machine, I always try to be as honest as I can with them, especially when they are not tech savy. However, no matter what you say to them, even if you go in, pick a computer and say "Buy This" they always counter spam with "What If"'s and "Will It"'s, and pretty much talk themselves into spending more money on a computer because "What if I need to print something, and I don't have a printer" or "Well I shoudl probably get a good graphics card in case I someday want to play games on it.". I always used to cry a little bit inside at the naiveness of it all.

But after reading that article, it kind of got me thinking, am I really all that much different? As a developer I like to think of myself as tech-savy and "With it" but in a lot of ways developers are the worst for outbidding themselves.

I hear all the time at work "Man, this would be so much faster/easier if I used LINQ", or "If the idiot who built this would have used <insert shiny new technology of your choice here>, I wouldn't have to do all this work". We always seem to be making excuses why we need to move on to bigger, better things. Could we save a few lines of code if we did? Sure. Would we have a more "pretty" code base? Maybe. But what's the cost? You spend time researching, you implement a new technology, you usually do it wrong the first time, and rewrite your code 3-4 times before you get it right, god knows what else you messed up while doing so.

Don't get me wrong, change is good, and a requirement in the world we live in today. But, we don't need to change when every new system hits the shelves. We should learn about what's new, but don't give up the old just because the new does it a little more efficiently. Let somoeone else make the mistakes, and just sit back, relax, and learn from them.

 

  • Share This Post:
  • Share on Twitter
  • Share on Facebook
  • Share on Technorati

 

Well, hey there you poor unsuspecting folks out there?! That's right. I made a blog ( I know what your thinking.. and yes they do let just anybody get one now adays...). I'm now a completely one of a .. million developers out there who have blogs! Yay Me! On a more serious note, I'm going to answer a few questions:

Why Did I Create a Blog?

Why not? And also, cause I figured it's a good way to force people to hear my opinions on stuff <insert evil laugh here>. I think it's also a good way to get my name out there, and to have a little fun in my spare time.

 

What Am I Gonna Blog About?

Seriously? I don't think anyone really knows the answer to this question, but let's start off by bloggin' about me, and who I am. Then we can get into the less lame/boring stuff and start discussing design patterns, and gamma theories and such interesting geek stuff.

 

INTERMISSION RANT: OK, seriously, I really detest the HTML output by these WYSIWYG editers... honestly, I'm horrified.. since when does every time I hit enter mean put in a <p>&nbsp;<p> into the page? Wouldn't a simple <br /> be sufficient?
END RANT.

 

Who am I?

That's a good question, I'm a lot of things, late for dinner is definitely not one of them <pause for expected groan at lousy pun, Kelly, never you mind, it's my blog, I bad pun if I want to bad pun XD>. By day, I'm a mild mannered developer, working at DMT, building' .NET apps, and SQL Reports. By night, I'm a Ubuntu fiend, cruising' around my php and python code. Lately my major focus has been directed to SQL Server Reporting services (yeah, work stuff always seems to invade my study time....).

I've been a software developer officially for almost 2 years, but I've been programming since around the time I was in grade 8, when I tinkered with Pascal on my beastly Tandy 2500 machine (I still say Microsoft should have quit at Windows 3.1...), all my professional experience though is in .NET.

 

POINTLESS INTERMISSION RANT: Yeah I know I already ranted about the WYSIWYG Editor, but another thing, how come these things never seem to have syntax highlighting in source view? I mean I know HTML is a complex language...
END RANT

 

Actually, that's about all I really have to say about me, if you want to know more, then ask. <cough>* stalker *</cough>

  • Share This Post:
  • Share on Twitter
  • Share on Facebook
  • Share on Technorati

 

So, today I was working with the ASP.NET Report Viewer Control. If you don't know what that is, it's an ASP.NET control that comes with .NET, and what it does is allows you to display a SSRS Report on your website. True to ASP.NET, it seems very simple at first, drag, drop, set parameters... and then of course, there's the fallbacks on the things it cannot do.

A major thing to me, when I'm developing a website, especially recently, is performance. I hate going to a website, and waiting more than 3-5 seconds for a page to be rendered and useable on my screen. So, when I build a webpage, it simply won't do to put my users through what I myself can't tolerate. (Plus, I get less frustrated when debuggin that way).

Well, turns out the way this control works, it's kind of neat, there's a little property to allow it to do what it needs to do asynchronously, so it renders the control quickly, and it then goes and gets the report. And I thought, hey, that's neat. But here's the thing, the application I am working on, is not an Asp.Net powered app, it's actually an XSL Transform powered application. For now, I simply do not know if it's worth it/possible to get a report from reporting services rendered to a webpage in using an XSL Transform. It definately is not a built-in "Feature".

So, the solution I came up with was to create one single ASP.NET Page, to be the master report viewer page. The one ring to display them all if you will. Keep in mind, I'm not really a front end guy, so my experience with Asp.NET is somewhat limited. I go ahead, add the Aspx page to my project, do the necessary configuration/handler building/setup stuff required to make it work.

My next step is to add the report viewer control to the page. Easy. Drag, Drop, done. I then proceed to the code behind to do a little "grab report name/report parameters out of the query string" code, and pass them to the control. Again, easy. Try it out, it works. Don't like the fact that when I resize the page, it doesn't resize the control, break-out some mad javascript goodness, and ok, vola, it resizes with the page.

INTERMISSION RANT: Why is the "Auto-resize control to parent" feature non-existant in like ALL built-in Asp.net Controls??
END RANT

OK, so now we seem to have all that working. Great. Fire it up, sure enough it works, the report renders to the page. I'm done right?

Not quite. Turns out, one of my reports, is a Summary Report, that links to detail report. Linking between reports, breaks the whole process.

Workaround? Seems to me the only work around is to change how the Summary Report Navigates to the detailed report, but changing the navigation property of said report items in the report, so instead of linking to a report, I link to the report viewer page I just created, passing in the required parameters into the query string.

Well, works like a charm, but breaks the whole "Link To Report" feature in my reports, and breaks the back button functionality of the report itself. Also, true to Asp.Net Style, the whole page does a post back, and then re-renders itself with the new report.

So now, I'm digging through articles, reverse engineering the control etc, to see if there's some cool client side event I can call to trigger the report to load the detailed report client side, so my page doesn't have to go through it's entire lifecycle to simply reload part of the page.

END OF ARTICLE RANT: Also, I'm not a huge fan of the way the report viewer works. It essentially, renders an IFRAME containing the report, and inside the IFRAME it's doing a bunch of Frameset stuff, that's really annoying. It's really bad HTML output to the screen, and doing way more garbage than it should, but who am I to judge right?
END OF END OF ARTICLE RANT

  • Share This Post:
  • Share on Twitter
  • Share on Facebook
  • Share on Technorati