Nintex Workflow Inline Function to check if SPFile is locked
IsDocumentWritable
Nintex Workflow has a fairly useful function "IsDocumentWritable" that checks if the current item that the workflow is running on is writable.
There is a small problem, it only checks if the file is Checked Out (SPFile.CheckedOutType) and not if the file was locked, say by a Desktop Client Application.
Add Nintex Workflow Inline Function
We can add a simple Nintex Workflow inline function to get the behaviour we wanted:
I followed Vadim's excellent blog entry: http://www.vadimtabakman.com/nintex-workflow-developing-a-custom-inline-function.aspx
/*
* & 'C:\Program Files\Nintex\Nintex Workflow 2010\NWAdmin.exe' -o AddInlineFunction -functionalias "fn-IsFileLocked" -assembly "MY_DLL, Version=1.0.0.0, Culture=neutral, PublicKeyToken=9f7c41d4a6ea1fb3" -namespace "MYNamespace" -typename "MYInlineFunctions" -method "IsFileLocked" -description "Checks if file is locked." -usage "fn-IsFileLocked(itemPath)"
*/
public static bool IsFileLocked(string itemPath)
{
bool result = false;
try
{
SPSecurity.RunWithElevatedPrivileges(() =>
{
using (SPSite site = new SPSite(itemPath))
{
using (SPWeb web = site.OpenWeb())
{
SPFile file = web.GetFile(itemPath);
if (!file.Exists)
{
return;
}
// true if checked out
result = file.LockType != SPFile.SPLockType.None;
return;
}
}
});
}
catch (Exception ex)
{
}
return result;
}
You can call this method from within Nintex Workflow Designer.