Службы Reporting Services стирают параметры моего набора данных - PullRequest
0 голосов
/ 15 января 2009

Я использую веб-сервис и каждый раз, когда я что-то изменяю в наборе данных, он стирает все мои параметры.

Странно то, что я могу выполнить вызов веб-службы на вкладке данных, и он запрашивает все мои параметры, но если я нажму, чтобы отредактировать данные, список будет пустым или если я попытаюсь просмотреть отчет, он взорвется, потому что отсутствует.

Просто интересно, сталкивался ли кто-то еще с этим и есть ли способ предотвратить такое поведение.

Вот копия набора данных, но я не думаю, что это имеет значение. Это должно быть самой раздражающей ошибкой (если это ошибка) когда-либо. Я даже не могу выполнить набор данных из конструктора, не удалив мой список параметров. Когда у вас есть около 10 параметров и вы вносите всевозможные изменения в новый отчет, становится очень утомительно постоянно вводить один и тот же список снова и снова.

Во всяком случае, студия должна, по крайней мере, иметь возможность предварительно заполнить параметры, которые запрашивает служба. вздох Где мой стрессовый шар ...

<Query>
   <Method Namespace="http://www.example.com/" Name="TWRPerformanceSummary"/>
   <SoapAction>http://www.example.com/TWRPerformanceSummary</SoapAction>   
       <ElementPath IgnoreNamespaces="true">
            TWRPerformanceSummaryResponse/TWRPerformanceSummaryResult/diffgram/NewDataSet/table{StockPerc,RiskBudget,Custodian,ProductName,StartValue(decimal),EndValue(decimal),CostBasis(decimal)}
       </ElementPath>
</Query>

Ответы [ 2 ]

1 голос
/ 27 января 2009

Проблема исходила из веб-службы. Я передаю sessionID (его GUID) в виде строки в отчет, а затем из отчета в веб-службу. Внутри веб-сервиса я беру эту строку, преобразую ее обратно в Guid и передаю ее нашему объекту SecurityTicket.

Вот где возникла проблема. Видимо этот звонок:

Guid passedGuid = new Guid(sessionID);

Не нравится набор данных служб отчетности. Инженер по поддержке технической поддержки Майкрософт работает со мной, чтобы проверить, что именно происходит, и если будет исправление, будет исправление и т. Д. Я собираюсь обойти мой код, который не требует GUID для передачи на SecurityTicket.

Редактировать - Решение
По сути, каждый раз, когда вы вносите изменения на вкладке данных, он инициирует вызов набора данных веб-службы, отправляющий нулевые параметры. Если ваш веб-сервис не может обработать нулевые параметры, он выдаст ошибку, удалив все ваши параметры.

Чтобы легко преодолеть это, первая строка нашего веб-сервиса проверяет нулевые параметры и устанавливает некоторые значения по умолчанию. Затем, если возвращаемый набор данных пуст, мы добавляем фиктивную строку:

private static void addDummyRow(DataTable dt) {
        var row = dt.NewRow();

        for (int i = 0; i < dt.Columns.Count; i++) {
            if (dt.Columns[i].DataType == typeof(string)) {
                row[i] = dt.Columns[i].ColumnName;
            }
            else if (dt.Columns[i].DataType == typeof(DateTime)) {
                row[i] = new DateTime(1900, 1, 1);
            }
            else {
                row[i] = 0;
            }
        }

        dt.Rows.Add(row);
    }
0 голосов
/ 26 января 2009

Я понял, и это довольно раздражает. Если вы разрабатываете из VS, просто нажмите кнопку Обновить поля, и это обычно решает проблему. Если запрос STILL выдает ошибку, ваш SQL, скорее всего, содержит ошибку (по крайней мере, по моему опыту, если «обновить поля» не работает, я сделал несколько глупых синтаксических ошибок, таких как «SELECT Field1 Field2 ...» или что-то в этом роде) как это). Вы также можете нажать кнопку «Выполнить запрос».

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...