2017-05-20 10 views
0

이 문제를 해결하는 데 도움을 줄 수 있습니까? 나는 BO 서버에 연결하려고 시도하고 매개 변수를 연결하고 설정 한 후 pdf 형식으로 내보내려고 시도했지만 여기서 코드는 누락 된 매개 변수 값을 나타내는 데 실패합니다. 다음은Java CrystalReports 문제 : 임시 파일을 만들 수 없습니다. 매개 변수 값이 없습니다. 오류 코드 : -2147215357

 ParameterFieldController paramFieldController = clientDoc.getDataDefController().getParameterFieldController();    
     Fields parameterFields = clientDoc.getDataDefinition().getParameterFields(); 
     for (int i = 0; i < parameterFields.size(); i++) { 
      IParameterField paramToChange = (IParameterField) parameterFields.getField(i); 
      String field = paramToChange.getName();    

      if (field.substring(0, 1).equalsIgnoreCase("@")) 
       field = field.substring(1); 
      else if (field.substring(0, 2).equalsIgnoreCase("V_")) 
       field = field.substring(2); 
      String value = null; 
      System.out.println("Fields: :i= "+i+ " "+field); 
      if (reportParam.get(field) != null) 
       value = reportParam.get(field).toString();     
      else 
       value = ""; 


      IParameterFieldDiscreteValue newDiscreteValue = new ParameterFieldDiscreteValue(); 
      System.out.println("Setting Parameter value :i= "+i+ " "+value); 
      newDiscreteValue.setValue(value); 
      ParameterField tempParam = new ParameterField(); 
      paramToChange.copyTo(tempParam, false); 
      if (tempParam.getCurrentValues().size() > 0) 
       tempParam.getCurrentValues().remove(0); 
      tempParam.getCurrentValues().add(0, newDiscreteValue); 
      paramFieldController.modify(paramToChange, tempParam); 

내가 다양한 방법을 호출하고 순서입니다 : 코드 아래

코드는 매개 변수를 설정하는 데 사용되는 ReportClientDocument 아래

IInfoObject infoObject = (IInfoObject) infoObjects.get(0); 

      IReportAppFactory reportAppFactory = (IReportAppFactory) enterpriseSession.getService("RASReportFactory");   
      //Open the report file   
      return reportAppFactory.openDocument(infoObject, OpenReportOptions._refreshRepositoryObjects , Locale.ENGLISH); 

를 가져 오는 데 사용 순서대로.

ReportClientDocument clientDoc = getDocumentFromInfoStore (enterpriseSession, crInfo.getReportsFolder(), reportName);

if (!setDatabaseLocation(crInfo,clientDoc, sUserId, isILIReport)) { 
     ReportLogger.debug("Error generating " + rptFileName + " report.<br/>" 
       + "Report Following Error Details<br/>" 
       + "Database Location could not be set."); 
     return null; 
    } else if (!setReportParameters(clientDoc,reportParam)) { 
     ReportLogger.debug("Error generating " + rptFileName + " report.<br/>" 
       + "Report Following Error Details<br>" 
       + "Database Parameters could not be set."); 
     return null; 
    } else if (!setFilter(reportParam, clientDoc)) { 
     ReportLogger.debug("Error generating " + rptFileName + " report.<br/>" 
       + "Report Following Error Details<br>" 
       + "Database Filters could not be set."); 
     return null; 
    }else if (!setFooterCriteriaInfo(reportParam, clientDoc)) { 
     ReportLogger.debug("Error generating " + rptFileName + " report.<br/>" 
       + "Report Following Error Details<br>" 
       + "Database Filters could not be set."); 
     return null; 
    }else if (!setSorting(reportParam, clientDoc)) { 
     ReportLogger.debug("Error generating " + rptFileName + " report.<br/>" 
       + "Report Following Error Details<br>" 
       + "Database Filters could not be set."); 
     return null; 
    } 

나는 잘못된 것을하고 있습니까? - 사전에 감사드립니다.

답변

0

마침내이 문제가 해결되었습니다. 즉 true로하는 CopyTo 방법 부울 값을 변경 PrameterField 개체의 깊은 사본이 문제를 해결함으로써

IParameterFieldDiscreteValue newDiscreteValue = new ParameterFieldDiscreteValue(); 
      System.out.println("Setting Parameter value :i= "+i+ " "+value); 
      newDiscreteValue.setValue(value); 
      ParameterField tempParam = new ParameterField(); 
      **paramToChange.copyTo(tempParam, true);** 

을 다음과 같이 그리고 솔루션입니다. 즉 paramToChange.copyTo (tempParam, true);