Code Project

Link Unit

Tuesday, June 08, 2010

Workflow stuck at Starting

Workflow stuck with "Starting" status is probably the most difficult to debug because there are generally no diagnostic entries in the ULS logs or event logs to point you to a problem.
The problem we faced at our work place is that all setting are as per this blog post http://www.tonytestasworld.com/post/Sharepoint-2007-Workflow-stuck-in-quot3bStartingquot3b-state-and-never-completes-when-set-to-start-programmatically.aspx .
i.e
1 Environment is properly configured with the SSP and everything set up correctly as mentioned in the blog.
2. Windows Sharepoint Timer service is up and running.
3. Domain account was used for configuring SSP.
Even after doing all the stuff workflows were getting stuck with a "Starting" status.
We have a custom workflow attached to a Document library and it is supposed to trigger when a new item is added or changed. The library has the 'require check out before editing' setting enabled so even a manual document upload to the library would first check the document in and then you'll be presented with the screen for providing any required metadata and once you are through that THEN the workflow would trigger (workflow requires a document to be checked-in before it can start).
So disabling the 'require check out before editing' solved the issue for us.

Monday, April 05, 2010

Skin not Applied to RadDatePicker inside UpdatePanel

We were facing this issue where the skin was not applied to the RadDatePicker , in case it is placed inside an UpdatePanel. After searching for a solution it was observed that atleast one DatePicker Control should be placed outside the UpdatePanel. Now the rest of the process becomes easy , we need to hide that dummy Datepicker control once the rendering is complete.
Code in aspx file

<aspx:updatepanel id="UpdatePanel1" runat="server">
<contenttemplate>
<!-- Put your content here -->
</contenttemplate>

</aspx:updatepanel>
<radcln:raddatepicker id="radDt" runat="server" displaydateformat="dd-MMM-yyyy" dateformat="dd-MMM-yyyy" width="100px" mindate="1/Jan/1900"></radcln:raddatepicker>

In code behind.
protected void Page_PreRenderComplete(object sender, EventArgs e)
{
radDt.Visible = false;
}
we can put the aspx and code behind segments in .master page , so all pages reflect the same.
Hope this helps.

Monday, March 22, 2010

DoesUserHavePermissions in WebPart

I wrote a search webpart and it need check if the current user has the right to some lists so I can highlight those lists in different color , but Whenever SPList.DoesUserHavePermissions is called on the object[List/Library], for the user who does not have the permission, it should return false, but it gives an exception. An IE browser pops up asking for user to type in username and password. This dialog box should not appear as my code catches the exception.
Solution: After googling around for some solution on the same line , found points which may help fellow visitors.
#1 DoesUserHavePermissions only works in WSS, not SPS
#2 Suppress Popup for Unauthorized Access:The problem happens with your SPSite object from which you get the web, then the list, there is a property called CatchAccessDeniedException, you should set it to false, then make your call, end the popup will not show up. This is a standard WSS feature, and will happen every time you try to access a resource to which the current user does not have access.
WorkAround : Use the following in your webpart

=====
using(SPWeb oWeb=SPContext.Current.Web)
{
oSite.CatchAccessDeniedException = false; // Suppress the popup
SPListCollection oList = oWeb.Lists;
oList.ListsForCurrentUser = true;
int iCount = oList.Count;
for(int i=0;i{
try
{
if(oList[i].Permissions.DoesUserHavePermissions(SPRights.ViewListItems)) // Check for view Rights
{
// Do something
}
}
catch(System.UnauthorizedAccessException ex)
{
//Do Nothing, or as you please
}
}
}
=====


Hope this helps

Wednesday, February 03, 2010

When caching is enabled for the XmlDataSource that is control tree it requires a UniqueID that is unique throughout the application

We were using XmlDataSource in code behind and assigning the same to a menu.
XmlDataSource XmlMenu = new XmlDataSource();
This was resulting in "When caching is enabled for the XmlDataSource that is control tree it requires a UniqueID that is unique throughout the application" - Use an ID for XmlDataSource .
The solution for which is specifying the ID of XmlDataSource .
XmlMenu.ID = "Menu1";
Reason:XmlDataSource class internally calls a private method called CreateCacheKey.Now, if you are using XmlDataSource without an ID in Code-Behind. This might throw an exception - "When caching is enabled for the XmlDataSource that is not in the pages control tree it requires a UniqueID that is unique throughout the application." This is due to the absence of the UniqueID ,which is used as part of the caching key.Without ID all instances would try to use same caching key. Setting a distinct ID will resolve the problem.

Monday, February 01, 2010

Change default language from VB to VC#

Visual Studio 2005 is installed on all of our development PCs.Initially our projects were in VB so while installing we choselanguage "Visual Basic" instead of "Visual C#.Now .We are working more on C# and when a new project/site is to be created, we should take care which language we chose otherwise it will get created in default language which is VB in our case.So we wanted to have VC# as our default lanaguage. Searched google/newsgroups to figure out solution.

Solution
#1. We can do this by using Registry by changing this registry key:HKCU\Software\Microsoft\VisualStudio\8.0\General\NewProjectDialogPreferredLanguage. It was VB in our case we can change it to VC#. The same key also exist in HKEY_USERS. We might do a search for that value name and just change to VC# anywhere you find it.Though this option is not preferrable.

#2 If we wish to remove VB and use only C# in our programming environment then we could do that using add/remove programs and click on change button for the installation. Just uncheck vb and check off C#.Though this option is also not preferrable.

#3 The easiest option to do so is
a) Choose Tools -> Import and Export Settings...
b) Select Reset All Settings and click Next
c) Select whether you would like to save the current settings and click Next
d) Select the settings you want to use(change the language to VC#) and click Finish

Hope it helps the visitor.

Friday, January 29, 2010

Exception Details: System.Runtime.InteropServices.COMException: Access is Denied

"Access Denied" : Error was creeping when we are tring to load the crystal report file by using Load("~/Reports/MyReport.rpt"); The error looks silly as it is not pointing where the access should be given. After doing bit of googling and applying/reverting the changes found the solution.
Reason & Solution
When a CR[Crystal Report] is being created in ASP.NET, the .NET will create a report file in a temp folder, e.g. C:\Documents and Settings\MachineName\ASPNET\Local Settings\Temp.
#1 You can try to give ASPNET permission for this folder.
#2 You can also update web.config to impersonate.

<authentication mode="Windows">
<identity impersonate="true"
userName="mydomainname\myusername"
password="mypassword" />

I preferred the #1 solution ,as it is easier to give permissions once on the folder; You may like to try option #2 but keep a note that whenever Domain[very rare],user or password changes at that point web.config needs to be updated.

Hope it helps

Monday, January 25, 2010

TNS-3505 Failed to resolve name

On the primary database the current tnsnames.ora config for the db in
question looks like this :

LIVE =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = A.B.C.D)(PORT = 1521))
)
(CONNECT_DATA =
(SID = live)
)
)

This works ok - tnsping etc ...

now when I try to add an entry for <dbname>_PRIMARY or
<dbname>_STANDBY,

LIVE2 =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = X.Y.C.D)(PORT = 1521))
)
(CONNECT_DATA =
(SID = live)
)
)

I get a TNS-3505 Failed to resolve name.
I tried various combinations but none worked.

Solution:
After doing lot of comparsion with existing files TNSNAME.ORA , it appeared that nothing is wrong.
Giving the new entry a closer look revealed that minor difference ,a leading whitespace[space on left] exist . Removed that extra space , all worked fine.

Hope it helps