1

Java を使用して、Crystal Report 内のグラフをプログラムで変更しようとしています。次に、Java はレポートをビューアーにフィードします。アイテムの削除は機能しますが、変更は機能しません。

//Experiment : Can we programatically modify a chart?
            ReportDefController rdc = reportClientDocument.getReportDefController();
            ReportObjectController roc = rdc.getReportObjectController();
            ReportObjects ros = roc.getReportObjectsByKind(ReportObjectKind.chart);

            logger.debug("There are " + ros.size() + " chart items");
            IChartObject ro = null;
            IChartObject ro_original = null;
            ISection iSection = null;
            for (int i = 0; i <ros.size(); i++){
                ro = (IChartObject)ros.get(i);
                ro_original = (IChartObject)ros.get(i);
                String rn = ro.getName();
                ChartStyle cs = (ChartStyle) ro.getChartStyle();
                cs.setEnableDataAxisAutoRange(false);
                cs.setEnableShowLegend(false);
                cs.setEnableDepthEffect(true);
                cs.setIsVertical(true);
                cs.setDataAxisMinValue(-2.0);
                cs.setDataAxisMaxValue(100.0);
                Double minVal = (Double)cs.getDataAxisMinValue();
                Double maxVal = (Double)cs.getDataAxisMaxValue();
                boolean d = cs.getEnableDepthEffect();
                boolean l = cs.getEnableShowLegend();
                boolean a = cs.getEnableDataAxisAutoRange();
                boolean v = cs.getIsVertical();
                ro.setChartStyle(cs);
                int sectionCode = ro.getSectionCode();
                iSection = rdc.getReportDefinition().getDetailArea().getSections().getSection(0);
                try
                {
                    //roc.modify((IChartObject)ros.get(i), ro);
                    rdc.modifyChartObject((IChartObject)ros.get(i), ro);
                    reportClientDocument.refreshReportDocument();
                    reportClientDocument.save();
                } catch (ReportSDKException e){
                    writer.println("Couldn't modify graph");
                    e.printStackTrace();
                }
                logger.debug("Chart named "+rn + " With Min Val " + minVal + " and Max Val " + maxVal +" with depth " + d + " and legend " + l + " autorange " + a + " Vertical " + v);
            }

ReportObjectController の modify メソッドと ReportDefController の modifychartobject メソッドを試しました。refreshReportDocument と save を試して更新するものを取得しようとしましたが、何も起こりません。ロガーは、期待どおりに値が更新されていることを示しています。何か案は?

4

1 に答える 1

0

私の間違いは、オブジェクトのクローンを作成しなかったことです...

ro = (IChartObject)ros.get(i) 

...だから読むべき...

ro = (IChartObject)ros.get(i).clone(false)

..となることによって..

roc.modify((IChartObject)ros.get(i), ro)

..動作するようになりました。これが、同じような楽しみやゲームを持っている他の誰かに役立つことを願っています.

于 2012-11-28T13:08:29.810 に答える