Powerbuilder .net为字符串变量中的双引号添加\ escape字符:pfc_n_cst_winsrv_statusbar

时间:2014-04-03 17:09:37

标签: .net escaping powerbuilder double-quotes backslash

基本上pfc_n_cst_winsrv_statusbar.of_createdwobjectls_dwdefinition中生成数据窗口定义,然后使用它来创建数据窗口。我正在使用PFC示例应用程序测试它,使用最新的12.5 Classic PFC pbls。这适用于PB Classic 12.5.2 Build 5006.将该应用程序迁移到PB .net 12.5.2 Build 5006.这在PB .net中不起作用。在ls_dwdefinition中生成数据窗口定义时,PB .net会在\中嵌入的所有双引号前插入ls_dwdefinition个转义字符。随后创建的数据窗口失败(请参阅错误跟随)我假设因为\转义字符未被识别为有效的dw语法。我比较了在PB Classic 12.5中创建的dwsyntax字符串与PB .net创建的dw语法字符串,我能看到的唯一区别是\转义字符。

之前有没有人见过这种行为?是否有可以改变的设置可以消除这种行为?任何帮助将不胜感激。顺便说一句,这不仅仅是一个练习,我最初在我们的专有应用程序中看到了这种行为,该应用程序正在迁移到PB .net。

此致

Todd Oesterreich

  

System.Exception:语法错误\ r \ n at   Sybase.DataWindow.Core.DWObject.ParseInt(String value)\ r \ n at   Sybase.DataWindow.Core.DWDataWindow.SetProperty(String name,String   值)\ r \ n在Sybase.DataWindow.Core.SrdParser.a(IDWObject A_0,   字符串A_1,字符串A_2)\ r \ n at   Sybase.DataWindow.Core.SrdParser.value(IDWObject prop,String nm)\ r \ n   在Sybase.DataWindow.Core.SrdParser.name_value_pair(IDWObject   prop)\ r \ n在Sybase.DataWindow.Core.SrdParser.property()\ r \ n at   Sybase.DataWindow.Core.SrdParser.srd_definition()\ r \ n at   Sybase.DataWindow.Core.DWSrdSyntaxReader.Parse(DWObject parent,String   语法,DWParserOptions parserOptions)\ r \ n at   Sybase.DataWindow.Core.DWDataWindowObject.a(DWSrdSyntaxReader A_0,   字符串A_1,DWParserOptions A_2,字符串& A_3,DWDataWindowObject& A_4)

2 个答案:

答案 0 :(得分:0)

您是否曾尝试解析dwsyntax并在使用它之前删除添加的斜杠以创建dw?

答案 1 :(得分:0)

好的,想出来了(在我朋友的帮助下,指点我远离我的\逃脱角色“猜猜”)

事实证明,pfc_n_cst_winsrv_statusbar.of_createdwobject函数中存在一些代码错误。但显然PB Classic编译器比PB .net更宽容。

1)DW颜色属性直接与DW timer_interval属性对接,2个属性之间应该有一个空格,PB Classic看起来没问题,但仍会创建DW,PB .net会将其吐回。

// Create the desired DataWindow Timer Interval.    
If ib_timer Then    
            // A timer event is defined. Use the appropriate value.    
            ls_dwtimerinterval = 'timer_interval=' + string(il_timerinterval)    
Else    
            // No timer event is defined.    
            ls_dwtimerinterval = 'timer_interval=0 '    
End If

// Create the Header string.    
ls_header = &  
  'release 6; '+ &  
  'datawindow(units=0 '+ &  
  ls_dwtimerinterval + &  
'color=80263328 processing=0 HTMLDW=no print.documentname="" ' + &  
  'print.orientation = 0 print.margin.left = 107 print.margin.right = 107 ' + &  
  'print.margin.top = 97 print.margin.bottom = 97 print.paper.source = 0 ' + &  
  'print.paper.size = 0 print.prompt=no print.buttons=no print.preview.buttons=no) ' + &  
  'header(height=' + string(li_microhelpheight) + ' color="536870912" ) ' + &  
  'summary(height=1 color="536870912" ) ' + &  
  'footer(height=1 color="536870912" ) ' + &  
  'detail(height=1 color="536870912" ) ' + &  
  'table(column=(type=char(20) updatewhereclause=no name=requiredcol dbname="requiredcol" ) ) '  

2)在编译上面的修复时,我们得到了几个“不能将一元运算符应用于字符串变量”的错误。下面的大红色加上不是有效的PB语法,但是PB Classic看起来没问题,基本上忽略了它,PB .net不那么好,把它视为它是一个单一的运算符。

选择CASE Lower(inv_dwobjects [li_cnt] .s_type)
    案例文字
        ls_newobject = +&
            '计算('+&
            'name ='+ inv_dwobjects [li_cnt] .s_id +''+&

            'expression =“〜''+ string(inv_dwobjects [li_cnt] .s_value)+'〜'”'+&             'border =“'+ string(inv_dwobjects [li_cnt] .i_bordertype)+'”'+&

            'x =“'+ string(li_xpoint)+'”'+&
            'height =“'+ string(li_microhelpheight)+'”'+&
            'width =“'+ string(inv_dwobjects [li_cnt] .i_width)+'”'+&

            'background.color =“12632256”'+&
            'band = header alignment =“0”color =“33554432”y =“0”'+&             'font.face =“MS Sans Serif”font.height =“ - 8”font.weight =“400”'+&             'font.family =“2”font.pitch =“2”font.charset =“0”background.mode =“2”'+& ')'