To add to what I just said, even if you could, they could just get the XML and create 
a datatable that they could edit.  Keep in mind, an update or some kind of sql 
statement is required for any updates to be written the the DB so just because they 
can edit the datatable doesn't mean your DB will be changed.

-----Original Message-----
From: dot [mailto:[EMAIL PROTECTED]]
Sent: Monday, June 10, 2002 2:38 PM
To: [EMAIL PROTECTED]
Subject: [DOTNET] CreateInteraction Issue


(i am posting this for a friend)

Application Architecture:

I have an ASP.NET application that contains a number of ASP.NET pages. In
addition to the ASP.NET pages, the ASP.NET project contains a VB class
called CSRFuncs. I use this class to encapsulate functionality that is used
by multiple ASP.NET pages. This class also has a sub-class called
Transactional (CSRFuncs.Transactional) that contains functionality which
requires transactions. This class inherits from ServicedComponet, and is
adorned with the attribute <Transaction(TransactionOption.Required)>. Each
method within this class is adorned with the attribute <AutoComplete()>.

The methods in CSRFuncs.Transactional often rely on a class library (stand-
alone DLL) external to the ASP.NET application. This class library is
called ESLEMSNET and contains a number of VB.NET classes. Each class in the
DLL is structured in a way similar to the class in the ASP.NET project -
that is each class has a sub-class that encapsulates functionality that
needs COM+ transactions. The class in question for this case is called
Interaction, and it has a sub-class called Transactional
(Interaction.Transactional). Interaction.Transactional inherits from
ServicedComponent and, just like CSRFuncs.Transactionl, is adorned with the
attribute <Transaction(TransactionOption.Required)>. And, each method
within Interaction.Transactional is adorned with the attribute <AutoComplete
()>.

Problem:

I have a method called CreateInteraction which (among other things) tries
to assign a value to a class-level private field (integer) called
mLastInteractionHistoryId. This field serves as the basis for a read-only
property called LastInsertedInteractionHistoryId. The problem I am having
is that in Interaction.Transactional when I try to assign a value to the
mLastInteractionHistoryId field inside of the CreateInteraction method, the
field will not take the value. There is no error at compile-time or run-
time, but it is clear that the value is not being assigned. I first
determined this by checking the LastInsertedInteractionHistoryId at run-
time, and the value was always 0. I then tried making the field Public and
accessed it directly at run-time and the value was still always 0. I then
stepped through the code with the debugger in VS.NET and could see that I
had a non-zero value being assigned to the field, but after the assignment
statement, the field would remain set to the value of 0.

Call Sequence:

The call stack sequence for this functionality starts with a post-back to
an ASP.NET page (CRM_CustView.aspx). The code-behind for this ASP.NET page
creates an object reference to the CSRFuncs.Transactional class that is
part of the ASP.NET project, and then executes a method called StartCall
(CSRFuncs.Transactional.StartCall). The StartCall method then creates an
object reference to the Interaction.Transactional class which is part of
the stand-alone class library DLL and executes the method called
CreateInteraction (Interaction.Transactional.CreateInteraction). After
CreateInteraction executes, StartCall checks the value of the property
Interaction.Transactional.LastInsertedInteractionHistoryId. This is the
read-only property that returns the value of the private field
mLastInteractionHistoryId. This is the point where the problem manifests
itself at run-time as the value returned from the property is always zero.

Further Information:

In investigating this problem, I tried to narrow down the problem by making
a very stripped down class that inherits from ServicedComponent to see if I
could isolate the problem. What I found was that even in the most simple
form, the field assignment does not work on a class that inherits from
ServicedComponent and also adorns the method with <AutoComplete()>. I
determined this by commenting out the <AutoComplete()> attribute but still
leaving the class to inherit from ServicedComponent. When I commented the
line out, the test class worked as expected (assignment to field was
successful). I thought "AH HA!!" the problem is with <AutoComplete()>, but
I was wrong. When I removed the <AutoComplete()> attributes from both my
production methods (StartCall and CreateInteraction) it did not fix the
problem I was having. So, though this isn't a work-around, it is an
interesting discovery.

You can read messages from the DOTNET archive, unsubscribe from DOTNET, or
subscribe to other DevelopMentor lists at http://discuss.develop.com.

You can read messages from the DOTNET archive, unsubscribe from DOTNET, or
subscribe to other DevelopMentor lists at http://discuss.develop.com.

Reply via email to