在很多ABAP开发中,我们使用CSV文件,有时候,关于CSV文件本身的一些问题使人迷惑。它仅仅是一种被逗号分割的文本文档吗?

  让我们先来看看接下来可能要处理的几个相关组件的词汇的语义。

  Separator:两个字段之间的界线,在CSV文件中即是“,”。

  Delimiter:这种符号的开端和结束,代表了某种东西的界限。举个例子“测试字符串”有两个delimiters,即两个双引号。在文本中包含很多逗号的情形下,CSV文件会使用双引号作为Delimiter.

  Terminator : 代表片段的结束。在CSV文件中,我们可以把换行看成terminator.

  如果我们不确定逗号或者双引号是否被允许在数据内出现,请看CSV的说明书:

  假如你想看CSV的全部标准的话,这里是CSV的实际标准

      http://tools.ietf.org/html/rfc4180

CSV格式的定义

  1,  每条记录位于单独的行上,由换行符分隔。

  2,  最后一条记录的换行符可有可无。

  3,  文件的第一行可以有一个可选的头部,其格式与普通行相同。

  4,  在头部和每条记录中,可以存在一个或多个字段,由逗号分割。整个文件中的每行应当包含同样数量的字段。空格被视为字段的一部分,不会被忽略。记录的最后一个字段的后面不可以存在逗号。

  5,  每个字段可以被双引号包围,也可以不这样做。(然而在某些程序中,比如Microsoft Excel, 完全不使用双引号)。如果字段没有被双引号包围,那么双引号不会在字段内部出现。

  6,  字段在包含换行符、双引号和逗号的情况下应当被双引号包围。

  7,  如果双引号被用作包围字段,而字段内部出现的双引号需要通过使用另一对双引号将其包围的方式转义处理。

在我的经验中,第七点是最容易被坑的地方。CSV作为由逗号分隔的值,给人带来了一种印象即逗号是separator并且给出的excel中不含逗号,这样容易造成混淆。

  那么看几个例子:

  基本例子:

  10, Vikas , Sydney

      数据内部有separator / delimiter的:

     "11", "Vikas", "Sydney, AU"      <-- 数据中包含逗号

     "12", "Vikas", "Sydney, "NSW" AU"   <-- 数据包含逗号和双引号

ABAP中的相关操作

  假设我们读取一个文件,这个文件可以从用户的桌面上传或者从服务器端读取。

1)   写下你的代码

  这个在一开始很简单,但随着时间的进行,它可能变得复杂。

  以字符串格式获取数据,使用逗号分割他们:

split lv_data at ',' into lw_struct-test1 lw_struct-test2 lw_struct-test3.

你是UI5Fiori的新手?来对地方了。

对我来说,今年是不得不“跟上时代”去提升自己ABAP世界以外的技术技能的困难的一年。幸运的是,有很多可免费获得的信息和课程可以帮你实现这个跳跃。不要等着别人送你去训练——自己花时间提高技能!

 

学习web技术技能

  了解UI5的基础部分HTML, CSS, Javascript和JQuery是个好主意,有助于你理解自定义的UI5应用的基本特性。如果你对它们不熟悉的话,codecademycodeschool有一系列好的课程,可以帮助你理解这些技术的语法和特性。我建议你按以下路径学习:

  • HTML & CSS(七小时)
  • Javascript(十小时)
  • jQuery(三小时)

  (不喜欢英文的话,天朝也有不少类似网站,比如慕课网——译者注)

  一旦你理解了这些语言的机制,我建议你建立一个个人网站来向你的潜在雇主展示你的技能。也许可以是一个你自己的简历网站?

了解如何使用浏览器调试工具

  如果你花过很多时间在SAP的优秀的ABAP调试器上面,你会想要了解下可以使用的美妙的浏览器调试工具。我稍微偏好谷歌Chrome浏览器开发者工具,尽管如此,这不会影响到你探索下面中的任何一个,如果你工作的环境有多个浏览器的话:

  离开浏览器调试工具,我会活不下去的!

(译者注:Firebug现已逐渐集成到火狐浏览器开发者工具中)

理解RESTful APIs的工作原理

  如果你不熟悉RESTful APIs的基础,这个页面有不错的综述和教程。

上手OData

  1. OData是一种RESTFul协议,它的主页里有一些很值得阅读的信息。
  2. 我建议从下载并安装Chrome扩展Postman上手OData。
  3. 一旦你有了Postman,你就可以学基本OData教程了。
  4. 等你做完了这些,可以上SCN找一些有关如何在SAP Netweaver Gateway system上构建这些的相关指导。

学习git, github, gist和jsbin

  • Git是一个很好的开源代码库,所有SAP开发者都需要把它列在学习列表中。
  • CodeSchool有一些优秀的免费的交互课程,你可以从它们开始。
    1. Try Git
    2. Git Real
    3. Git Real 2

  如果你的把UI5学得不错,感觉有时间回馈社区并且在Github或者JSBin分享你的例子。DJ Adams有篇有关github和gists的好文章:帮我们帮你——分享你的代码

学习SAP Fiori和UI5

  下面的SAP课程非常好,将会让你在Fiori相关主题的各方面快速提高:

阅读UI5开发者工具包中的“Get Started”

  在我的整个UI5之旅中,很多时候在使用谷歌搜索前,UI5开发者工具包便解答了我的疑问。如果你是一个新人,可以通过“Get Started”部分从草稿建立一个app。你将发现随着过程的进行,自己会开始参考各种不同的、对于你来说是全新的陌生章节,如果能坚持住,你会理解它们。

理解Axure的线框模型

重要的参考

  一旦你建立了UI5方面的自信,可以把以下页面存书签,以方便参考!

  • Fiori Design Guidelines-在如何设计UI5应用的最佳实践方面,这是我的圣经。 我不是一个经过训练的设计者、也不是那些已经在网页设计领域研究了这些指导方针多年的专家。有关设计UI5应用的好资源。
  • Experience SAP – SAP的用户体验社区网站,一个教育自己如何设计的好地方。
  • Fiori Application Library - 一个参考技术设置的好网站,也可以借此观察什么样的Fiori应用对你的用户来说是可用的。
  • Fiori Demo - 一个快速了解Fiori应用演示例子的好网站。
  • W3schools - 当你精通了HTML, CSS, Javascript, jQuery——有些时候你需要一个参考去看什么是可行的、或者如何实现某些东西。
  • UI5 Developer Toolkit - UI5开发圣经,每访问一次,我都会提高一次!

  愉快地学习吧,如果你有任何好的资源要分享,请不要拘束,添加在下面的评论里面。

 

本文地址:http://www.cnblogs.com/hhelibeb/p/5810449.html

英文原文:A beginner’s guide to skilling up for SAP Fiori and UI5

转载请注明

 

2018.03.22更新,也可以参考:All Things SAP Fiori

如名所示,该页面整合了有关Fiori的很多重要内容,包含AccessibilitySAP Fiori CloudConfigurationExtensibilityDeveloping Custom Apps等子主题,可以作为参考。

此外SAP出版的图书 SAP Fiori Implementation and Development 也是很好的资料

 

  

  这个(BOL里面)最重要的类值得一看。

  BOL中的每条记录都会在CL_CRM_BOL_ENTIT中表示。至今,我们已经写过一些事件处理器,并且我们已经直接或间接的通过这个类工作。在业务场景中,我们也许会处理合同、订单、线索、确认等等....

  在Web UI层面,所有的这些业务对象信息都可以使用这个类来表示。这是BOL(业务对象层)的灵活性的体现。也许程序中需要用到100个不同的对象,但是我们只使用一个单一的类来表示信息。

  让我们看看调试过程中的数据。

  在搜索页面的search事件处理器中设置一个外部断点。运行应用,并且进行搜索。

 

  一旦断点触发,双击lr_result,点击F6以运行第14行。这是拥有所有记录的集合:

 

  双击右侧的lr_result。这是包含ENTITY LIST的集合类,ENTITY LIST存储了记录,双击它。

 

  可以看到对象引用列表,每一个引用都是CL_CRM_BOL_ENTITY类型。

  这个集合拥有10条记录。双击任意一个记录,我们可以看到如图示的CONTAINER PROXY属性,双击它。

  你可以看到DATA_REF属性,双击它。你将得到如下的屏幕,双击高亮区域。

  在下一个屏幕,我们可以观察到名为BTQRSrvcoon的对象。这有一个属性ATTRIBUTE_REF,双击它。

  现在我们可以看到数据了。

  我们需要经过几个屏幕来观察到数据。过程如上。

  CL_CRM_BOL_ENTITY->CONTAINER_PROXY->DATA_REF->ATTRIBUTE_REF.

  这是从任一CL_CRM_BOL_ENTITY对象中观察到数据的方法。

 

原文地址:LOOKING AT DATA OF CL CRM BOL ENTITY IN DEBUGGING

本文地址:http://www.cnblogs.com/hhelibeb/p/5983816.html

更多参考:如何在debugger里访问BOL core instance和其他重要entity的信息

网络上可以找到一些使用BOL查询、维护数据的DEMO,但几乎都是单纯的代码,缺乏说明,难以理解。本文除了代码外,还给出了详细的注释,有助于理解BOL编程中的一些基本概念。

这是一篇翻译的文章,你可能会发现部分内容不是很明确,这时可以直接阅读原文。

原文所在的sapcrmwebui.com是一个不错的博客,里面有较为完整的Web UI入门教程,然而网站不是很稳定,偶尔会连接不上,建议使用Internet Archive访问。

如果你访问不了Internet Archive,说明你需要一点过墙的手段。

 

 本文链接:http://www.cnblogs.com/hhelibeb/p/5985110.html 

 原文链接:BASICS OF BOL PROGRAMMING

如果觉得本文有用,请记得在页面底部点个赞~

 

2016.12.31 更多示例代码请参考:BOL Programming(WebUI), AbapLog

搜索操作

***********************************************BOL 编程*SAP CRM WEBCLIENT*包含一些基本的操作,比如bol中的查找、创建、更新*通过编程来介绍业务对象层的主要的类和方法**********************************************

*需要的数据
DATA: lr_core TYPE REF TOcl_crm_bol_core.*为了使用BOL中的服务,我们需要通过CORE类启动模型(组件集)
lr_core= cl_crm_bol_core=>get_instance( ).*一旦我们有了实例,之后便可以加载组件集*这里我们将使用ONEORDER组件集

*在Web UI上面,这个将会由框架操作。这里我们正在report程序中编程,因此需要自己来操作


TRY.CALL METHOD lr_core->load_component_setEXPORTINGiv_component_set_name= 'ONEORDER'.CATCHcx_crm_genil_general_error .ENDTRY.*组件加载了,因此我们可以使用BOL服务。让我们搜索一个特定的合同。为了实现这个目的,我们需要获取一个dquery服务对象的实例。
DATA: lr_query TYPE REF TOcl_crm_bol_dquery_service,
lr_result
TYPE REF TOcl_crm_bol_bo_col.*****搜索操作*********************** "获取动态搜索对象的实例,它会被用于搜索服务合同。 lr_query ?= cl_crm_bol_dquery_service=>get_instance( iv_query_name = 'BTQSrvCon')."每一个动态搜索对象将会有他自己的结果类型对象,这里BTQSrvcon的结果对象是BTQRSrvcon"因此在结果列表里面,所有的对象都是BTQRSrvcon的类型。 "我们得到了实例,之后我们需要设置选择条件值,取得所有描述是‘testing’的合同。"你可以多次使用这个方法,来添加不同的选择参数。 lr_query->add_selection_param( iv_attr_name = 'DESCRIPTION'iv_sign= 'I'iv_option= 'EQ'iv_low= 'testing')."获取以集合(collection)形式存在的的、匹配选择条件值的合同列表 "集合不过是一个保存记录的容器,我们可以把它和内表相类比 "它保存了记录. lr_result ?= lr_query->get_query_result( )."让我们输出集合中所有的合同ID和描述 "cl_crm_bol_entity用于表现业务对象层中的记录 DATA: lr_entity TYPE REF TOcl_crm_bol_entity,
lv_objectid
TYPE string,
lv_descr
TYPEchar40."读取集合中的第一条记录 lr_entity ?= lr_result->if_bol_bo_col~get_first( )."下面的while循环机制用于访问集合中的每一条数据 WHILE lr_entity ISBOUND."读取合同ID. "get property as string方法将返回字符串格式的属性,因此我们将lv_object声明为字符串。 lr_entity->get_property_as_string( EXPORTING iv_attr_name = 'OBJECT_ID'RECEIVING rv_result=lv_objectid )."get property as value将返回值本身的类型,因此我们使用数据元素来声明DESCRIPTION lr_entity->get_property_as_value( EXPORTING iv_attr_name = 'DESCRIPTION' IMPORTING ev_result =lv_descr ).WRITE: lv_objectid, lv_descr.WRITE /:."读取集合中的下一条数据. lr_entity ?= lr_result->if_bol_bo_col~get_next( ).ENDWHILE.

  多数情况下,在Web UI为一个特定的字段提供搜索帮助需要在事务SE11中创建搜索帮助。

  (注:也可以通过在SE24中创建一个类并实现实现IF_BSP_WD_CUSTOM_F4_CALLBACK接口来提供搜索帮助。)

  让我们首先在SE11中创建搜索帮助。

  前往事务SE11,创建搜索帮助,输入下图中展示的值。这里我们想要在搜索视图提供一个用于合作伙伴功能字段的搜索帮助。

  

  

  Selection method是值所在的表名。激活搜索帮助。

  前往用户界面组件工作台中需要提供搜索帮助的字段。这里我们想要为搜索视图汇总的PARTNER FUNCTION字段提供F4搜索帮助。

  展开这个字段,生成v-GETTER方法。

  

 

  方法生成后,复制粘贴下图中的代码。

  

 

  为了开发者的便利,SAP提供了标准类CL_BSP_WD_VALUEHELP_F4DESCR。我们只需要使用某些信息来创建一个该类的实例(以提供搜索帮助)。

  1. Help id: 在SE11中创建过的搜索帮助ID。
  2. Input mapping: 提供上下文节点属性和搜索帮助属性之间的映射。这里我们为PARTNER FUNCTION字段提供了F4帮助。在第9行,我们已经将‘STRUCT.PARTNER_FCT’ 赋给了input mapping的CONTEXT_ATTR。在下一行,我们将其映射到SE11搜索帮助中的 ‘PARTNER_FCT’。
  3. Output mapping: 一旦用户选择了F4帮助中的值,我们需要将选择的值返回给相应字段。这个信息将会由output mapping给出。在14行和15行,我们已经通过告诉框架从‘PARTNER_FCT’传递值给上下文节点中的属性‘STRUCT.PARTNER_FCT’

  激活方法并且测试应用。

  

  我们可以看到图上方有两个字段, partner function, 搜索条目文本(text)。这些字段出现在这里是因为我们在SE11中创建搜索帮助时在SPos字段填写了‘1‘和’2’。如果使此列空白,则不会出现这些字段。

  选择任意值,该值会被自动地传递到partner function字段。

  我们可以通过发送如下的参数来设定搜索结果的初始限制值:

  '\''Z*\'''

  注释掉第9行的‘STRUCTU.PARTNER_FCT’ ,取消上面的代码的注释。激活方法,测试应用。这时你的F4将会变成下面展示的样子,所有以Z开头的条目将会被默认搜索到。

  

 

本文链接:http://www.cnblogs.com/hhelibeb/p/6000412.html

原文链接:PROVIDING F4 HELP