如何使用 Business Objects Web Services SDK 获取报表的 LastRunTime?

发布于 2024-10-13 03:50:41 字数 2810 浏览 0 评论 0原文

我正在使用 Business Objects Web Services SDK 来访问我们的 Business Objects 数据。我已成功获取报告列表,并从中找到了之前运行过的报告的 LastSuccessfulInstance。但是,我似乎无法填充 LastRunTime 。当我执行未指定属性的查询时,它会返回为未设置,并且当我特别询问该属性时会得到相同的结果。我查看了报告本身和实例,他们都没有此信息。有谁知道我可以从哪里得到它?

这是我的代码(来自 SAP 演示之一):

    var sessConnUrl = serviceUrl + "/session";
    var boConnection = new BusinessObjects.DSWS.Connection(sessConnUrl);
    var boSession = new Session(boConnection);

    // Setup the Enterprise Credentials used to login to the Enterprise System
    var boEnterpriseCredential = new EnterpriseCredential
                                     {
                                         Domain = cmsname,
                                         Login = username,
                                         Password = password,
                                         AuthType = authType
                                     };

    // Login to the Enterprise System and retrieve the SessionInfo
    boSession.Login(boEnterpriseCredential);


    /************************** DISPLAY INBOX OBJECTS *************************/

    // Retrieve the BIPlatform Service so it can be used to add the USER
    var biPlatformUrl = boSession.GetAssociatedServicesURL("BIPlatform");
    var boBiPlatform = BIPlatform.GetInstance(boSession, biPlatformUrl[0]);

    // Specify the query used to retrieve the inbox objects
    // NOTE: Adding a "/" at the end of the query indicates that we want to 
    //       retrieve the all the objects located directly under the inbox.
    //       Without the "/" Path operator, the inbox itself would be returned. 
    const string query = "path://InfoObjects/Root Folder/Reports/";

    // Execute the query and retrieve the reports objects
    var boResponseHolder = boBiPlatform.Get(query, null);
    var boInfoObjects = boResponseHolder.InfoObjects.InfoObject;

    // If the reports contains a list of objects, loop through and display them
    if (boInfoObjects != null) 
    {
        // Go through and display the list of documents
    foreach (var boInfoObject in boInfoObjects)
    {
            var report = boInfoObject as Webi;
            if (report == null)
                continue;

            if (!string.IsNullOrEmpty(report.LastSuccessfulInstanceCUID))
            {
                var instanceQuery = "cuid://<" + report.LastSuccessfulInstanceCUID + ">";
                var instanceResponseHolder = boBiPlatform.Get(instanceQuery, null);
                var instance = instanceResponseHolder.InfoObjects.InfoObject[0];

            }
        }
    }

report.LastRunTimeSpecifiedinstance.LastRunTimeSpecified 都是 false,并且 LastRunTime 都是 01\01\0001,但我可以在 Web Intelligence UI 中看到上次运行时间。

I'm using the Business Objects Web Services SDK to access our Business Objects data. I've successfully got a list of reports, and from that found the LastSuccessfulInstance of a report that has been previously run. However, I can't seem to get the LastRunTime to be populated. When I do a query with no attributes specified it comes back as not set, and I get the same result when I ask for that attribute in particular. I've looked at the report itself and the instance and they both don't have this information. Does anyone know where I can get it from?

Here's my code (hacked from one of SAP's demos):

    var sessConnUrl = serviceUrl + "/session";
    var boConnection = new BusinessObjects.DSWS.Connection(sessConnUrl);
    var boSession = new Session(boConnection);

    // Setup the Enterprise Credentials used to login to the Enterprise System
    var boEnterpriseCredential = new EnterpriseCredential
                                     {
                                         Domain = cmsname,
                                         Login = username,
                                         Password = password,
                                         AuthType = authType
                                     };

    // Login to the Enterprise System and retrieve the SessionInfo
    boSession.Login(boEnterpriseCredential);


    /************************** DISPLAY INBOX OBJECTS *************************/

    // Retrieve the BIPlatform Service so it can be used to add the USER
    var biPlatformUrl = boSession.GetAssociatedServicesURL("BIPlatform");
    var boBiPlatform = BIPlatform.GetInstance(boSession, biPlatformUrl[0]);

    // Specify the query used to retrieve the inbox objects
    // NOTE: Adding a "/" at the end of the query indicates that we want to 
    //       retrieve the all the objects located directly under the inbox.
    //       Without the "/" Path operator, the inbox itself would be returned. 
    const string query = "path://InfoObjects/Root Folder/Reports/";

    // Execute the query and retrieve the reports objects
    var boResponseHolder = boBiPlatform.Get(query, null);
    var boInfoObjects = boResponseHolder.InfoObjects.InfoObject;

    // If the reports contains a list of objects, loop through and display them
    if (boInfoObjects != null) 
    {
        // Go through and display the list of documents
    foreach (var boInfoObject in boInfoObjects)
    {
            var report = boInfoObject as Webi;
            if (report == null)
                continue;

            if (!string.IsNullOrEmpty(report.LastSuccessfulInstanceCUID))
            {
                var instanceQuery = "cuid://<" + report.LastSuccessfulInstanceCUID + ">";
                var instanceResponseHolder = boBiPlatform.Get(instanceQuery, null);
                var instance = instanceResponseHolder.InfoObjects.InfoObject[0];

            }
        }
    }

Both report.LastRunTimeSpecified and instance.LastRunTimeSpecified are false and both LastRunTime are 01\01\0001, but I can see a last run time in the Web Intelligence UI.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

浮华 2024-10-20 03:50:41

在 SAP 支持部门 Ted Ueda 的帮助下,我找到了答案。默认情况下,并非所有属性都会填充,您需要将 @* 附加到查询字符串才能获取所有内容,即将行:更改

const string query = "path://InfoObjects/Root Folder/Reports/";

为:

const string query = "path://InfoObjects/Root Folder/Reports/@*";

With a little help from Ted Ueda at SAP support I figured it out. Not all the properties are populated by default you need to append @* to the query string to get everything, i.e. change the line:

const string query = "path://InfoObjects/Root Folder/Reports/";

to:

const string query = "path://InfoObjects/Root Folder/Reports/@*";
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文