1

PDF を Windows 共有に出力するサブスクリプションを使用して SSRS レポートをセットアップしました。私の問題はこれです。レポート サブスクリプションに 1 つのレポート パラメーターを追加し、ユーザーが定義したパラメーターに基づいてサブスクリプションを「トリガー」できるようにする必要があります。(レポート サービス サイトにアクセスすることはオプションではありません)。

私の現在の考えでは、FireEvent メソッドを使用してサブスクリプションをトリガーできるアプリケーションを .NET で作成する必要がありますが、この方法でパラメーターをサブスクリプションに渡す方法がわかりません。ReportingServices2010 クラス内の他のさまざまなメソッドを調べましたが、完全に途方に暮れており、このサイトの知恵に身を委ねました。

以下は、私が現在使用しているコードで、うまく機能しますが、拡張するか変更する必要があります。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using SSRSReportGenerator.SRSWebService;

namespace SSRSReportGenerator
{
class Program
{
    static void Main(string[] args)
    {
        ReportingService2010 rs = new ReportingService2010();
        rs.Url = "http://server/ReportServer/ReportService2010.asmx";
        rs.Credentials = System.Net.CredentialCache.DefaultCredentials;

        //set report properties
        string site = "/report/report";

        // Get the subscription
        Subscription[] subs = rs.ListMySubscriptions(site);

        try
        {                
            //specify null for siteURL if native mode
            rs.FireEvent("TimedSubscription", subs[0].SubscriptionID, null);
            Console.WriteLine("Event fired.");

        }

        catch (Exception e)
        {
            Console.WriteLine(e.Message);
            Console.ReadKey();
        }
    }
}
}

改めまして、皆様ありがとうございました!

4

1 に答える 1

3

C# プログラムからスケジュールを開始する場合、スケジュールを気にする必要はありません。プログラムから直接パラメータを指定してレポートを実行するだけです。これは非常に簡単で、Microsoft には開始するためのサンプル コードがいくつかあります

using System;
using System.IO;
using System.Web.Services.Protocols;
using myNamespace.MyReferenceName;

class Sample
{
    static void Main(string[] args)
    {
        ReportExecutionService rs = new ReportExecutionService();
        rs.Credentials = System.Net.CredentialCache.DefaultCredentials;
        rs.Url = "http://myserver/reportserver/ReportExecution2005.asmx";

        // Render arguments
        byte[] result = null;
        string reportPath = "/AdventureWorks Sample Reports/Employee Sales Summary";
        string format = "MHTML";
        string historyID = null;
        string devInfo = @"<DeviceInfo><Toolbar>False</Toolbar></DeviceInfo>";

        // Prepare report parameter.
        ParameterValue[] parameters = new ParameterValue[3];
        parameters[0] = new ParameterValue();
        parameters[0].Name = "EmpID";
        parameters[0].Value = "288";
        parameters[1] = new ParameterValue();
        parameters[1].Name = "ReportMonth";
        parameters[1].Value = "6"; // June
        parameters[2] = new ParameterValue();
        parameters[2].Name = "ReportYear";
        parameters[2].Value = "2004";

        DataSourceCredentials[] credentials = null;
        string showHideToggle = null;
        string encoding;
        string mimeType;
        string extension;
        Warning[] warnings = null;
        ParameterValue[] reportHistoryParameters = null;
        string[] streamIDs = null;

        ExecutionInfo execInfo = new ExecutionInfo();
        ExecutionHeader execHeader = new ExecutionHeader();

        rs.ExecutionHeaderValue = execHeader;

        execInfo = rs.LoadReport(reportPath, historyID);

        rs.SetExecutionParameters(parameters, "en-us"); 
        String SessionId = rs.ExecutionHeaderValue.ExecutionID;

        Console.WriteLine("SessionID: {0}", rs.ExecutionHeaderValue.ExecutionID);


        try
        {
            result = rs.Render(format, devInfo, out extension, out encoding, out mimeType, out warnings, out streamIDs);

            execInfo = rs.GetExecutionInfo();

            Console.WriteLine("Execution date and time: {0}", execInfo.ExecutionDateTime);


        }
        catch (SoapException e)
        {
            Console.WriteLine(e.Detail.OuterXml);
        }
        // Write the contents of the report to an MHTML file.
        try
        {
            FileStream stream = File.Create("report.mht", result.Length);
            Console.WriteLine("File created.");
            stream.Write(result, 0, result.Length);
            Console.WriteLine("Result written to the file.");
            stream.Close();
        }
        catch (Exception e)
        {
            Console.WriteLine(e.Message);
        }

    }
}
于 2013-06-20T01:00:39.330 に答える