基本上pfc_n_cst_winsrv_statusbar.of_createdwobject
在ls_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)
答案 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”'+& ')'