$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