private775 icon

SharePoint: PS1 script to refresh external column field

private775 | PRO | 04/28/15 07:46:59 PM UTC | 0 ⭐ | 704 👁️ | Never ⏰ | []
PowerShell |

2.65 KB

|

None

|

0 👍

/

0 👎

$webUrl = "http://acme.com/sites/acme/documentstore"
$listName = "Transformer Renewal Tracking"
$columnName = "CRM Data"
 
function setPrivateField($type, $fieldName, $obj, $val){
    $bindFlags = [System.Reflection.BindingFlags]::Instance -bor [System.Reflection.BindingFlags]::Public -bor [System.Reflection.BindingFlags]::NonPublic -bor [System.Reflection.BindingFlags]::Static
    $fi = $type.GetField($fieldName, $bindFlags)
    $fi.SetValue($obj, $val)
}
 
function getPrivateField($type, $fieldName, $obj){
    $bindFlags = [System.Reflection.BindingFlags]::Instance -bor [System.Reflection.BindingFlags]::Public -bor [System.Reflection.BindingFlags]::NonPublic -bor [System.Reflection.BindingFlags]::Static
    $fi = $type.GetField($fieldName, $bindFlags)
    $ret = $fi.GetValue($obj)
    return $ret
}
 
function showPrivateField($type, $fieldName, $obj){
    $val = getPrivateField $type $fieldName $obj
    $valStr = ""
    if($val -ne $null) { $valStr = $val.ToString() }
    Write-Host "$($fieldName): $($valStr)"
}
 
 
$w = get-spweb $webUrl
$l = $w.Lists.TryGetList($listName)
$ff = $l.Fields.GetField($columnName)
 
 
 
$asmSP = [System.Reflection.Assembly]::Load("Microsoft.SharePoint, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c")
 
 
$ent = Get-SPBusinessDataCatalogMetadataObject -BdcObjectType "Entity" -ServiceContext $webUrl -Name $ff.EntityName -Namespace $ff.EntityNamespace
$sysint = $null
 
foreach($lobSystemInstance in $ent.LobSystem.LobSystemInstances){
    if($lobSystemInstance.Name -eq $ff.SystemInstanceName){
        $sysint = $lobSystemInstance
        break
    }
}
 
$tt = $asmSP.GetTypes()|?{$_.Name -eq "BusinessDataSynchronizerJob" }
$job = [System.Activator]::CreateInstance($tt)
 
setPrivateField $tt "WebId" $job $w.ID
setPrivateField $tt "ListId" $job $l.ID
setPrivateField $tt "ColumnName" $job $ff.InternalName
setPrivateField $tt "ColumnTitle" $job $ff.Title
setPrivateField $tt "Web" $job $w
 
showPrivateField $tt "WebId" $job
showPrivateField $tt "ListId" $job
showPrivateField $tt "ColumnName" $job
showPrivateField $tt "ColumnTitle" $job
showPrivateField $tt "Web" $job
 
$job.Start($w.Site)
 
$tt2 = $asmSP.GetTypes()|?{$_.Name -eq "LongRunningOperationJob" }
$bf = [System.Reflection.BindingFlags]::Static -bor [System.Reflection.BindingFlags]::Public
$mi = $tt2.GetMethods($bf)|?{$_.Name -eq "GetJobStatus" }
 
$params = $w.Site, $null, $job.JobId
$params[1] = [Microsoft.SharePoint.SPContext]::GetContext($w)
 
$jobStatus = $mi.Invoke($null, $params)
 
while($jobStatus.IsActive){
    Write-Host $jobStatus.WaitMessage
    Start-Sleep -Seconds 60
    $jobStatus = $mi.Invoke($null, $params)
}
Write-Host $jobStatus.StatusDescription

Comments