2016-03-02 110 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子句時,我只是解決了這個問題;只有在報告確實有參數時才保留此方法。