Starting with a new proc to select data of off the EM, Employee Custom Tab Fields and a union with a Auxilary data table to add in such things as printers, conference rooms, local police, fire etc. I will build on this stored procedure defining a datagrid with filter controls in a Sharepoint webpart.
Virtualized Dev Environment: SQL 2005, Windows 2003 server, Visual Studio 2008, Sharepoint Extensions
This proc allows wildcard searches on fields and does not filter if a null is passed. The union to the auxiliary table poses some challenges so I created a UDF dbo.IgnoreNullParm to return ‘1′ or ‘0′ to effectively turn off the union ‘leg’ when we are passed a filter parm that does not exist for that table (i.e. Initials).
Proc Def:
Create Procedure [dbo].[searchEmployees] ( @FirstName nvarchar(50) ,@LastName nvarchar(50) ,@Initials nvarchar(03) ,@Phone nvarchar(20) ,@Office nvarchar(50) ,@Dept nvarchar(50) ,@EmpNum nvarchar(04) ) as Select EM.Employee , isNull(EM.PreferredName,EM.FirstName) as FirstName , (RTRIM(EM.LastName) + ' ' + isNull(Suffix,'')) as LastName , EM.MiddleName , EM.Org as PrimaryDept , EM.Region , EM.WorkPhone , EM.WorkPhoneExt , EM.MobilePhone , ECTF.Cust5ULPhysical as Office , ECTF.custSecondaryDepartment as SecondaryDept From EM Join EmployeeCustomTabFields ECTF on ( ECTF.Employee = EM.Employee ) Where EM.Status = 'A' And ( EM.FirstName like Case When (@FirstName is null) Then '%' Else RTRIM(@FirstName) + '%' End OR EM.PreferredName like Case When (@FirstName is null) Then '%' Else RTRIM(@FirstName) + '%' End ) And EM.LastName like Case When (@LastName is null) Then '%' Else RTRIM(@LastName) + '%' End And SUBSTRING(EM.FirstName,1,1) + RTRIM(Case When(DATALENGTH(EM.MiddleName) = 0) Then '' Else SUBSTRING(EM.MiddleName,1,1) End ) + SUBSTRING(EM.LastName,1,1) LIKE Case When (@Initials is null) Then '%' Else @Initials End And ( EM.WorkPhone like '%' + isNull(@Phone,'%') + '%' OR EM.WorkPhoneExt like '%' + isNull(@Phone,'%') + '%' OR EM.MobilePhone like '%' + isNull(@Phone,'%') + '%' ) And ECTF.Cust5ULPhysical = isNull(@Office, ECTF.Cust5ULPhysical) And ( EM.Org like '%' + isNull(@Dept,'%') + '%' OR ECTF.custSecondaryDepartment like '%' + isNull(@Dept,'%') + '%' ) And EM.Employee like isNull(@EmpNum,'%') + '%' UNION ALL Select EmpNum as Employee , FirstName , LastName , '' as MiddleName , '' as PrimaryDept , '' as Region , Phone as WorkPhone , PhoneExt as WorkPhoneExt , '' as MobilePhone , ECTF_Cust5ULPhysical as Office , '' as SecondaryDept From OfficeAux OA Where OA.FirstName like Case When (@FirstName is null) Then '%' Else RTRIM(@FirstName) + '%' End And OA.LastName like Case When (@LastName is null) Then '%' Else RTRIM(@LastName) + '%' End And '1' = dbo.IgnoreNullParm(@Initials) <em> -- if parm is null ignore it otherwise this effectively 'turns off union' if parm is not null</em> And '1' = dbo.IgnoreNullParm(@Dept) <em>-- if parm is null ignore it otherwise this effectively 'turns off union' if parm is not null</em> And ( OA.Phone like '%' + isNull(@Phone,'%') + '%' OR OA.PhoneExt like '%' + isNull(@Phone,'%') + '%') And ECTF_Cust5ULPhysical = isNull(@Office, ECTF_Cust5ULPhysical) And EmpNum like isNull(@EmpNum,'%') + '%'
UDF
Create function [dbo].[IgnoreNullParm] ( @Field nvarchar(50) ) Returns bit -- Sends back True '1' if Parm is null -- Setup in where clause as Where '1' = IgnoreNullParm(@parm) -- Allows you to effectively turn off a union 'leg' if a parm is not null and ignore it if not null as Begin Declare @bReturn as bit Select @bReturn = Case When (@Field is null) Then '1' Else '0' End Return @bReturn End
Auxilary Table:
CREATE TABLE [dbo].[OfficeAux]( [ID] [uniqueidentifier] NOT NULL, [ECTF_Cust5ULPhysical] [varchar](20) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, [XName] [nvarchar](255) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, [EmpNum] [char](3) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, [FirstName] [nvarchar](255) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, [LastName] [nvarchar](255) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, [PhoneExt] [nvarchar](10) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, [Phone] [nvarchar](50) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, [MobilePhone] [nvarchar](50) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, [isActive] [bit] NULL, [lastUpdated] [datetime] NULL, [lastUpdater] [nvarchar](50) COLLATE SQL_Latin1_General_CP1_CI_AS NULL ) ON [PRIMARY] End
0 Responses to “#19 Employee Directory Sharepoint Webpart Pt 1 – Stored Procedure”