文字解释丢失

2020-08-21 10:21发布

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


嗨,

当我更改文本对象内的段落文本元素的文本时,我丢失了该文本对象内所有字段的文本解释(RTF文本,HTML文本)。

实际上,当我读取段落字段元素的文本格式时,无论我在设计模式下进行了什么设置,我总会得到" crTextFormatStandardText"。 并且所做的任何修改均不适用。

我正在测试13.0.26版。

使用ReportDefModel = CrystalDecisions.ReportAppServer.ReportDefModel;

 私人无效测试()
         {
             CrystalDecisions.CrystalReports.Engine.ReportDocument reportDocument = crystalReportViewer1.ReportSource作为CrystalDecisions.CrystalReports.Engine.ReportDocument;

             foreach(reportDocument.ReportClientDocument.ReportDefController.ReportObjectController.GetReportObjectsByKind(ReportDefModel.CrReportObjectKindEnum.crReportObjectKindText)中的ReportDefModel.ISCRReportObject reportObject)
             {
                 ReportDefModel.TextObject textObject = reportObject作为ReportDefModel.TextObject;

                 foreach(textObject.Paragraphs中的ReportDefModel.Paragraph段落)
                     foreach(在段落.ParagraphElements中为ReportDefModel.ParagraphElement段落元素)
                         开关(paragraphElement.Kind)
                         {
                             案例ReportDefModel.CrParagraphElementKindEnum.crParagraphElementKindText:
                                 ReportDefModel.ParagraphTextElement段落文本元素=段落元素为ReportDefModel.ParagraphTextElement;

                                 段落TextElement.Text ="新文本";

                               /**
                                  *这会使我失去文本对象内所有字段对象的文本解释(RTF文本,HTML文本)
                                  */
                                 reportDocument.ReportClientDocument.ReportDefController.ReportObjectController.Modify(textObject,textObject);
                                 打破;
                             案例ReportDefModel.CrParagraphElementKindEnum.crParagraphElementKindField:
                                 ReportDefModel.ParagraphFieldElement段落字段元素=段落元素为ReportDefModel.ParagraphFieldElement;

                               /**
                                  *在设计模式下,我已将所有带有文本解释的字段对象设置为HTML文本,但是
                                  *段落字段元素。字段格式。字符串格式。文本格式返回crTextFormatStandardText
                                  *我将设置为crTextFormatHTMLText
                                  */
                                 段落FieldElement.FieldFormat.StringFormat.TextFormat = ReportDefModel.CrTextFormatEnum.crTextFormatHTMLText;

                               /**
                                  *这会使我失去文本对象内所有字段对象的文本解释(RTF文本,HTML文本)
                                  *我已将其设置为crTextFormatHTMLText,但没有任何效果
                                  */
                                 reportDocument.ReportClientDocument.ReportDefController.ReportObjectController.Modify(textObject,textObject);
                                 打破;
                         }
             }
         } 

是否可以在不丢失其他ParagraphFieldElement的文本解释的情况下更改ParagraphTextElement内部的文本?

此致

Marco Monteiro

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


嗨,

当我更改文本对象内的段落文本元素的文本时,我丢失了该文本对象内所有字段的文本解释(RTF文本,HTML文本)。

实际上,当我读取段落字段元素的文本格式时,无论我在设计模式下进行了什么设置,我总会得到" crTextFormatStandardText"。 并且所做的任何修改均不适用。

我正在测试13.0.26版。

使用ReportDefModel = CrystalDecisions.ReportAppServer.ReportDefModel;

 私人无效测试()
         {
             CrystalDecisions.CrystalReports.Engine.ReportDocument reportDocument = crystalReportViewer1.ReportSource作为CrystalDecisions.CrystalReports.Engine.ReportDocument;

             foreach(reportDocument.ReportClientDocument.ReportDefController.ReportObjectController.GetReportObjectsByKind(ReportDefModel.CrReportObjectKindEnum.crReportObjectKindText)中的ReportDefModel.ISCRReportObject reportObject)
             {
                 ReportDefModel.TextObject textObject = reportObject作为ReportDefModel.TextObject;

                 foreach(textObject.Paragraphs中的ReportDefModel.Paragraph段落)
                     foreach(在段落.ParagraphElements中为ReportDefModel.ParagraphElement段落元素)
                         开关(paragraphElement.Kind)
                         {
                             案例ReportDefModel.CrParagraphElementKindEnum.crParagraphElementKindText:
                                 ReportDefModel.ParagraphTextElement段落文本元素=段落元素为ReportDefModel.ParagraphTextElement;

                                 段落TextElement.Text ="新文本";

                               /**
                                  *这会使我失去文本对象内所有字段对象的文本解释(RTF文本,HTML文本)
                                  */
                                 reportDocument.ReportClientDocument.ReportDefController.ReportObjectController.Modify(textObject,textObject);
                                 打破;
                             案例ReportDefModel.CrParagraphElementKindEnum.crParagraphElementKindField:
                                 ReportDefModel.ParagraphFieldElement段落字段元素=段落元素为ReportDefModel.ParagraphFieldElement;

                               /**
                                  *在设计模式下,我已将所有带有文本解释的字段对象设置为HTML文本,但是
                                  *段落字段元素。字段格式。字符串格式。文本格式返回crTextFormatStandardText
                                  *我将设置为crTextFormatHTMLText
                                  */
                                 段落FieldElement.FieldFormat.StringFormat.TextFormat = ReportDefModel.CrTextFormatEnum.crTextFormatHTMLText;

                               /**
                                  *这会使我失去文本对象内所有字段对象的文本解释(RTF文本,HTML文本)
                                  *我已将其设置为crTextFormatHTMLText,但没有任何效果
                                  */
                                 reportDocument.ReportClientDocument.ReportDefController.ReportObjectController.Modify(textObject,textObject);
                                 打破;
                         }
             }
         } 

是否可以在不丢失其他ParagraphFieldElement的文本解释的情况下更改ParagraphTextElement内部的文本?

此致

Marco Monteiro

付费偷看设置
发送
15条回答
me_for_i
1楼 · 2020-08-21 10:49.采纳回答

我已将此问题升级,应该在SP 28中修复,此时尚未设置发布日期。

软件心理学工程师
2楼-- · 2020-08-21 11:02

我不确定您对"字符串对象"的含义,但我认为答案是 问题在代码中:

开关(paragraphElement.Kind)
 {
     案例ReportDefModel.CrParagraphElementKindEnum.crParagraphElementKindText:
         ReportDefModel.ParagraphTextElement段落文本元素=段落元素为ReportDefModel.ParagraphTextElement;

         段落TextElement.Text ="新文本" 


我要更改文本元素,而不是字段元素,也不是公式。

那么,为什么字段元素会丢失文本解释?

打个大熊猫
3楼-- · 2020-08-21 10:53

感谢Marco,

不过还是不清楚,您想将文本附加到String对象还是 更改公式或更改粗体显示吗?

我看到您正在将文本附加到其中包含转义序列的公式字段中,因此您应该编辑公式而不是段落。

Don

四川大学会员
4楼-- · 2020-08-21 10:47

感谢您为我提供的答案,但是您也应该阅读我的答案。 我说过我不会更改公式,也不想更改它。

关于API,它之所以有效,是因为我可以替换我想替换的东西,即TextObject内的ParagraphTextElement。

 paragraphTextElement.Text ="新文本" 

以该示例为例,其中{formula}设置为HTML的文本解释:

 --------------------- 
| 标签:{formula} |
---------------------

它打印:

标签:此文本为粗体。

我要更改为此:

 -------------------------------- 
| 另一个标签:{formula} |
-----------------------------

所以,我这样做:

 paragraphTextElement.Text ="另一个标签:" 
它起作用了!API起作用了,我得到了想要的东西,但是{formula} 失去文字解释! 它打印:
另一个标签:此文本为粗体

您是说这是正常现象吗?
风早神人
5楼-- · 2020-08-21 10:39

是要替换" HTML"还是在公式字段文本后面添加内容?

不确定API是否旨在执行您的操作

使用公式控制器,您可以按以下方式添加文本:

 foreach(rptClientDoc.DataDefController.DataDefinition.FormulaFields中的FormulaField resultField)
 {
     字符串FormulaMessage;
     textBox1 = resultField.LongName.ToString();
     btnReportObjects.Text + = textBox1;
     btnReportObjects.AppendText(":使用:" + resultField.UseCount.ToString()+" times'End'");
     ++ flcnt;
     btnCount.Text = flcnt.ToString();

     btnCount.Text = rptClientDoc.DataDefController.DataDefinition.FormulaFields.Count.ToString();

     FormulaField oOldFormulaField = resultField;
     FormulaField oFormulaField = new FormulaField();
     resultField.CopyTo(oFormulaField,false);
     oFormulaField.Text = @"'唐" + oFormulaField.Text.ToString()+"'";
     rptClientDoc.DataDefController.FormulaFieldController.Modify(oOldFormulaField,oFormulaField);


     尝试
     {
         FormulaMessage =" \ n" + rptClientDoc.DataDefController.FormulaFieldController.Check(resultField);
     }
     抓住(前例外)
     {
         btnReportObjects.Text + =" \ n" +例如消息+" \ n";
         btnReportObjects.AppendText("");
         FormulaMessage =" \ n";
        //resultField.Text =" 1234";
         boFields [0] .Name.ToString();
         boFields [0] .FormulaForm.ToString();

        //MessageBox.Show("ERROR:" + ex.Message); //+";"  + ex.InnerException.Message);

        ////很酷,但没有用到释放模式
        //string myURL = @" http://search.sap.com/ui/scn#query=" + ex.Message +"☆tindex = 1&filter = scm_a_site%28scm_v_Site11%29&filter = scm_a_modDate%28 *%29&timeScope = all"  ;
        //string fixedString = myURL.Replace("","%20");

        /////System.Diagnostics.Process.Start(@"C:\Program Files(x86)\ Internet Explorer \ iexplore.exe",myURL);
        //System.Diagnostics.Process.Start(@"C:\Program Files(x86)\ Mozilla Firefox \ firefox.exe",fixedString);

        //string myURL = @" C:\ Program Files(x86)\ SAP BusinessObjects \ Crystal Reports 2011 \ Help \ en \ crw.chm";
        //System.Diagnostics.Process.Start(myURL);
        ////很酷,但没有用到释放模式

     } 
jovirus
6楼-- · 2020-08-21 11:04

现在我们正在共同努力!

我阅读了David Hilton的建议并将其应用于KBA中,这就是我的期望:

我的参数的值为:此文本为粗体。

但这就是我得到的:

我的参数的值为:此文本为粗体

如何设置文本解释?

我尝试了您的代码,这就是我所期望的:

我要附加的新文本标签:此文本为粗体。

但这就是我得到的:

我要附加的新文本标签:{@ formula} 


您的代码违反了KBA中的解决方案。 在David Hilton的评论中,他说:"这些ParagraphElements是您实际上需要处理的元素。这些元素可能是字段浏览器中的简单文本或字段。" 但是,您将所有内容组合到一个文本元素中,使其解释为正常测试。

 boParagraphTextElement.Text ="我要追加的新文本" + boOldTextObject.Text; 
南山jay
7楼-- · 2020-08-21 10:39

啊,所以您要更改文本对象中的文本,对吗?

< p>我会尝试更多的事情。

一周热门 更多>