Feed Icon  

Contact

  • Bryant Likes
  • Send mail to the author(s) E-mail
  • twitter
  • View Bryant Likes's profile on LinkedIn
  • del.icio.us
Get Microsoft Silverlight
by clicking "Install Microsoft Silverlight" you accept the
Silverlight license agreement

Hosting By

Hot Topics

Tags

Open Source Projects

Archives

Ads

Reporting Services Blogs

Posted in Reporting Services at Friday, February 27, 2004 4:32 AM Pacific Standard Time

For those of you who are interested in reporting services, here are a few Report Services blogs that I have come across recently (and subscribed to).

I keep wanting to post my blog roll on my blog, but

 

Update: but what? I'm not sure what happened but somehow the rest of my post got cut off. The but was that I have too many feeds to enter them by hand. So I guess I will need to write an XSL to convert the OPML from SharpReader to HTML.

Update: I've added three of my categories. I'll try to post the others soon.

Connectable WebParts

Posted in SharePoint at Friday, February 27, 2004 2:44 AM Pacific Standard Time

Patrick Tisseghem has added part 3 to his series on Building WebParts for Microsoft SharePoint. The article covers the basics of how to connect WebParts. If you're building WebParts you will also find parts 1 and 2 to be very useful.

Upgraded to .Text .95

Posted in General at Thursday, February 26, 2004 5:53 AM Pacific Standard Time

I just finished upgrading the site to the .95 version of .Text. It was a very easy upgrade. It took me a minute to realize I needed to copy the contents of the images folder to the new site folder, but other than that everything was well documented. I also noticed that it reset all my entries to be unread in SharpReader.

Now I just need to find myself a better skin...

Update: Check out this cool .Text skin

Welcome to Assembly Hell

Posted in Reporting Services at Thursday, February 26, 2004 2:12 AM Pacific Standard Time

Well I finally got my Reporting Services issue resolved. It seems the problem wasn't really with RS itself, but rather I had entered into some kind of Assembly Hell. Here is what happened.

1) I installed the Resharper Visual Studio add-in. I tried it out for a bit and then uninstalled it because some of the things it did to my IDE was driving me nuts.

2) I uninstalled the Enterprise version of RS.

3) I installed the Developer version of RS.

4) At this point the RS report designer no longer worked.

What finally gave me the clue that unlocked the mystery was the error message I was getting when I tried to create a new RS project. It was telling me that the “the located assembly's manifest definition does not match ...”. The assembly that it was reporting this problem for was Microsoft.VisualStudio.Shell.Interop.dll. So I then searched my hard drive for this file and discovered the problem.

Resharper had installed a copy of Microsoft.VisualStudio.Shell.Interop.dll in the Common7/IDE/PrivateAssemblies folder. The version on this file was 7.0.3266.0. RS also had installed a version of this file in it's own folder that which was version 8.0.30310.1. So apparently when VS was trying to load the report editor it was looking first in the private assembly folder and finder the version that didn't match what it was looking for. Once that happened it would just quit without giving any errors unless you specifically tried to create a new RS project.

So in the end, I could probably uninstall the Enterprise edition (which I now have running) and install the Developer version, but I really don't want to since everything is working and now I can go back to being productive. This is my first experience with Assembly Hell and somehow I doubt it will be my last.

Reporting Services Install Problems

Posted in Reporting Services at Wednesday, February 25, 2004 4:21 AM Pacific Standard Time

Yesterday I decided I wanted to run Reporting Services on my local development machine which is running Windows Server 2003. I already had the Reporting Services client tools installed. When I ran the Reporting Services Developer version install program it told me it couldn't upgrade the version that was already installed (which was Enterprise). So I had to uninstall Reporting Services and then reinstall the developer edition.

Now I can't open Reporting Services projects or create new Reporting Services projects. I've tried uninstalling/reinstalling many times to no avail. I've tried both developer and eval versions. We no longer have the Enterprise CD so I can't try that. Any ideas?

I think I will try reinstalling Visual Studio to see if that will solve the problem....

Update: I did a reinstall of VS and a reinstall of Reporting Services, still doesn't work. The report designer does not show up in installed products. But in the registry there is a key for the report designer under installed products and the package exists. I tried modifying the package settings (I changed MinVersion to “Developer”) and then I get an error message when I start visual studio. So it seems like the package at least attempts to load. Maybe I can look into the log files to see if there is any information there.

Trying things out in Reporting Services

Posted in Reporting Services at Tuesday, February 24, 2004 3:55 AM Pacific Standard Time

Tom Rizzo has asked for people to try some things out in Reporting Services.

1) Try customizing Reporting Services via its URL customization.  You can easily drop RS into an IFrame, SharePoint, etc. by using an URL.

I've done a lot of this recently. It seems to work pretty well for most things. However, there are a few things that I think could be improved:

  • The toolbar. It would be nice if you could specify to get only certain parts of the toolbar and if you could load the toolbar by itself in another frame.
  • It seems there is something strange with the report width and height. It seems like you always get an extra wide report even if you set it up to be narrow in the report designer.

2) Try programming the Web Services of Reporting Services.

This is pretty straightforward, however, it doesn't work very well if you're trying to hit the web service from a another server by passing the Credentials. You end up not being able to authenticate since it is a “double-hop”.

3) Exporting to XML. 

Haven't tried this yet. What would be a good reason to export this to XML?

4) Subscriptions and rendering formats.

These are also pretty easy to use. The email subscription doesn't seem to be compatible with Lotus Notes which is a real problem for us. Links do work, but they aren't as impressive as getting the full report in the email itself.

Some things I would like Reporting Services to do better:

1) Get some decent charting functionality. The way it currently works you can't even change the color of the chart items (you can only switch between pallettes).

2) Allow me to pass in the RDL to the Render function. There must be some way to do this since the report preview works in Visual Studio, but I haven't figured it out yet.

3) Provide some best practices for accessing the service via ASP.Net apps. I've heard that there are some Reporting Services Web Parts coming soon (which will solve a lot of problems for me), but how about some general guidelines on how to integrate Reporting Services into a web application.

Overall Reporting Services is a great product that we have been very happy with.

 

Answers to my For Xml questions

Posted in Sql and Xml at Tuesday, February 24, 2004 3:31 AM Pacific Standard Time
Michael Rys has posted his answers to my questions...

Yukon and For Xml (Part 2)

Posted in Sql and Xml at Friday, February 20, 2004 1:26 AM Pacific Standard Time

Michael has posted part 2 of using For Xml in Yukon. He even answered my question from my previous post. I must say I'm very impressed with the new For Xml syntax. It looks like it solves a lot of problems and removes the complexity that kept so many people from using For Xml.

Michael has requested that you post questions on what you want more information about. Below are a few questions that I have:

1) Will the new nesting mode support stored procedures?

2) Would you be able to store the results of a For Xml query into a variable? And if so, can you use those results in For Xml nested queries?

3) I'm not sure I understand the value list example:

(select orderid as 'data()'
 from orders
 
where customers.CustomerID=orders.CustomerID
 
FOR XML PATH('')
 ) as '@OrderIDs',

What does this result in? ?

4) When will we get to try these ourselves ;)

I guess if your moving on to XQuery next I will have to find a good XQuery book to get read up on the subject. The information posted so far has been great and I'm looking forward to more of it.

 

Yukon and For Xml Nesting

Posted in Sql and Xml at Thursday, February 19, 2004 7:28 AM Pacific Standard Time

Dr. Michael Rys has a great post up on how For Xml nesting will work in Yukon.

Obviously, this query is easier to write, understand and maintain. OTOH, due to the fact that we create intermediate XML objects, it may have worse performance characteristics (altough, sometimes it can be faster since we do not need the union and less joins).

I think the performance hit will be well worth it. Plus if you don't want to take the performance hit you can still use the explicit mode.

This nesting feature also looks like it could be useful for “fixing” something I run into when using Serialization. When I have a collection that I want to populate using a FOR XML query, I've found that you need the root element to be in the form of "ArrayOfType" where "Type" is the type of objects that make up the collection. In order to create the root element I use a simple view:

create view EmptyParentView as select '' as Parent

Then I join this view with my table in a FOR XML AUTO select query:

select Parent as IgnoreMe, -- Ingore this element
 ReportID,
 ReportTitle
from EmptyParentView as ArrayOfReport,
 Reports as Report
for xml auto, elements

This gives me an Xml result that can be deserialized into a collection. Would nesting help me? Maybe not since I really wouldn't be able to specify the root element type. Comments?

 

Irwando

Posted in Sql and Xml at Wednesday, February 18, 2004 11:52 PM Pacific Standard Time

Irwin Dolobowsky has started a blog! Have an issue with SqlXml, this is the guy to blame :)

I joined up on the team just at the end of the [SqlXml] 2.0 release cycle.  The 3.0 release was given to me completely and I've owned all of the SqlXml releases since then (so when you have issues, I'm the guy at fault).  I continue to work on that while also addressing SqlXml in the future.  We're working on integrating the idea of mapping XML to relational data into our Whidbey offerings, making it much more of a mainstream product. 

Read the rest of his Intro Post...

Code Access Security in SQL Server 2000 Reporting Services

Posted in Reporting Services | SharePoint at Tuesday, February 17, 2004 9:36 AM Pacific Standard Time

Code Access Security in SQL Server 2000 Reporting Services

An interesting read on security issues related to reporting services. The article also applies to SharePoint security...

WebParts and Web Services

Posted in Reporting Services | SharePoint at Tuesday, February 17, 2004 7:05 AM Pacific Standard Time

If you're doing any SharePoint development, then you will almost certainly be familiar with WebParts. WebParts are pretty much just fancy ASP.Net controls that allow the user to place them into WebPart Zones and save a personalized state, all of which is managed by SharePoint. WebParts are created using Visual Studio.Net (or a .Net compilier if you're into that type of thing).

One of the biggest problems I've run into so far when developing WebParts was in regard to web services. One of the WebParts that I've been working on was a Reporting Services WebPart. To program against Reporting Services you have to use the Report Services web service. This web service handles security using Windows NT authentication, so when you make calls to the service you have to provide it with credentials.

All of this is fine except for the fact that you can't take the credentials that you get in the WebPart (which are the ones passed in via the browser) and then pass those same credentials to the web service. This is known as a “double-hop” and isn't supported due to the way NT authentication is done (an interesting read). So what can you do?

Currently I've been doing a lot of client side javascript programming to get around this. To do this you create an MSXML http request and call the web service directly from the client and then parse the results and populate the web part using client side javascript. This actually works pretty well. I came across this method when I was porting the Office 2003 WebParts to an Office XP WebParts package that I created. However, when you add in postbacks, client script blocks, and code maintenance, this approach gets pretty complex pretty quickly.

Some other approaches can be taken such as using basic authentication with https. I'm also looking into seeing if I can make the web service calls using an administrator account but using a security check that passes in the userid to see if the user has permission to access the report. But I've had to put the project on a backburner for a bit while I build some more MDX reports.

Update: I've posted my first article on Reporting Services webparts here which covers the client side script approach.

A Wayward Post

Posted in General at Tuesday, February 17, 2004 1:36 AM Pacific Standard Time

From Matt Warren's post on Language Inferencing:

And while were at it, lets get rid of variable names.  I think I must spend at least 25% of my time thinking up good variable names.  If we didn't have to name them, I'd be done so much faster.

Subscribed :)

Complex Java

Posted in General at Monday, February 16, 2004 1:48 AM Pacific Standard Time

One of the interesting things at my new job is the technology culture. The group that I work in is a big MS proponent, but not everyone is. I know nothing when it comes to Java since I've never had to do any programming with it. So when upper management made the claim that .Net is fine for front-end apps, but you really need Java to do anything on the back-end since it can do more complex things, I kind of chuckled. I assumed they had no idea what they were talking about.

But today my whole perspective changed. I tried to sign up for an account on a website that uses Java and realized that I don't know anything when it comes to complexity. Below is the error message that I got (try doing this in .Net):

Cause:
com.atlassian.confluence.core.InfrastructureException: You are not licensed to add any more users to this installation of Confluence.

Stack Trace: [hide]

com.atlassian.confluence.core.InfrastructureException: You are not licensed to add any more users to this installation of Confluence.
	at com.atlassian.confluence.user.DefaultUserAccessor.addUser(DefaultUserAccessor.java:49)
	at sun.reflect.GeneratedMethodAccessor316.invoke(Unknown Source)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:324)
	at org.springframework.aop.framework.AopProxyUtils.invokeJoinpointUsingReflection(AopProxyUtils.java:59)
	at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:201)
	at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:176)
	at com.atlassian.confluence.util.profiling.SpringProfilingInterceptor.invoke(SpringProfilingInterceptor.java:17)
	at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:196)
	at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:135)
	at $Proxy5.addUser(Unknown Source)
	at sun.reflect.GeneratedMethodAccessor316.invoke(Unknown Source)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:324)
	at org.springframework.aop.framework.AopProxyUtils.invokeJoinpointUsingReflection(AopProxyUtils.java:59)
	at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:201)
	at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:176)
	at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:153)
	at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:196)
	at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:135)
	at $Proxy6.addUser(Unknown Source)
	at com.atlassian.confluence.user.actions.SignupAction.execute(SignupAction.java:27)
	at com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:173)
	at com.opensymphony.xwork.interceptor.AroundInterceptor.intercept(AroundInterceptor.java:37)
	at com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:170)
	at com.opensymphony.xwork.interceptor.DefaultWorkflowInterceptor.intercept(DefaultWorkflowInterceptor.java:58)
	at com.atlassian.confluence.core.ConfluenceWorkflowInterceptor.intercept(ConfluenceWorkflowInterceptor.java:32)
	at com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:170)
	at com.opensymphony.xwork.interceptor.AroundInterceptor.intercept(AroundInterceptor.java:37)
	at com.atlassian.confluence.core.ConfluenceValidationInterceptor.intercept(ConfluenceValidationInterceptor.java:18)
	at com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:170)
	at com.opensymphony.xwork.interceptor.AroundInterceptor.intercept(AroundInterceptor.java:37)
	at com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:170)
	at com.atlassian.confluence.security.actions.PermissionCheckInterceptor.intercept(PermissionCheckInterceptor.java:40)
	at com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:170)
	at com.opensymphony.xwork.interceptor.AroundInterceptor.intercept(AroundInterceptor.java:37)
	at com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:170)
	at com.opensymphony.xwork.interceptor.AroundInterceptor.intercept(AroundInterceptor.java:37)
	at com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:170)
	at com.opensymphony.xwork.interceptor.AroundInterceptor.intercept(AroundInterceptor.java:37)
	at com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:170)
	at com.opensymphony.xwork.interceptor.AroundInterceptor.intercept(AroundInterceptor.java:37)
	at com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:170)
	at com.opensymphony.xwork.DefaultActionProxy.execute(DefaultActionProxy.java:116)
	at com.opensymphony.webwork.dispatcher.ServletDispatcher.serviceAction(ServletDispatcher.java:182)
	at com.opensymphony.webwork.dispatcher.ServletDispatcher.service(ServletDispatcher.java:162)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:856)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:284)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:204)
	at com.opensymphony.module.sitemesh.filter.PageFilter.parsePage(PageFilter.java:129)
	at com.atlassian.confluence.util.profiling.ProfilingPageFilter.parsePage(ProfilingPageFilter.java:36)
	at com.opensymphony.module.sitemesh.filter.PageFilter.doFilter(PageFilter.java:61)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:233)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:204)
	at com.atlassian.seraph.filter.SecurityFilter.doFilter(SecurityFilter.java:161)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:233)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:204)
	at com.atlassian.seraph.filter.LoginFilter.doFilter(LoginFilter.java:181)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:233)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:204)
	at com.atlassian.johnson.filters.JohnsonFilter.doFilter(JohnsonFilter.java:96)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:233)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:204)
	at org.springframework.orm.hibernate.support.OpenSessionInViewFilter.doFilterInternal(OpenSessionInViewFilter.java:83)
	at com.atlassian.confluence.setup.SpringSessionInViewFilter.doFilterInternal(SpringSessionInViewFilter.java:32)
	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:39)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:233)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:204)
	at com.atlassian.util.profiling.filters.ProfilingFilter.doFilter(ProfilingFilter.java:132)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:233)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:204)
	at com.atlassian.core.filters.AbstractEncodingFilter.doFilter(AbstractEncodingFilter.java:38)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:233)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:204)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:257)
	at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:151)
	at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:564)
	at org.apache.catalina.core.StandardContextValve.invokeInternal(StandardContextValve.java:245)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:199)
	at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:151)
	at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:564)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:195)
	at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:151)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:164)
	at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:149)
	at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:564)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:156)
	at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:151)
	at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:578)
	at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:149)
	at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:564)
	at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:972)
	at org.apache.coyote.tomcat5.CoyoteAdapter.service(CoyoteAdapter.java:206)
	at org.apache.jk.server.JkCoyoteHandler.invoke(JkCoyoteHandler.java:324)
	at org.apache.jk.common.HandlerRequest.invoke(HandlerRequest.java:395)
	at org.apache.jk.common.ChannelSocket.invoke(ChannelSocket.java:673)
	at org.apache.jk.common.ChannelSocket.processConnection(ChannelSocket.java:615)
	at org.apache.jk.common.SocketConnection.runIt(ChannelSocket.java:786)
	at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:683)
	at java.lang.Thread.run(Thread.java:534)

My New Job

Posted in General at Monday, February 09, 2004 3:55 AM Pacific Standard Time

So in my last post I mentioned that I have a new job. I now work for Countrywide as a developer in a pretty small group that does mostly reporting. I'm doing a lot of work with SharePoint*, Reporting Services*, Analysis Services*, SQL Server, and .Net. I've spent quite a bit of my time developing web parts which has been pretty interesting. All the * items are products that are pretty new to me. So this has been an exciting change for me.

I will try to post some of my thoughts on these new products later this week.

I'm back!

Posted in General at Wednesday, February 04, 2004 12:53 AM Pacific Standard Time

Wow it has been a long time since I last blogged. In December I was too busy finishing up school and going on vacations to blog and on January 8th I started a new job. But I feel like things are finally normalizing enough to where I can start blogging again.