2016-03-02 104 views
0

我目前运行一项Windows服务,可以按计划将Crystal Reports导出为PDF。在运行的66个报告中,有5个左右没有定义参数。处理不带参数的Crystal Reports

使用Crystal Reports DLL,我明白ReportDocument.Export()方法需要参数,因为我遇到ReportDocument.Export()方法时遇到“缺少参数值”异常。

目前,我正在做我的设置参数在这个方法:

private void SetParameters(string rawParameters = null) 
     { 
      var crystalParameters = new Dictionary<string, object>(); 
      var parameters = String.IsNullOrEmpty(rawParameters) ? null : HttpUtility.ParseQueryString(rawParameters); 

      if(parameters != null) 
      { 
       foreach (string rawKey in parameters.AllKeys) 
       { 
        var value = parameters[rawKey]; 
        // Check for array value (e.g. key[0]=value) 
        var arrayCheck = Regex.Match(rawKey, @"^(.+)\[[0-9]?\]$"); 
        if (arrayCheck.Success) 
        { 
         var key = arrayCheck.Groups[1].Value; 
         // Existing entry for this key, reconstruct object array with this added 
         if (crystalParameters.ContainsKey(key)) 
         { 
          var newParameterArray = new object[((object[])crystalParameters[key]).Count() + 1]; 
          int i = 0; 
          foreach (object item in (object[])crystalParameters[key]) 
          { 
           newParameterArray[i++] = item; 
          } 
          newParameterArray[i++] = (object)value; 
          crystalParameters[key] = (object)newParameterArray; 
         } 
         // New array value 
         else 
          crystalParameters[key] = (object)new object[] { value }; 
        } 
        // Discrete value 
        else 
         crystalParameters[rawKey] = (object)parameters[rawKey]; 
       } 

       foreach (string parameter in crystalParameters.Keys) 
       { 
        try 
        { 
         this.reportDocument.SetParameterValue(parameter, crystalParameters[parameter]); 
        } 
        catch (Exception ex) 
        { 
         // Ignore invalid parameter exceptions, otherwise throw again 
         if (ex.HResult != -2147352565) 
         { 
          throw ex; 
         } 
        } 
       } 
      } 
     } 

回答

0

我测试了几个方案,包括ReportDocument.SetParameterValue("", "")。但是,当我删除这个if子句时,我只是解决了这个问题;只有在报告确实有参数时才保留此方法。