Using SharePoint Records Management, I declared a document as a record. Then I tried to undeclare the document as a record. For some reason SharePoint wouldn’t not undeclare the document.
Using PowerShell, you can force the undeclare action.
#Load the sharepoint snapin
$SPWeb = Get-SPWeb "http://sharepointed.com/sites/taco"
$SPList = $SPWeb.Lists["Taco Recipes"]
$SPItem = $SPList.GetItemById("75")
#new code to remove hold first
$SPItem.Properties.Remove("ecm_ItemLockHolders")
$SPItem.File.Properties.Remove("ecm_ItemLockHolders")
$SPItem.SystemUpdate()
#undeclare the record
[Microsoft.Office.RecordsManagement.RecordsRepository.Records]::UndeclareItemAsRecord($SPItem)
Doing this will remove the lock from the document.
What if you want to update the item permissions on every item in a list or library, BUT you don’t want to trigger an associated workflow?
Why?
Request came in to add a new SharePoint group to all the items in a library. Options were to update EVERY item in the library and let the workflow update the permissions, update the items ONE AT A TIME…
OR
Use PowerShell to update item permissions and not stress the server(s).
# add powershell snapin
$web = Get-SPWeb -Identity "http://sharepointed.com"
$list = $web.Lists.TryGetList("Taco Time")
$group = "Taco Makers"
$PermissionLevel = "Read"
#get site group and setup permission/role
$group = $web.Groups[$group]
$roleAssignment = new-object Microsoft.SharePoint.SPRoleAssignment($group)
$roleDefinition = $web.RoleDefinitions[$PermissionLevel];
$roleAssignment.RoleDefinitionBindings.Add($roleDefinition);
if ($list -ne $null)
{
foreach ($item in $list.Items)
{
if ($item.HasUniqueRoleAssignments -eq $False)
{
$item.BreakRoleInheritance($True)
}
if ($web.SiteGroups[$group] -ne $null)
{
$item.RoleAssignments.Add($roleAssignment)
}
else
{
Write-Host "Group is not valid."
}
}
}
$web.Dispose()
Recently had a new domain added to our forest. After this happened, users would see duplicate values in the SharePoint people picker. The values would both look like John Doe and John Doe, but their underlying domains were different. This caused all sorts of fun when people started emailing “john doe can’t access my site.”
To fix this, the people picker property for each web application in the farm needed to be updated.
There are a lot of properties and options that you can update. I’m only updating my people picker to show one domain.
Need to sum / total a calculated column in SharePoint 2010, here is the answer.
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js" type="text/javascript"></script>
<script type="text/javascript">
function addCommas(nStr) {//formats number
nStr += '';
x = nStr.split('.');
x1 = x[0];
x2 = x.length > 1 ? '.' + x[1] : '';
var rgx = /(\d+)(\d{3})/;
while (rgx.test(x1)) {
x1 = x1.replace(rgx, '$1' + ',' + '$2');
}
return x1 + x2;
}
$(function() {//sums money in specific list column
var col = 2; //which column to sum
var m = "$"; //change to "" for non-money format
var headers = $("table.ms-listviewtable:first> tbody> tr:first th").get();
var arrayList = $("table.ms-listviewtable:first> tbody> tr:gt(1)").find(">td:eq("+col+")").get();
var x = 0;
var p1 = "";
var p2 = "";
$.each(arrayList, function(){
x += Number($(this).text().replace(/\$|,|\)/g, "").replace(/\(/g,"-"));
});
if (x < 0) {//format for negative numbers
p1 = "(";
p2 = ")";
x = Math.abs(x);
}
$(".ms-listviewtable:first> tbody> tr:eq(1)").find(">td:eq("+col+")")
.css("text-align","middle")
.html("<b>Total = "+p1+m+addCommas(x.toFixed(2))+p2+"</b>");
});
</script>
Using InfoPath to retrieve data from SQL Server, I received this error:
A query to retrieve form data cannot be completed because this action would violate cross-domain restrictions.
Fix:
Update the InfoPath Form Services settings in Central Admin
Central Admin –> General Application Settings –> Configure InfoPath Form Services Cross-Domain Access for User Form Templates
If one of the servers in your Search Application Topology is showing a Status of Not Responding, try and restart service app for the server in question.
One of my Crawl Components was not responding, but the server was online and working. The script below helped to re-sync the server.
-identity “Search Service Application”
Replace Search Service Application with the name of your Search App.
$SearchApp = Get-SPEnterpriseSearchServiceApplication -identity "Search Service Application"
$SearchApp | Get-SPEnterpriseSearchQueryTopology | Get-SPEnterpriseSearchQueryComponent | Where-Object {$_.ServerName -eq 'Server Name That is Stuck'} | Restart-SPEnterpriseSearchQueryComponent
Recently was tasked with updating passwords on an older SharePoint 2007 farm. The fun part, Windows Server 2003 was the host OS. I hit a wall right out of the gate when I tried to run my STSADM command.
What the $#%##, I know I have full access to the farm and databases.
In Windows Server 2003, to launch the command prompt, right-click and select Run As. THEN, un-check Run this program with restricted access. Now run the STSADM command again.
As we all know, digging through SharePoint groups looking to see what users are in each, is no fun.
To solve this, I created a new List, and added the groups I wanted to monitor. Then, added a little PowerShell to update a column in the List with the members in each group.
Setup:
Create a new List.
New Columns:
SPgroup
Type: Person or Group
Allow selection of: People or Group
Users
Type: Multiple lines of text
Specify the type of text to allow:
Update Column:
Title
Require that this column contains information: No
The PowerShell script below does the following:
Get the SharePoint Site and List.
Loop through each item in the List.
Retrieve the value of the SPgroup field.
Truncate the Users field.
Loop through the users in the SPgroup.
Update the Users field with the values from SPgroup.