当前位置:文档之家› IFS学习笔记

IFS学习笔记

IFS学习笔记
IFS学习笔记

这是我在学习用友IFS官方文档时的学习记录,我当时学习IFS的时候没有什么学习资料,网上也难以找到,现在我把我学习过程中的内容给大家共享出来,欢迎指正。

IFS框架的工作流程:

一个java页面的执行是由RequestHandler servlet来发起的,RequestHandler servlet是IFS客户端使用比较少的servlet,

一个java页面就是一个普通的java类,它会被RequestHandler来间接的调用,RequestHandler 会创建一个ASPManager的实例,

并且由ASPManager这个实例来根据请求的url来匹配相应的类,然后运行这个类的逻辑或者产生HTML。

IFS WEB客户端实现了大型编程框架与一些缓存和池机制,了解是有必要的。

类层次结构和编程框架:

IFS客户端中所用到的大量的java类都放在ifs.fnd包中。

在IFS中用到的几乎所有的java类都继承至类ASPObject,就相当于JDK中的Object类,这个类负责常见的错误处理和日志记录。

下面这个图显示了程序员比较感兴趣的类。

类介绍:

ASPManager类是IFS web 客户端最重要的一个工具类,它在一个类每次发起一个会话中扮演了重要的角色,他的方法被程序员广泛的用在不同的领域。

ASPPage类是一个容器,里面包含了所有web页面上用到的对象,对于一个程序员来说,许多要用到的类对象,是由ASPPage实例化而来的。

ASPBlock类也是一个容器,它是用来装所有字段的,即fields。

ASPField代表字段,这个类定义了输入的HTML实体的各种属性,如输入标记和选择标记。ASPBlockLayout 负责产生的HTML布局,布局是自动生成的。

ASPTable类负责产生一个多行的表格。

ASPCommandBar类负责IFS Web客户端生成的工具栏按钮。

ASPRowSet 类代表的ASPBlock的所有的底层数据,所以,一个特定的ASPRowSet类对象包含了ASPBlock对象的所有行数据,所以用该类实例遍历行数据的时候,要结合其next()方法跳转行指针。

下图解释了这些对象之间的关系。请注意,ASPTable不属于ASPBlock容器是由于历史原因。但从技术上讲,这是真的,但你可以想象它是一个部分的ASPBlock容器。

ASPBuffer类是用来存储IFS Web客户端数据的,底层是数组结构,可以根据name或者下标来访问值,可以装各种数据。结构图如下。

ASPContext类存储当前会话session上下文状态信息,底层是ASPBuffer结构存储的。ASPContext对象包含了注入进IFS Web客户端当前的信息与注入的数据库数据dbstate。

ASPTransactionBuffer负责给IFS Exteded服务器发送缓冲区数据和命令。它使用ASPCommand类,进而使用ASPQuery类,构建SQL命令。ASPTransactionBuffer有三个操作:提交,验证和执行。当执行这些动作,ASPTransactionbuffer将建立一个ASPBuffer并发送给Exteded IFS服务器。这个ASPBuffer对象将包含SQL命令,ASPContext 内的相关信息,如rowset,有时还有额外的信息。操作将返回一个ASPBuffer回应。“提交”将会往ASContext添加current state 和dbstate 。

ASPCommand类的一个实例代表一个事务缓冲区的一个命令。一个命令包含以下部分:METHOD---将要被执行的或者被调用的存储过程的名字。

DA TA buffer---存储过程IN, IN/OUT or OUT 的参数。

OPTION---不包含在数据缓冲区的额外的参数。

ASPQuery类,代表ASPCommand的一个查询子类。它使用SQL语法定义,或者基于一个ASPBlock自动创建。查询的结果是一个包含数据库记录或行的ASPBuffer。每一行返回子缓冲区命名为“DA TA”。结果也可能包含一个额外的子缓冲区命名为“INFO”。

ASPProfile类的一个实例代表每个user和URL(ASPPage)的组合,然后缓存到概要缓存(ASPProfileCache类)。这个概要文件信息以一个缓冲结构存储,但可以被序列化并存储在数据库中。相反,序列化配置信息存储在数据库中也可以被反序列化并到缓冲区结构中。

ASPPopup类是创建弹出菜单。这个类是用于ASPTable和ASPBlockLayout,但是也可用于定制页面。

ASPGraph类是用于生成业务图形。使用这个类可以创建不同类型的图表。它可以在pages 和Portlets创建图形。

下面的类是使用新的编程模型:

FndWebFeature接口类是用于在web页面上实现新的编程模型转换。当一个java page实现了这个类,该框架将自动用新的编程模型处理。

FndQueryDataAdapter接口类是用于实现在功能页面的适配器类的查询功能。FndPopulateDataAdapter接口类是用于实现在功能页面的表的填充功能。FndSaveDataAdapter接口类是用于实现在功能页面上的增、删、改、查功能。

Page Pool

Page pool说白了就是一个容器,里面存放着已经实例化后的对象,以便以后需要用的时候直接拿过来使用,提高了效率,不用每次都进行创建。

当一个页面开始,ASPManager类的一个实例被创建。这个实例(我们将称之为“manager object”)试图从当前URL从页面池ASPPage得到一个相应的实例。如果没有返回的对象, manager object 创建一个新的实例的ASPPage类,并将其放入页面池——这发生于第请求一个特定的Web页面(URL)。

HTML Genarate

我们的框架程序包含一些html生成的函数。GetDescription()和getTitle()将分别返回一个网页的描述和标题。getContents()和printContents()将能够产生要生成的HTML页面的代码。getContents()会被首先调用,如果getContents()不被重写的话,它会生成一个基本的布局(如下图),然后它会调用printContents()去生成剩下的页面,大多数页面只使用printContents()。

页面框架

一个页面中有一个布尔型变量叫DEBUG,这个变量是用来控制调试信息是否会被打印,这些信息是由IFS的System产生的。

每个页面会在第一个request到来时创建,并放入页面池中,以便之后这个页面对象可能会被重用,缓存或者克隆,这跟每个页面访问时自动生成的那个ID有关,说白了,ID就是在缓存机制中要查找可用的页面对象时要用的。当一个页面正在使用时,它会处于被锁定的状态,直到这个页面执行完毕后,才会改变为解锁状态,这时才可以被重用。如果一个request访问先前访问过的页面,但这时,这个页面正在被别的request使用,也就是说这个页面对象不可用时,会克隆一个同样的页面对象出来,相当于这个页面的副本对象,但是要注意的是,一个页面中有全局变量也有局部变量,全局变量会随着克隆而复制,而局部变量是永远不会被复制的,会根据需要重新生成。全局变量比如说:

private ASPLog log;

private ASPBlock blk;

private ASPRowSet rowset;

private ASPCommandBar cmdbar;

private ASPTable tbl;

private ASPBlockLayout lay;

局部变量比如说:

private ASPTransactionBuffer trans;

private String laymode;

private String val;

private ASPCommand cmd;

private String name;

private double discount;

private ASPBuffer buf;

private ASPQuery q;

private ASPBuffer data;

在IFS中,每个页面其实就是一个JA V A类,只不过,这个JA V A类一定要继承类ASPPageProvider才行。因此,要产生一个页面一定会调用这个页面的构造方法,这个构造方法在不同的页面里看起来总是一样的,super(mgr,page_path);调用父类的构造方法,有两个参数,一个是ASPManager对象,一个是page path。

添加Block到页面

现在介绍一下preDefine()函数,这个函数定义了一个页面的结构布局,当一个页面被定义时,它会被IFS web客户端仅调用一次,当需要的时候这个函数定义的页面对象会被克隆。

我们是用一个局部变量来引用ASPManager类的对象,那是因为,每一次request会需要一个ASPManager类的对象,所以如果是全局变量的话会因为分不清是哪个请求而导致错误。

我们需要用ASPManager类的对象来创建一个ASPBlock类对象,看下面语句,其中“MAIN”只是一个标识。

blk=mgr.newASPBlock("MAIN")

在ASPBlock类对象blk中我们可以创建所有数据库对应视图中的字段,并且可以通过一些设置属性的方法来对这些字段的显示进行一定程度上的设置。

在IFS web客户端中我们有一些全局变量,它们存储在浏览器的cookies 中,我们可以在webclientconfig.xml中设置这些变量,如果在java中要连接到这些变量就得通过

setGlobalConnection()这个方法,下面是例子:

blk.addField("COMPANY_ID").setGlobalConnection("COMPANY_ID").setHidden();

下面说一下伪列,伪列就是要显示在页面上的一个字段,但是这个字段在数据库对应的视图中是找不到的,也就是持久层是没有对应的字段的,这时,我们可以通过setFunction()方法来进行设置,请看下面代码:

headblk.addField("CUSTOMER_NAME").

setFunction("exam_purch_order_api.Get_Description(:ORDER_NO)") .setLabel("伪列描述").setSize(20);

其中方法的参数是sql_text,相当于伪SQL,上面的方法用是调用的是包名加包下的函数名。

下面的语句是用来设置视图与一些可用的后台函数。

blk.setView("EXAM_PURCH_ORDER");

blk.defineCommand("EXAM_PURCH_ORDER_API","New__,Modify__,Remove__");

最后是创建下面这些对象:ASPRowSet object,ASPCommandBar object , ASPTable object, and an ASPBlockLayout object。

对于ASPTable object来说,一个blk只能对应生成一个table。

到此为止,我们算是把一个页面的组织布局全部定义好了,但是还不能够显示给客户来

看,要显示就得生成HTML到浏览器上才可以,就要用到我们前面提到的printContents()

方法,如下:

protected void printContents() throws FndException

{

ASPManager mgr = getASPManager();

appendToHTML(lay.show());

}

方法appendToHTML(lay.show());就是用来把我们上面设置的一大堆东西给显示成HTML到浏览器上。此外,这个方法的参数类型是String类型的,也是可以传HTML代码的,只不

过要以字符串的形式写进去就行了,就像servlet当中的out.write()方法一样。要注意的就是要在咱们设置好的页面上部添加HTML显示组件的话,比如说一个按钮,就得把appendToHTML(“html代码”);写在appendToHTML(lay.show());之前,否则的话,就写在appendToHTML(lay.show());之后就可以了。

填充表

我们会用一个叫okFind()的方法来填充表格,说白了这个方法会执行一个不带条件的查询,会把所有查到的数据列出来填充到table中,这个方法由run()方法来调用,每个请求过来的时候,IFS web客户端会首先调用run()方法,这个run()方法就相当于java中的main()方法一样。

学到几个新方法如下:

q.setOrderByClause("ORDER_ID");这个方法是用来设置以指定参数字段排序的

mgr.showAlert("查询完毕");//页面弹出警告框

布局模式

IFS web客户端有多种布局模式,完全是由java类来进行管理的。主要有以下几类:多行布局,单行布局,查询/新建/编辑布局,自定义/无布局。自定义模式用在你想设计自己的HTML单行模式的情况下。

这些布局模式包含在类ASPBlockLayout内,这个类可以为这些布局模式生成HTML代码,我们可以通过一些方法来确定是处于某种布局模式,比如:

ASPBlockLayout.isMultirowLayout()可以用来确定是否处于多行模式,当然,我们也可以用ASPBlockLayout.setLayoutMode()来自己手动的定义需要的布局模式。

e.g. lay.setLayoutMode(lay.SINGLE_LAYOUT).

所有的块必须进行布局模式的初始化,在preDefine()中完成,使用下面方法完成:

ASPBlockLayout.setDefaultLayoutMode(). 这是强制的规定,必须这么做。

e.g. lay.setDefaultLayoutMode(lay.MULTIROW_LAYOUT)

此处,IFS是可以自动跟踪过去布局模式的,比如说,从多行模式进行查找模式后,点返回后,会自动回到多行模式,而不是单行模式或者其它的什么模式。

有一点需要注意的是,如果你已经在一个你希望在的模式中时,应该不要再设置布局模式了,这样可以避免引起IFS web 客户端的混乱,比如说,你现在处于查找对话框,并按下计数按钮,同时又想返回查找模式的话,就不要在计数的方法中进行把布局模式设为查找模式的行为,因为现在你就是处在查找模式下。

命令条概述

命令条在IFS web 客户端中是一个重要的概念,它用来在我们的数据上执行操作。

在IFS Web Client 标准页面中,一系列可点的HTML对象代表一个ASPCommandBar 的实例。

在命令条中的一些命令是以组的形式存在于布局中:Find, New, Edit, multi row, single row, and Custom/None Layout。在那些标准模式中,只有布局中定义的命令可以被启用或者禁用,在Custom/None Layout中,启用或者禁用命令则有更多的灵活性,具体的可以参见章节'Customizing your page' 。命令条中的每一个命令都有一个相匹配的函数,同时都有一个客户端的脚本函数对应的附加于这些命令。

当一个用户在命令条上选择一个命令时,会发生以下几件事情:

1.生成的JavaScript 函数commandSet() 会被调用,如果手动写的JavaScript 代码的函数名字被传递给这个函数,那么这个函数也会被调用。被选中的命令条中的命令的command ID 会被复制进一个HTML隐藏域,当表单提交会,表单里的变量会提交到后台。下面是commandSet() 的代码:

function commandSet(cmd,func)

{

if( func==' ' )

ok = true;

else

eval('ok = '+func+';');

if( !ok ) return;

document.form.__COMMAND.value = cmd;

document.form.submit();

}

2.在java中会调用ASPManager的布尔型函数commandBarActivated()。

3.如果commandBarActivated()返回true,ASP脚本将会执行evel(),eval() 中的代码是由commandBarActivated()返回的,从返回的代码中可以获取变量到当前作用域中。

public void run()

{

ASPManager mgr = getASPManager();

trans = mgr.newASPTransactionBuffer();

log = getASPLog();

if( https://www.doczj.com/doc/f77430375.html,mandBarActivated() )

eval(https://www.doczj.com/doc/f77430375.html,mandBarFunction());

}

例如:如果okFind 被点击,相应的okFind()函数会被调用执行。

下面是一个如何在predefine()中创建一个命令条:

cmdbar = mgr.newASPCommandBar(blk);

使用命令栏

如何添加一个自定义的命令

我们现在所要做的是模仿像windows一样的单击鼠标弹出一个菜单,在单行与多行模式中都可以实现。

在弹出菜单中添加一个操作时,必须调用predefine()中的addCustomCommand()方法。

cmdbar.addCustomCommand("Close", "Close Order");

cmdbar.addCustomCommand("Invoice","Invoice Order");

cmdbar.addCustomCommand("Cancel", "Cancel Order");

cmdbar.addCustomCommand("CloseAndInvoice", "Close Invoice and order");

addCustomCommand()方法中的第二个参数是显示在弹出菜单中的文字,第一个参数则是点

出弹出菜单中操作时调用的函数的Command Id ,因此,在java页面代码中还需要添加一个名字跟Command Id 一样的函数。

public void close()

{

perform( "Close__" );

}

public void invoice()

{

perform( "Invoice__" );

}

public void cancel()

{

perform( "Cancel__" );

}

public void closeAndInvoice()

{

perform( "Close__,Invoice__" );

}

注意到上面代码,我们还得添加一个perform()函数。

public void perform( command )

{

if (lay.isMultirowLayout())

rowset.goTo( rowset.getRowSelected() );

rowset.markRow( command );

current_row_no = rowset.getCurrentRowNo();

mgr.submit(trans);

if (lay.isSingleLayout())

rowset.goTo( current_row_no );

}

另外,我们还必须得添加command Ids :"Close, Invoice, Cancel, CloseAndInvoice" (后面要加两个下划线)到这个块的标准命令列表中,这个列表定义在函数preDefine()的defineCommand()函数中。

blk.defineCommand("Demo_Order_API","New__,Modify__,Remove__,Close__,Invoice__, Cancel__,CloseAndInvoice__");

但是,也仅仅是我们需要在弹出菜单中使用自定义的命令时才会把command Id 加到标准命令列表中。

如何添加自定义的命令栏按钮

接下来,跟前面的添加自定义的命令到弹出菜单上不同,这回是要添加到命令条上,跟增删改查那些功能放在一块。

我们需要调用predefine()内的addCustomCommand()方法来实现。

cmdbar.addCustomCommand("costTemplateRMB", "COSTWPARTCOSTCOSTTEMPLATERMB: Cost Template...","images/myGif.gif",true);

例如:

headbar.addCustomCommand("test", "测试bar按钮", "/b2e/secured/common/images/toolbar/new_16x16.gif", true);

第一个与第二个参数跟前面提到的类似,第三个参数是要显示在命令条上的按钮的图标,第四个参数是用来确定是否是自定义的命令条按钮的,如果改为false,则不会显示自定义的命令按钮。

如何使用addCustomCommand()添加自定义图标会在后面写到。

如何添加自定义命令图标

可以在predefine()中用addCustomCommand()或者addCustomLinkCommand()这两个方法中的任一个来添加图标。比如:

用addCustomCommand():

cmdbar.addCustomCommand("costTemplateRMB", "COSTWPARTCOSTCOSTTEMPLATERMB: Cost Template...","images/myGif.gif"); cmdbar.addCustomCommand("costTemplateRMB", "COSTWPARTCOSTCOSTTEMPLATERMB: Cost Template...","images/myGif.gif",false);

用addCustomLinkCommand():

cmdbar.addCustomLinkCommand("costTemplateRMB", true, "images/myGif.gif", "COSTWPARTCOSTCOSTTEMPLATERMB: Cost Template...", "javascript:callMethod()");

下面是显示命令图标的截图:

启用或者禁用命令

必须使用下面两个方法来启用或者禁用命令:

cmdbar.enableCommand(cmdbar.FIND);

cmdbar.disableCommand(cmdbar.DUPLICATE);

禁用后,命令条中的相应命令会消失,不再显示,直到重新启用为止。

覆盖标准命令工具栏的函数

通过用下面的方法可以达到覆写的功能:

cmdbar.defineCommand(cmdbar.NEWROW, "myNewRow");

第一个参数是想要覆写按钮的功能,第二个参数是用来替换第一个参数功能的方法。

使用多个命令工具栏

有时,一个页面是需要多个命令栏的,这种情况下,由于命令栏是在block中的,所以一个页面中如果有多个block的话,在第一个block上添加一个命令栏是可以的。

使用Commandbar函数来操作记录

我们已经使用okFind()来填充了table,现在,我们来使用同样的功能像命令栏一样的

功能,并且现在写两个函数,一个是求记录的总数,一个是为插入到数据库而准备的函数,这两个函数分别叫countFind()和newRow()。尽管命令栏的大部分函数已经在java类中实现,但是okFind(), countFind() and newRow()这三个函数没有被实现,那是因为没有标

准的Java Web客户端版本为这三个函数设置命令栏功能。所以,开发者要为这三个函数写适当的代码。一个基本的run()函数应该是下面的样子:

public void run()

{

ASPManager mgr = getASPManager();

trans = mgr.newASPTransactionBuffer();

if( https://www.doczj.com/doc/f77430375.html,mandBarActivated() )

eval(https://www.doczj.com/doc/f77430375.html,mandBarFunction());

}

public void countFind()

{

ASPManager mgr = getASPManager();

q = trans.addQuery(blk);

q.setSelectList("to_char(count(*)) N");//参数可以理解为sql语句中查询项目的列表

mgr.submit(trans);

lay.setCountValue(toInt(rowset.getValue("N")));

}

方法setCountValue()使ASPBlockLayout的实例知道从你的搜索中将有多少行将被检索出来。

注意:q.setSelectList("to_char(count(*)) N");//参数可以理解为sql语句中查询项目的列表下面是newRow()方法:

public void newRow()

{

ASPManager mgr = getASPManager();

cmd = trans.addEmptyCommand("MAIN","Demo_Order_API.New__",blk);

cmd.setOption("ACTION","PREPARE");

trans = mgr.perform(trans);

data = trans.getBuffer("MAIN/DATA");

rowset.addRow(data);

}

添加的值列表,超链接和验证

添加一个值列表

我们希望能够从一个列表中选择一个客户,而不必手动输入一个用户ID。我们通过值列表(LOV)来实现。

blk.addField("DESCRIPTION", "Number").

setDynamicLOV("EXAM_PURCH_ORDER","ORDER_NO",600,450).

setLOVProperty("WHERE","VALID='TRUE'").

setLOVProperty("TITLE","LOVTITLE: List of valid Customers");

上面添加到ASPField的定义会使ASPManager生成一个打开一个小窗口的JavaScript,同时,在该字段的右边生成一个小图标,点击这个小图标就会弹出这个窗口,里面就是这值

列表。setDynamicLOV()这个方法的第一个参数就是对应数据库的视图,第二个参数就是一个

查询条件,根据ORDER_NO来进行查询出的值列表,最后两个参数则是弹出窗口的大小。setLOVProperty()也是一个限制条件,可以加入“WHERE”设置查询条件,一般情况下,上一个函数就可以达到限制要求,setLOVProperty()这个函数用来设定值列表的标题。

设置一个超链接

有时我们需要从一个字段直接跳转到另外一个页面,效果是打开一条记录,单行模式下,如果一个字段上加了超链接,这个字段会有一个下划线,一点击,会跳转到另外一个页面。

blk.addField("CUSTOMER_ID","Number").

setHyperLink("Customer.asp","COMPANY_ID,CUSTOMER_ID","NEWWIN");

上面方法第二个参数可以发送为一个查询参数,第三个参数"NEWWIN"表示在一个新的窗

口中打开,如果不写表示就在当前窗口打开。

校验(Validation)

意思是说,用户从一个字段输入一个值,另一个字段会自动填充相应值,如果输入的一个字段,对应需要验证确认的字段查不到相应的值,会报找不到数据,这也就是验证。在此,验证分要标准验证与自定义验证,在自定义验证中,用户可以获得更多的操作自由。

Standard validation(标准验证)

在标准的校验下,可以用一个SQL描述为ASPField 设置值(通常是PL/SQL函数)。

blk.addField("DESCRIPTION").

setFunction("EXAM_PURCH_ORDER_API.Get_Description(:ORDER_NO)").

mgr.getASPField("ORDER_NO").setValidation("DESCRIPTION");

调用了后台的Get_Description方法,最后一条语句可以不要也能实现,用:ORDER_NO的形式传入参数值。前台会在JavaScript中生成onChange()函数来实现自动填充字段值。

Custom validation(自定义验证)

在自定义验证中,由于你可以在java代码中自己实现验证,所以,可以获得更多的自由。下面是我们的例子:当你更新customer id字段的时候,customer name 字段和 discount field字段将会自动的被更新,你必须在preDefine()中定义customer id 字段验证。

blk.addField("CUSTOMER_ID","Number").setCustomValidation("COMPANY_ID,CUSTOM ER_ID","CUSTOMER_NAME,DISCOUNT");

在前台customer id字段会生成onChange()的js脚本,这时,IFS框架会调用AJAX 来访问后台数据库,并将返回的结果插入到customer_name 字段中,AJAX请求会包含这样的一个参数"VALIDATE=CUSTOMER_ID&COMPANY_ID=xxx&CUSTOMER_ID=xxx"。AJAX框架会从我们的订单页面拿到一个由符号"^"拼接而成的字符串,所以,在

我们的订单页面(java类中),我们需要提供这样的功能,最后返回一个带这样的符号的字符串就行了。

首先我们需要在run()中加入另外一个else if 语句,如下:

public void run()

{

ASPManager mgr = getASPManager();

trans = mgr.newASPTransactionBuffer();

log = getASPLog();

if( https://www.doczj.com/doc/f77430375.html,mandBarActivated() )

eval(https://www.doczj.com/doc/f77430375.html,mandBarFunction());

else if( !mgr.isEmpty(mgr.getQueryStringValue("VALIDATE")) )

validate();

}

分析上面代码知道,如果VALIDATE参数存在查询参数,即不为空,则会执行validate();

public void validate()

{

ASPManager mgr = getASPManager();

val = mgr.readValue("VALIDATE");

if ( "CUSTOMER_ID".equals(val) )

{

cmd = trans.addCustomFunction( "DISC", "Demo_Customer_API.Get_Discount", "DISCOUNT" );

cmd.addParameter("COMPANY_ID,CUSTOMER_ID");

cmd = trans.addCustomFunction( "NAME", "Demo_Customer_API.Get_Name", "CUSTOMER_NAME" );

cmd.addParameter("COMPANY_ID,CUSTOMER_ID");

trans = mgr.validate(trans);

name = trans.getValue("NAME/DATA/CUSTOMER_NAME");

discount = trans.getNumberValue("DISC/DATA/DISCOUNT");

if( mgr.isEmpty(name) )

mgr.responseWrite( "No_Data_Found" +

mgr.translate("DEMORWORDERHEADERNOCUST: Invalid Customer ID") );

else

mgr.responseWrite( name + "^" + mgr.formatNumber("DISCOUNT",discount) + "^" );//如果不为空,需要响应给前台AJAX的内容须用"^"符号拼接

}

else if ( "DELIVERY_DATE".equals(val) )

{

buf = mgr.newASPBuffer();

buf.addFieldItem("DELIVERY_DATE",mgr.readValue("DELIVERY_DATE"));

mgr.responseWrite(buf.getFieldValue("DELIVERY_DATE") +"^" );

}

mgr.endResponse();

}

通过上面的代码也知道,这个验证函数可以同时验证多个字段,所以,我们从VALIDATE parameter in the query string中执行查找我们需要的数据,在这个例子中,我们通过建立一个sub buffer in the ASPTransactionBuffer 对象,用一个命令从数据库中为我们取到值:

cmd = trans.addCustomFunction( "NAME", "Demo_Customer_API.Get_Name", "CUSTOMER_NAME" );

我们通过下面的捷径来传入参数:

cmd.addParameter("COMPANY_ID,CUSTOMER_ID");

addParameter()将会在query string 中检查company id 和 customer id 并且添加到ASPCommand 对象cmd中,接下来,我们准备从数据库中获取数据:

trans = mgr.validate(trans);

ASPTransactionBuffer 对象trans将会包含结果数据,通过下面代码,我们从trans中取出数据:

name = trans.getValue("NAME/DATA/CUSTOMER_NAME");

discount = trans.getNumberValue("DISC/DATA/DISCOUNT");

我们需要通过mgr.responseWrite()来创建响应,我们用mgr.endResponse()来结束这次会话(session),由于我们只希望客户端接收到响应的内容,所以,在mgr.endResponse()这个命令结束后在HTML页面不会再有进一步的脚本执行。

当验证字段为空时的验证选择

当验证字段(如CUSTOMER_ID)不是强制必须填写的,并且这时,被用户给移除掉了,默认情况下,框架会移除掉所有验证字段(如customer id与customer name),当然如果有CUSTOMER_ID时,也会自动填充ustomer id与customer name,但是,这种情况并不是在所有的情形下都能满足需要,这时,我们可以用下面的方法来定制:

public ASPField setClearValidatedFieldsOnEmpty(boolean clear)

代码如下:

blk.addField("CUSTOMER_ID", "Number").

setCustomValidation("COMPANY_ID,CUSTOMER_ID","CUSTOMER_NAME,DISCOUNT").

setClearValidatedFieldsOnEmpty(false).

setLabel("DEMORWORDERCUSTID: Customer").

setSize(8);

主从表的显示

我们可以在preDefine()中定义主表与从表的显示,会发现,主表的一些代码会与从

表的代码基本相似,对,是的,显示在页面上就是,打开一个页面,主表以多行的模式显示,选中任一行,超链接点进去后,这时,主表变成了单行模式,在页面的下方也出现了一个table,这个table显示的数据就是子表的数据。至于什么时候显示子表,什么时候不显示子

表,是由生成HTML部分的isVisible()来判断而确定的。如果主表是多行模式下,isVisible()为false,否则为true。

注意为了避免从表与主表的字段相冲突,我们在子表定义字段时,用新的名字,但是为了能够与数据库进行正确的连接,用到一个函数setDbName()。

用下面这条语句与主表进行关联:

itemblk.setMasterBlock(blk);

接下来,填充子表,也是像填充主表一样的okFind()方法一样,同样有一个函数,这个函数名需要遵从一个必须的规范,就是要加个后缀,比如说,咱们的子表block叫ITEM,那么这个函数就叫okFindITEM()。

有一点要注意就是为了防止主表没有数据时,也会调用从表进行表填充(会自动调用okFindITEM()),需要在主表okFind()最后调用一个函数eval(rowset.syncItemSets()),这个函数的功能就是确定在主表table有数据填充时,才会执行okFindITEM()。

我们经常需要从ASPManager获取一个新的ASPTransactionBuffer实例,所以需要用到trans.clear()来实现,当你已经在前一个页面用过这个实例,这样做是需要的。

设置查询条件:

q.addWhereCondition("COMPANY_ID = ? and ORDER_ID = ?");

参数是写SQL时WHERE后的sqltext。问号是用来在后面填充数据的,即“挖坑”。需要用到以下函数:

q.addParameter("COMPANY_ID", rowset.getValue("COMPANY_ID") );

q.addParameter("ORDER_ID", rowset.getValue("ORDER_ID") );

对应每个参数进行“填坑”。很像JDBC中的操作。我们通过ASPRowset 对象的getValue()方法来获取选中的行的参数的值。

接下来,我们从子表的ASPRowSet来提交事务,并且返回数据,但不幸的是,ASPRowSet 对象的数据在传送后,并返回时,会返回不完整的数据,有些数据会丢失,所以,我们需要在提交事务前把一些比如行号等重要的数据保存下来:

headrowno = rowset.getCurrentRowNo();

mgr.submit(trans);

rowset.goTo(headrowno);//相当于移动游标到指定行,行号在第一句已要存储下来了

选项卡

创建选项卡

在predefine()中主块命令栏添加如下:

headbar.addCustomCommand("activateItem1", "Item1");

第一个参数是让当前的选项卡处于活动状态的一个函数,第二个参数是一个label;对于每一个选项卡都需要添加这样的语句。

子块也需要添加,是我们选项卡中的内容。

接下来添加:

tabs = mgr.newASPTabContainer();

tabs.setDirtyFlagEnabled(false);//启用后当修改一个标签内容时,跳转时,会提示保存

tabs.addTab(mgr.translate("EXAMPURCHORDERITEM1:Item1"), "javascript:commandSet('MAIN.activateItem1','')");

tabs.setContainerWidth(700);

tabs.setLeftTabSpace(1);

tabs.setContainerSpace(1);

tabs.setContainerWidth(100);

上面“MAIN”是对主块的标识。addTab()第一个参数是这个选项卡的唯一标识,第二

个参数是选项卡上要显示的名字。如果我们没有移除命令栏上的自定义命令,它们会显示在弹出菜单中,可以通过下面方案来解决:

public void adjust()

{

cmdbar.removeCustomCommand("activateOrderItem");

cmdbar.removeCustomCommand("activateInvoice");

}

我们可以通过定义静态变量来定义选项卡数(number,后面会读number确定当前是哪个选项卡在活动),如:

private static final int ITEM1 = 1;

private static final int INVOICE = 2;

现在,我们需要定义addCustomCommand()中定义的函数。

public void activateItem1(){

tabs.setActiveTab(ITEM1);

//还可以加内容,比如说加okFind()等等方法

}

一旦一个选项卡被一个请求确定后,为了能够配合随后的请求,必须保存当前选项卡。

在run()方法中要添加:

tabs.saveActiveTab();

当开发者写了多个选项卡的时候,当前是哪一个选项卡,是需要来确定的:ASPTabContainer.getInitialActiveTab() ,需要写到run()中,此处就用到了number,readNumber就是读出当前活动选项卡的数值,代码如下:

activetab= ctx.readNumber("ACTIVETAB",tabs.getInitialActiveTab()); ctx.writeNumber("ACTIVETAB",activetab);

下面添加需要在生成HTML方法处调用的:

tabs.showTabsInit();

tabs.showTabsFinish();

代码如下:(文档有错误,都需要写在appendToHTML()中)

protected void printContents() throws FndException

{

ASPManager mgr = getASPManager();

if (headlay.isVisible())

appendToHTML(headlay.show());

if (exam_purch_order_line_lay.isVisible()){

appendToHTML(tabs.showTabsInit());

if(activetab==ITEM1){

appendToHTML(exam_purch_order_line_lay.show());

}//此例中只写了一个选项卡,写多个用if来判断哪个处于活动状态

appendToHTML(tabs.showTabsFinish());

}

}

调用后台的函数与存储过程

调用函数

请看下面例子:

headblk.addField("SUMPRICE").

setFunction("exam_purch_order_api.Get_Sum_Price(:ORDER_NO)").

setLabel("EXAMPURCHORDERSUMPRICE: 总价").

setSize(30);

在java类中主要是用到setFunction()来调用后台中的对应的函数,上面例子中的参数"exam_purch_order_api.Get_Sum_Price(:ORDER_NO)",是包名加函数名,函数中传的参数是冒号加字段名的格式。这个字段"SUMPRICE"是伪字段,也就是对应到数据库表中是找不到这个字段的,只有加上setFunction()才能正常在页面显示,否则会提示,没有该字段,伪列经常这样处理,一般来说,对于数据库表中实际有的字段,不加setFunction()函数。

巴比伦空中花园英文介绍

巴比伦空中花园英文介绍 古巴比伦王国曾出现过一座漂浮在半空中的园林,考古学家至今仍未能找到它的确实位置。事实上,大半描绘空中花园的人都从未涉足巴比伦,只知东方有座奇妙的花园,波斯王称之为“天堂”,而在两相凑合下,形成遥远的巴比伦梦幻花园。由于花园比宫墙还要高,给人感觉像是整个御花园悬挂在空中,因此被称为“空中花园”,又叫“悬苑”。当年到巴比伦城朝拜、经商或旅游的人们老远就可以看到空中城楼上的金色屋顶在阳光下熠熠生辉。所以,到公元2世纪,希腊学者在品评世界各地著名建筑和雕塑品时,把“空中花园”列为“世界七大奇观”之一。从此以后,“空中花园”更是闻名遐迩。 Hanging Gardens of Babylon English Introduction Babylon Kingdom there had been a garden floating in the air, archaeologists have yet to find its exact location. In fact, most depicting the Hanging Gardens of Babylon, who have never set foot in, only knew that the East has a wonderful garden seat, the Persian king known as "paradise", and make do in the two-phase, the formation of distant Babylon dream garden. As the garden is even higher than a wall, giving the impression hanging in the air like the Imperial Garden, known as the "sky gardens", sometimes called "hanging Court." Babylon then to worship, business or tourism for people far away can see the golden roof of the tower on the air in the sun shine. So, to the 2nd century AD, the Greek scholars in the building and tasting the world famous sculptures when the "sky gardens" as "Seven Wonders of the world" one. Since then, the "Hanging Gardens" is famous. The Love Story Behind the Hanging Gardens There has been a beautiful love story behind the building of the Hanging Gardens. The Hanging Gardens were built by Nebuchadnezzar II, King of Babylon around 600 BC. He married Amytis, the princess of Media. The beautiful princess was so adorable (可爱的) that the king loved her very much. Not long after their marriage, the princess became very frustrated and looked very sad. The king cared for his wife but didn’t know why she was unhappy. The princess told him that she was homesick(想家的). She said that there were plenty of trees and flowers in her homeland(家乡), surrounded by mountains. While here in Babylon, only endless plains were in view(看得见) and even a small hill can not be found. How I wish to see the winding trails (小径) and mountains in my homeland! Then, the king ordered to build gardens to imitate (模仿) the scenery in Media, the homeland of Amitys. Gardens with the appearance of a theatre, waterfalls, animals, fruits and plants were built. These were the Hanging Gardens of Babylon. 空中花园背后的爱情故事 在建造空中花园的背后,有着一个美丽的爱情故事。 空中花园是由巴比伦国王尼布甲尼撒二世于大约公元前600年主持建造。他娶了米底的公主米梯斯为王后,美丽的王后非常惹人疼爱,国王对她宠爱有加。但婚后不久,公主变得非常失落,看起来很伤心。国王关心她的爱妻但不明白其中缘由。 公主告诉国王,她非常想家。她说,家乡米底山峦叠翠,花草丛生;而在这里只能看见一望无际的平原,连个小山丘都看不到。我多么希望能看到家乡的盘山小道和山峦呀! 于是,国王下令,模仿米梯斯家乡——米底的景色,在他的宫殿里,建造花园。花园建造成露天剧场的形状,里面有瀑布、动物、水果和花草。这就是古巴比伦的空中花园。

巴比伦空中花园

巴比伦空中花园 巴比伦空中花园 - 简介 巴比伦空中花园巴比伦空中花园位于Euphrates河东面,伊拉克首都巴格达以南50里外左右,四大文明古国之一的巴比伦王国国王尼布甲尼撒二世(Nebuchadnezzar)在公元前6世纪为其患思乡病的王妃安美依迪丝(Amyitis)修建的。被列为古代世界七大奇迹之一,现已不存在。巴比伦空中花园,又被称为“悬苑”,因为从远处望去,此园如悬空中,当然,空中花园从來都不是吊于空中,这个名字的由来纯粹是因为人们把原本除有“吊”之外,还有“突出”之意的希腊文“kremastos”及拉丁文“pensilis”错误翻译所致。巴比伦空中花园 - 传说 千百年来,关于“空中花园”有一个美丽动人的传说。 新巴比伦国王尼布甲尼撒二世(NebuchadrezzarII)娶了米底的公主米梯斯为王后。公主美丽可人,深得国王的宠爱。可是时间一长,公主愁容渐生。尼布甲尼撒不知何故。公主说:“我的家乡山峦叠翠,花草丛生。而这里是一望无际的巴比伦平原,连个小山丘都找不到,我多么渴望能再见到我们家乡的山岭和盘山小道啊~”原来公主得了思乡病。于是,尼布甲尼撒二世令工匠按照米底山区的景色,

在他的宫殿里,建造了层层叠叠的阶梯型花园,上面栽满了奇花异草,并在园中开辟了幽静的山间小道,小道旁是潺潺流水。工匠们还在花园中央修建了一座城楼,矗立在空中。巧夺天工的园林景色终于博得公主的欢心。由于花园比宫墙还要高,给人感觉像是整个御花园悬挂在空中,因此被称为“空中花园”,又叫“悬苑”。 当年到巴比伦城朝拜、经商或旅游的人们老远就可以看到空中城楼上的金色屋顶在阳光下熠熠生辉。 巴比伦空中花园 - 建筑结构 巴比伦空中花园由于幼发拉底河连年泛滥和战争的破坏,到公元二世纪,巴比伦古城已沦为废墟,空中花园早已坍塌,而要了解“空中花园”,只能通过后世的历史记载和近代的考古发掘。 19世纪末,德国考古学家发掘出巴比伦城的遗址。他们在发掘南宫苑时,在东北角挖掘出一个不寻常的、半地下的、近似长方形的建筑物,面积约1260平方米。这个建筑物由两排小屋组成,每个小屋平均只有6.6平方米。两排小屋由一走廊分开,对称布局,周围被高而宽厚的围墙所环绕。西边那排的一间小屋中发现了一口开了三个水槽的水井,一个是正方形的,两个是椭圆形的。根据考古学家的分析,这些小屋可能是原来的水房,那些水槽则是用来安装压水机的。因此,考古学家认为这个地方很可能就是传说中的“空中花园”的遗址。 从考古发掘和历史记载,我们可以勾勒出空中花园的轮廓:

成都市城市总体规划简介

成都市城市总体规 划简介 1 2020年5月29日

成都市城市总体规划简介 一、总规修编历程 12月至 4月,成都市规划局邀请中国城市规划设计研究院等三家研究机构进行了成都市城市空间发展战略的研究工作,对成都市的空间布局、产业发展等重大问题进行了初步的探索,并提出对成都市总体规划进行修编的必要性。 8月,成都市人民政府依据<中华人民共和国城市规划法>、建设部<城市规划编制办法>、建设部<关于同意修编成都市城市总体规划的函>、<成都市国民经济和社会发展第十个五年计划纲要>、<成都市土地利用总体规划修编大纲( -2020)>等组织修编<成都市城市总体规划-2020>。 成都市城市总体规划修编至今已历经1年,经过了建设部、四川省和成都市三个层次的技术审查,共召开了部门协调会、各级政府汇报会等大小会议30多次,为规划修编打下坚实的基础。 成都市城市总体规划修编综合协调了四川省和成都市有关产业、国土、水利、电力、电信、交通等20多个行业专业规划,在此基础上,提出本次城市总体规划的发展目标、城镇体系、城市性质与规模、空间布局、城市交通、园林绿化、城市景观、市政工程、近期建设、规划

管理等有关规划内容。 二、总规修编背景及理由 (一)总体规划修编背景 1、十六届三中全会经过的<关于完善社会主义市场经济体制若干重大问题的决定>提出了加快发展必须注意的”五个统筹”,并指出:”实行最严格的耕地保护制度,保证国家粮食安全”。 2、四川省政府近期下发<进一步加强城乡规划监督管理意见>提出规划管理”九不准”;市政府着手整顿与加强城市规划管理,推进规划编制、规划管理、规划监督三分离的管理体制。 3、成都市第十次党代会召开,提出”把成都建设成为中国西部创业环境最优、人居环境最佳、综合实力最强的特大中心城市”的发展目标,以城市化为主线统筹城乡经济发展。 4、为适应国家与地方政府职能的调整与转变,城市规划编制重点与编制办法正酝酿着重大变化。 (二)总体规划修编理由

花园作文500字优秀作文

花园作文500字 篇一:我家的绿色花园 我家有一个美丽的绿色花园,家庭成员有:吊兰、红掌、墨兰、君子兰、滴水观音它们在妈妈的培育下,茁壮成长。他们安居乐业在阳光照射最多的地方阳台。 一天早上,我在阳台上帮妈妈浇花时。我突然发现了一个奇怪而不可思议的现象滴水观音上居然有一个小巧、圆滚、玲珑剔透的水滴。哇!真可爱啊!随即,我的脑子里又发出了一个又一个的大问号:滴水观音为什么会滴水呢?那滴的水是否有毒呢 我跑去问妈妈,妈妈说应该是因为天气潮湿的原因吧!是否有毒?应该有毒吧!我想:滴水观音水分太多是在自我调节吧!滴水观音应该有毒吧!我自言自语的说。 自己猜,还不如上网查查呢!哇,好多资料哦!我一个一个仔细地看下去,决不露下一点细小的答案。终于找到了一个合理的答案:1.滴水观音又名叫海芋,原产于南非热带雨林。出现滴水原因是由于在温暖潮湿、土壤水分充足的条件下所造成的,叶片尖端或边缘向外渗出液滴,如果空气湿度过小的话,出来的水分马上就会蒸发掉,两者缺一不可,因此,一般出现水滴都是在早晨较多被称为吐水现象(不仅仅是滴水观音有此现象)。在北方,气候比较干燥,很难见到此景。2. 因为滴水观音有毒,所以皮肤接触它的汁液就会发生瘙痒或强烈刺激,眼睛接触汁液可引起严重的结膜炎,甚至失明。误吃了它的茎叶,就会有恶心、疼痛的症状,严重的还会窒息,导致心脏麻痹死亡。 原来如此呀!我觉得我们应当仔细的观察我们美丽的世界,探索更多有趣的事。 篇二:冬的花园 冬天,像个老头子似的慢悠悠地飘到大地,夹着一股寒风吹到了房间里,我突然感到,冬天已经来临了。 我穿上棉服走进花园,一股冷气向我吹来,我搓了搓手,吸了口冷空气,哼着小调继续前行。 天空像一块一望无际的宝石,此刻它已抹上了灰白的色彩。池塘一片薄冰,比以前的汪汪大水还美。摸一下凉凉的,要是用舌头舔,准会贴在上面拿不下来。突然,一块冰碎了,原来是鱼撞破了冰游出了水面。白的、红的、黑的、花的让人目不睱接,活蹦乱跳地飞出水面,又掉进河里,溅出的水花掀起一串串涟漪。有些鱼跳到了冰上,大家纷纷撞开一块块冰,把它救下来。不一会儿,因为它们的嬉戏河面又是波光鳞鳞,展现出一片生机。 梅花在寒风中傲然挺立。它与别的花不同,它不畏严寒,连人都惧怕的寒冷环境,它却可以生存,在冷风冷雨中依然绽放美丽的笑颜。 花园里的文竹有几百盆,盆盆造型各异。我看见了一个修剪工人正在剪文竹,只见他熟练地操起剪刀,细心地把文竹多余的部分剪去,再把文竹修剪成心中的形状。不一会儿功夫,一盆挺拔、秀气的文竹出现在我眼前。我突然想到,这位修剪工人不正是我们的老师吗?而我就是那盆文竹。 一阵风吹过,一片片雪花飘了下来。我接住一片,马上融化了,仿佛我也是一片飘来的雪花,被花园里的美景融化了。远处一片翠竹挺立在那儿,好像是士兵在说:冬天并不冷,只要你愿意,就可以心贴心地拥抱冬天。看着那傲然挺立的翠竹,我的腰杆挺直了几分。篇三:空中花园刘一之

部编版五年级上册语文第四单元《二十年后的家乡》作文范文五篇

部编版五年级上册语文第四单元《二十年后的家乡》作文范 文五篇 为大家准备了以下内容,希望对大家有帮助。 【篇一】部编版五年级上册语文第四单元《二十年后的家乡》作文范文"叮零零",上课铃声响了,我加快步伐走进教室。你可能会想:20年后的杨盼盼怎么还在学校呢?哈哈,我现在可是一位名副其实的小学语文老师了!如果你问我在哪教书?我会自豪地回答:“当然是我们松滋市的学校啦!这可是的设计师何瑞雅设计的,她是我小学的好朋友呢!你想知道这所学校是怎么样的吗?我来说给你听听吧!” 这所学校可漂亮了!从校道到教学楼两旁都种满了奇花异草,有百合花、紫罗兰、郁金香、曼珠沙华,还有很多我叫不出名的花。教学楼顶上有一层太阳能板,学校的电力全都来源于它们,就算没有阳光也没事,它可以吸收空气中的有害物质作为能源。我慢慢地在校道上散步,望着操场,操场可真大!有羽毛球场、乒乓球练习室、足球场、排球场、高尔夫球场,赛马场……器材室也变大了,是一座三层的小洋房! 我又走进食堂,食堂内全装上了空调。我走上二楼的餐厅,几个机器人向我走了过来,问:"杨老师,你需要些什么?"我说:"我不吃什么,专门来看看学生今天吃什么?"一个机器人把我领到配料间,我一看,哇!有牛排、披萨、冰淇淋……应有尽有,看得我垂涎欲滴。 绕过食堂,就到了教学楼,对啦,大家随我到我的教室里看看吧。瞧,教室里的每张课桌上有块小屏幕,是用来写作业的,作业做完后,我就直接在电脑上批改;现在孩子们也不用背着大大的书包上学了,大家都用电子书…… 突然,我桌上的电脑屏幕上跳出一位女老师,她请求和我视频通话:“杨盼盼!我是熊希言!今天下午有同学聚会去吗?在学校附近的空中花园餐厅!”“当然,我先回去准备一下!”我说。 于是,我开上我的水陆空三用汽车向家疾驰,我住的地方变化也很大。以前狭窄的水泥道变成了宽宽的柏油马路,路两旁种满了高大的梧桐树。道路两旁有打扫卫生的机器人,道路中间行驶的都是无污染汽车,一点也不显得拥挤。我换上

花园作文50字_五年级日记

花园作文50字 逛百花园[50字]马思琪 今天晚上,我乖乖地做完作业,妈妈奖励我去百花园散步。我们沿着环城河,穿过胜利桥洞,来到了百花园。 一到百花园,我们就看到门口有许多人在跳舞,他们随着欢快的翩翩起舞,妈妈感慨地说:“等宝贝上了大学,我也可以来这里跳舞健身了!” 我们绕过跳舞的人群,进入百花园,里面已经有很多人在散步了。我们沿着弯曲的小路,一路走一路说着笑着。百花园里的空气太好了,我们呼吸着清新的空气,感觉非常舒服。 在百花园逛了几圈之后,我们感觉有点累,就沿着原路回家了。 后花园李昴熠 我家里有个很小的后花园,它在我们的厨房的旁边,里面品种有蔬菜类:绿油油的小蒜苗,还有紫乎乎的水培红薯。花类有:绿绿的开运竹,火红的豆豆梅花,绿油油的橡皮树,扎扎的仙人球,还有水培紫吊兰,我家的花园很美丽。 我每天都要给它浇水,妈妈对我说:对待后花园的每位成员都要细心呵护,将来才能变成美丽的大花园。 花园 我家住在雍华府,雍华府的景色特别漂亮,绿树成荫,鲜花盛开,蝴蝶飞舞。8栋楼前有一条小坡。小坡的一旁种了许多叫不出名字的小树,小坡的一旁有一条弯弯曲曲的小河,小河里面有小蝌蚪东游游西游游,小河上有一座小桥。小坡前还有一个宽阔的游泳池,里面非常干净,连一片树叶都没有。 雍华府真美丽呀!我爱我们的小区。 花园黄亚子 听说,美国人的房屋总是附带着一个BIG花园,而且,他们花园里的花呀,树呀,都是他们自己种的呢! 在花园最外面,种着几株向日葵。在向日葵的旁边,就是花丛了,那里有很多蝴蝶花,那真的是五彩缤纷的一片啊! 在里面一点就是小树林了。有桃树,橘树,梨树之类的许多果树。 最里面是菜园,里面有卷心菜,青菜,萝卜,西瓜,冬瓜…………真是数也是不清! 到花园去玩李星皓 今天是节日的第一天,我和妈妈到花园去玩,看见大地披上了新装,花儿红了,树儿长出了绿叶,小草也长得神气活现的,人们都出来欣赏美丽的景色。 我看见天空中的风筝越来越多,有的象蝴喋,有的象蜻蜓,有的象孙悟空,各种各样的风筝把我给迷住了,我也让妈妈买了一个小鸟风筝,在妈妈的帮助下,风筝一会儿就飞上天空了,我高兴地直拍手。 环游世纪花园 上完了一天的课,终于在下午课间听到班主任孙老师下命令了,准备好东西,

四川成都简介

四川省成都市简介 成都位于中国四川省中部,是四川省省会,四川省政治、经济、文教中心,国家历史文化名城。成都是中国西南部重要的交通枢纽。从有确切记载算起。成都已有2300多年的历史。早在公元前四世纪,蜀国开明王朝迁蜀都城至成都,取周王迁岐“一年成邑,二年成都”,因名成都,相沿至今。 1、地理 成都位于四川盆地西部的岷江中游地段,境内海拔387-5364米,东界龙泉山脉,西靠邛崃山。西部为纵贯南北的龙门山脉。成都市区位于成都平原东部,平均海拔约500米。位于岷江干流上的都江堰水利工程,其灌溉渠网呈扇形展开在广阔的成都平原上,使成都平原成为“水旱从人,不知饥馑”的“天府之国”。 2、行政区划 成都市共辖9个区、4个县级市、6个县。人口约1260万。3、民俗文化 川剧 早有“蜀戏冠天下”之誉的成都是我国戏剧之乡。形成于清代的川剧是我国重要的地方剧种之一,剧目繁多,文字优美,幽默风趣,表现手法丰富,程式化动作含蓄隽永,器乐帮腔独具特色,尤其是“变脸”、“吐火”等绝技独树一帜,令人叹为观止。

川菜 “吃在中国,味在四川”,这句四方流传的名言点出了成都“尚滋味”、“好辛香”的传统饮食特点。成都美食可以分为川菜、小吃、火锅三大类。“川菜”为中国四大菜系之首,品种三千,名菜数百,以味取胜,其“一菜一格,百菜百味,擅用麻辣”的特色可谓盘盘菜品是故事,道道佳肴有典故。 4、风景名胜区 国家级:青城山-都江堰风景名胜区、西岭雪山风景名胜区、龙门山风景名胜区、天台山风景名胜区。 省级:九龙沟风景名胜区、朝阳湖风景名胜区、云顶石城风景名胜区、龙泉花果山风景名胜区、黄龙溪风景名胜区。 5、文化艺术、人文景观 成都著名的人文景观有都江堰、青城山、武侯祠、杜甫草堂、二王庙、文君井、文殊院、宝光寺、永陵、金沙遗址等。自然景观中山景、洞景、水景、生景、气景俱全,九峰山、石象湖、西岭雪山等秀美景色极具吸引力。有25个国家、省、市级风景名胜区、自然保护区、森林公园和地质公园。

家园(高三作文)作文

家园(高三作文)作文 家园(高三作文) 谁不想有家的感觉,谁不希望拥有美好的家园。 美好家园不是一座空中花园的美丽,不是有吃有喝的幸福,不是拥有万贯家财的产业。美好家园是美丽的精神构建起来的温馨的集体。有这种精神,即使流浪,也不孤独,处处是美好的家园。 (整理) 美好的家园离不开关怀与关爱之心。因为关怀,我们在父母的家园中茁壮成长,因为关爱,我们在老师的家园里汲取养料,也关怀,我们在党的家园里不断向上。 美好家园离不开爱心。因为有爱心,贫困的孩子又能在希望的家园中阅读学习,汲取知识的营养。因为爱心,孤寡老人又能在福利院尽享天年。因为爱心,山村富了,因为爱心,日子好了,因为爱心,鸟儿有饿多了。

美好的家园离不开感动。丛飞逝世,遗书再次感动,他感动着青年的心,催我们奉献爱心;“三进三出”,救人之中,感动着我们,那勇敢的行为早已奏成一首激昂的歌,咏成一首壮美的诗,激励这每一个人,要我们勇敢,有爱心。一个个感人的事迹让我们的家园精彩无限,一次次感动让我们的家园生机盎然。 美丽的家园必须是和谐的家园。我们都是家的女儿,儿子。每一个兄弟姐妹都应该心往一处想,劲往一处使。每一步,每一句话,都应为着共同的家。用我们的团结筑起和谐的家园。 缺乏关爱,我们便只有个体,家园只剩下散乱,犹如一首曲子只剩下音符,永远谱不出美妙的乐章。失去关爱,将失去美好。 缺乏爱心,我们将变成一副副僵硬的躯壳,没有灵魂。就像一棵棵即将枯死的树,没有绿叶,失去生机。失去爱心,我们的家园将只剩下一棵棵枯死的树,一片凋零。 (整理) 缺乏感动的心,是一个死了的灵魂;缺乏感动的人,是无所

作为的人;缺乏感动的手,不可能创造出完美的世界。 没有和谐,这世界将充满冲突,暴力,社会秩序将混乱不堪。森林将因人类的无知而变为荒漠,鸟类将因人类的贪吃而灭绝......不和谐的家园,是人类自己的坟墓。呼唤一个美丽的家园,请先拥有一颗关爱的心,一颗向善为善的心,一颗感动的心,也要一颗和谐相处的心。

成都功能介绍

成都,这样一个有着2千多年历史文化底蕴的城市,可玩、可看的地方太多了。名胜古迹市内就有很多,远至各州县、地区,那风景更是数不过来。成都的菜肴,更是天下一绝。有那么一说,吃在广州,味在成都。 这样美的城市,用不着多说的了,地球人都知道,你自己带眼睛来吧。 成都市内一日游 第 1 天 杜甫草堂 - 武侯祠 - 青羊宫 - 望江楼 - 文殊院 上午先去著名的杜甫草堂(17、304、35路可达),然后乘304路依次游览武侯祠和青羊宫(以上三景点相距很近,均为2-3站的距离,也可打的或坐三轮车)。午餐可在青羊宫对面的陈麻婆豆腐店吃。午后乘35路至望江楼公园,沿途浏览府南河两岸的蓉城市景,在望江楼公园内可坐坐茶铺,享受成都人的休闲生活。晚饭前去市中心春熙路、总府路逛逛商场,晚餐可就近在“龙抄手”品尝小吃,也可以去人民南路尝尝成都的火锅或川菜,然后在附近的酒吧里结束这难忘的一天。 都江堰-青城山周末自助游 第 1 天 都江堰 - 玉垒山公园 - 二王庙 - 安澜桥 - 青城山 清晨在成都火车站广场或西门车站乘车(10分钟一班,1小时即到)去都江堰(门票60元,索道25元)游玉垒山、二王庙、安澜桥、离堆,看完这一秦代修建的著名水利工程后乘车去林深木密、清幽秀丽的青城山,切记上山时不要乘缆车,只有沿着松竹掩映的石板路经游天师洞、祖师殿、登上观日亭,才能真正领略到“青城天下幽”的独特味道。(如一日游,此时应抓紧时间乘索道下山回成都了,一日游可在成都乘都江堰、青城山一日游专线车,往返车费20元),如二日游,当晚可住在青城山最高峰的道观上清宫附近。 第 2 天 清晨登临山顶,观日出、云海、圣灯三大奇景。早餐后,乘车去青城后山,沿泰安寺、观音瀑布、翠映湖、双泉水帘洞、梳妆池上山,从白云洞、龙隐峡栈道、三龙水晶溶洞下山。下山后有去成都西门汽车站的直达车。 四姑娘山五日自助游 第 1 天 清晨6:40从成都西门汽车站出发,乘往小金方向的长途汽车去日隆,沿途可欣赏巴朗山云海和美丽的高山草甸风光,夜宿日隆。在日隆镇上有便宜的小旅馆,大约每晚二十到三十元,没有卫生间。 第 2 天 骑马游览海子沟,沿途可观赏到锅庄坪、大海子、花海子、双海子等景点,观冰川奇观。游毕后返回日隆,仍宿日隆招待所。 第 3 天 骑马游览长坪沟,沿途可观赏喇嘛寺、二道坪、上干海子、木樏子、鸡冠石等景点,

关于《家》心得体会

关于《家》心得体会 人的一生都是学习的过程,而学习有两个途径,一个是向书本学习,再一个是向实践学习,这也就是古人强调的“读万卷书,行万里路”。 在我家,我和我爱人都受过正规的高等教育,非常清楚阅读对人一生的重要性。有了小孩以后,因为关注点的原因,感觉时时处处都有亲子阅读的影子,在当前子女培养教育中,亲子阅读已经得到普遍认同。我们家自然也不例外,亲子阅读已经成为习惯,成为享受,就像一日三餐一样,成为每天生活中不可或缺的一件事。 亲子阅读,就像享受美味大餐。 享用大餐的过程是快乐的、甜蜜的、幸福的。宁宁还很小的时候,我们就在朋友的推荐下为他买了斯凯瑞的金色童书第一辑。跟他一起读了《轱辘轱辘转》以后,大人小孩都上瘾了,书中各种各样的车辆,小猪一家奇妙的旅行过程,不但深深地吸引了孩子,也让家长弥补了小时候缺少图书的遗憾。《猜猜我有多爱你》真是太美了,图画生动形象,文字简洁优美,情感深挚含蓄,自从看过这本书以后,每天睡觉前儿子都会说“爸爸(妈妈),猜猜我有多爱你”,我们回答“一直到月亮那里,再从月亮上回到这里来”,然后甜甜的进入梦乡。每次看《父与子》,都会捧腹大笑,书中乐观的态度、幽默的语言,逐渐融入 了我们的生活。

这套大餐能为我们提供丰富的营养,拉近世界与我们的距离。读了《每颗行星都有自己的地方》,知道了太阳系是什么样子,每科行星是由什么构成的,以及它的颜色、大小;读了《环球旅行》,知道了古老的空中花园,非洲有很多野生动物,世界各地的人是不一样的;读了《神奇校车:在人体中游览》,知道了人体的各个器官都有它的功能,都是由大脑控制的;读《不一样的卡梅拉》,让我觉得很开心,也更自信了。阅读,可以把我们“变大”,去触摸太空和宇宙;也可以把我们“变小”,去花草虫鱼中探秘;阅读还像妈妈的手,抚摸着我,让我感觉幸福和甜蜜。 亲子阅读,绝不是一件简单的事。 首先,选择适合的书。要保证图书的质量,简单的办法,就是选择经典的图书。现在市场上的童书良莠不齐,粗制滥造的书不但对孩子毫无益处,而且会对孩子造成不良的影响,还会损害孩子的阅读兴趣。要选择适合孩子年龄、性格特点和口味兴趣的图书。孩子的成长是有规律的,家长可以引导孩子阅读,但绝不能按自己的喜好规定孩子必须读什么样的书。 其次,采取多样的阅读方式。可以是家长读给孩子听,也可以请孩子根据插图的内容讲故事给家长听。对于对话类的书,可以跟孩子玩角色扮演的游戏。当孩子识一些字以后,可以让孩子在阅读过程中找“拦路虎”,家长来帮他“消灭”。当然, 也不一定全靠眼睛看、嘴巴读,还可以用耳朵“读”。长途乘车的时候,不适合于看书,但可以“听书”。孙敬修爷爷讲的《西游

花园作文150字_写景作文

花园作文150字 我去后花园钟尹晨 今天下午,我上兴趣班的时候,那些大哥哥大姐姐带我去后花园,我非常的高兴!因为这是我第一次去后花园啊!其实,后花园就是一个小花园啦,那里还有一条小河,但是小河里没有水。后花园的左边有一片草,那片草地很宽广很宽广。 姐姐她们要挖一个洞,每次都叫我接水,而她们的话呢?是这么说的:喂,钟尹晨,去接水去。可我不想接水,但是我又不能不去,只好不情愿的去了。 但是,不幸的是,才玩没多久,就感觉好像快上课了,我只好偷偷的回教室。老师已经到了,他问我:那些大姐姐们呢?我回答:她们还在下面。“快去叫她们回来”老师说。我去叫她们回来了,上课的时候,我想着:要是能玩就一点儿的话那就好了。 花园那张其妙多变的脸姜泽州 多么像人啊,花园那张奇妙的让你猜测不到它的变化的脸。 清晨,常常是安恬的。安恬得没一丝动静、声音,就像是刚睡醒还没睁开惺忪眼睛的脸,还羞怯的盖一层薄薄的被子。 当风提着她的新裙子姗姗走来,安恬顿时变得生机勃勃,乱糟糟地波动,就像是海咆哮的时候掀起的浪花。 在植物生长的时候,花草树木使出浑身的劲往上冲,一边冲,一边喊,那招来的昆虫,多像是在丛中翩翩起舞的舞蹈家……我喜欢宁静安恬的脸。 我喜欢慈祥温柔的脸。 我喜欢严肃冷峻的脸。 爸爸和妈妈的脸不也是常常地变?当我做了坏事的时候;当我不跟别人道歉的时候;当我学雷锋做好事的时候……我喜欢花园,喜欢有着丰富多彩的花园。 爸爸的花园变菜园 端午节我们放了三天假,我和妈妈、姐姐去长岛爸爸那里一起过节。 我们星期一下午坐五点十分的船进长岛,船上人山人海,我们好不容易找到两个座位坐下来,经过一个多小时的漫长等待终于到达长岛。 到了爸爸住的地方,我迫不及待地向爸爸的花园走去,咦,爸爸的花园怎么变成了菜园?原来清明节放假的时候,我栽的菜苗已经成活并且长高了。其中:西红柿已经开了黄色的小花,令我惊讶的是上面竟然结了5个绿色的小西红柿;丝瓜和黄瓜的藤都已经顺着枝条慢慢地往上爬了;茄子和辣椒都长出很多的叶子,其中:茄子的叶子是紫色的,辣椒的叶子是绿色的,它们还没有开花。 我期待着下次来的时候能吃到我自己亲手种的菜结出的果实! 我家楼下的“空中花园” 我家住在六楼,可房前屋后都被繁茂的花草环绕,这是怎么回事呢?原来,在楼下居住的律师伯伯把五楼平台打造成了一个“空中花园”。 花园里的花种类繁多,这些花在四季中次第开放。冬天,黄色的梅花迎着寒冷刺骨的西北风在枝头昂首怒放。初春,迎春花吹着金黄的小喇叭报告春的讯息,

泰隆苑住宅小区修改方案设计说明

泰隆苑住宅小区修改方案设计说明 规划与建筑 一、设计依据与用地分析 1、设计依据 (1)关于本工程的建设项目选址意见书(台路规选[2004]14、15号); (2)国家和地方的有关法律、法规、规定及设计规范; (3)本工程的设计任务委托书; (4)甲方的设计要求。 (5)方案评审会议纪要([2005]95号) 2 、总平面用地分析 (1)气候特征:工程地块属亚热带季风气候,具有海洋性特色。初夏有梅雨,盛夏有伏旱,夏秋多台风,深冬有寒潮。多年平均气压百帕,多年平均气温℃,多年平均降雨量,蒸发量,多年平均日照,多年平均相对湿度82%,多年平均风速s。 (2)地块与城市关系:本工程用地为台州市路桥区灵山居住区的A地块与B地块,交通便捷。东、西、北至规划支路,南至南山路。 (3)地块的景观要素:紧邻地块北侧为路桥区中央山公园,山高70余米,风景秀丽,是理想的居住用地。无论是从城市整体利益出发,还是从本项目的角度出发,都应在地块开发过程中充分重视这一资源的保护和利用,以提升空间环境品质,营造出一个理想的住宅园地。 (4)用地基本条件:本工程用地呈不规则行,总用地面积。 二、规划原则 本工程地块地理位置优越,周边环境优美,在充分满足目前住宅市场需求的前提下,我们力求将本工程建设成为创意新颖、主题突出、技术合理并与自然环境相融合的高品质住宅 小区。它不仅满足人们日常生活居住的需要,更注重人们在文化上、心里上对“家”的热爱。在总体规划上吸取了中国传统园林造景的原理和手法,在小区内引进一条形态宜人的水景, 使小区内大部分住宅都能感受到流水的温馨与亲切。同时采用现代的规划理论及空间与环境的塑造手法,力求创造出融大气、雅致、理性与浪漫于一体的现代化居住区。 “家”是每个人心目中理想化的生活概念,茅庐草舍可以为家,高堂华厦亦可为家。小区内以各种组团单元形式创造家的氛围,同时多层次的绿化、流水和人文景观,井然有序的 道路系统,使得小区富有极强的整体感和标志性。建筑的现代感和他所包含的文化内涵结合整体环境的处理体现出鲜明的个性。充分体现出小区的可居住性、可持续发展性,体现“以 人为本”。

成都经典介绍词

Hi, welcome to travelogue. I am Yanling, still in Chengdu. This capital of the ancient Shu Kingdom, is one of the fastest growing city in China today. It promises travelers "once you have been, you will be reluctant to leave", of course under the condition that you take your time to truly savor all it has to offer, shall we start with a cup of tea? Most Chinese metropolis today baffles with the balance of galloping towards modernization and preserving traditional way of living. Few cities in China today like Chengdu that is so fond of memories from the past, and manage to actually living in it. Even growing in rocket speed, Chengdu, the city of more than 8 million, somehow feels like a rare city oasis where the bustle slows down and the original spirit stays intact. And what is it? Where to feel it? Once you are in Chengdu, you have to learn one word, and truly understand the spirit of it – xiuxian -- allow yourself to relax as long as you need, so idling around in one of teahouses for 5 hours doesn't make you a slacker in Chengdu. Chengdu teahouses are everywhere. Scattered at every corner of the streets, in every park and even in every office compound... Pensioners or pillars of the society? People of all kinds patronize (资助)teahouses more often than their grocery shop. So what do you see in a teahouse in an afternoon? Small society, as Chengdu people call it. It is the perfect spot to relax, to socialize; to people-watch. Once you are in teahouses, enjoy the timeless quality of your teatime. Even the waiters and waitress on duty often take it slow since there is no such demand as for fast and efficient service. But for someone who works as ear-picker(经典的词语啊,挖耳屎的人,相信你在茶馆见过这种人吧,学会该怎么说,earpicker,那挖耳屎勺子叫做:earpick), an age-old rare profession that is probably hard to find a job elsewhere, they take their job very seriously. Although their tools remind me of my dentist's scary weapons, how can I pass on the chance to try something for the first time?! It was certainly both eyes opening and ear opening experience (大开眼界)to have my ear picked outside of my bathroom, by someone else, in such a complicated procedure... Not every teahouse has to be this adventurous of course. Some people would like to compare Chengdu teahouses with coffee houses in Paris, probably not after been ear cleaned in Renmin park, more likely have enjoyed a cup of green tea in one of these kind of teahouses along Funan river, Chengdu locals take pride in their city for good reasons. History and commerce, animal and people apparently all meet in peace. Chengdu people love dogs, yes, as pet. Once you step into the dog market by Funan River on a Sunday morning, you will understand why Chengdu locals prankishly call it "international dog expo". (狗博会,哈哈)A full display of the beauty of variations--color, race(一般来说,race我们知道的意思是赛跑,但是这个地方表示狗的品种), origin and character! As a dog devotee, it surprised me that many of them even I haven't seen before... I am so jealous of (经典句型,表示嫉妒。。)those who take a little puppy home today. You get good bargains here(这个句子也特别经典,表示东西特别便宜,如果你给别人介绍成都的荷花池,也用上这个句子吧。). Of course it takes more than just money to have a dog. You need have a comfortable living, slow paced life, contented life style. Sooner or later, I will have a dog, perhaps have to move down here then... That's the down side of being a traveler, many things you love and care. You can't take them home. But if you are a flea market(跳蚤市场,就是那种东西特别廉价的地方,我觉得成都荷花池也基本上可以这么翻译。怎么突然发现我对荷花池这么感兴趣了呢?)fanatic, and happen to be in the city on Sunday. This is the best place to rummage and find some carriable bargain. Everything from old books and coins, Tang potteries to old gramophones from unidentifiable origin, you never know what you will find to take home.

我爱我家内部培训资料

我爱我家房地产销售培训资料 如何成为一位出色的房地产销售人员 我在做售楼小姐时,有很多的客户朋友,并建立了自己独特的楼盘销售客户网络,我每到一个新楼盘,都有很多老客户自己或介绍朋友来买楼。很多同行都在问我,你有什么绝招,让这些客户一个盘一个盘地跟着你转?其实销售并没有什么“绝招”,也没有太多的技巧性的东西可言。人与人交往很难按一种统一的模式去做,每个人的个性都不一样,处理问题的方式也就自然不一样。对于一个刚踏进地产销售行业的新人来说,别人的销售技巧只可供参考,除了学习别人的做法以外,更多的是在每一次与客户打交道的过程中,总结出合适自己的商谈方式、方法,这样你就具有了自己个人独特销售技巧。只要多加留意、多加练习,每个人都可以具备自己独特的销售技巧,有自己的“绝招”。所以说,销售技巧更多的是用心学习、用心体会、用心做事。 [用心学习] 从事房地产销售工作的人员应致力于个人及事业的发展,因为生活只会随着自我改变而改变,唯有不断地学习,才能稳固地立足于这个社会。所以要成为一名顶尖的销售人员,首先必须学习的是如何保持一种积极向上的心态。 [学习积极的心态]

进入房地产行业之前,我在棉纺厂做了6年的挡车女工,后来通过考成人高考在广西大学脱产读了2年大学。记得1992年大学毕业时我去广西万通房地产公司应聘,当时广西万通地产刚刚组建,招聘广告上写着只招一名营销人员,要求本科毕业以上,26岁以下。当时我已28岁了,也只有专科毕业的文凭,这两项要求我都不符合。但我非常自信,我认为我行,不管什么条件,先应聘再说。进入万通公司以后,当时面试我的房地产公司老总说,当时招聘,有很多人的基础条件比我好,正因为我表现得很自信,也很自然,所以,决定录取我一个人,很多人都觉得我很幸运。其实我个人认为,机会是靠你自己去争取的,它对于每个人来说都是公平的,关键是你有没有自信去抓住它而已。 在工作的过程当中,我发现地产这个行业所涉及的面是非常的广,很有挑战性。我给自己设定了一个目标,用5年时间打基础,5年以后,我不会再做销售人员。有了目标以后,我就通过再考成人高考,读了3年房地产经营管理函授班来加强自己的专业知识和理论知识。 我销售的第一个楼盘“万通空中花园”项目是在南宁市的旧城区内,这个区域是南宁市三教九流最为集中的一个地方,在那个地方建住宅小区,很多业内人士都不看好。为了能更准确的给项目定位,我们前期做了大量的市场调查,包括竞争对手调查和客户调查。当时,我们老总叫我去做竞争对手调查的时候,并没有告诉我怎么做,不象今天,叫销售人员去采盘,有固定的调查表格,知道要了解什么内容,采盘前还给他们培训讲解。老总只是告诉我,你去看看我们项目附近有什么楼盘,10天后把调查报告给我。当时房地产公司只有我一个兵,没人教我,两天过去了,我还不知道如何下手去做,急得我快哭了,就找我的朋友,让他教我。他跟我说,他也不懂,并建议我每天到别的楼盘售

相关主题
文本预览
相关文档 最新文档