数据库表(T类型节点):节点名称(上图中的根节点名称输入框)必须为数据库表名(上图中的数据库表输入框)或者view,且不可以为纵深结构。此类型(数据库表或视图)的节点情况下,可执行程序里,你可以使用NODES or TABLES语句来定义工作区,在LDB的数据库程序中,需要对每个节点使用NODESor TABLES来定义,不能有TYPE选项。如果节点是非数据库表,只能使用NODES来定义。
l 使用PARAMETERS语句为增加一个单值输入条件框(PARAMETERS语句一般在LDB中只用于除节点表外的非表字段屏幕参数),在PARAMETERS语句中必须使用选项FOR NODE(所属类型节点)或者FOR TABLE(T类型节点)
l 使用SELECTION-SCREEN语句来格式化屏幕
l SELECTION-SCREEN DYNAMIC SELECTIONS FOR NODE|TABLE .语句允许你为更多的表开启动态选择条件功能。如果节点类型为T,可以使用TABLE来代替NODE。只有开启了动态选择条件功能的表,才可以在LDB数据库程序中对表的进行动态选择条件处理(具体请参考LDB_PROCESS函数EXPRESSIONS参数部分)
l SELECTION-SCREEN FIELD SELECTION FOR NODE|TABLE .允许你为其他表开启动态选择字段。如果节点类型为T,可以使用TABLE来代替NODE。在报表程序中,可以通过GET语句中的fields选项来指定需要读取的字段列表;在LDB_PROCESS函数中,可以通过FIELD_SELECTION参数来指定需读取的字段列表(具体请参考LDB_PROCESS函数 FIELD_SELECTION参数部分)
*-----------------------------------------------------------* * Include DBTEST_LDBSEL * 该Include文件会自动包括到LDB数据库程序中去,不需要手动Include * It will be automatically included into the database program *-----------------------------------------------------------* * 如果程序是自动生成的,请执行以下步骤: * If the source is automatically generated, * please perform the following steps: * 用相应的字段名(最多8字符)替换问号 * 1. Replace ? by suitable names (at most 8 characters). * 激活 SELECT-OPTIONS 与 PARAMETERS 语句(去除前面的注释星号) * 2. Activate SELECT-OPTIONS and PARAMETERS (delete stars). * 保存修改后的源代码 * 3. Save source code. * 修改LDB数据库程序 * 4. Edit database program. * * 提示:Include不能进行单独的语法检测!它将在LDB数据库程序在执行 * 语法检测时,一起进行语法检测 * Hint: Syntax-Check is not possible within this Include! * It will be checked during syntax-check of database program. *-----------------------------------------------------------* * SELECT-OPTIONS : ? FOR LFA1-LIFNR. * * 搜索帮助 * Parameter for search pattern selection (Type SY-LDB_SP): * PARAMETERS p_sp AS SEARCH PATTERN FOR TABLE LFA1. * * SELECT-OPTIONS : * ? FOR LFB1-LIFNR, * ? FOR LFB1-BUKRS. * SELECT-OPTIONS : * ? FOR LFC1-LIFNR, * ? FOR LFC1-BUKRS, * ? FOR LFC1-GJAHR. * SELECT-OPTIONS : * ? FOR BKPF-BUKRS, * ? FOR BKPF-BELNR, * ? FOR BKPF-GJAHR. * * 开启节点的动态选择条件 * Enable DYNAMIC SELECTIONS for selected nodes : * 开启节点的动态字段选择 * Enable FIELD SELECTION for selected nodes :
该FORM带两个接口参数FNAME and MARK将会传到subroutine 中。FNAME存储了选择屏幕中用户所选择的选择条件(SELECT-OPTION)与参数(PARAMETERS)的屏幕字段名,MARK标示了用户选择的是单值还是多值条件:MARK = SPACE意味着用户输入了一个简单单值或者范围取值,MARK = '*'意味着用户在Multiple Selection screen 的输入(即多个条件值)。MARK = SPACE means that the userhas entered a simple single value or range selection. MARK = '*' means that the user hasalso made entries on the Multiple Selection screen
联合使用 FNAME = '*' 和 MARK = 'ANY', 表示所有的屏幕参数都已检验完成,即可以对屏幕整体参数做一个整体的检测了(这里的意思应该就是相当于AT SELECTION-SCREEN)。
当通过LDB_PROCES函数来调用LDB时,LDB选择屏幕是不会显示的,这样,LDB选择屏幕参数就只能通过LDB_PROCES函数的接口参数传递到LDB数据库程序中了,此是,LDB数据库程序中的 FORM PAI 是不会再被执行(只在LDB与报表程序通过属性绑定时才调用)。但时,如果此时你仍然想对通过LDB_PROCES函数接口参数传递进来的LDB选择屏幕字段进行检测时,你可以在LDB数据库程序中定义如下的FORM:
FORM LDB_PROCESS_CHECK_SELECTIONS CHANGING SUBRC LIKE SY-SUBRC
Called when the user makes a selection using a search help to process the key chosenin the search help. is the name of the logical database. From this subroutine, youcan use the entries in the search help tables to read the relevant entries from the rootnode . The processing in the program can then be triggered using PUT .The subroutine PUT_ is then not called automatically.
注:上图中,每个FORM中的 PUT XXXX循环调用一次后立即调用下层节点的FORM PUT_XXX,而不是等到SELECT…ENDSELECT循环完后才去调用下层节点,而且是每一次整个链调用完后,再向上一层层返回,至到最顶层时,最顶层才算一次成功调用(此程序中使用了SELECT…ENDSELECT语句,这里只是个演示,在实行的应用中不会这么使用的)。
:节点内表所对应的工作区。在主调程序以及该过程所在的程序不必要使用NODES or TABLES来声明工作区。如是该过程
只是用来处理某一个节点时,你可以使用TYPE选项来为工作区指定具体类型,此类型即为某节点所对应的数据词典类型。如果该过程要处理多个节点数据,则不要使用TYPE选项,此时需要通过 field symbol 来读取工作区各组件字段的值。
:值为G or L,分别表示该过程是由GET与GET LATE事件触发调用的。
:
The callback routine (in 'G' only) can influence further processing. When the routine starts, the parameter contains the value 'X'. If it has the value SPACE at the end of the routine, the system interprets this as a sign that the callback routine has discarded the data record. As a result, none of the subordinate nodes are processed. This can lead to a considerable performance gain. Furthermore, it means that the checks do not have to be repeated for the subordinate nodes. Resetting to SPACE is the equivalent of a negative CHECK in th e GET event.
TYPE-POOL RSDS . * Type definitions for FREE SELECTIONS * WHERE-clauses ------------------------------------------------------ * TYPES: RSDS_WHERE_TAB LIKE RSDSWHERE OCCURS 5. RSDSWHERE 的类型为C(72) TYPES: BEGIN OF RSDS_WHERE, TABLENAME LIKE RSDSTABS-PRIM_TAB, RSDSTABS-PRIM_TAB类型为C(30) WHERE_TAB TYPE RSDS_WHERE_TAB, END OF RSDS_WHERE. TYPES: RSDS_TWHERE TYPE RSDS_WHERE OCCURS 5.
* Expressions Polish notation ---------------------------------------- * TYPES: RSDS_EXPR_TAB LIKE RSDSEXPR OCCURS 10. TYPES: BEGIN OF RSDS_EXPR, TABLENAME LIKE RSDSTABS-PRIM_TAB, EXPR_TAB TYPE RSDS_EXPR_TAB, END OF RSDS_EXPR. TYPES: RSDS_TEXPR TYPE RSDS_EXPR OCCURS 10.
* Selections as RANGES-tables ---------------------------------------- * TYPES: RSDS_SELOPT_T LIKE RSDSSELOPT OCCURS 10.
TYPES: BEGIN OF RSDS_FRANGE, FIELDNAME LIKE RSDSTABS-PRIM_FNAME,RSDSTABS-PRIM_FNAME类型为C(30) SELOPT_T TYPE RSDS_SELOPT_T, END OF RSDS_FRANGE. TYPES: RSDS_FRANGE_T TYPE RSDS_FRANGE OCCURS 10. TYPES: BEGIN OF RSDS_RANGE, TABLENAME LIKE RSDSTABS-PRIM_TAB, FRANGE_T TYPE RSDS_FRANGE_T, END OF RSDS_RANGE. TYPES: RSDS_TRANGE TYPE RSDS_RANGE OCCURS 10. TYPES: BEGIN OF RSDS_TYPE, CLAUSES TYPE RSDS_TWHERE, TEXPR TYPE RSDS_TEXPR, TRANGE TYPE RSDS_TRANGE, END OF RSDS_TYPE.
FORM PUT_SCARR. STATICS: DYNAMIC_RANGES TYPE RSDS_RANGE, "存储某个表的所有屏幕字段的Ranges DYNAMIC_RANGE1 TYPE RSDS_FRANGE,"存储某个屏幕字段的Ranges DYNAMIC_RANGE2 TYPE RSDS_FRANGE, FLAG_READ."确保DYN_SEL只读取一次 IF FLAG_READ = SPACE. DYNAMIC_RANGES-TABLENAME = 'SCARR'. "先取出 SCARR 表的所有屏幕字段的Ranges READ TABLE DYN_SEL-TRANGE WITH KEY DYNAMIC_RANGES-TABLENAME INTO DYNAMIC_RANGES. "再读取出属于某个字段的Ranges DYNAMIC_RANGE1-FIELDNAME = 'CARRNAME'. READ TABLE DYNAMIC_RANGES-FRANGE_T WITH KEY DYNAMIC_RANGE1-FIELDNAME INTO DYNAMIC_RANGE1.
DYNAMIC_RANGE2-FIELDNAME = 'CURRCODE'. READ TABLE DYNAMIC_RANGES-FRANGE_T WITH KEY DYNAMIC_RANGE2-FIELDNAME INTO DYNAMIC_RANGE2. FLAG_READ = 'X'. ENDIF. SELECT * FROM SCARR WHERE CARRID IN S_CARRID AND CARRNAME IN DYNAMIC_RANGE1-SELOPT_T"使用IN 关键字使用Ranges内表 AND CURRCODE IN DYNAMIC_RANGE2-SELOPT_T."(与select-options屏幕参数是一样的用法) PUT SCARR. ENDSELECT. ENDFORM.
更多详情的可以参考LDB_PROCESS函数的EXPRESSIONS参数
LDB程序中的Field Selections
SELECTION-SCREEN FIELD SELECTION FOR NODE|TABLE .语句的作用是开启节点的动态字段选择的功能(形如: SELECT (选择字段内表) FROM…,而不是 SELECT * FROM …,即选择了哪些字段,就只查询哪些字段,而不是将所有字段查询出来,进而可以提高性能)。
在可执行报表程序里,可以通过GET node [FIELDS f1 f2 ...]语句中的 FIELDS选项来指定要读取字段;
FORM PUT_SPFLI. STATICS: FIELDLISTS TYPE RSFS_TAB_FIELDS, FLAG_READ."确保SELECT_FIELDS只读取一次 IF FLAG_READ = SPACE. FIELDLISTS-TABLENAME = 'SPFLI'. "读取相应表的动态选择字段 READ TABLE SELECT_FIELDS WITH KEY FIELDLISTS-TABLENAME INTOFIELDLISTS. FLAG_READ = 'X'. ENDIF. SELECT (FIELDLISTS-FIELDS)"动态选择 INTO CORRESPONDING FIELDS OF SPFLI FROM SPFLI WHERE CARRID = SCARR-CARRID AND CONNID IN S_CONNID. PUT SPFLI. ENDSELECT. ENDFORM.
在相应的可执行报表程序里,相应的代码可能会是这样的:
TABLES SPFLI. GET SPFLI FIELDS CITYFROM CITYTO. ...
终端仿真器是一款用其它显示架构重现可视终端的计算机程序。换句话说就是终端仿真器能使哑终端看似像一台连接上了服务器的客户机。终端仿真器允许最终用户用文本用户界面和命令行来访问控制台和应用程序。(LCTT 译注:终端仿真器原意指对大型机-哑终端方式的模拟,不过在当今的 Linux 环境中,常指通过远程或本地方式连接的伪终端,俗称“终端”。)
你能从开源世界中找到大量的终端仿真器,它们
功能:在控制台每秒输出一次
代码:
package Main;
import javax.swing.Timer;
import java.awt.event.*;
public class T {
private static int count = 0;
public static void main(String[] args){
1,获取样式属性值
top 与顶部的距离
left 与左边的距离
right 与右边的距离
bottom 与下边的距离
zIndex 层叠层次
例子:获取左边的宽度,当css写在body标签中时
<div id="adver" style="position:absolute;top:50px;left:1000p
spring data jpa 支持以方法名进行查询/删除/统计。
查询的关键字为find
删除的关键字为delete/remove (>=1.7.x)
统计的关键字为count (>=1.7.x)
修改需要使用@Modifying注解
@Modifying
@Query("update User u set u.firstna
项目中controller的方法跳转的到ModelAndView类,一直很好奇spring怎么实现的?
/*
* Copyright 2002-2010 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* yo
(1)npm是什么
npm is the package manager for node
官方网站:https://www.npmjs.com/
npm上有很多优秀的nodejs包,来解决常见的一些问题,比如用node-mysql,就可以方便通过nodejs链接到mysql,进行数据库的操作
在开发过程往往会需要用到其他的包,使用npm就可以下载这些包来供程序调用
&nb
Controller层的拦截器继承于HandlerInterceptorAdapter
HandlerInterceptorAdapter.java 1 public abstract class HandlerInterceptorAdapter implements HandlerIntercep