8.05.2014

SharePoint 2010 - Search Sevice Application Problems (Event IDs: 6482, 6398, 2159)

SharePoint really has a mind of it's own. For whatever reason one day all of the search service applications stopped working. I found several articles that stated that all of the search service application  objects needed to be deleted and rebuilt. Other article indicating that the indexes needed to be cleared out. Finally, I found this one line powershell gem that fixed my issue of event IDs: 6482, 6398, 2159. Voila...all the event errors stopped.


Get-SPEnterpriseSearchServiceInstance -Local | Start-SPEnterpriseSearchServiceInstance

http://social.msdn.microsoft.com/Forums/en-US/3e24eaae-86a3-4f6c-89de-1dc38f3a55f5/the-search-application-guid-on-server-servername-did-not-finish-loading?forum=sharepointsearchprevious

7.07.2014

SharePoint 2010 - Change Column Types

Sometimes InfoPath doesn't promote fields they way you would like to the SharePoint list. For instance, currency is promoted to a list as a decimal, or a decimal is promoted as an integer. Powershell to the rescue!

Output all of the list columns
$w = Get-SPWeb "https://site";   
$l = $w.GetList("https://site/listname/");
$l.Fields | sort StaticName,Type | ?{$_.CanBeDeleted -eq $true -and $_.Hidden -eq $false} | FT Title,StaticName,Type;


Change Column Type
$w = Get-SPWeb "https://site";   
$l = $w.GetList("https://site/listname/");
 
$column = $l.Fields["Amount Due"];
#$column.AllowDeletion = $false;
#$column.Sealed = $true;
$column.Type = "Number";
$column.Update($true);
$web.Dispose();

6.25.2014

SharePoint - List Filtering on Dates

This is an excellent article that describes how to connect date field web parts to a custom list, to perform range filtering.
http://www.bjw.co.nz/developer/sharepoint-2010/101-list-filtering-by-date-range

5.07.2014

SQL Server 2012 - SSIS Execution Permissions

I ran into an issue where even the server administrator and sql server services accounts would not properly execute SSIS packages. I had to perform the following steps so the service account could execute a sql agent job and run a package.

Run Dcomcnfg.exe. Dcomcnfg.exe provides a user interface for modifying certain settings in the registry. In the Component Services dialog, expand the Component Services > Computers > My Computer > DCOM Config node. Right-click Microsoft SQL Server Integration Services 11.0, and then click Properties. On the Security tab, click Edit in the Launch and Activation Permissions area. Add users and assign appropriate permissions, and then click Ok. Repeat steps 4 - 5 for Access Permissions. Restart SQL Server Management Studio. Restart the Integration Services Service. (Source MSDN)

4.25.2014

SharePoint & Antivirus

Folders to consider for exclusion in antivirus programs:

C:\Program Files\Microsoft Office Servers\14.0\Logs
C:\Program Files\Microsoft Office Servers\
C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\14\LOGS
C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\

C:\Program Files\Microsoft SQL Server
C:\Program Files (x86)\Microsoft SQL Server

Sources:

4.10.2014

SharePoint 2010 - Enabling the Developer Dashboard

Enabling via powershell:

$contentService = [Microsoft.SharePoint.Administration.SPWebService]::ContentService
$dashboardSetting = $contentService.DeveloperDashboardSettings
$dashboardSetting.DisplayLevel = [Microsoft.SharePoint.Administration.SPDeveloperDashboardLevel]::On
$dashboardSetting.Update()


http://msdn.microsoft.com/en-us/library/office/gg512103(v=office.14).aspx
http://msdn.microsoft.com/en-us/library/office/ff512745(v=office.14).aspx

2.03.2014

Powershell - File Renaming

Here is a quick powershell script to tidy files that are not properly formatted for the web.

Get-ChildItem C:\Temp\rename\* -Recurse | Rename-Item -NewName {$_.name -creplace '[^A-Za-z1234567890.]','_' }
Get-ChildItem C:\Temp\rename\* -Recurse | Rename-Item -NewName {$_.name -replace '___','_' }
Get-ChildItem C:\Temp\rename\* -Recurse | Rename-Item -NewName {$_.name -replace '__','_' }

1.29.2014

SharePoint 2010 - InfoPath - Web Browser Settings

There is a glitch in the form rendering processes. Even with all the apparent settings set correctly in Central Admin and in the Form Library itself, the form still tries to open in the client filler application. There are some workarounds.
  1. Add this query parameter to the URL string. (Documentation)
    https://intranet.mysite.org/FormLibrary/Forms/template.xsn?OpenIn=Browser
  2. Using powershell to force the settings on the library:
       http://technet.microsoft.com/en-us/library/ff805082(v=office.14).aspx
       Set-SPInfoPathFormsService -AllowUserFormBrowserRendering $true
The actual fix for me was to just do a full publish of the form again. For whatever reason the "Quick Publish" did not correct the issue.

1.10.2014

Powershell - Transferring Files from Server to Server

This is a nice little trick to get powershell to transfer files from one server directly without using domain admin credentials, or setting up an intermediary share directory. The credentials here are for the destination server. This creates a temporary network shared drive on the source server, transfers the file, then removes the shared directory.

$DriveUsername = "SERVER\USERNAME"
$DrivePassword = "PASSWORD"
$LocalFile = "C:\DIRECTORY\FILENAME.csv"
$Drive = "T:"
$RemoteFile = "$Drive\FILENAME.csv"
$UNC = "\\10.10.10.10\C$\DIRECTORY"
$net = new-object -ComObject WScript.Network

$net.MapNetworkDrive($Drive, $UNC, $false, $DriveUsername, $DrivePassword)
Copy-Item $LocalFile $RemoteFile
$net.removenetworkdrive($Drive)

10.17.2013

SharePoint 2010 - Metatag Visibility Access

By default it would appear that the taxonomy information is not readily visible to all users, outside of the administrator. This list hidden list requires the following permissions:
https://servername/Lists/TaxonomyHiddenList/
  • NT AUTHORITY\authenticated users           Read  
  • System Account (SHAREPOINT\system)     Full Control 

10.16.2013

SharePoint 2010 - InfoPath Time Picker

Creating a time picker in InfoPath is a real pain. I opted to not create the sharepoint lists and just load the options manually within the form. To pull this off you need to create 4 fields.
  1. MyDateTime = DateTime control. The final location of the information. Not actually used in the form. Just a container for storage.
  2. mDatePicker = Date control.
  3. mHourPicker = Text box in drop down format. Options are 00 - 23.
  4. mTimePicker = Text box in drop down format. Options are 00,15,30,45.
The concatenation used to apply the final value to MyDateTime is actually this, not what was in the article.
concat(mDatePicker, “T”, mHourPicker, “:”, mMinutePicker, “:00″)

This article does explain it quite well.
http://www.moderntoad.com/2012/02/23/infopath-date-hour-and-minute-picker-to-replicate-sharepoint-experience/

9.30.2013

SharePoint 2010 - Chrome Compatibility Fix

This little gem works really well at getting Chrome to load javascript correctly. IE8 does not like this and will throw an error.

<!--[if !IE]><!-->
<script type="text/javascript">
   window[addEventListener ? 'addEventListener' : 'attachEvent'](addEventListener ? 'load' : 'onload', function(){
    if(_spBodyOnLoadWrapper){
      _spBodyOnLoadWrapper();
    }
   });
</script>
<!--<![endif]--> 


http://royaltutorials.com/sharepoint-2010-javascriptribbon-not-working-in-chrome/
http://withinsharepoint.com/archives/256

9.27.2013

SharePoint 2010 - Javascript Client Object Model

The following working example uses Javascript, JQuery, and CAML.

 http://msdn.microsoft.com/en-us/library/jj245759.aspx
 http://www.sharepointnutsandbolts.com/2010/10/sp2010-ajaxpart-2-using-javascript.html

======================================================

<div style="padding: 20px;">
<hr />
<h3>
Calculate Total Subs Reserved for a Single Day (Pending/Approved)</h3>
<table border="0" cellpadding="0" cellspacing="4">
  <tbody>
<tr>
    <td height="55"><input class="input-small search-query" id="targetDay" maxlength="10" name="targetDay" placeholder="YYYY-MM-DD" style="font-size: 150%;" type="text" /></td>
    <td width="80"><button class="btn btn-primary" id="btnGo" type="button">GO</button></td>
    <td width="200"><div id="totalSubsResults" style="color: red; font-weight: bold;">
</div>
</td>
  </tr>
</tbody></table>
<hr />
</div>
<script type="text/javascript">
    var allDocs;
    var GUIDSubStartDate = "_a3909a47_509a_47e3_a9e7_2e149c274379";
    var GUIDSubEndDate = "_fa7b1c2e_5d62_4edc_a3bd_aa41c9da2003";
    var GUIDSubNumber = "_c0232d29_8c9c_4c08_bf02_3ade22e7d14f";


    $('#btnGo').click(function () {
        SP.SOD.executeFunc('sp.js', 'SP.ClientContext', sharePointReady);
    });
    
    
      function sharePointReady() {
        //var currentDay = '2013-10-23'
        var currentDay = $('#targetDay').val();
        
        //var ctx = new SP.ClientContext.get_current();
        var ctx = new SP.ClientContext;
        var targetList = ctx.get_web().get_lists().getByTitle('PDR');
        
        //var query = SP.CamlQuery.createAllItemsQuery();
        //allDocs = targetList.getItems(query);
        //ctx.load(allDocs);
        
        var query = new SP.CamlQuery();
        query.set_viewXml("<view><query><where><and><neq><fieldref Name='ApprovalStatus' /><value Type='Choice'>REJECTED</Value></Neq><and><leq><fieldref Name='" + GUIDSubStartDate + "' /><value IncludeTimeValue='FALSE' Type='DateTime'>" + currentDay + "</Value></Leq><geq><fieldref Name='" + GUIDSubEndDate + "' /><value IncludeTimeValue='FALSE' Type='DateTime'>" + currentDay + "</Value></Geq></And></And></Where></Query></View>");

        allDocs = targetList.getItems(query);
        ctx.load(allDocs);
        ctx.executeQueryAsync(Function.createDelegate(this, getDocsAllItemsSuccess),  Function.createDelegate(this, getDocsAllItemsFailure));
    }


    function getDocsAllItemsSuccess(sender, args) {
        var totalSubsNumber = 0;
        var listEnumerator = allDocs.getEnumerator();
        // Loop Over Records ------------
        while (listEnumerator.moveNext()) {
            var mySubsNumber = listEnumerator.get_current().get_item(GUIDSubNumber);
            //$('#detailsSubResults').append(mySubsNumber + '<br />');
            totalSubsNumber += mySubsNumber;
        }
        // Output Total ------------------
        //alert(totalSubsNumber);
        
        $("#totalSubsResults").fadeOut(500, function() {
            $(this).html("<table cellpadding=3 cellspacing=0 border=0 align=right>
<tr><td><span style=font-size:350%>"+totalSubsNumber+"</span></td><td><span style=font-size:125%>SUBS<br/>RESERVED</span></td></tr>
</table>
");
            $(this).fadeIn(500);
        });
        
    }

    function getDocsAllItemsFailure(sender, args) {
        alert('Failed to get list items. \nError: ' + args.get_message() + '\nStackTrace: ' + args.get_stackTrace());
    }
    
</script>

SQL Server - Recovering TempDB Space

-- STEP 01 ALTER FILE SPECS =====================================
USE master;
GO
ALTER DATABASE tempdb
MODIFY FILE (NAME = tempdev, SIZE=100Mb);
GO
ALTER DATABASE tempdb
MODIFY FILE (NAME = templog, SIZE=100Mb);
GO


-- STEP 02 SHRINK FILES ========================================
USE tempdb
GO
DBCC shrinkfile (tempdev, 100)
GO
DBCC shrinkfile (templog, 100)
GO


http://www.sqldbadiaries.com/2010/11/13/tempdb-please-allow-me-to-shrink-you/
http://www.dbadiaries.com/how-to-shrink-tempdb
http://support.microsoft.com/kb/307487
http://technet.microsoft.com/en-us/library/ms175527(v=SQL.105).aspx 

6.27.2013

Free Stuff

Chrome Extension - Chrome Commander
Simple chrome extension that launches all of Google's search, office, services, software & resources. I got tired of trying to keep track of them all by memory. (shortcuts / bookmarks / favorites)

Python Script - pydev-googleapps-site
The intent of this project is to download Sites information via Google’s API. I put together this code because of two reasons:
  1. Google’s support of .Net is lacking. Python became the path of least resistance.
  2. There is an undocumented limit of 500 results per site feed request imposed by Google. They have a “max-results” option which one would believe actually returns all results, but it doesn’t.