2017-01-21 2 views
0

편집을 사용하여 SSRS 데이터 기반 구독 만들기 : 내가 PowerShell 스크립트에 MSDN C# 코드를 변환하기 위해 노력하고있어 문제PowerShell을

PowerShell을에 전체 변환 된 C#을 추가. 여기 MSDN link

거의 변환을 마쳤지만 마지막 줄에는 몇 가지 문제가 있습니다.

"7"인수로 "CreateDataDrivenSubscription"을 호출하면 예외가 발생합니다. "XML 문서를 생성하는 동안 오류가 발생했습니다."

다음은 데이터 기반 가입 생성의 7 번째 인수에 대한 코드 스 니펫입니다. 여기

$Parameters | Add-Member -type NoteProperty -Name $EMPID.ParameterName -Value $EMPID.FieldAlias 

$ReportYear = New-Object $ParameterValue 
$ReportYear.Name = "ReportYear" 
$ReportYear.Value = "2017" 

$Parameters | Add-Member -type NoteProperty -Name $ReportYear.Name -Value $ReportYear.Value 

$ReportMonth = New-Object $ParameterValue 

$ReportMonth.Name = "ReportMonth" 
$ReportMonth.Value = "6" 

$Parameters | Add-Member -Type NoteProperty -Name $ReportMonth.Name -Value $ReportMonth.Value 


$SubscriptionID = $objWebServerProxy.CreateDataDrivenSubscription($Report,$Settings,$arrDataRetrievalPlan,$Description,$EventType,$MatchData,$Parameters) 

을 나는 변환에 그리워 않은 경우

ParameterValueOrFieldReference[] parameters = new ParameterValueOrFieldReference[3]; 

ParameterFieldReference empID = new ParameterFieldReference(); // Data-driven. 
empID.ParameterName = "EmpID"; 
empID.FieldAlias = "EmpID"; 
parameters[0] = empID; 

ParameterValue reportYear = new ParameterValue(); 
reportYear.Name = "ReportYear"; 
reportYear.Value = "2004"; 
parameters[1] = reportYear; 

ParameterValue reportMonth = new ParameterValue(); 
reportMonth.Name = "ReportMonth"; 
reportMonth.Value = "6"; // June 
parameters[2] = reportMonth; 

try 
{ 
    string subscriptionID = rs.CreateDataDrivenSubscription( 
report, settings, dataRetrieval, description, eventType, matchData, parameters); 

당신이 말해 줄 수 C# 코드는 다음과 같습니다

여기 PowerShell 스크립트입니다?

다음은 전체 변환 스크립트입니다.

$URI = "URI" 

$objWebServerProxy = New-WebServiceProxy -Uri $URI -UseDefaultCredential -ErrorAction Stop 

$Namespace = $objWebServerProxy.GetType().Namespace 
$ExtensionSettigs = ($Namespace + '.ExtensionSettings') 
$ParameterValueOrFieldReference = ($Namespace + '.ParameterValueOrFieldReference') 
$ParameterFieldReference = ($Namespace + '.ParameterFieldReference') 
$ParameterValue = ($Namespace + '.ParameterValue') 
$Datasource = ($Namespace + '.DataSource') 
$DataSourceDefinition = ($Namespace + '.DataSourceDefinition') 
$Field = ($Namespace + '.Field') 
$CredentialRetrievalEnum = ($Namespace + '.CredentialRetrievalEnum') 
$DataSetDefinition = ($Namespace + '.DataSetDefinition') 
$QueryDefinition = ($Namespace + '.QueryDefinition') 
$DataSetDefinition = ($Namespace +'.DataSetDefinition') 
$DataRetrievalPlan = ($Namespace+'.DataRetrievalPlan') 
$ScheduleReference = ($Namespace+'.ScheduleReference') 

$NameSharedSchedule="Mike_Test"; 
$NeverExpireSchedule= $objWebServerProxy.ListSchedules([System.Management.Automation.Language.NullString]::Value) | where {$_.Name -eq "$NameSharedSchedule"} 
$NeverExpireScheduleID = $NeverExpireSchedule.scheduleid; 
$NeverExpireDescription = $NeverExpireSchedule.Description; 
$NeverExpireDefinition = $NeverExpireSchedule.Definition; 
#Write-Host "Found Shared Schedule: '$NameSharedSchedule' with id $NeverExpireScheduleID and definition $NeverExpireDescription"; 

$NeverExpireScheduleRef =New-Object $ScheduleReference 
$NeverExpireScheduleRef.ScheduleID=$NeverExpireScheduleID; 

#$Report = "/ForMigration/Subscription_Test/SSRSRationalization_ExecutionLog_LastEightDays" 
$Report = "/Gayatree/GTest/ExecutionLog_LastEightDays" 
$Description = "My new Data Driven Subscription" 

$Settings = New-Object $ExtensionSettigs 

$Settings.Extension = "Report Server Email"; 

$ExtensionParams = New-Object $ParameterValueOrFieldReference 

#$ExtensionParams.ParameterValueOrFieldReference ='8' 



$To = New-Object $ParameterFieldReference 
$To.ParameterName = "TO" 
$To.FieldAlias = "Email" 

$ExtensionParams | Add-Member -type NoteProperty -name $To.ParameterName -Value $To.FieldAlias 

$ReplyTo = New-Object $ParameterValue 
$ReplyTo.Name = "ReplyTo" 
$ReplyTo.Value = "Email" 

$ExtensionParams | Add-Member -type NoteProperty -name $ReplyTo.Name -Value $ReplyTo.Value 

$IncludeReport = New-Object $ParameterValue 
$IncludeReport.Name = "IncludeReport" 
$IncludeReport.Value = $false 

$ExtensionParams | Add-Member -type NoteProperty -name $IncludeReport.Name -Value $IncludeReport.Value 

$RenderFormat = new-object $ParameterValue 
$RenderFormat.Name = "ReportFormat"; 
$RenderFormat.Value = "HTML4.0" 

$ExtensionParams | Add-Member -type NoteProperty -name $RenderFormat.Name -Value $RenderFormat.Value 

$Priority = New-Object $ParameterValue 
$Priority.Name = "Priority" 
$Priority.Value = "Normal" 

$ExtensionParams | Add-Member -type NoteProperty -name $Priority.Name -Value $Priority.Value 

$Subject = New-Object $ParameterValue 
$Subject.Name = "Subject" 
$Subject.Value = "Your sales report" 
$ExtensionParams | Add-Member -type NoteProperty -name $Subject.Name -Value $Subject.Value 

$Comment = New-Object $ParameterValue 
$Comment.Name = "Comment" 
$Comment.Value = "Here is the link to your report." 

$ExtensionParams | Add-Member -type NoteProperty -name $Comment.Name -Value $Comment.Value 

$IncludeLink = New-Object $ParameterValue 
$IncludeLink.Name = "IncludeLink"; 
$IncludeLink.Value = $true 

$ExtensionParams | Add-Member -Type NoteProperty -name $IncludeLink.Name -Value $IncludeLink.Value 

$Settings.ParameterValues = $ExtensionParams 



$DSName = New-Object $Datasource 
$DSName.Name = "Mike_Test" 

<# 
$DSDefinition = New-Object $DataSourceDefinition 
$CredentialRetrieval = New-Object $CredentialRetrievalEnum 
$CredentialRetrieval.value__ = 1 

$DSDefinition.ConnectString = "Data source = server;Initial Catalog = ReportServer" 
$DSDefinition.CredentialRetrieval = $CredentialRetrieval 
$DSDefinition.Enabled = $true 
$DSDefinition.EnabledSpecified = $true 
$DSDefinition.Extension = "SQL" 
$DSDefinition.ImpersonateUserSpecified = $false 
$DSDefinition.UserName = "Username" 
$DSDefinition.Password = "Password" 

#> 
$DS = $objWebServerProxy.ListChildren('/',$false)|Where-Object {$_.TypeName -eq "DataSource"} 

    foreach($DSS in $DS){ 
    $anotherPass = $DSS.path 
$another = $objWebServerProxy.GetDataSourceContents("$anotherPass") 
$another.Password = "TestPass" 
} 
$another 
$DSName.Item = $another 

$FieldList = New-Object $Field 
$FieldList.Name = "EmailAddress" 
$FieldList.Alias = "EmailAddress" 

$FieldList | Add-Member -Type NoteProperty -name $FieldList.Name -Value $FieldList.Alias 

$FieldList.Name = "EmpID" 
$FieldList.Alias = "EmpID" 

$FieldList | Add-Member -Type NoteProperty -name $FieldList.Name -Value $FieldList.Alias 


$DataSetDef = New-Object $DataSetDefinition 

$DataSetDef.AccentSensitivitySpecified = $false 
$DataSetDef.CaseSensitivitySpecified = $false 
$DataSetDef.KanatypeSensitivitySpecified = $false 
$DataSetDef.WidthSensitivitySpecified = $false 
$DataSetDef.Fields = $FieldList 


$arrQueryDefinition = New-Object $QueryDefinition 
$arrQueryDefinition.CommandText = "Select getdate()" 
$arrQueryDefinition.CommandType = "Text" 
$arrQueryDefinition.Timeout = '45' 
$arrQueryDefinition.TimeoutSpecified = $true 
$DataSetDef.Query = $arrQueryDefinition 
$Results = New-Object $DataSetDefinition 
$Bool = $true 
$Name = "Parameter" 
$DSDefinition 

$DataSetDef 


$DSName 
$Results = $objWebServerProxy.PrepareQuery($DSName,$DataSetDef,[ref]$Bool,[ref]$Name) 

$arrDataRetrievalPlan = New-Object $DataRetrievalPlan 
$arrDataRetrievalPlan.DataSet = $Results 
$arrDataRetrievalPlan.Item = $another 

$EventType = "TimedSubscription"; 
$MatchData = $NeverExpireScheduleID 

$Parameters = New-Object $ParameterValueOrFieldReference 
# 
$EMPID = New-Object $ParameterFieldReference 
$EMPID.ParameterName = "EmpID" 
$EMPID.FieldAlias = "EmpID" 

$Parameters | Add-Member -type NoteProperty -Name $EMPID.ParameterName -Value $EMPID.FieldAlias 

$ReportYear = New-Object $ParameterValue 
$ReportYear.Name = "ReportYear" 
$ReportYear.Value = "2017" 

$Parameters | Add-Member -type NoteProperty -Name $ReportYear.Name -Value $ReportYear.Value 

$ReportMonth = New-Object $ParameterValue 

$ReportMonth.Name = "ReportMonth" 
$ReportMonth.Value = "6" 

$Parameters | Add-Member -Type NoteProperty -Name $ReportMonth.Name -Value $ReportMonth.Value 



$SubscriptionID = $objWebServerProxy.CreateDataDrivenSubscription($Report,$Settings,$arrDataRetrievalPlan,$Description,$EventType,$MatchData,$Parameters) 

답변

0

나는 당신이가 parameterValue 인스턴스를 만드는 방식으로 작동하는지 잘 모르겠어요 -없는 나는 $가 parameterValue 선언 이후 확실히 말할 수는 없지만, 기회는이 문제가 발생합니다. 당신이의 라인을 따라 뭔가 더 시도 할 수 있습니다 :

$reportServerUri = "http://localhost/reportserver/ReportService2010.asmx?wsdl" 
$rs = New-WebServiceProxy -Uri $reportServerUri -UseDefaultCredential -Namespace "SSRS" 

# Note the difference, here we use the type generated when creating the webservice proxy: 
$ReportYear = New-Object SSRS.ParameterValue 
$ReportYear.Name = "ReportYear" 
$ReportYear.Value = "2017" 

참조 내 blog post here 빠른 튜토리얼.

오류가 $null 하나 개 이상의 인수를 대체하려고한다 CreateDataDrivenSubscription 어떤 인수 정확하게하려면 편집 - 확인이 방법의 설명서에 따라 무효가 될 수 있지만 호출이 성공적으로 완료되면 널 검사에만 발생 서버로 보내지고 deserialized. $null으로 $Parameters 인수를 대체하면 "오류 발생 XML 문서를"포기하지 않을 경우 즉

는 다음 오류가 $Parameters 인수에 있습니다

$SubscriptionID = $objWebServerProxy.CreateDataDrivenSubscription($Report,$Settings, 
      $arrDataRetrievalPlan,$Description,$EventType,$MatchData,$null) 
+0

예. 이미 블로그를 보았으므로 SSRS에서 기본 스크립팅을 배웠습니다. 저 한테 고마워요. 실제로 네임 스페이스를 작성한 경우 문제가 발생합니다. 보통 웹 프록시를 만들 때 자동으로 생성 된 네임 스페이스를 사용합니다. \t $ 네임 스페이스 = $ objWebServerProxy.GetType(). 네임 스페이스 \t $가 parameterValue = ($ 네임 스페이스 + '.ParameterValue') 그리고 어쨌든,이를 사용하여 객체를 생성 나는 또한에 대한 소감을 추가 할 것입니다 혼동을 피하기 위해 내 모든 대본. – mdennis

+0

예. $ null로 변환하면 같은 오류 메시지가 나타납니다. 질문이 있습니까?이 줄에 대한 C#의 변환이 정확합니까? 아래 내 코드 스 니펫을 참조하십시오. – mdennis

+0

\t ParameterValueOrFieldReference [] parameters = new ParameterValueOrFieldReference [3]; \t ParameterFieldReference empID = 새 ParameterFieldReference(); \t empID.ParameterName = "EmpID"; \t empID.FieldAlias ​​= "EmpID"; \t 매개 변수 [0] = empID; PowerShell을 : \t $ ParameterValueOrFieldReference = ($ 네임 스페이스 + '.ParameterValueOrFieldReference') \t $ EMPID = 새 객체 $의 ParameterFieldReference \t $ EMPID.ParameterName = "다는 EmpID" \t $ EMPID.FieldAlias ​​= "다는 EmpID" \t $ 매개 변수 | 멤버 추가 -type NoteProperty - 이름 $ EMPID.ParameterName - 값 $ EMPID.FieldAlias – mdennis