Advertisement
private775

SharePoint: PS1 script to refresh external column field

Apr 28th, 2015
446
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. $webUrl = "http://acme.com/sites/acme/documentstore"
  2. $listName = "Transformer Renewal Tracking"
  3. $columnName = "CRM Data"
  4.  
  5. function setPrivateField($type, $fieldName, $obj, $val){
  6.     $bindFlags = [System.Reflection.BindingFlags]::Instance -bor [System.Reflection.BindingFlags]::Public -bor [System.Reflection.BindingFlags]::NonPublic -bor [System.Reflection.BindingFlags]::Static
  7.     $fi = $type.GetField($fieldName, $bindFlags)
  8.     $fi.SetValue($obj, $val)
  9. }
  10.  
  11. function getPrivateField($type, $fieldName, $obj){
  12.     $bindFlags = [System.Reflection.BindingFlags]::Instance -bor [System.Reflection.BindingFlags]::Public -bor [System.Reflection.BindingFlags]::NonPublic -bor [System.Reflection.BindingFlags]::Static
  13.     $fi = $type.GetField($fieldName, $bindFlags)
  14.     $ret = $fi.GetValue($obj)
  15.     return $ret
  16. }
  17.  
  18. function showPrivateField($type, $fieldName, $obj){
  19.     $val = getPrivateField $type $fieldName $obj
  20.     $valStr = ""
  21.     if($val -ne $null) { $valStr = $val.ToString() }
  22.     Write-Host "$($fieldName): $($valStr)"
  23. }
  24.  
  25.  
  26. $w = get-spweb $webUrl
  27. $l = $w.Lists.TryGetList($listName)
  28. $ff = $l.Fields.GetField($columnName)
  29.  
  30.  
  31.  
  32. $asmSP = [System.Reflection.Assembly]::Load("Microsoft.SharePoint, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c")
  33.  
  34.  
  35. $ent = Get-SPBusinessDataCatalogMetadataObject -BdcObjectType "Entity" -ServiceContext $webUrl -Name $ff.EntityName -Namespace $ff.EntityNamespace
  36. $sysint = $null
  37.  
  38. foreach($lobSystemInstance in $ent.LobSystem.LobSystemInstances){
  39.     if($lobSystemInstance.Name -eq $ff.SystemInstanceName){
  40.         $sysint = $lobSystemInstance
  41.         break
  42.     }
  43. }
  44.  
  45. $tt = $asmSP.GetTypes()|?{$_.Name -eq "BusinessDataSynchronizerJob" }
  46. $job = [System.Activator]::CreateInstance($tt)
  47.  
  48. setPrivateField $tt "WebId" $job $w.ID
  49. setPrivateField $tt "ListId" $job $l.ID
  50. setPrivateField $tt "ColumnName" $job $ff.InternalName
  51. setPrivateField $tt "ColumnTitle" $job $ff.Title
  52. setPrivateField $tt "Web" $job $w
  53.  
  54. showPrivateField $tt "WebId" $job
  55. showPrivateField $tt "ListId" $job
  56. showPrivateField $tt "ColumnName" $job
  57. showPrivateField $tt "ColumnTitle" $job
  58. showPrivateField $tt "Web" $job
  59.  
  60. $job.Start($w.Site)
  61.  
  62. $tt2 = $asmSP.GetTypes()|?{$_.Name -eq "LongRunningOperationJob" }
  63. $bf = [System.Reflection.BindingFlags]::Static -bor [System.Reflection.BindingFlags]::Public
  64. $mi = $tt2.GetMethods($bf)|?{$_.Name -eq "GetJobStatus" }
  65.  
  66. $params = $w.Site, $null, $job.JobId
  67. $params[1] = [Microsoft.SharePoint.SPContext]::GetContext($w)
  68.  
  69. $jobStatus = $mi.Invoke($null, $params)
  70.  
  71. while($jobStatus.IsActive){
  72.     Write-Host $jobStatus.WaitMessage
  73.     Start-Sleep -Seconds 60
  74.     $jobStatus = $mi.Invoke($null, $params)
  75. }
  76. Write-Host $jobStatus.StatusDescription
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement