Skip to content

硕正报表

硕正报表的页面引入、后端配置、函数与常见问题。

Updated View as Markdown

引入硕正

页面

//在initialize中
var opt = Wb.getUuid();
//在finalize中
var mt1 = bldStr("BCV1.TreeList", opt, "", "100%");
app.panel.update(mt1);
window["init" + opt] = function(id) {
  var m = document.getElementById(opt);
  if (id == opt) {
    m.func("Build", '/supcan/report/businessManagement/businessFee.xml?' + Math.round(Math.random() * 100));
    m.func("DisableMenu", "showRuler,exportAll,printAll,delete,insert,import ,curselMode,hue ,language , enter    \r\n true");
    m.func("EnableMenu", " curselMode \r\n true");
    var values = Wb.getValue(app.panelBtn);
    m.func('Load', Wb.loadSupcanData('m?xwl=bookingManagement/bookingManagementData/onlineBookingData/selectBookingConfirmSupcan', values));
  }
};

sql.xwl

//sql.xwl中
 var obj = Wb.getRecords(app.run(Sql, {
   jndi: 'default'
 }));
 app.send(obj);

后端

//放入xml文件
<?xml version="1.0" encoding="utf-8"?>
<TreeList>
    <Fonts>
        <Font/>
        <Font faceName="Verdana" weight="700"/>
    </Fonts>
    <Properties isShowRuler="true"  curselmode="rows" isFixTotalRow ="true"  rowHeight="35" subtotalBgColor="#d3d3d3"
                displayMask="backColor=if(CARRY_FLAG='1',#87cefa,if(WEB_SAVE_MAN!='',#d8cef7,#E8EAEF))">
    </Properties>
    <Cols>
        <Col name="BILL_NO" width="140">提单号</Col>
        <Col name="CARRY_FLAG" width="65" isHide="true" edittype="droplist" droplistID="carryF">载运属性</Col>
        <Col name="WEB_SAVE_MAN" width="120">保存人</Col>
        <Col name="ID" width="140" isHide='true'>提单号id</Col>
    </Cols>
    <DropLists>
        <DropList id="carryF">
            <item key='0'>正常</item>
            <item key='2'>漏装</item>
            <item key='1'>未上船</item>
            <item key='3'>退关</item>
        </DropList>
    </DropLists>
</TreeList>

函数

函数格式

参数funcname:字符串,是组件的真正的函数名,请参见具体组件的规范; 参数para:字符串,参数,如果组件需要传入多个参数,那么以回车符(\r\n)分隔,请参见具体组件的规范; 返回值:字符串,具体含义请参见组件的规范;

  插件/加载项本身并不执行这个函数,真正执行该函数的是具体的功能组件,插件/加载项只是把函数传递给组件、将组件的返回值再传回给js,函数的js用法举例如下:   假如有个函数的声明是 int print(String, double, boolean) , 用常规语言(如C#、Java)书写, 可能是类似这样的:

1.int ret = print("A", 12.45, true);
1.int ret = print("A", 12.45, true);

  如果用硕正的规则来书写js,则应该写成:

1.var ret = AF.func("print", "A\r\n12.45\r\ntrue");
1.var ret = AF.func("print", "A\r\n12.45\r\ntrue");

  为了提高可读性,您可以在 “\r\n” 的左右增加空格,硕正组件在调用时会自动将其剔除的:

1.var ret = AF.func("print", "A \r\n 12.45 \r\n true");
1.var ret = AF.func("print", "A \r\n 12.45 \r\n true");

::: warning

第二个参数 (para) 是不能忽略的,如果组件函数文档中某些个函数声明是无参数的,也必须用空串表示, 比如 AF.func(“GetRows”, “”), 不能写成 AF.func(“GetRows”).

:::

常用函数

几个重要的属性

XML描述文档中,有几个元素属性比较重要,在此详细说明。
1.Properties\sort: 默认初始排序,例如 sort="country a, city a";
服务器返回的数据是不必预先排序的,因为Load()后,Treelist会自动按 sort 属性进行再排序!
2.Properties\isTree: Treelist是以列表显示,还是以树显示;
  如果以树显示,通常还需要设定 sort 属性,这样 sort 的列就是树杈;如果有多个列参与排序,例如 sort="country a, city a",就会有多层树杈,这就是所谓“多列多层树”;如果不指定 sort,那么默认第一列为树杈.
3.Cols\Col\displayMask: 显示掩码,语法为"表达式; textColor=表达式; backColor=表达式; leftImage=表达式; rightImage=表达式"。这当中相当于有5个分句,分别表示了文字、文字颜色、背景色、左侧图标、右侧图标的独立表达式,相互之间以分号(;)分隔。
  表达式中可以包含列名(包括其它列的列名),表示引用本行中其它列的内容,并允许用“data”代表本单元格的数据.
<Properties>中也有同名的DisplayMask属性,但<Properties> 的 displayMask 作用域是整个行,且只有 backColor 和 textColor 二种表达式分句.

xml

Treelist 的 XML 描述文件须符合《Treelist XML 文档规范》,该规范并不复杂,文档有6个顶级节点:

  1.<Properties> - 总的外观、行为、背景等属性,以及列和列之间的逻辑关系、数据验证逻辑等;

  2.<Fonts> - 用到的字体;

  3.<Cols> - 每个列的详细描述,这是最关键内容;

  4.<Droplists> - 下拉、主外键引用的数据源定义;是否可以即时加载数据字典的下拉?

  5.<FreeformBar> - 上方和下方的工具条;

  6.<Table> - 夹带的纯数据;

  Treelist的格式属性尽管由 XML 描述文件决定,但是通过 SetProp()和 SetColProp()函数,在页面中可以被动态更改;带参数的Build()函数也可以强制更改其属性。

硕正报表放在tab里问题

切换时,报表被销毁,关于报表的操作会报错,解决办法如下

img

遇到的问题

合计需要不同要求进行汇总(比如cny和usd)

image-20210318104617724

选中合计

image-20210609145335029

<expresses>
        <express>CNYCheck=CNY*rownum</express>
        <express>USDCheck=USD*rownum</express>
</expresses>
//
<Col name="FEE_COD" enable="readonly" width="70"totalExpress="=CNYCheck+'\r\n'+USDCheck">费目</Col>
Navigation

Type to search…

↑↓ navigate↵ selectEsc close