Создание отчетов о сервисном ограничении параметра

1) Для вашего первого вопроса,

Ниже приведены модели классов для анализа вашего xml,

class Answer
{
    public string Text { get; set; }
    public bool Correct { get; set; }
}

class Question
{
    public string Ques { get; set; }
    public string Type { get; set; }
    public List<Answer> Answers { get; set; }
}

class Tranzaction
{
    public string TransactionId { get; set; }
    public List<Question> Questions { get; set; }
}

. С помощью LINQ to XML вы можете анализировать ваши модели классов xml и выше, например,

XDocument doc = XDocument.Parse("Your xml text here");

List<Tranzaction> transactions = (from p in doc.Descendants("PlatformResponse")
              select new Tranzaction
              {
                  TransactionId = p?.Elements("TransactionDetails")?.FirstOrDefault()?.Element("TransactionId")?.Value.Trim(),
                  Questions = (from q in p?.Descendants("Questions")?.Elements("Question")
                               select new Question
                               {
                                   Ques = q?.Attribute("text")?.Value,
                                   Type = q?.Attribute("type")?.Value,
                                   Answers = (from a in q?.Elements("Answer")
                                              select new Answer
                                              {
                                                  Text = a?.Value,
                                                  Correct = Convert.ToBoolean(a?.Attribute("correct")?.Value)
                                              }).ToList()
                               }).ToList()

              }).ToList();

2) Для вашего второго вопроса

Теперь вы можете создать один ObservableCollection для результата запроса выше и связать это список в виде ксамарина, например

ObservableCollection<Tranzaction> tranzactionsOC = new ObservableCollection<Tranzaction>(transactions);

Теперь tranzactionsOC - это ваш ObservableCollection, и вы можете привязать его к форме ксамарина

8
задан Joel Coehoorn 5 June 2009 в 16:41
поделиться

2 ответа

Можно проверить значение EndDate в выражение параметра, и если это неправильно, установите его на StartDate + 1 Месяц.
Что-то как:

= IIF(DateDiff(DateInterval.Month, Parameters!StartDate.Value, Parameters!EndDate.Value) = 0, Parameters!EndDate.Value, AddDate(DateInterval.Month, 1, Parameters!StartDate.Value))

Если Вы просто хотите, уведомляют пользователя, можно поместить некоторое поле скрытого текста с соответствующим форматированием (красный крупный шрифт) и передать о параметрах даты неправильный диапазон. В Скрытом наборе выражения

= (DateDiff(DateInterval.Month, Parameters!StartDate.Value, Parameters!EndDate.Value) <> 0)

Кроме того, можно объединить оба действия с пользовательским кодом:

Public DateMessage As String

Public Function ValidateDate(StartDate As DateTime, EndDate As DateTime) As DateTime
  Dim ResultDate As DateTime
  If (DateDiff(DateInterval.Month, StartDate, EndDate) <> 0) Then
    ResultDate = AddDate(DateInterval.Month, 1, StartDate)
    DateMessage = String.Format("End Date parameter value {0} 
      was out of range and was changed to {1}", EndDate, ResultDate)
  Else
    ResultDate = EndDate
  End If
End Function

Затем в выражении Значения параметра:

= Code.ValidateDate(Parameters!StartDate.Value, Parameters!EndDate.Value)

В свойстве Value tbDateParameterMessage текстового поля:

= Code.DateMessage

И в выражении свойства Hidden:

= String.IsNullOrEmpty(Code.DateMessage)

РЕДАКТИРОВАНИЕ, Но если Вы хотите остановить выполнение отчета, используйте этот пользовательский код:

Public Function CheckDate(SDate as Date, EDate as Date) as Integer
    Dim msg as String
    msg = ""
    If (SDate > EDate)  Then
        msg="Start Date should not be later than End Date"
    End If
    If msg <> "" Then
        MsgBox(msg, 16, "Parameter Validation Error")
        Err.Raise(6,Report) 'Raise an overflow
    End If
End Function

Это взято от форума SQLServerCentral.

6
ответ дан 5 December 2019 в 21:22
поделиться

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

BTW, синтаксис не работал. Я использовал это вместо этого:

= Month(Parameters!begindate.Value) = Month(Parameters!enddate.Value) and Year(Parameters!begindate.Value) = Year(Parameters!enddate.Value)

Спасибо coldice для идеи.

0
ответ дан 5 December 2019 в 21:22
поделиться
Другие вопросы по тегам:

Похожие вопросы: