SAP CRM BOL编程基础,代码+详细注释
网络上可以找到一些使用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_resultTYPE 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_objectidTYPE string,
lv_descrTYPEchar40."读取集合中的第一条记录 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.
SAP CRM 在Web UI中创建搜索帮助
多数情况下,在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。我们只需要使用某些信息来创建一个该类的实例(以提供搜索帮助)。
- Help id: 在SE11中创建过的搜索帮助ID。
- Input mapping: 提供上下文节点属性和搜索帮助属性之间的映射。这里我们为PARTNER FUNCTION字段提供了F4帮助。在第9行,我们已经将‘STRUCT.PARTNER_FCT’ 赋给了input mapping的CONTEXT_ATTR。在下一行,我们将其映射到SE11搜索帮助中的 ‘PARTNER_FCT’。
- 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
SAP CRM 复用视图
在设计任何视图或组件的时候,我们需要以可复用的方式来设计它。UI组件设计的主要目标即可复用。
例如:几乎每个事务都要处理合作伙伴(客户)。如果我们想要在Web UI显示那些合作伙伴,需要设计一个视图。我们将不会为服务合同设计一个单独的合作伙伴视图、为服务订单设计一个、为服务确认设计一个、再为机会设计一个。
相反,我们应该做的是,设计一个视图,并且在不同的事务中复用它。
为了使视图可复用,我们需要做一些步骤。
首先,我们需要把视图设计为可以从外部获取数据的形式。
第二,我们需要把视图分配给一个窗口。
第三,窗口应当暴露在运行时资源库中的接口视图(InterfaceView)部分。
第四,需要的组件控制器的上下文节点应暴露在ComponentInterface->InterfaceController->Context。
之后我们可以通过创建组件用法(Component Usages)在任意组件复用这个视图。
让我们通过一个练习例子一一地在细节上讨论所有要点。在本文的最后一节,我们将尝试复用组件BTPARTNER中的一个视图 ‘PARTNER’。
1,视图必须可以从外部获取数据
通常的外部数据(从另一个UI组件中而来的),提供给组件控制器的上下文节点。因此,应当在组件控制器的上下文节点和视图的上下文节点之间创建绑定。并不需要直接地绑定,我们只需要确保从组件控制器上下文节点到我们希望复用的视图的上下文节点的数据流。
可以看到视图PARTNER中的BTPARTNERSET上下文节点被绑定给了组件控制器的上下文节点。
2,将视图分配给窗口
视图应该被分配给一个窗口。之后,窗口会在运行时资源库中被暴露为一个组件的接口视图。
前往运行时资源库。
Partner视图被分配给了窗口。我们可以在这里添加其它窗口,并让每个窗口都有一个分配给它的视图,让每一个视图都成为可复用的单元。
3,窗口应当暴露为接口视图
前往运行时资源库->ComponentInterface。添加窗口PartnerList,使之成为一个接口视图。
4,组件控制器节点
需要的组件控制器的上下文节点应暴露在ComponentInterface->InterfaceController->Context。
上下文节点BTPARTNERSET已经暴露在这个项。将一个上下文节点暴露在这个项会使其可以被不同的UI组件的其它上下文节点所绑定。我们可以使用一个特殊的组件控制器方法WD USAGE INITIALIZ来绑定不同UI组件的上下文节点。
可以开始在我们自己的组件中复用这个视图了。接下来是在其它组件的操作。
在另一个组件中复用视图
前往组件->运行时资源库并且创建一个组件用法。点击编辑按钮,右击ComponentUsage,选择选项Add Component Usage.
在出现的对话框中,为组件用法(Component Usage)和我们希望复用的接口视图(InterfaceView)命名。
内容输入后,选择继续。现在这个接口视图会在你自己的组件中作为视图存在。
把这个视图添加给OverviewPage概览页.
保存运行时资源库。前往OverviewPage的配置标签页,添加新的视图以显示分配对象展示区(Assignment block)。
现在我们需要注意数据。在先前的操作中,我们知道组件BTPARTNER中有一个上下文节点BTPARTNERSET。因此我们将在我们自己的组件控制器中创建一个新的、相同的上下文节点。
前往组件控制器并且创建使用基本实体(base entity)BTPartnerSet创建一个上下文节点。
为基本实体命名,完成向导。
我们已经创建了上下文节点。接下来我们需要把数据交给这个上下文节点。
无法通过配置来实现,让我们用代码来做它。
如我们所知,在结果视图的事件处理器(用户点击超链接时触发),我们获取了BTAdminh实体。我们将从它获取相关的BTPARTNER SET并且将其提供给组件控制器的上下文节点。
按照下图修改事件处理器。保存并激活之。
(这只是针对以上情景进行代码修改的部分,前面的代码保留原样。)
一旦我们获取了BTAdminh的头实体,我们使用关系获取它的相关实体BTPARTBERSET。获取相关记录后我们将其添加到集合(collection)中,这个集合会被提供给组件控制器的上下文节点。
向组件控制器提供数据完成。一件更重要的事是将你的组件控制器的上下文节点和BTPARTNER组件的上下文节点绑定。像上面说过的那样,我们将使用方法WD USAGE INITIALIZE来做这件工作。
前往组件控制器并且重新定义上面提到的方法。
重定义后,双击方法打开它,写下如下代码并激活。
在不同的组件的上下文节点间分析数据的工作就这样完成了。
测试该应用,如果服务合同有任何合作伙伴,数据将显示在合作伙伴的分配对象展示区中。
本文链接:http://www.cnblogs.com/hhelibeb/p/6000833.html
原文链接:WHAT IT TAKES TO REUSE A VIEW
SAP CRM 自定义控制器与数据绑定
当用户从视图离开时,视图将失去它的数据。解决这个问题,需要引入自定义控制器(Custom Controller)(译者注:SAP CRM自定义端中,不同地方的Custom Controller会翻译为“自定义控制器”、“自定义控制器”、“海关控制器”三种结果。这当中显然存在问题。下文如提到“自定义控制器”、“海关控制器”云云,均是按SAP GUI自定义端中相应位置的汉化为准,读者可视为同一词)。
我们将相同类型的上下文节点添加给自定义控制器,并且对自定义控制器上下文节点和需要的视图的上下文节点进行数据绑定。
在我们的例子中,我们将遵循以下逻辑,来让数据在不同的视图的上下文节点之间流动。
- 在搜索事件处理器中获取数据。
- 获取自定义控制器的实例,并且把我们获得的数据交给它的上下文节点。
- 在结果视图上下文节点。
让我们首先创建自定义控制器。
前往用户界面组件控制台-组件结构浏览器。右击自定义控制器,选择“创建”选项。
为它赋一个前缀“Cuco”的名字,比如CuCoSearch. Cuco代表Custom Controller.
下一步,将上下文节点命名为result,实体名填入BTQRSrvCon,因为我们将会把这个节点和结果视图上下文节点绑定。
绑定的上下文节点,应有相同的实体。
点击继续按钮,完成向导,并且保存实体。我们已经成功地创建了自定义控制器。
下一步,我们将绑定两个节点。前往result视图,右击result上下文节点,并且选择“创建绑定”选项。
在出现的弹出框中,选择组件类型为“自定义控制器”(当然,还是Custom Controller)作为我们要将数据绑定给result视图的控制器。
选择CuCosearch填入自定义控制器项中,接着选择result上下文节点,并且点击对号。就这样,我们完成了绑定。
一旦上面的步骤完成,我们就可以在这里观察绑定:
圈出部分说明自定义控制器的结果上下文节点绑定了result视图的结果上下文节点。
下一步我们将为search事件处理器添加一小部分代码,以获取自定义控制器实例,并且把已获取的数据交给它。
前往搜索视图的search事件处理器,添加如下代码。
在第16行,我们使用了方法get_custom_controller,通过名字获取自定义控制器的实例。
我们把返回数据lr_data交给自定义控制器的上下文节点result.
测试应用,点击搜索按钮,会展现出某些服务合同。我们的搜索页现在可以工作了。
SAP CRM 显示消息/在消息中进行导航
向用户展示消息,在任何软件中都是十分重要的。
在SAP CRM WEB UI中展示消息,不是一项很难的任务,只需要创建消息并在之后调用方法来显示它
消息类和消息号:
我在SE91中创建了如下的消息类和消息号。
我们需要在合适的地方写代码以在Web UI中显示消息。这里我就在DO PREPARE OUTPUT方法放置代码了。
cl_bsp_wd_message_service用于在Web UI中显示消息。在上面的代码中,我们获取了一个消息服务的实例,接着调用它的ADD_MESSAGE方法并传入消息号id 消息号和消息类型。
消息类型指出了消息的种类:E是错误,S是成功,W是警告,I则是信息。
所有的E类型会显示为红色,所有的W类型会显示为黄色。
这是我运行应用后获取的输出结果。
长文本:
有时,我们也许想要随着错误提示展示更多的信息。在这种情况下,需要为消息类中的消息维护长文本。
在消息的长文本得到维护后,框架会自动地在消息后面显示一个名为“DETAILS”的链接条。如果用户点击,他会被得到一个带有详细信息的弹出框。
前往消息类,维护长文本。别忘记关闭弹出框的自我解释。
保存,运行应用。
可导航的消息:
在上面的部分,我们已经创建了简单的消息。有些时候,我们不得不执行某些特定的行为,来处理错误消息。
比如,点击错误消息,用户会被导航到某些其它屏幕上面,或者触发某些特定的代码。
在下面这个例子中我将展示如何在点击消息栏中的消息导航到另一个视图中。
我已经创建了两个视图,制作了一个从源视图到目标视图的导航链接,并且把两个视图都分配给了窗口。源视图为默认视图,因此在显示窗口时,源视图会首先显示。请看下面的截图:
第一步,我们需要添加一个接口“IF_BSP_WD_MESSAGE_HANDLER”在你的视图实现类里面,如果它不是可用的。
添加后,激活类。
接下来,我们需要把消息订阅到全局消息服务。我在DO PREPARE OUTPUT中写下了如下代码:
首先使用subscribe message方法来订阅消息,之后让消息在Web UI中可见。保存并激活方法。
如果你现在测试应用,可以看到消息将显示为超链接。
无论何时,当用户点击超链接,IF_BSP_WD_MESSAGE_HANDLER~HANDLE_MESSAGE会触发。我们需要在该方法中写代码。
前往视图实现类,添加如下代码。
在这个方法中,我简单地触发了导航,把导航链接的值作为参数传递给外向插件。
测试应用。
点击消息,你就可以导航到目标视图了。
本文链接:http://www.cnblogs.com/hhelibeb/p/6019699.html
原文链接:DISPLAYING MESSAGES