关键词不能为空

当前您在: 主页 > 英语 >

OB开发手册中文版

作者:高考题库网
来源:https://www.bjmy2z.cn/gaokao
2021-02-28 13:07
tags:

-

2021年2月28日发(作者:前台)



OB


开发手册中文版



Contents


[


hide


]


1


简介




?



1


简介




?



1.1


开发概述




?



1.2


开发方法




?



1.3


组织开发工作




?



1.4


标识符命名标准




?



1.4.1


数据库元素




?



1.4.2 MVC


目录




?



1.4.3


存储过程语法




?



1.5


目录结构




?



1.6


风格指南




?



1.6.1


逻辑比较




?



1.6.2


逗号分隔列表




?



1.6.3


圆括号中的空格




?



1.6.4 SELECT INTO



INSERT INTO




?



1.6.5 SQL


关键字




?



1.7


编译程序




?



1.7.1


命令行编译任务




?



1.7.2


开发环境




?



1.7.3


生产环境




?



1.8


从源代码构建




?



1.8.1


安装


Subversion




?



1.8.2



Subversion


中检出源代码




?



1.8.3


快速构建指南




?



1.9


集成开发环境




?



2 Openbravo


数据模型




?



2.1


存储的数据库对象




?



2.2


实体


-


关系


(ER)

< br>图




?



2.3


创建存储过程




?



2.3.1 AD_PInsta nce



AD_PInstance_Para





?



2.3.2


存储过程的输入参数




?



2.3.2.1



AD_PInstance


表中获取有用的信息




?



2.3.2.2 AD_Update_PInstance


存储过程




?



2.3.2.3


例外和错误管理




?



2.4


存储过程语法的建议




?



2.4.1


通用规则




?



2.4.1.1


游标




?



2.4.1.2


数组




?



2.4.1.3 ROWNUM




?



2.4.1.4 %ROWCOUNT




?



2.4.1.5 %ISOPEN,%NOTFOUND




?



2.4.2





?



2.4.3


函数




?



2.4.4


存储过程




?



?



?



?



?



?



?



?



?



2.4.5


视图




?



2.4.6


触发器




?



2.4.7


序列数




?



2.4.8


命令




?



2.4.9


支持


PostgreSQL8.3




3


修饰名称和描述内容的指南




?



3.1


说明内容的修辞指南




?



3.2


命名的修辞指南




4


使用数据字典进行


Openbra vo


的开发




?



4.1


扩展数据模型




?



4.1.1


在数据库中创建新的表




?



4.2



Openbravo ERP


中注册新的表




?



4.3


创建新窗口




?



4.4


编译新窗口




?



4.5



Openbravo


中增加新窗口的菜单



?



4.6


更新数据库的


XML


文件




?



4.7


用户消息




5


使用


MVC


开发


Openbravo




?



5.1


基本工具




?



5.2


创建新的手工窗口


(


表单和报表


)




?



5.3


创建


callout




?



5.4



JasperReport


创建报表




?



5.4.1


使用


JasperRep ort


的报表模板




?



5.4.1.1


报表模板




?



5.4.1.2


子报表的用法




?



5.4.1.2.1

< p>
使用


jasper


文件




?



5.4.1.2.2


使用


jrxml


文件




?



5.4.1.3


报表中的


JA


V


A

< p>



?



5.4.1.4


应用程序字典中的报表




?



5.5


使用


JasperReport


导出表格




6


国际化




7


安全




8


升级方法




9


协同开发




10


附录





Contents


[


hide


]


1


简介




?



1


简介




?



1.1


开发概述




?



1.2


开发方法




?



1.3


组织开发工作




?



1.4


标识符命名标准




?



1.4.1


数据库元素




?



1.4.2 MVC


目录




?



1.4.3


存储过程语法




?



1.5


目录结构




?



1.6


风格指南




?



1.6.1


逻辑比较




?



1.6.2


逗号分隔列表




?



1.6.3


圆括号中的空格




?



1.6.4 SELECT INTO



INSERT INTO




?



1.6.5 SQL


关键字




?



1.7


编译程序




?



1.7.1


命令行编译任务




?



1.7.2


开发环境




?



1.7.3


生产环境




?



1.8


从源代码构建




?



1.8.1


安装


Subversion




?



1.8.2



Subversion


中检出源代码




?



1.8.3


快速构建指南




?



1.9


集成开发环境




?



2 Openbravo


数据模型




?



2.1


存储的数据库对象




?



2.2


实体


-


关系


(ER)

< br>图




?



2.3


创建存储过程




?



2.3.1 AD_PInsta nce



AD_PInstance_Para





?



2.3.2


存储过程的输入参数




?



2.3.2.1



AD_PInstance


表中获取有用的信息




?



2.3.2.2 AD_Update_PInstance


存储过程




?



2.3.2.3


例外和错误管理




?



2.4


存储过程语法的建议




?



2.4.1


通用规则




?



2.4.1.1


游标




?



2.4.1.2


数组




?



2.4.1.3 ROWNUM




?



2.4.1.4 %ROWCOUNT




?



2.4.1.5 %ISOPEN,%NOTFOUND




?



2.4.2





?



2.4.3


函数




?



2.4.4


存储过程




?



2.4.5


视图




?



2.4.6


触发器




?



2.4.7


序列数




?



2.4.8


命令




?



2.4.9


支持


PostgreSQL8.3




?



3


修饰名称和描述内容的指南




?



3.1


说明内容的修辞指南




?



3.2


命名的修辞指南




?



4


使用 数据字典进行


Openbravo


的开发




?



4.1


扩展数据模型




?



?



?



?



?



?



?



4.1.1


在数据库中创建新的表




?



4.2



Openbravo ERP


中注册新的表




?



4.3


创建新窗口




?



4.4


编译新窗口




?



4.5



Openbravo


中增加新窗口的菜单



?



4.6


更新数据库的


XML


文件




?



4.7


用户消息




5


使用


MVC


开发


Openbravo




?



5.1


基本工具




?



5.2


创建新的手工窗口


(


表单和报表


)




?



5.3


创建


callout




?



5.4



JasperReport


创建报表




?



5.4.1


使用


JasperRep ort


的报表模板




?



5.4.1.1


报表模板




?



5.4.1.2


子报表的用法




?



5.4.1.2.1

< p>
使用


jasper


文件




?



5.4.1.2.2


使用


jrxml


文件




?



5.4.1.3


报表中的


JA


V


A

< p>



?



5.4.1.4


应用程序字典中的报表




?



5.5


使用


JasperReport


导出表格




6


国际化




7


安全




8


升级方法




9


协同开发




10


附录





简介




Openbravo


是一款面向中小 企业的纯


WEB


方式的可扩展的


ERP


软件。她包括了基本的


CRM


(客户关 系管理)、


BI


(商业智能)和一系列如采购、库存、项目、生 产销售和财务管理等


功能。适用于物流、服务和生产制造等多个行业。

< br>



Openbravo


可以定 制以支持特定行业的功能和业务流程。



Opnebravo


的许可证允许合作伙伴和开发者选择是否将自已的工作以开源许 可证还是以私有


许可证的方式发布。我们鼓励合作伙伴和开发者以开源的方式与别人共享 开发成果,也为


Openbravo


提供新的内容。本手册的目 的是给大家为客户定制新的功能提供指导。





开发概述




?



应用字典:集中存放了定义的窗口、页签和字段的表。




?



应用菜单:程序左边的主菜单。




?



Callout

< br>(类似于触发器):用户操作一个窗口时系统响应的动作。例如可以增加或减


少可 见的字段,或者根据输入系统的信息填定订单。




?



表单:手工制作的可以输入、修改 或删除的窗口。不同于标准窗口,表单允许复杂数


以下列出了在


Openbravo


开发中使用的模型驱动开发方法的主要概念:




据的输入和在多个位置输入数据。




?



MVC


( 模型


-


视图


-


控制器):将应用程序的数据、用户界面和流程分离的一种架构。


Openbravo



MVC


是这 样实现的:




?



模型


部份 是用


Openbravo



SqlC< /p>


实现的。通过一个有标准


SQL


语句和参 数的


XML


文件实现。其中的参数是可选或必须的,可以很容易 的生成


SQL


语句。




?



视图< /p>


部份是用


Openbravo


开发的


XmlEngine


实现的。


XmlEng ine


是可以从一个


XML/HTML


格式的模板生成


XML/HTML


文档的工具。




?


控制器


是从


HttpBaseServlet


继承的子类。这些


Servlet


处理读取数据,使 用


SQLC


生成的类与数据库交互和使用


XmlEngine


提供输出。




?



报表:显示从表中检索出来的数据 或以预定义的格式和可视化的交互方式进行查询。



pdf



html


的方式显示请求的信息是一种简 捷的方式。报表可以用户希望的方式进


行定制,通常用于展示全局形势或总结。




?



标准窗口:可以输入、修改和删除数据的自动生成的窗口。窗口中的信息是由


Openbravo


按系统中的数据生成的。




?



窗口: 应用程序用于管理数据的屏幕。可以进行插入、更新或删除数据的操作。


Openbra vo


中有两种窗口:标准窗口和表单。一个窗口可能会包含多个页签。

< br>




开发方法




Openbravo


是构建


Openbravo ERP


的开发平台。正如


架构总览


中解释的开发可以 理解为两


层。



应用程序字典。它存储了应用程序的所有窗口、表、列、进程、报表和它们的关系。用户只

< br>要可以很方便的通过定义一个窗口、数据元素和报表并在应用程序字典中注册就可以增加一


个新的功能,而无需一行代码。大部份的


Openbravo

< br>代码是从应用程序字典中自动生成的。




模型


/


视图


/


控制器。当工作在这个层级时是可以通过


Openbravo MVC


开发框架完成任何改变


的。无论如何一个工具或功能不能通过数据字典 调整时,都可以在


MVC


这个层级实现。这

通常意味着要开发一个新的


JA


V


A


类。





组织开发工作



在开始开发一个新的功 能时必须清楚什么东西必须完成。下面几点对组织你的开发工作会有


所帮助:

< p>



?



应该提供哪些功能。必须清楚哪些功能要实现。




?



尽量简 单。保持设计尽量简单并且能很好的与不同组件进行交互。




?



定义你的数据模型。需要添加哪些 表、列、关系和索引来存储数据以实现想要的功


能。




?



定义用 户界面。用户如何使用新的功能。按工业标准的可用性指南组织可视化的元


素。




?



定义报表。考虑哪些数据和你的用户有关和如何最好的呈现在报表中。





标识符命名标准



数据字典命名制定一 个清晰和固定的标准对于


ERP


系统是非常关键的。按照这个命 名标准


就能保证


Openbravo ERP

< br>的新版本不会因为与客户开发时使用的数据字典元素同名而产生冲


突。

< p>



当自定义开发时,在每一个新的数据字典元素 前加上


CUS_


的前缀。例如,当为一个名为

< br>ACME


的公司进行客户定制时,在数据字典元素名前加上


CUS_ACM


的前缀。




当开发一个垂直功能时,加上这个市场名前加上


VER_


的前缀。例如,为房地产市场开发时


使用


VER_R EA


的前缀。





数据库元素



命名新的表时加上特定的开发时的前缀。例如你需要为


ACME


客户定制开发时需要增加一



DOCUMENT


的表时你应该将该表命名为



CUS_ACM_DO CUMENT


。这些表的字段可以


按照字段命名转换

< p>



AD_CLIENT_ID,IsActiv e,Name,Descriptioin


等)。




当在已有的表中增加新的字段时需要加上特定的开发时的前缀。




其他的数据库对象(存储过程,触发器等)也要加上开发时的 前缀。




数据字典的注册

< p>
IDs


是由序列按开发时的顺序生成的,因而不会出现重复的


IDs


。数据字典


中的实体名都应加上一定的前缀。





MVC


目录



命名目录时加上特定的前缀。建议建立一个独立的包。



org openbravoerpCommoncus_myPackage


)。





存储过程语法



?



作为存储过程参数的变量名前加上


p_


的前缀




?



变量名前加


v_


的前缀




?



游标名前加


c_


的前缀





目录结构



Openbravo ERP


的目录结构从逻辑上区分了核心组 件


(XmlEngine,SQLC,HttpBaseServlet)



WAD(


应用程序字典向导


)



ERP


本身的结构


(


表单


,


报表


,call-outs,


下拉列表


,


工作流


,


流程等


)

< p>




主树结构




AppsOpenbravo


|-attachment


|-build


|-config


|-database


|-docs


|-legal


|-lib


|-src


|-srcAD


|-srcClient


|-src-core


|-src-db


|-src-trl


|-src-trl


|-src-wad


|-web


|-WebContent


|-src-loc


build


编译好的类会被复制到这个目录中




AppsOpenbravo


|-build


|-classes


|-org


|-openbravo


|-authentication


|-basic


|-lam


|-base


|-secureApp


|-erpCommon


|-erpReports


|-erpWindows


|-javasqlc


|-src


|-srcAD


config


包含了各种配置和日志文件




AppsOpenbravo


|-config


|-


|-


|-ties


|-


|-...


database


包含模型数据(结构:表,约束,存储过程和触发器),示例 数据(如产品,业务


伙伴等)和


XML


格式的源数据(窗口和页签)。




AppsOpenbravo


|-database


|-lib


|-model


|-functions


|-sequences


|-tables


|-triggers


|-views


|-sampledata


|-sourcedata


docs


Openbravo



API


文档,由


Javadoc


生成。




legal


许可证文档。




lib


编译时需要的库。




AppsOpenbravo


|-lib


|-


|-


|-


|-


|-...


,




是执行


ant te


时必须


的。编译的结果是一个名为



的文 件,需要将其复制到应用服务器的


webapps


目录下。




src


Openbravo ERP


的源代码:表单,报表,


call- outs,combos,


工作流,流程等。




AppsOpenbravo


|-src


|-org


|-openbravo


|-base


|-erpCommon


|-ad_actionButton


|-ad_background


|-ad_callouts


|-ad_combos


|-ad_forms


|-ad_help


|-ad_process


|-ad_reports


|-ad_tasks


|-ad_workflow


|-businessUtility


|-info


|-reference


|-security


|-utility


|-ws


|-erpReports

前缀


ad_


表示应用程序字典。字典名的结尾说明了它的意 思。


ad_reports



erpR eport


的区


别在于在应用程序中存取报表的方式不同。如果 是通过菜单调用的报表应该放在


ad_reports


,另一方 面,有些窗口在工具栏上有一个打印的按钮,通过这种方式调用的报表


应该放在


erpReports





srcAD


保存了通过应用程序字典 自动生成的代码。




srcClie nt


存放为自已应用程序开发的代码,不是给其他客户。




src- core


核心组件的源代码


:


XmlEngine


(


视图层


),


SQLC


(


模型层


),


HttpBaseServlet


(


控制器

< br>)



连接池。




AppsOpenbravo


|-src-core


|-src


|-org


|-openbravo


|-base


|-


|-


|-data


|-


|-database


|-


|-xmlEngine


src-db


创建


文件需要的源代码。




AppsOpenbravo


|-src-db


|-src


|-org


|-openbravo


|-ddlutils


src- trl


翻译器的源代码。




AppsOpenbravo


|-src-db


|-src


|-org


|-openbravo


|-translate


src- wad


WAD


的源代码。




AppsOpenbravo


|-src-db


|-src


|-org


|-openbravo


|-wad



web


CSS



Javas cript


的代码和图片及弹出窗口。




AppsOpenbravo


|-images


|-js


|-popups


|-skins


src-loc


MVC


结构中的视图层元素结构:


HTML

< br>,


XML



FO


和子报表。它们被放在不同的位


置(每一种一个目录)。




AppsOpenbravo


|-WebContent


|-src-loc


|-design


|-org


|-openbravo


|-base


|-erpCommon


|-erpReports


|-erpWindows


|-es_ES


|-xx_XX


|-...



风格指南


< p>
为了代码的统一和清晰,我们建议按下面的指南进行编码。这个指南应用于


Java,XML,HTML



PL/SQL

< br>。





逻辑比较



不要使用空格。




?



不正确


:


:



WHERE a = b



WHERE a= b



?



正确


:


:



WHERE a=b




逗号分隔列表



?



不正确


:




SELECT a,b,c



SELECT a ,b ,c



SELECT a , b , c



?



正确


:




SELECT a, b, c




圆括号中的空格



在函数中使用时:




?



不正确


:




SELECT max( c1 )



SELECT max (c1)



?



正确


:




SELECT max(c1)



在比较操作时


:



?



不正确


:




if(i==0)



if( i==0)



?



正确


:




if (i==0)



for (i=0; i




SELECT INTO



INSERT INTO


如果超过


8


个字段:将其分为


4


个一组(为了易读性)。



一行


80


个字符。这是比较灵活的


规则。





SQL


关键字



SQL


的关键字要大写。




?



不正确


:




select * from AD_FIELD



?



正确


:




SELECT * FROM AD_FIELD (SELECT, UPDATE,



)





编译程序



命令行编译任务



ant

< p>
编译


MVC


框架的核心组件。它会生成

< p>


文件。




AppsOpenbravo


|-lib


|-


ant


编译。它 不会生成窗口,只是生成


WAD


本身而已。它会生成

< p>


文件。




AppsOpenbravo


|-lib


|-


ant


编译翻译 器。它会生成






AppsOpenbravo


|-lib


|-


ant te


编译整个程序。它会生成


WAD


的窗口和编译应用程序 的源代码。它依


赖于


,







ant pment


编译整个应用程序并复制到


tomcat


的容器中。它会生成


WAD


的窗口和编译应用程序源代码。它依赖于


,







ant compile -Dtab=


生成指定的窗口(名称 中包含


xx



yy

),编译修改过的源代码


并且更新



中的


servlet- mapping





ant pment


-Dtab=


生 成指定的窗口(名称中包含


xx



yy


),编译修改


过的源代码并且更新



中的


servlet-mapping


。最 后会将所有生成的类复制到


tomcat


容器中。




ant setup


调用设置数据库连接和应用程序路径的界面(是



中的默认任务)。




ant war



lib


目录下生成一个


war


文件:




AppsOpenbravo


|-lib


|-


ant deploy

复制


war


文件到


tomcat< /p>



webapps


目录下。




ant installWebService


安装


Web Service


到应用服务器的目录。




ant


会执行


ant ,ant ,ant ,ant te,ant


installWebService



ant war


任务。这个任务只用于安装。





开发环境



在开发环境中内容中手工拷贝的。我们不会生成


war


文件因为这比较耗时。




第一次编译过程是这样的:




ant


ant


ant


ant pment


然后编译整个应用程序:




ant pment


编译特定的窗口:




ant pment -Dtab=


编译手工代码:




ant pment -Dtab=xx


为了编译时避免执行 翻译的任务(对于这个阶段将时间花在这上面是没有必要的),可以在


命令中添加一个参 数:


-Dtr=no





ant pment -Dtab=


ant pment -Dtab=xx -Dtr=no



生产环境



在生产环境下应用程序会打包在


war


文件中。这可以让我们对 每一个应用程序设置正确的权


限,但是我们必须将


war


文件发布到


tomcat


中,以使它能运行起 来。




第一次编译的过程如下:




ant


ant


ant


编译整个应用程序:




ant te


ant war


ant deploy


编译指定的窗口


:



ant compile -Dtab=


ant war


ant deploy


编译手工代码


:



ant compile -Dtab=xx


ant war


ant deploy



从源代码构建



这一节是如何从源代码构建的快速指南。你可以在



Build Openbravo from Sources


看到完整的


步骤。





安装


Subversion


Subv ersion


是一个源码控制工具,可以让开发者控制文件的版本。



构建前必须先安装


Subve rion


。可以从这里下载:





*



必须 同时安装


OpenSSL





现在的源代码还不支持


Postgr eSQL


只支持


Oracle




Openbravo 2.3


< p>
将会支持


PostgreSQL






Subversion


中检出源代码


安装好


Subverion


后运行如下代码


:



svn co /svnroot/openbravo/trunk AppsOpenbravo



将会创建


AppsOpenbravo


的目录,源代码保存的目录。





快速构建指南



从创建的


subversion


文件的目录运行如下命令:




ant -f te setup




这个过程会配置安装参数。




?





被创建




?




config


目录下创建


< br>,


,








?





src



目录下创建






使用


Oracle

< br>数据库时所有这些文件都会被创建。如果使用


PostgreSQL


需要将






文件名修改为


dbCon5_








当参数按上面的方式配置好后,再运行下面的命令。




ant




这个过程编译并生成应用程序的


jar


文件并在


lib


目录下生成


< p>
文件。需要将些


文件复制到


$$CATALINA_ HOME/webapps



目录以发布应用。





集成开发环境


一些快速入门以


Eclipse


来开发

Openbravo ERP,


可以参考以下链接


:





Openbravo


数据模型




存储的数据库对象



某些情况不在


Openbravo


中的数据库对象


(


存储过程


,


函数 和触发器


)


必须符合指定的规则才能


使 用。应用程序中存储过程时只能通过对应的



AD_PInst ance_ID


来调用。存储过程也必须正


确的管理

< p>
AD_PInstance


,设置返回值、设置有用的输出信息。在创建存 储过程这一节会更



详细的介绍如何开发一个存储过程。





实体


-


关系


(ER)




Openbravo


的实体


-


关系


数据库图


展示了


Openbravo


整个的数据模型。它包括了


Openbravo


ERP


的功能所使用的所有表和字段。




根据应用程序字典中的数据生成了文档。这些图按不同的主功 能模块分成了几个章节。同一


个表可能在不同的章节中出现但具体的描述只出现一次。这 样做是为了强调某一个章节中主


要的表与其他章节中表的关系。例子中展现了所有的关系 但没有代表性的表不会出现在章节


中。






创建存储过程



AD_PInstan ce



AD_PInstance_Para

< br>表



应用程序中调用存储过程都需要在表


AD_PInstance


中注册。表


AD_PIns tance_Para


中存放了


报表和流程窗口中相应的存储过 程的参数的值。





AD_PInstance:



?



AD_PInstance_ID :


表的标识符。




?



AD_Process_ID:< /p>


与在应用程序字典中存放存储过程信息的表


AD_Process


相关联的外


键。




?



Rec ord_ID:


如果在窗口中调用存储过程,这一列存放当前记录的

ID





?



IsProcessing:


存储过程在执行中时这一列为


“Y”


。有些 存储过程会检查相关的存储过程


是否正在运行。




?



AD_ User_ID:


调用存储过程的用户


ID




?



Result:


存放存储过程运行的结果。



?



ErrorMsg:


存放存储过程输出的信息。





AD_PInstance_Para:



?



?



?



?



?



Parametername:


对应于数据库列名的参数名称。




P_String


P_String_TO:


当字段是文本框或列表框时插 入的值。




P_Number



P_Number_TO:


当字段是数字框 或外键时插入的值。




P_Date



P_Date_TO:


当字段是日期 型时插入的值。




Info



Info_TO:



当参数定义为一个范围内的值而不是指定的一个值时用


_TO


的后缀。使用这个参数生成的弹

-


-


-


-


-


-


-


-



本文更新与2021-02-28 13:07,由作者提供,不代表本网站立场,转载请注明出处:https://www.bjmy2z.cn/gaokao/681319.html

OB开发手册中文版的相关文章

  • 爱心与尊严的高中作文题库

    1.关于爱心和尊严的作文八百字 我们不必怀疑富翁的捐助,毕竟普施爱心,善莫大焉,它是一 种美;我们也不必指责苛求受捐者的冷漠的拒绝,因为人总是有尊 严的,这也是一种美。

    小学作文
  • 爱心与尊严高中作文题库

    1.关于爱心和尊严的作文八百字 我们不必怀疑富翁的捐助,毕竟普施爱心,善莫大焉,它是一 种美;我们也不必指责苛求受捐者的冷漠的拒绝,因为人总是有尊 严的,这也是一种美。

    小学作文
  • 爱心与尊重的作文题库

    1.作文关爱与尊重议论文 如果说没有爱就没有教育的话,那么离开了尊重同样也谈不上教育。 因为每一位孩子都渴望得到他人的尊重,尤其是教师的尊重。可是在现实生活中,不时会有

    小学作文
  • 爱心责任100字作文题库

    1.有关爱心,坚持,责任的作文题库各三个 一则150字左右 (要事例) “胜不骄,败不馁”这句话我常听外婆说起。 这句名言的意思是说胜利了抄不骄傲,失败了不气馁。我真正体会到它

    小学作文
  • 爱心责任心的作文题库

    1.有关爱心,坚持,责任的作文题库各三个 一则150字左右 (要事例) “胜不骄,败不馁”这句话我常听外婆说起。 这句名言的意思是说胜利了抄不骄傲,失败了不气馁。我真正体会到它

    小学作文
  • 爱心责任作文题库

    1.有关爱心,坚持,责任的作文题库各三个 一则150字左右 (要事例) “胜不骄,败不馁”这句话我常听外婆说起。 这句名言的意思是说胜利了抄不骄傲,失败了不气馁。我真正体会到它

    小学作文