Custom Logging to Event Viewer by SharePoint Custom code:
using System;
using System.Collections.Generic;
using System.Text;
using System.Diagnostics;
namespace My.Foo.Bar
{
public class EventLogHandler
{
static string sSource = "My Portal";
static string sLog = "Application"; //Change it to any specific name for categorization purpose in the Eventviewer.
//static string sEvent = "Error Occurred";
public static void AddApplicationEventLog(string exceptionDetails)
{
try
{
System.Security.Principal.WindowsImpersonationContext wic =
// make impersonation = false in the code.
System.Security.Principal.WindowsIdentity.Impersonate(IntPtr.Zero);
if (!EventLog.SourceExists(sSource))
EventLog.CreateEventSource(sSource, sLog);
if (!string.IsNullOrEmpty(exceptionDetails))
{
//EventLog.WriteEntry(sSource, sEvent);
EventLog.WriteEntry(sSource, exceptionDetails,
EventLogEntryType.Error, 234);
}
else
EventLog.WriteEntry(sSource, "No Error Message", EventLogEntryType.Information, 234);
// again roll back the Impersonation = true
//ExceptionManager.Publish(e);
wic.Undo();
}
catch (Exception e1)
{
//do nothing
}
}
}
}
Usage from your custom code, once you have the above class as a part of your application:
EventLogHandler.AddApplicationEventLog("Your message for event viewer");
The Event Viewer doesn't display the custom log message, if the application is not registered for the logging in the event viewer. To register your custom application with the eventviewer,
Run the following console application:
using System;
using System.Collections.Generic;
using System.Text;
using System.Diagnostics;
namespace EventLogWriter
{
class Program
{
static void Main(string[] args)
{
try
{
string sSource = "My SP Web Portal";
string sLog = "Application";
string exceptionDetails = "Sample Entry";
try
{
System.Security.Principal.WindowsImpersonationContext wic =
// make impersonation = false in the code.
System.Security.Principal.WindowsIdentity.Impersonate(IntPtr.Zero);
if (!EventLog.SourceExists(sSource))
EventLog.CreateEventSource(sSource, sLog);
if (!string.IsNullOrEmpty(exceptionDetails))
{
//EventLog.WriteEntry(sSource, sEvent);
EventLog.WriteEntry(sSource, exceptionDetails,
EventLogEntryType.Error, 234);
}
else
EventLog.WriteEntry(sSource, "No Error Message", EventLogEntryType.Information, 234);
// again roll back the Impersonation = true
//ExceptionManager.Publish(e);
wic.Undo();
}
catch (Exception e1)
{
//do nothing
}
}
catch (Exception ex)
{
}
}
}
}
Aug 12, 2009
Aug 3, 2009
Database Transactions in NetTier
Transactions are must when working on real time projects, always compliy with ACID properties
Try the following:
TransactionManager tran = DataRepository.Provider.CreateTransaction();
tran.BeginTransaction();
bool success = false;
try
{
// do some inserts / updates / etc
DataRepository.TicketProvider.Update(tran, ticket); //OR INSERT METHOD
UpdateSharePointLibrary(ticket.XML);
success = true;
}
Catch(Exception ex)
{
Success = false;
}
finally
{
if (success)
tran.Commit();
else
tran.Rollback();
}
If the above approach doesn't work try the one below:
try
{
using (TransactionScope scope = new TransactionScope(TransactionScopeOption.Required, TimeSpan.MaxValue))
{
//web service call
// db calls
...
scope.Complete();
}//scope
}
catch (Exception ex)
{
.....
}
Try the following:
TransactionManager tran = DataRepository.Provider.CreateTransaction();
tran.BeginTransaction();
bool success = false;
try
{
// do some inserts / updates / etc
DataRepository.TicketProvider.Update(tran, ticket); //OR INSERT METHOD
UpdateSharePointLibrary(ticket.XML);
success = true;
}
Catch(Exception ex)
{
Success = false;
}
finally
{
if (success)
tran.Commit();
else
tran.Rollback();
}
If the above approach doesn't work try the one below:
try
{
using (TransactionScope scope = new TransactionScope(TransactionScopeOption.Required, TimeSpan.MaxValue))
{
//web service call
// db calls
...
scope.Complete();
}//scope
}
catch (Exception ex)
{
.....
}
Jul 29, 2009
SharePoint WebService Response and XML Parsing
XML Parsing
XML Returned by WebService Call
XML Parsing
private bool IsGroupExisting(ugWebService.UserGroup ugws, ArrayList grps)
{
bool flag = false;
try
{
if (grps != null & grps.Count != 0)
{
for (int i = 0; i < grps.Count; i++)
{
//Find the groups in the SP Level and if any exists notify
System.Xml.XmlNode ndGroup = ugws.GetGroupCollectionFromWeb();
System.Xml.XmlDocument doc = new System.Xml.XmlDocument();
doc.LoadXml(ndGroup.InnerXml);
System.Xml.XmlElement root = doc.DocumentElement;
System.Xml.XmlNodeList lst = root.GetElementsByTagName("Group");
foreach (System.Xml.XmlNode n in lst)
{
string name = n.Attributes[1].Value;
EventLogHandler.AddApplicationEventLog("IsGroupExisting Name ..." + name);
if(name.Trim().Equals(grps[i].ToString().Trim()))
{
flag = true;
break;
}//if
}//for each
if (flag)
break;
}//for
}//if
}
catch (Exception ex)
{
throw new Exception(ex.Message);
}
XML Returned by WebService Call
XML Parsing
private bool IsGroupExisting(ugWebService.UserGroup ugws, ArrayList grps)
{
bool flag = false;
try
{
if (grps != null & grps.Count != 0)
{
for (int i = 0; i < grps.Count; i++)
{
//Find the groups in the SP Level and if any exists notify
System.Xml.XmlNode ndGroup = ugws.GetGroupCollectionFromWeb();
System.Xml.XmlDocument doc = new System.Xml.XmlDocument();
doc.LoadXml(ndGroup.InnerXml);
System.Xml.XmlElement root = doc.DocumentElement;
System.Xml.XmlNodeList lst = root.GetElementsByTagName("Group");
foreach (System.Xml.XmlNode n in lst)
{
string name = n.Attributes[1].Value;
EventLogHandler.AddApplicationEventLog("IsGroupExisting Name ..." + name);
if(name.Trim().Equals(grps[i].ToString().Trim()))
{
flag = true;
break;
}//if
}//for each
if (flag)
break;
}//for
}//if
}
catch (Exception ex)
{
throw new Exception(ex.Message);
}
Jul 22, 2009
SharePoint Deplyoment Jobs frozen or stuck
Timer Jobs Status Stuck ..
i.e. when you check in the Centrl Admin under Solution Management, all you see is ...deploying, retracting, ...
Create a batch file and execute the following before and after the solution deployment on each application and web server in the SharePoint farm:
Content of the batch file below:
stsadm.exe -o execadmsvcjobs
sleep 15
net stop SPTimerV3
sleep 5
net stop SPAdmin
sleep 5
net start SPTimerV3
sleep 5
net start SPAdmin
sleep 5
iisreset /noforce
NOTE: Can't find sleep command. Use the external sleep command you can search for Windows Server 2008 Resource Kit or Windows Server 2003 Resource Kit
i.e. when you check in the Centrl Admin under Solution Management, all you see is ...deploying, retracting, ...
Create a batch file and execute the following before and after the solution deployment on each application and web server in the SharePoint farm:
Content of the batch file below:
stsadm.exe -o execadmsvcjobs
sleep 15
net stop SPTimerV3
sleep 5
net stop SPAdmin
sleep 5
net start SPTimerV3
sleep 5
net start SPAdmin
sleep 5
iisreset /noforce
NOTE: Can't find sleep command. Use the external sleep command you can search for Windows Server 2008 Resource Kit or Windows Server 2003 Resource Kit
May 5, 2008
SharePoint the Content Editor WebPart (Dark Horse)
Content Editor WebPart or CEWP provides us lot's of capability:
* Write HTML inside it
* Use javascript to do anything
like
- calling Sharepoint WebServices
- create left treeview navigation
* Insert CSS inside the content page
* URL manipulation (i.e. URL Query String or Parameters)
* CSS for Infopath forms (like making tool tip size small) otherwise seems impossible
Snippet
"... Using a content editor web part you can insert the required Html (also CSS) into a page. Leveraging this technique we were able to add a content editor web part (CEWP) to our custom application page which hosts the infopath form. This content editor web part envelopes the CSS changes required to the tool tip...."
Now you are free to do anything using CEWP, CSS, HTML, Javascript, Javascript calling SharePoint WebServices and so on.
* Write HTML inside it
* Use javascript to do anything
like
- calling Sharepoint WebServices
- create left treeview navigation
* Insert CSS inside the content page
* URL manipulation (i.e. URL Query String or Parameters)
* CSS for Infopath forms (like making tool tip size small) otherwise seems impossible
Snippet
"... Using a content editor web part you can insert the required Html (also CSS) into a page. Leveraging this technique we were able to add a content editor web part (CEWP) to our custom application page which hosts the infopath form. This content editor web part envelopes the CSS changes required to the tool tip...."
Now you are free to do anything using CEWP, CSS, HTML, Javascript, Javascript calling SharePoint WebServices and so on.
Subscribe to:
Comments (Atom)