2014-04-30 3 views
0

ssrs 2008에서 드릴 다운 보고서를 가져 오기 위해 Java 프록시를 작성했습니다. 보고서 서버 URL을 통해 액세스하면 완벽하게 작동하지만 내 Java Spring App에서는 기능이 손실됩니다. 예를 들어, 드릴 다운 보고서를 가지고 있는데, 더하기 기호를 클릭하여 확장하면 ssrs url에서 작동하지만 렌더링 된 HTML은 그렇지 않습니다. 보고서 서버 URL을 사용하는 것처럼 작동해야합니다. 여기 내 코드의 샘플입니다. 가능한 경우 말해주십시오.SSRS 및 JAVA 드릴 다운

public String getReport(String ReportUrl) throws Exception 
{ 
    ReportExecutionServiceSoapStub service = getService(); 


    ExecutionInfo info = service.loadReport(ReportUrl, null); //Load report 
    info.setHasDocumentMap(false); 
    setExecutionId(service, info.getExecutionID()); //You must set the session id before continuing 


    String format = "HTML4.0"; //Valid options are HTML4.0, MHTML, EXCEL, CSV, PDF, etc 
    String deviceInfo = "<DeviceInfo><Toolbar>True</Toolbar></DeviceInfo>"; //Only generate an HTML fragment 
    ByteArrayHolder result = new ByteArrayHolder(); 
    StringHolder extension = new StringHolder(); 
    StringHolder mimeType = new StringHolder(); 
    StringHolder encoding = new StringHolder(); 
    ArrayOfWarningHolder warnings = new ArrayOfWarningHolder(); 
    ArrayOfStringHolder streamIDs = new ArrayOfStringHolder(); 

    service.render(format, deviceInfo, result, extension, mimeType, encoding, warnings, streamIDs); //Render report to HTML 

    System.out.println(new String(result.value)); //Prints the report HTML; this could be embedded in a JSP 
    return new String(result.value); 
} 

public static void setExecutionId(ReportExecutionServiceSoapStub service, String id) throws SOAPException 
{ 
    SOAPHeaderElement sessionHeader = new SOAPHeaderElement("http://schemas.microsoft.com/sqlserver/2005/06/30/reporting/reportingservices", "ExecutionHeader"); 
    sessionHeader.addChildElement("ExecutionID").addTextNode(id); 
    service.setHeader(sessionHeader); 
} 

public static ReportExecutionServiceSoapStub getService() throws Exception{ 

    String endpoint = "http://192.168.69.213/reportserver/ReportExecution2005.asmx"; 
    AuthPolicy.registerAuthScheme(AuthPolicy.NTLM, JCIFS_NTLMScheme.class); 
    ReportExecutionServiceSoapStub service = (ReportExecutionServiceSoapStub)new ReportExecutionServiceLocator(getEngineConfiguration()).getReportExecutionServiceSoap(new URL(endpoint)); 
    service.setUsername("192.168.69.213\\administrator"); 
    service.setPassword("secret"); 

    return service; 
} 

public static org.apache.axis.EngineConfiguration getEngineConfiguration() 
{ 
    java.lang.StringBuffer sb = new java.lang.StringBuffer(); 

    sb.append("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n"); 
    sb.append("<deployment name=\"defaultClientConfig\"\r\n"); 
    sb.append("xmlns=\"http://xml.apache.org/axis/wsdd/\"\r\n"); 
    sb.append("xmlns:java=\"http://xml.apache.org/axis/wsdd/providers/java\">\r\n"); 
    sb.append("<globalConfiguration>\r\n"); 
    sb.append("<parameter name=\"disablePrettyXML\" value=\"true\"/>\r\n"); 
    sb.append("<parameter name=\"enableNamespacePrefixOptimization\" value=\"true\"/>\r\n"); 
    sb.append("</globalConfiguration>\r\n"); 
    sb.append("<transport name=\"http\" pivot=\"java:org.apache.axis.transport.http.CommonsHTTPSender\"/>\r\n"); 
    sb.append("<transport name=\"local\" pivot=\"java:org.apache.axis.transport.local.LocalSender\"/>\r\n"); 
    sb.append("<transport name=\"java\" pivot=\"java:org.apache.axis.transport.java.JavaSender\"/>\r\n"); 
    sb.append("</deployment>\r\n"); 

    return new org.apache.axis.configuration.XMLStringProvider(sb.toString()); 
} 

감사합니다. 도움을 주시면 감사하겠습니다.

답변

0

가능한 해결책 중 하나는 다음과 같습니다.

Ssrs에는 다운로드하여 전쟁 프로젝트에 포함시킬 수있는 더하기 및 빼기 이미지가 있습니다. 사용자가 그룹화 된 행 중 하나를 클릭하면 다른 보고서를 호출하여 그룹화 된 데이터를 가져와 더하기 이미지를 빼기 이미지로 바꿉니다. html을 다르게 구축하기위한 논리를 수행하는 것을 제외하고는 거의 모든 방법을 연습합니다.
우리 브라우저에서 보고서를 열면 소스를보고 조작 할 내용을 얻습니다.

관련 문제