Dot Net Dunk

Wandering in the land of .NET
posts - 42, comments - 22, trackbacks - 187

My Links

News

Archives

Post Categories

Blog Roll

UI Process Block: Let me help you

I've noticed a number of referrals from Google from people looking for help with the UI Process block.

Having spent some time with the UI Process Block I'd like to share my experiences, but to do that I would like to know what information people are after. Please leave me a comment below, or contact me directly using the "Contact" link above and I'll try to come up with some suitable articles.

Finally the obligatory plug: If you are looking for help with UI Process Block implementation, especially on projects that also involve BizTalk, my employer (www.solidsoft.com) specialises in BizTalk and .NET implementations so feel free to make an approach to learn more about us and (I hope) engage us commercially.

IMPORTANT UPDATE: I haven't worked with the UI Process Block for almost a year, so it's increasingly hard to devote time to looking into these issues. Please feel free to continue using my comments section to ask questions - but it's unlikely that I'll be able to chip in with answers. Don't forget the Got Dot Net workspace.

IMPORTANT UPDATE #2: I've now closed comments on this entry; please direct your questions to the official Got Dot Net workspace.

IMPORTANT UPDATE #3 :): Closing comments meant they weren't displayed any more; that was unintentional and seems to be a limitation of the .Text blog engine. Comments are open again so that you can see the old content :).

Print | posted on Tuesday, May 04, 2004 1:41 PM | Filed Under [ BizTalk Server C#/.NET Development MS Application Blocks ]

Feedback

Gravatar

# re: UI Process Block: Let me help you

The best resource is MSDN. Check out:
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnpag/html/uipab.asp?frame=true
7/6/2004 7:32 AM | Duncan Millard
Gravatar

# V2 Back Button Patch

Duncan,
I'm in the middle of a development process for a new web product and we went with UIP. I applied the patch as posted on GotDotNet.com http://www.gotdotnet.com/Community/Workspaces/viewuploads.aspx?id=0af2b0ef-b049-401a-a2f2-f55a070c1572 as posted by Spidey. As its port from V1, do you have a good readme file about V1 (there wasn't one posted by Spidey). I'm specifically looking to see if there is some configuration options for it.
7/21/2004 5:32 PM | Kelly
Gravatar

# re: UI Process Block: Let me help you

Hi,

Sorry for the delay in replying - I've been out and about for a while.

The v1 patch is still available for download, and it includes a readme. However to answer your specific question, there is no configuration-driven option, you need to edit the source files to give the behaviour you want.

The good news is that (in v1, at least) all of the options are fully coded up - just uncomment the block you need.

Cheers,

Duncan

From the readme to v1:
This release is a full fix to the issues with the back button, and gives you a number of options as to how to handle reposting of data:

1) Do what the old UI block does (why would anyone want this? I've left it in just in case)
2) Process the postback using the view, navgraph and task that were in use when that view was on screen (this is what is most intuitive to the user, but can give you duplicate posting of data)
3) Throw an exception if there's a repost - you can handle this in your global.asax
4) Force a navigation using the value "repost_error" as soon as the postback is detected - this allows you to control postback handling for every view in every navgraph.

You set these options by editing UIPManager.cs at line 74 - they are not configuration driven (yet...) but the options and code are well commented.
7/26/2004 12:08 PM | Duncan Millard
Gravatar

# re: UI Process Block: Let me help you

Hi,
I am new in UI prcesse block - one question:
in ASP web form how you deal with frameset or tabs (multiple views) using UIPB?
9/9/2004 1:51 PM | olaf
Gravatar

# re: UI Process Block: Let me help you

Hi Olaf,

This isn't something that I have worked with but here's how I would address it.

Each frame is a page, or view, in its own right. As such you could assign a different controller to each frame. Bear in mind that you only really need to use the UIPB for complex interactions, so if one frame is simply for navigation you may just want to use a normal ASP.NET page.

For tabbed views you could make your controller "tab aware", so that it retrieves the correct data for the current view.

I hope this helps - it's hard to be more specific without knowing your exact application.
9/13/2004 11:23 AM | Duncan Millard
Gravatar

# re: UI Process Block: Let me help you

Hello Duncan,

I'm having a problem to run my "HelloWorld" WebForm using UIPAB. I've followed every step of the UIPAB user manual, but when I try to run the page a exception is thrown : "Objet not set to a instance of object" at this line :
SessionMoniker sessionMoniker = SessionMoniker.GetFromSession( new Guid( Session[CurrentTaskKey].ToString() ) );

I've figured out that there was no instance for Session[CurrentTaskKey] . How it is initialized?

Thanks!

Mattioli
9/21/2004 2:31 AM | Mattioli
Gravatar

# re: UI Process Block: Let me help you

Hi Mattioli,

It sounds like you haven't started the task. In the UIP you must first use the UIPManager class to "start" the task that the user is carrying out. This assignes a unique Task Key to that user, which is read automatically by the UIPAB. If you don't start the task, you will see an error similar to yours.
See http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnpag/html/uipab-ch03.asp, under the heading 'Starting and Resuming Tasks', for details of how to start a task.
9/21/2004 2:03 PM | Duncan Millard
Gravatar

# re: UI Process Block: Let me help you

Hi Duncan,

First of all, I'd like to say: it's really nice of you to offer your help to people. Thank you for that!

My question is:
I'm currently trying to find out if UIPAB v2 is the way to go for my application. In trying to understand the block, I'd like to take a look at a class diagram or other schematic. A search on the internet provided me the architectural overview in the MSDN libs (only the flows) ... can you suggest other urls which can assist me?

Thanking you in advance!

Phoenix
10/21/2004 5:18 PM | Phoenix
Gravatar

# re: UI Process Block: Let me help you

Hi Duncan,

My first question is the same as Phoenix asked i.e. i want to get some sort of diagram to better understand the model.

The second Question:
I've looked into the code that UIPAB2.0 uses to load a class (the GenericClassFactory's method), this method uses reflection to load the assembly and create an instance of whatever class name provided to it. It does'nt even retain the object of the loaded assembly, and reload a new assembly everytime this method is called. Dont you think this would be a huge performance overhead considering that this method is used by ControllerBase,ViewManager and LayoutManager to load their classes. If you agree then can you suggest an alternate strategy for this n if you dont agree then please explain y.

Your quick response will be highly appreciated. Thanks for your help in advance.

Faizan Ahmed
10/22/2004 10:06 PM | Faizan
Gravatar

# re: UI Process Block: Let me help you

Hello All,

Does it seem appropriate to use the Graph Navigator in the UIPAB for a workflow web-based application. It will guide the user through a case and allow the user to enter details about each case and see comments made by other parties involved. The application will keep track of what actions were taken in a History file and will keep track of the case by displaying it's current status to the user. Lastly the app will send notifications and generate letters as this work-flow process changes status (i.e. from open to closed or new case, etc.)

Thanks for your help!

-Brian
10/25/2004 3:30 PM | Brian Evans
Gravatar

# re: UI Process Block: Let me help you

Dear All,

We have an existing project in which lots of Web user controls are used. Now we want to use UIPAB to manage the workflow and state values. However, there is only Windows user control view (WindowsFormControlView) shipping with UIPAB 2.

Can we apply UIPAB on Web user controls (even without the requirements of workflow from control to control, instead, Web page to Web page)? If can, how can we achieve that? Implement our own class based on System.Web.UI.UserControl and Microsoft.ApplicationBlock.UIProcess.IView?

Thanks for your help!

Jason
10/25/2004 7:50 PM | Jason
Gravatar

# re: Brian Evans Workflow Driven App

Hi Brian,

The UIP is ideal for applications that have multiple steps - you define the steps as your "navigation graph". At each point in the graph you can specify valid navigations, for example from page 1 of a case to page 2.

In addition, the use of a "controller" to react to user interface events means that you can incorporate some centralised way of controlling the sending of letters, notifications, etc.

I don't know the scale or size of your project, but have you considered BizTalk and/or K2.NET? These are commercial products that could really accelerate your development. If you'd like to know more about these just drop me a note using the "Contact me" tab at the top of this page.
10/26/2004 8:46 AM | Duncan Millard
Gravatar

# re: Jason's User Controls

Jason - sorry but custom user controls and the UIPAB isn't something I've worked with. Have you tried posting to the Got Dot Net Workspace?

http://www.gotdotnet.com/workspaces/workspace.aspx?id=0af2b0ef-b049-401a-a2f2-f55a070c1572
10/26/2004 7:48 AM | Duncan Millard
Gravatar

# re: Faizan - UIPAB Performance

Hi Faizan,

I don't have time right now to dive into the code to that level, but I will try to look soon. My initial response is that although loading by reflection is *relatively* expensive compared to instantiating an in-memory class, that doesn't necessarily mean it's a problem. There are plenty of parts of .NET that load assemblies dynamically - ASP.NET for example.

Bear in mind that in a typical web app you are going to be rendering pages, talking to the database, running transactions, and so on, so there's a lot more going on that just dynamically loading an assembly or two. Beware of "premature optimisation" [1] - one bad algorithm in your business logic will waste more time than dynamically loading an assembly.

To put it in context, I have used the UIPAB as a front end to an application based on BizTalk - that does a hell of a lot more work than dynamically loading an assembly or two, but it is still fast enough to run synchronously and support many users.

I hope this helps for now - the right answer is to run your own testing; don't get hung up on individual lines of code - CPU and memory are cheap compared to the amount of time it'll take you to analyse every line in the UIPAB!

[1] http://c2.com/cgi/wiki?PrematureOptimization
10/26/2004 8:53 AM | Duncan Millard
Gravatar

# re: UI Process Block: Let me help you

I am having a similar problem as Mattioli. I get the same error, but I am fairly sure that I am starting the task. Here is code that is in my default.aspx form:

public class _default : Page
{
public _default()
{
}

private void Page_Load(object sender, System.EventArgs e)
{
// Put user code to initialize the page here
UIPManager.StartNavigationTask("CustomerNavGraph");
}

Am I missing something?

Here is a bit of code from my web.config file:

<navigationGraph iViewManager="WebFormViewManager" name="CustomerNavGraph" state="State"
statePersist="SessionStatePersistence" startView="customerList">


Please help
10/29/2004 7:48 PM | Jacob
Gravatar

# Trouble with start view

I have a trouble in the start view. can i put the code

// Put user code to initialize the page here
UIPManager.StartNavigationTask("CustomerNavGraph");

In the page_load() of a web page and then on the click of a button call navigate(). since i want the first page of the site to be the first view. Iam getting a null reference exception .

Can I put the code in session_start ?

now I have put a dummy page dfault.aspx
inside that
UIPManager.StartNavigationTask("CustomerNavGraph");
then response.redirect("first.aspx")
is this the right way??
10/31/2004 5:18 AM | Sreekumar Menon
Gravatar

# re: UI Process Block: Let me help you

Never mind, found my problem, got it working
11/2/2004 8:47 PM | Jacob
Gravatar

# re: UI Process Block: Let me help you

Hello

I try to use the StartOpenNavigatorTask in my web app but I keep getting this error

Object reference not set to an instance of an object.

When debugging is see that there is nog DefaultViewManager in my config... How can I do this?

I have used an example of the quickstart so it should work...
but it doesnt :(

Can you help me with this?

Regards,
Barry
11/3/2004 4:49 PM | "Object reference not set t
Gravatar

# Jacob...

Could you post the solution so that we can all share it? Thanks!
11/5/2004 2:17 PM | Duncan Millard
Gravatar

# Sreekumar Menon...

Wanting your first page to start the task is a common grumble - it's annoying to need an initial "launch" page.

Instead of a response.redirect you might want to try a Server.Transfer so that it doesn't rely on a round trip to the client to start, but this isn't something I have tried.

You can't start the task in the page load and then navigate in the same page, because the navigate requires the page to be a WebFormView. But in order to inherit from WebFormView you need to have an active task, otherwise you get the message that you are seeing - the null reference.

One way to get around it is to present a kind of menu/introduction page, and start the task when they choose the first option, such as "Click here to enter". It's not ideal, I know.
11/5/2004 2:22 PM | Duncan Millard
Gravatar

# Barry - DefaultViewManager

Barry can be you a bit more explicit? Do you mean that no DefaultViewManger is defined in the configuration? Or that the object was not created even though it's in the configuration file?
11/5/2004 2:23 PM | Duncan Millard
Gravatar

# How to use UI block with multiple web applications?

I have written a couple web applications that uses the UI block, it works fine. (They are very simple application, up to 10 aspx pages in one application.)

Now my problem is that, I need to integrate those applications into one and use single login to authenticate users to use these applications. I can twick the FORMs authentication part to use the single login, but I don't know how to navigate away from one application to another. Do you have any suggestions?

Any help will be greatly appreciated.

Thanks a lot, FIC
11/5/2004 4:13 PM | FIC
Gravatar

# FIC...

Will both of the applications be living under the same web directory or are they going to stay as having separate URLs? If they are separate URLs then you can't really integrate them under one config file.

If however they are mergine to one web app, you can effectively treat each application as being a separate task. When you move to the second application you are starting a new task. When you come back to the original application you could either resume the old task and continue where you left off in that application, or start a whole new task.

Hope this helps,
Duncan
11/5/2004 4:21 PM | Duncan Millard
Gravatar

# re: FIC... 11/5/2004 4:21 PM Duncan Millard

Duncan,

Thank you so much for your quick response. Yes, you are right, they will be on the same server, I'm thinking to put them under one root directory. I've been reading up on having multiple controllers, there's a sample app in the UIP download, however it's still in one application. Maybe I will have to end up doing that?

Thanks a lot!

FIC
11/5/2004 4:42 PM | FIC
Gravatar

# re: FIC... 11/5/2004 4:21 PM Duncan Millard

Duncan,

Thank you so much for your quick response. Yes, you are right, they will be on the same server, I'm thinking to put them under one root directory. I've been reading up on having multiple controllers, there's a sample app in the UIP download, however it's still in one application. Maybe I will have to end up doing that?

Thanks a lot!

FIC
11/5/2004 3:42 PM | FIC
Gravatar

# re: UI Process Block: Let me help you

No problem - you're lucky, it's Friday afternoon and I happen to have a spare twenty minutes!

To avoid merging them entirely you could put them under a sub directory, e.g.:

/PhonyRoot/MyApp1 and
/PhonyRoot/MyApp2

then merge the two web.configs and put them at /PhonyRoot/web.config

What is the problem that you are trying to solve? Single sign on to both applications? If so that's nothing to do with the UIPAB - if you want to navigate from one site to another then instead of using a Navigate method you could simply run a Server.Transfer or a Response.Redirect to navigatge to the other web site.
11/5/2004 4:03 PM | Duncan Millard
Gravatar

# re: UI Process Block: Let me help you

Yeah, I am Lucky!

Well, here's my problem, I sure can use a Server.Transfer to navigate to the other web application, but my impression is that the Task starts in my login page.

For example in App A: I have Login.aspx, Dowork.aspx etc

Once the user is authenticated, in Login. Login_Button_Click:

If user is valid then
UIManager.startTask("NavA")

If I do Server.Transfer to another site, since it does not require user to log in again, where would I "StartTask"?

Thanks a lot!

FIC
11/5/2004 6:07 PM | FIC
Gravatar

# re: UI Process Block: Let me help you

I am trying to implement OpenNaviation. The graphNavigation is working fine but when I change to startOpenNavigation it gives me an error.

Dim task As New myController.myTask("123456")
UIPManager.StartOpenNavigationTask("myGraphNav", task)

11/5/2004 6:23 PM | Rajesh
Gravatar

# re: UI Process Block: Let me help you

hi
when I use SessionStatePersistence in web.config, if session expire, the initial of basewebformview with throw out a error

[NullReferenceException: Object reference not set to an instance of an object.]
Microsoft.ApplicationBlocks.UIProcess.WebFormView.GetSessionMoniker()
Microsoft.ApplicationBlocks.UIProcess.WebFormView.WebFormView_Load(Object sender, EventArgs e)

if there solution for this problem?

thanks
11/9/2004 8:05 PM | jeff
Gravatar

# re: UI Process Block: Let me help you

I'm trying to set up exception handling in an app which utilizes UIP. I have a question about the program flow after I try to Navigate() to an error page from within my controller. The issue is that it does not immediately take you to the error page; the successive lines of code are executed until it completes. But because of the exception, I don't want anything following that to execute! So, in the example below, even if an exception occurs, the dataset is returned. If the calling method tries to do something with that dataset, and the dataset is nothing because of the exception encountered, then an error screen is encountered. How do I get UIP to go to my error page right away and not continue any further processing? Thanks!!

Public Function getPropertyTypes() As DataSet
Dim clsCodelistBOB As New PropSearchBOB.CodelistBOB
Dim dstCodelist As DataSet

Try
dstCodelist = clsCodelistBOB.getPropertyTypes()
Catch ex As Exception
State(STATE_EXCEPTION) = ex
State.NavigateValue = "fail"
Navigate()
End Try

Return dstCodelist
End Function
11/16/2004 7:27 PM | Donna G
Gravatar

# re: UI Process Block: Let me help you

Hi folks - just a quick note to say that I won't be able to answer any queries until the end of November... I'm maxed out on a client site this week, and away on holiday next week... Sorry. I will get back to you though :-)
11/16/2004 9:14 PM | Duncan Millard
Gravatar

# re: UI Process Block: Let me help you

re: # re: UI Process Block: Let me help you 10/25/2004 7:50 PM Jason

Hi Jason and Ducan.

i just posted this on the got dot net site for you guys...

http://www.gotdotnet.com/workspaces/messageboard/thread.aspx?id=0af2b0ef-b049-401a-a2f2-f55a070c1572&threadid=70045c7b-e96e-4ab6-84de-d0379c35509d

maybe this might help?
11/24/2004 1:22 AM | Pure Krome
Gravatar

# Stopping people avoiding start task?

Hi folks.

has anyone found users bookmarking pages deep within your site map / site ... so they try to enter the site via 'backdoors' ... which gets that funny error

"Objet not set to a instance of object" at this line :
SessionMoniker sessionMoniker = SessionMoniker.GetFromSession( new Guid( Session[CurrentTaskKey].ToString() ) );

.. becuase the task hasn't started.

are there any tricks of the trade to check to make sure tasks are started? what things to people do to stop this from happening?

what happens if i log in normally (ie task is started), but then jump deep down to some other random view ... one that is not suppose to be PART of the task navigation graph!?

-PK-
11/24/2004 12:25 AM | Pure Krome
Gravatar

# re: UI Process Block: Let me help you

Hi Pure Krome-- thanks for the message on the GDN site.

Regarding trapping the backdoors, I'd try putting some code in the Session OnStart event in global.asax and redirecting to the task start page, or trapping errors in the global.asax and checking for the presence of that specific error. I've used the latter approach myself, and it also lets you detect when the UIP session has timed out.
11/29/2004 9:15 AM | Duncan Millard
Gravatar

# re: UI Process Block: Let me help you

thanks heaps Ducan for the reply. Secondly, i've tried using your back button patch 'cause we've now stumbled to that problem -> mainly with our web design team doing the front end html.

i downloaded the file and noticed 6 .cs files and a readme. After looking at the files and adding them i noticed the solution fails to compile. After reading some of the files i've noticed u've encapsualted a few of the base core files into a new single file (eg. Concrete and Interfaces). ok, so just remove the base core files and compile ... well .. that got rid of the old errors but now there are new ones. like

C:\Program Files\Microsoft Application Blocks for .NET\User Interface Process 2.0\Code\Microsoft.ApplicationBlocks.UIProcess\ViewManagers\WizardViewManager.cs(31): 'Microsoft.ApplicationBlocks.UIProcess.WizardViewManager' does not implement interface member 'Microsoft.ApplicationBlocks.UIProcess.IViewManager.ActivateView(string, System.Guid, string, string)'

i've noticed you've updated the actual interface.

so .. i'm not sure of the correct procedure for implimenting your back button patch -> the readme file said just 'apply' over the base or v1.

?? :(
11/30/2004 12:07 AM | Pure Krome
Gravatar

# re: UI Process Block: Let me help you

bleh! soz ducan. you're code is for v1. i grabbed spidey's and it seems to be fine.

it currently uses the repost_error method. i'm not sure if he has the ability to choose all 4, like you have.


one other question Ducan : how many websites do u have running live using UIP? we have a number of large projects here in melbourne and i'm currently a test-dummy for using UIP. It's a bit scary but if it works, it would be supa sweet. I'm also going to need to add some extra code to the UIP base code for mobile devices .. which is also very scary.

could you please post some thoughts on your experience with failure / success with your live sites .. if applicable?

thanks once more mate :)
11/30/2004 1:55 AM | Pure Krome
Gravatar

# Pure Krome

PK - Glad you spotted the mistake. I was a bit worried when I read your first comment!

We only have one site running on UIP, and that's not live yet although it's planned to go live soon, so as such I can't give you "in the field" details.

It shouldn't be too hard to port a winform view to a mobile view (famous last words...) infact it's probably worth asking around GDN to see if anyone's already done this. If you've architected properly it should be relatively easy to add a mobile front end to an existing application, I've done similar on a similar framework in the past.
11/30/2004 9:22 AM | Duncan Millard
Gravatar

# re: UI Process Block: Let me help you

>>relatively easy to add a mobile front end to an existing application

yeppers -> that's the beauty of MVC from my understanding of it :)

our MVC has gone pretty detailed 'cause we also have persister factories as well as different persister types (eg. stub, sqlserver db, xml file, etc...) so once we got our head around MVC / UIP .. then we've justed added more advanced stuff by having all this generic customisation. Gotta love config files :) the views aren't the only thing loosly coupled now -> so are the persister types ... PER OBJECT. Maybe by Feb i'll get some time to see about making some mobile views if GDN comes up blank (i posted something a few months back there without much luck).
12/3/2004 3:04 AM | Pure Krome
Gravatar

# re: UI Process Block: Let me help you

Hi, I am new to the UIP development.
Initially I started using OPen Navigator and

currently trying out the UIP Block V2.0 in a web app and am running into a problem...
using an OpenNavigator. Sometimes, when I start the task (with the code: UIPManager.StartOpenNavigationTask("NavName", "FirstViewName")) my application crashes with the following error message:

Exception Details: System.NullReferenceException: Object reference not set to an instance of an object.

Source File:
....Blah...Blah...\Microsoft.ApplicationBlocks.UIProcess\Configuration\UIPConfigSettings.cs
Line: 509
(which is: return(StatePersistenceProviderSettings)_statePersistenceCollection[navigator.StatePersist];)

At times, my application runs fine, but quite often it crashes with the above message. After following the code of the UIPAB through, I've discovered that within the LoadFromCache (Guid taskId) method of the StateCache class, the line of code that checks "weakReference.IsAlive" evaluates to False when the app crashes, and true when it does not.

I could go on to describe the rest of the code that executes as a result of the evaluation of this line of code to False, but I'll keep it short. Eventually the code attempts to retrieve the config settings of the navigator (which is an OpenNavigator that does not have settings in the Web.config) which are nothing, thus resulting in the above exception.

It seems as though along the way, the OpenNavigator is mistaken for another type of navigator.

I found it strange that sometimes the application runs without error, but other times it crashes. Has anyone else come across this problem? Are there any ideas on whether I might be doing something wrong?


As I could not find solution for problem started using Graph navigator,
However, sometimes I get erro "Hadle not initialized"

Can you please help.
Thanks In Advance,
Deepali
12/3/2004 5:07 AM | Deepali Mistry
Gravatar

# re: UI Process Block: Let me help you

Hi, Sorry fergot to give my email address
deepali.mistry@rfs.nsw.gov.au

Deepali
12/3/2004 6:09 AM | Deepali Mistry
Gravatar

# re: UI Process Block: Let me help you

Hi,
I really can not figure out cause of error

Exception of type System.Web.HttpUnhandledException was thrown.

Handle is not initialized.

I am using Graph navigator.
Rfeally appriciate any help.

Thanks,
Deepali.mistry@rfs.nsw.gov.au
12/6/2004 12:08 AM | Deepali Mistry
Gravatar

# re: UI Process Block: Let me help you

G'Day Deepali! Good to see another assie here.

without knowing too much code, are u sure your website is not TIMEING OUT? We had some weird problems with our site when the session timed out -> some UIP error thing0.

maybe check that out? Try dropping your timeout time to 1 minute and then doing some checks.
12/6/2004 10:43 PM | Pure Krome
Gravatar

# re: UI Process Block: Let me help you

damn! wish i could spell AUSSIE right! *blush*

-PK-
12/6/2004 10:48 PM | Pure Krome
Gravatar

# re: UI Process Block: Let me help you

G'Day Mate,
Thanks for replying.
Actually there is one more addition to my
Handle is not initialized problem with UIP.

After getting this error if I press back button page gets displayed properly!
I just tried to drop my timeout to 1 minute.
But again same problem. This problem happens only some time.

Really appreciate response,
Cheers,
Deepali
12/8/2004 12:33 AM | Deepali Mistry
Gravatar

# Can v dynamically change the StartView in the NavigationGraph

1. Can v dynamically change the StartView in the NavigationGraph
2. Can I navigate to a view which is not a startview in the NavigationGraph
12/9/2004 11:06 AM | Ashith Raj
Gravatar

# re: UI Process Block: Let me help you

Hi,
Finally I have found someone who is an expert in UIP Application Block. I wanted to convert an existing application of ours to use the UIP as it is a workflow intensive process. But this application consist of 2 frames the top frame contains a set of tabs for each section and the lower frame displays the individual pages for each tab the pages are currently user controls which are dynamically loaded into the lower frame. So have you used UIP with user controls and such a framework and do you have any suggestions ofor how to go about implementing it.

Thanks in advance
Marshall
12/16/2004 2:56 PM | Marshall Desouza
Gravatar

# re: Basic Hello World Example

Would it be possible to share a basic hello world example with UIP here? Something that has 1 page and navigates to next page when user clicks next button. Again please use session persistance - becuase we would like to have SQL server complications left out for later. There's only little a brain can handle at one shot!
12/16/2004 5:50 PM | antzk
Gravatar

# Multi NavGraph

Hi hope some one can help,

Am trying to move from between NavGraphs defined in App.Config.
According to MS all I need to do is EndTask() and then call OnStartTask().
Issues:
1. Calling EndTask() does not close the window so in cases where I have 3 NavGraphs I will have 3 windows open.

2. Can anyone explain the relationship between Controller, ViewManager and NavigationGraph.
From stepping thru code seems a Controller is created for every (view/node) when Starting a Task.
12/16/2004 6:44 PM | MoeBaby
Gravatar

# re: UI Process Block: Let me help you

Reply to Deepali Mistry's UIP issue with StartOpenNav Task and loadFromCache returning false then bombing on retrieving state persistence provider settings from the config. I had the same issue.

As for why the WeakReference.IsAlive is returning false, well it could be garbage collected and so not guarenteed to always have a value. So the fall back plan if it's not in the cache is to go back and get it from the config, but for Open Navigation we want to get it from the default config, not the nav graph config...


The StateFactory.Load method has an overload to retrieve the default state persistence settings or the persistence settings for a specific nav graph.
statefactory.load (name, taskid) (name is nav graph) vs
statefactory.load(taskid)

Anyway I changed the following and this was worked for me:

In the Open Navigator constructor: public OpenNavigator(string name, Guid taskId)
Change this line: SetState(StateFactory.Load(name,taskId));
To: SetState(StateFactory.Load(taskId));

This should fix this issue for starting an OpenNavigationTask..
Exception Details: System.NullReferenceException: Object reference not set to an instance of an object.

Source File:
....Blah...Blah...\Microsoft.ApplicationBlocks.UIProcess\Configuration\UIPConfigSettings.cs
Line: 509
(which is: return(StatePersistenceProviderSettings)_statePersistenceCollection[navigator.StatePersist];)


12/17/2004 3:46 PM | toyab
Gravatar

# re: UI Process Block: Let me help you


Hey ,
Thanks a lot for your reply I will definitely try your solution. I really appreciate it
When Open navigator was not working I did shift to Graph navigator as I had to release some of my project this month. However sometimes with Graph navigator also I have problem with state. I get following error

Error page Exception of type System.Web.HttpUnhandledException was thrown.

Handle is not initialized.


System.WeakReference.get_Target() at System.Data.Index.get_RowFilter() at System.Data.Index.AcceptRecord(Int32 record) at System.Data.Index.InitRecords() at System.Data.Index.Reset() at System.Data.DataTable.ResetIndexes() at System.Data.DataTableCollection.Add(DataTable table) at System.Data.DataTable.System.Runtime.Serialization.ISerializable.GetObjectData(SerializationInfo info, StreamingContext context) at System.Runtime.Serialization.Formatters.Binary.WriteObjectInfo.InitSerialize(Object obj, ISurrogateSelector surrogateSelector, StreamingContext context, SerObjectInfoInit serObjectInfoInit, IFormatterConverter converter) at System.Runtime.Serialization.Formatters.Binary.WriteObjectInfo.Serialize(Object obj, ISurrogateSelector surrogateSelector, StreamingContext context, SerObjectInfoInit serObjectInfoInit, IFormatterConverter converter) at System.Runtime.Serialization.Formatters.Binary.ObjectWriter.Write(WriteObjectInfo objectInfo, NameInfo memberNameInfo, NameInfo typeNameInfo) at System.Runtime.Serialization.Formatters.Binary.ObjectWriter.Serialize(Object graph, Header[] inHeaders, __BinaryWriter serWriter, Boolean fCheck) at System.Runtime.Serialization.Formatters.Binary.BinaryFormatter.Serialize(Stream serializationStream, Object graph, Header[] headers, Boolean fCheck) at System.Runtime.Serialization.Formatters.Binary.BinaryFormatter.Serialize(Stream serializationStream, Object graph) at Microsoft.ApplicationBlocks.UIProcess.SqlServerPersistState.Save(State state) in C:\Program Files\Microsoft Application Blocks For .Net\User Interface Process 2.0\Code\Microsoft.ApplicationBlocks.UIProcess\Persistence\SqlServerPersistState.cs:line 79 at Microsoft.ApplicationBlocks.UIProcess.State.Save() in c:\program files\microsoft application blocks for .net\user interface process 2.0\code\microsoft.applicationblocks.uiprocess\state.cs:line 242 at Microsoft.ApplicationBlocks.UIProcess.GraphNavigator.Navigate(String nextNode) in c:\program files\microsoft application blocks for .net\user interface process 2.0\code\microsoft.applicationblocks.uiprocess\navigators\graphnavigator.cs:line 178 at Microsoft.ApplicationBlocks.UIProcess.ControllerBase.Navigate(String navigateValue) in c:\program files\microsoft application blocks for .net\user interface process 2.0\code\microsoft.applicationblocks.uiprocess\controllerbase.cs:line 70 at Microsoft.ApplicationBlocks.UIProcess.ControllerBase.Navigate() in c:\program files\microsoft application blocks for .net\user interface process 2.0\code\microsoft.applicationblocks.uiprocess\controllerbase.cs:line 60 at OMS.SitRepController.SitRepMain() in d:\visual studio projects\oms\test\common\sitrepcontroller.cs:line 1192 at OMS.SitRepIAP.incidentDetail.sitrepButton_Click(Object sender, EventArgs e) in D:\Visual Studio Projects\OMS\Test\SitRepIAPTest\incidentDetail.aspx.cs:line 362 at System.Web.UI.WebControls.LinkButton.OnClick(EventArgs e) at System.Web.UI.WebControls.LinkButton.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(String eventArgument) at System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl, String eventArgument) at System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData) at System.Web.UI.Page.ProcessRequestMain()



Can anyone help me with this??
Thanks in advance.

Regards,
Deepali



12/20/2004 3:59 AM | Deepali Mistry
Gravatar

# UI Process Block: Display Performance

I am seeing what I can best describe as screen bleeding as we go from one view to the next. For example, the user will sometimes see just a single control from the view that is starting on the existing view's form.

We are only persisting to memory so I don't suspect that is the performance drag.

Has anyone seen this?

thanks,

JR
12/20/2004 6:09 PM | JR
Gravatar

# Busy..

Hi everyone and sorry for not replying recently. I've been so busy with real work (i.e. the stuff that pays the bills) and getting ready for Christmas that it's been tough to find time to investigate peoples' problems on here.

Can I suggest people always be sure to post to the Got Dot Net workspace? My "comments" section shouldn't become a replacement for that message board :-) Of course feel free to leave me a message here too, but I can't guarantee fast turnarounds, especially as I'm not really working in the UIPAB that much at the moment.

thanks!
Duncan
12/21/2004 7:51 AM | Duncan Millard
Gravatar

# re: UI Process Block: Let me help you

Hi Deepali,

It sounds like your unhandled http exception is most likely timeouts as PureKrome suggested. If your Session times out, the UIP loses its context. In this case, like any ASP.NET app, you have to catch the problem. You can maybe use SQL as your state store instead of the ASP.NET Session object (I think there's a SQL Session provider that ships with UIP2?)

Here's the code I used in my global.asax.cs to catch session timeouts with UIP Version 1. I catch the error, and redirect to my error page:
(Note - if you get an httpexception be sure to check the inner exception, it will contain more useful information)



protected void Application_Error(Object sender, EventArgs e)
{
try
{
// Ignore the 'unhandled http error'

Exception ex = Server.GetLastError();
if ((ex is HttpUnhandledException) && (ex.InnerException != null))
ex = ex.InnerException;

Microsoft.ApplicationBlocks.ExceptionManagement.ExceptionManager.Publish(ex);

// Clear whatever else was going on and redirect to our error page using
// a server.transfer so that our session is still available
HttpContext.Current.Response.Clear();
Session["lastexception"] = ex;
Server.Transfer(@"~/Licenses/Common/Error.aspx");
}
catch (Exception lex)
{
EventLog el = new EventLog("Application");
el.Source = "Licenses";
el.WriteEntry("Internal exception: " + lex.Message);
if (lex.InnerException != null)
{
el.WriteEntry("Internal exception inner: " + lex.InnerException.Message);
Server.Transfer(@"~/Licenses/Common/Error.aspx");
}
}
}


In my error page I have a bit of code similar to this to check for timeouts (Note in UIP v2 you may need to alter the exact checks):

private void Page_Load(object sender, System.EventArgs e)
{

Exception lastException = null;
if (Session["lastexception"] != null)
{
lastException = (Exception)Session["lastexception"];
// Check UI Process Block Exceptions
if (lastException is UIPException)
{
// No need to cast - UIPException doesn't give us anything useful
if (lastException.Message.StartsWith("Can not get the session moniker"))
{
Response.Write("Session timed out because you have been inactive for too long. Please log in and start again.")
}
}
}
}
}
12/21/2004 9:05 AM | Duncan Millard
Gravatar

# To Ashith Raj

Ashith, I'm not sure how to do this. Maybe using an open navitgator? It's not something I've tried. Sorry.
12/21/2004 8:09 AM | Duncan Millard
Gravatar

# To: Marshall Desouza

Hi Marshall,

I've not specifically tried this, but check out some of my earlier comments about tabbed views. I've not really worked with user controls and UIP (well, not in depth) - perhaps someone on the got dot net workspace can help out more?

thanks,
Duncan
12/21/2004 8:11 AM | Duncan Millard
Gravatar

# Deepali - handle not initialized

Deepali, I just had another thought - the exception looks like it's when state is being saved. Have you stored a non-serializable object in your state? That could be the cause of the problem.

I also found a couple of newsgroup postings suggesting that it could be because you are doing something with a sql connection in a finalizer of one of your objects.... You shouldn't do anything in there - see http://groups-beta.google.com/group/microsoft.public.dotnet.framework.adonet/browse_thread/thread/8f62e59a3502731f/7632f7aa0e36d0fd
12/21/2004 8:18 AM | Duncan Millard
Gravatar

# MoeBaby - Some answers

Hi Moe,

You still have to code in the actual user interface actions, so you will need to explicitly hide forms in the UI code before you navigate off to a new task. The UIPAB can't assume that you want windows closed - you might want to leave a task open so that you can resume it later.

With regard to Controllers, View Managers and NavGraphs, a "View" represents the thing that the user sees - so an ASP.NET page, or a Win form, or a Pocket PC form. As you navigate around, these need to be created, opened and initialized with UIP data. This is the responsibility of the View Manager - it knows how to interact with the UI artefacts, and because each view manager implements a common interface, the UIP knows how to interact with the view manage. The View Manager hence decouples the UI and the UIPAB.

A controller is responsible for performing actions in response to UI actions. So consider for example an app that is running on a Pocket PC, a win form, and a web form. When the user clicks "Save" on any of those apps, they will need to save their data. They will (hopefully!) all call the same controller object, for example the "SaveData" controller to tell it that the 'save' button has been clicked. The controller is then responsible for acting on that information and saving the data. The controller therefore allows you to centralise control and logic, and keep your UI as purely for User Interactions.

You can have as many controllers as you like - and yes I believe the controller object is created for each page request.
12/21/2004 9:29 AM | Duncan Millard
Gravatar

# re: UI Process Block: Let me help you

Merry Christmas all :)

>>Can I suggest people always be sure to post to the Got Dot Net workspace?

I feel like no one every answers over there.

>> My "comments" section shouldn't become a replacement for that message board :-)

:)

damn, i've just been wifed .. i'll post more q's later on .. brb in a day or two :)
12/26/2004 12:05 AM | Pure Krome
Gravatar

#  UI Process Block: Handle

i am getting following error.Please help me.


System.InvalidOperationException: Handle is not initialized.
Source Error:

An unhandled exception was generated during the execution of the current web request. Information regarding the origin and location of the exception can be identified using the exception stack trace below.

Stack Trace:


[InvalidOperationException: Handle is not initialized.]
System.WeakReference.get_Target() +68
System.Data.Index.get_RowFilter()
System.Data.Index.Equal(Int32[] indexDesc, DataViewRowState recordStates, IFilter rowFilter)
System.Data.DataTable.GetIndex(Int32[] indexDesc, DataViewRowState recordStates, IFilter rowFilter)
System.Data.DataTable.GetIndex(String sort, DataViewRowState recordStates, IFilter rowFilter)
System.Data.DataView.UpdateIndex(Boolean force)
System.Data.DataView.SetIndex(String newSort, DataViewRowState newRowStates, DataFilter newRowFilter)
System.Data.DataView.set_Sort(String value)
Humana.EnterpriseFR.DataMaint.Web.AssociateSummary.LoadAssociateGrid(String sortExp)
Humana.EnterpriseFR.DataMaint.Web.AssociateSummary.dgdAssociates_SortCommand(Object source, DataGridSortCommandEventArgs e)
System.Web.UI.WebControls.DataGrid.OnSortCommand(DataGridSortCommandEventArgs e)
System.Web.UI.WebControls.DataGrid.OnBubbleEvent(Object source, EventArgs e)
System.Web.UI.Control.RaiseBubbleEvent(Object source, EventArgs args)
System.Web.UI.WebControls.DataGridItem.OnBubbleEvent(Object source, EventArgs e)
System.Web.UI.Control.RaiseBubbleEvent(Object source, EventArgs args)
System.Web.UI.WebControls.LinkButton.OnCommand(CommandEventArgs e)
System.Web.UI.WebControls.LinkButton.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(String eventArgument)
System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl, String eventArgument)
System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData)
System.Web.UI.Page.ProcessRequestMain()


regards
1/11/2005 4:37 PM | Arabinda
Gravatar

# To Arabinda

Hi Arabinda - that looks pretty clearly like a problem in your code, not in the UIP.

I think Handle not initialized suggests a problem with the database connection. Be sure the connection is open and valid.
1/12/2005 9:34 AM | Duncan Millard
Gravatar

# re: UI Process Block

Hi Duncan
thanks for reply i think this is not a problem with connection as i am getting this error when i am sorting the records in a grid by clicking on the column header . During sorting i am getting the dataset from state and binding to the grid.


regards.
Arabinda
1/13/2005 4:10 AM | Arabinda
Gravatar

# re: UI Process Block

Hi Duncan
thanks for reply i think this is not a problem with connection as i am getting this error when i am sorting the records in a grid by clicking on the column header . During sorting i am getting the dataset from state and binding to the grid.


regards.
Arabinda
1/13/2005 4:10 AM | Arabinda
Gravatar

# re: UI Process Block: Let me help you

Ducan .. have u had a chance to try out my virtual domain / real domain problem?
1/14/2005 8:27 AM | Pure Krome
Gravatar

# re: UI Process Block: Let me help you

Ducan (and friends) - more info for you. I'm posting some of my bug fixes up into the UIP workspace on GotDotNet.

my real domain problem (above) is listed twice as a known bug.

i'll also post other little things as time goes by, here and there.
1/20/2005 5:08 AM | Pure Krome
Gravatar

# re: UI Process Block: Let me help you

With the new UIP pattern, where should query parameters, cookies, and view state be handled? In the controller or the web view? In the past I would use a page controller pattern to define a base page to perform state management processing such as loading query parameters into page properties.



Are there any working implementation using the UIP pattern other than the samples that are part of the download?
1/27/2005 6:09 PM | Jim Meehan
Gravatar

# Re: Cookies/parameters

Hi Jim,

The key thing to think is that the controllers should be independent of the UI delivery method; this is the "Model", "View", "Controller" pattern.

Here, your web page (View) needs to pass the values held in the query parameters, cookies, etc into the controller so that it can use it to update the model.

That way if you wanted to, say, write a windows app you could still use the same controller as your web app.

So, eg, in your UI page you would read the query string:

int guessedNumber = Request.QueryString("aNumber");

Then you could pass that directly to the controller

myController.UserHasGuessedANumber(guessedNumber)

Your controller could then, say, compare the guessedNumber to the number it was expecting, and store a true/false in the model to denote whether they matched.

When the UI displays, it will read the true/false from state, and use it to output some HTML (web page) or pop up a messagebox (win form)

Hope this example makes it clearer.

I don't know of samples other than in the download.
Your controller is then completely independent of the UI.
1/27/2005 11:26 PM | Duncan Millard
Gravatar

# re: UI Process Block: Let me help you

Thanks for your quick response. Have you used the open navigation mode? I have read some other newsgroup comments indicating that there were problems with open navigation. On one of my web pages, I display a table of data with a specific column containing a hyperlink to display more detail on the particular row. Typically, I embed a query parameter on the url to specify the primary key id of the row. The query parameter is dynamically set by specifying the databinding field. My first question is will the UIManager be able to interpret the url correctly with the query parameter attached since in the "view" definition I identify the page only.

What is the timing loop for the UIP pattern? When an http request is processed, does the view execute first which calls the UIPmanager or vice versa? I'm just trying to understand the sequence of operations.
1/28/2005 6:02 PM | Jim Meehan
Gravatar

# re: UI Process Block: Let me help you

Hi All,
Have another query.
I want to navigate between views which are using different contreollers.But I am getting cast exception.
Any Idea how to comunicate between these views?
Thanks
Deepali

2/9/2005 11:22 PM | Deepali Mistry
Gravatar

# UI Process Block: Let me help you

Hey guys ...
i am new to UIP
take up a case where in i have a mixture of GraphNavigator and UserControlNavigator
Now from the initializer form i traverse the GraphNavigator and go to frm1 and then to frm2 which calls upon UserCtrlNavig and loads a view which is basically a form with usercontrols....from this state i need to access frm4 which is a part of the former navigation graph..
is it possible..and if yes how..
thx in advc
Maverick
2/17/2005 7:09 AM | Maverick
Gravatar

# re: UI Process Block: Let me help you

Have you integrated the UIPAB 2 with the Config Mgr in the newly released Ent Library? If so maybe you could post some example.

Thanks,
2/18/2005 1:53 AM | Steve Muise
Gravatar

# ValidateSchema

HI...somebody answer this time..i srsly need help
We r using .NET 2005 Beta ver....and UIP AB ver 2
Now the problem is tht 2005 release of .NET does not support validatingreader...this class is used in the
ValidateSchema(XMLnode section) method of UIPConfig handler(This method is used to validate the config file with the xsd.)...instead .NET supports XMLReader and XMLReaderSettings class.Now i have modified the above method but still whenever i create the XMLReader object passing it the section and XMLReadersettings object it throws me an error in the UIPConfiguration node...
I need to spleep guys..plz help me out
Thx in advc
2/24/2005 10:00 AM | Maverick
Gravatar

# UIP2 and Enterprise Library

Steve - I've been told that there are some plans for UIP to be released as part of the Ent Lib, but that there is no definite timescale on this so don't hold your breath. I know no more than that though!
2/28/2005 9:50 AM | Duncan Millard
Gravatar

# Daylight - back button

Daylight - Have you downloaded the back button patch for UIP v2 from the Got Dot net workspace? I found that the documented behaviour wasn't much use, and wrote a patch for v1. Spidey wrote a patch for v2. Suggest you use this as it may make your life much easier...
2/28/2005 9:52 AM | Duncan Millard
Gravatar

# Deepali - different controllers

Hi Deepali, first you must have a common base class for your controllers (they are both controller, right?)

So you'll need to check in the code the exact type, and run the appropriate code:

if (myController is ControllerType1)
{
ControllerType1 castController = myController;
castController.Type1Method();
}

etc.

Does that make sense?
2/28/2005 9:58 AM | Duncan Millard
Gravatar

# re: UI Process Block: Let me help you

Hi,
I'm new to UIP, and I am experiencing an exception with the sample code run on Windows XP - can not get session moniker.

I am on the browsecatalog web page and I found that by clicking add item to cart, then WebFormView.New is called for the browsecatalog page although this page is the current view.

Any recommendations would be greatly appreciated!
3/1/2005 4:48 PM | Lawrence Smith
Gravatar

# re: UI Process Block: Let me help you

Further to my question above, the following is the output I traced immediately before & after the issue:

----------------------------------------
Timestamp: 3/1/2005 1:49:20 PM
Message: ActivateView - Redirect to URL: ~//browsecatalog.aspx?CurrentTask=a226f5b4-e1e9-4e8d-ae85-aa9d6adf2f58
Category: UI Events
Priority: 1
EventId: 0
Severity: Information
Title:
Machine: MKH110645
Application Domain: /LM/W3svc/1/Root/UIPStoreWebUI_VB-3-127541945545136448
Process Id: 4780
Process Name: C:\WINDOWS\Microsoft.NET\Framework\v1.1.4322\aspnet_wp.exe
Win32 Thread Id: 632
Thread Name:
Extended Properties: TracerActivityId - e41c28cd-df34-43df-9fa2-0854b96cfd01

----------------------------------------
----------------------------------------
Timestamp: 3/1/2005 1:49:24 PM
Message: WebFormView.New
Category: UI Events
Priority: 1
EventId: 0
Severity: Information
Title:
Machine: MKH110645
Application Domain: /LM/W3svc/1/Root/UIPStoreWebUI_VB-4-127541945601417376
Process Id: 4780
Process Name: C:\WINDOWS\Microsoft.NET\Framework\v1.1.4322\aspnet_wp.exe
Win32 Thread Id: 632
Thread Name:
Extended Properties:
----------------------------------------
----------------------------------------
Timestamp: 3/1/2005 1:49:25 PM
Message: WebFormView_Load: app path /UIPStoreWebUI_VB/browsecatalog.aspx query string: a226f5b4-e1e9-4e8d-ae85-aa9d6adf2f58
Category: UI Events
Priority: 1
EventId: 0
Severity: Information
Title:
Machine: MKH110645
Application Domain: /LM/W3svc/1/Root/UIPStoreWebUI_VB-4-127541945601417376
Process Id: 4780
Process Name: C:\WINDOWS\Microsoft.NET\Framework\v1.1.4322\aspnet_wp.exe
Win32 Thread Id: 632
Thread Name:
Extended Properties:
----------------------------------------
----------------------------------------
Timestamp: 3/1/2005 1:49:25 PM
Message: GetFromSession - Gets the session moniker related to the specified task - key: TaskMonikera226f5b4-e1e9-4e8d-ae85-aa9d6adf2f58
Category: UI Events
Priority: 1
EventId: 0
Severity: Information
Title:
Machine: MKH110645
Application Domain: /LM/W3svc/1/Root/UIPStoreWebUI_VB-4-127541945601417376
Process Id: 4780
Process Name: C:\WINDOWS\Microsoft.NET\Framework\v1.1.4322\aspnet_wp.exe
Win32 Thread Id: 632
Thread Name:
Extended Properties:
----------------------------------------
----------------------------------------
Timestamp: 3/1/2005 1:49:25 PM
Message: session moniker NOT FOUND!
Category: UI Events
Priority: 1
EventId: 0
Severity: Information
Title:
Machine: MKH110645
Application Domain: /LM/W3svc/1/Root/UIPStoreWebUI_VB-4-127541945601417376
Process Id: 4780
Process Name: C:\WINDOWS\Microsoft.NET\Framework\v1.1.4322\aspnet_wp.exe
Win32 Thread Id: 632
Thread Name:
Extended Properties:
----------------------------------------
3/1/2005 6:56 PM | Lawrence Smith
Gravatar

# re: UI Process Block: Let me help you

Can anybody help me?

I am getting the same error what Arabindo was experienced. It is

InvalidOperationException: Handle is not initizlized.

Source Error:

An unhandled exception was generated during the execution of the current web request. Information regarding the origin and location of the exception can be identified using the exception stack trace below.

Stack Trace:


[InvalidOperationException: Handle is not initialized.]
System.WeakReference.get_Target() +68
System.Data.Index.get_RowFilter()
System.Data.Index.Equal(Int32[] indexDesc, DataViewRowState recordStates, IFilter rowFilter)
System.Data.DataTable.GetIndex(Int32[] indexDesc, DataViewRowState recordStates, IFilter rowFilter)
System.Data.DataTable.GetIndex(String sort, DataViewRowState recordStates, IFilter rowFilter)
System.Data.DataView.UpdateIndex(Boolean force)
System.Data