分类 SAP 下的文章

最近在修改已有的Fiori应用,遇到了缓存上的一点问题,导致对Fiori应用的代码修改不能在前端页面生效。现将自己查到的一篇好资料翻译过来,以供参考。以下为正文。

2017.12.19更新:最近又遇到个问题,打开某应用时,提示“应用打开失败,请稍后再试(fiori could not open app. try again later)”,可以通过/UI2/INVALIDATE_GLOBAL_CACHES来解决。

 

我们知道,大部分情况下SAP Fiori安装在本地,使用企业的基础网络设施,经常会遇到网络延迟,特别是在复杂和分布式的场景下。

为了克服这些问题,SAP Fiori拥有以下缓存层:

  • SAP后端系统缓存——通常是OData服务相关的缓存
  • SAP Netweaver Gateway 缓存——OData服务,BSP应用和Fiori配置缓存
  • SAP Fiori客户端/Web浏览器缓存——用户终端设备上的缓存

 

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

英文原文:Clear SAP Fiori Cache

什么情况下我需要清除SAP Fiori缓存?

 

通常SAP Fiori缓存应该在它的配置、OData服务、Fiori BSP应用和主题发生修改时,或者应用了补丁/SAP notes时清空。在你遇到Fiori应用的陌生问题时,刷新缓存也是一个不错的故障定位方式。

清除缓存的步骤

1,清除后端缓存

为每个后端系统运行事务代码 /IWBEP/CACHE_CLEANUP (SAP ERP, CRM等)。

选择复选框"Cleanup Cache in all models"

2,清除SAP Gateway缓存

2.1 如果某些和主题相关的东西或系统发生了修改,需要重建客户主题、并且清除主题缓存。

  • 在SAP Gateway URL中使用你的主题设计器重建主题,URL是:
    https://<Your GW Server Host:Port>/sap/bc/theming/theme-designer/
    选择客户主题,点击rebuild。

  • 通过在你的SAP Gateway系统中运行事务代码 /ui5/theme_tool 来清空Fiori主题缓存。双击[Invalidate Cache]按钮。

2.2 运行事务代码  /IWBEP/CACHE_CLEANUP

选择复选框 "Cleanup Cache in all models"

2.3 运行事务代码  /IWFND/CACHE_CLEANUP (注意和2.2有区别)

2.4 运行以下报表

  • /UI2/INVALIDATE_GLOBAL_CACHES - 选择运行模式
  • /UI2/CHIP_SYNCHRONIZE_CACHE
  • /UI2/DELETE_CACHE_AFTER_IMP
  • /UI2/INVALIDATE_CLIENT_CACHES - 选择“所有用户”
  • /UI5/UPDATE_CACHEBUSTER

2.5 运行事务代码 SMICM。在菜单选择 转到——HTTP插件——服务器缓存——使全局无效。

3,清除反向代理缓存(如有)

如果有的话,你需要清除反向代理缓存。通常它是 SAP Web Dispatcher,不过也可能是其它的产品。

4,清除客户端缓存

如果SAP UI5 Cache buster的设置正确,是不需要做额外操作的。如果不是正确设置过的话,你才需要手动清除浏览器或者Fiori客户端里的缓存。

 

参考文章:SAP Fiori – Cache Management

 

引言

  ABAP是一种和当代编程语言在许多方面有着相当不同的编程语言。ABAP的某些方面可能会让我们奇怪,为什么它会如此复杂?而它的某些方面又是那么杰出,给予了ABAP开发者们比其它任何语言更多的便利。

  我发现有两样东西太cool了:

  • 朴实的IDE(ABAP Editor)以及
  • 酷炫的调试器

  尽管SAP的IDE不支持某些更加有名的IDE(比如Eclipse)的一些特点,我依然发现在ABAP Editor中写代码要比其它IDE舒服太多。原因在于以下的快捷键以及它的可定制性。我会列出一些我常用的功能清单,如果没了它们,我可能就没办法写ABAP代码了。

2017.01.09更新:如果你发现某个快捷键不可用,那么很可能是热键冲突的原因。比如,在Windows 7下,QQ输入法和解除注释快捷键是冲突的。

大部分ABAP程序员甚至只有一点ABAP经验的人可能已经了解下面清单的部分内容了。如果你是这样的话,请忽略它们。如果你不是的话,那这部分就是为你准备的。

快捷键

 快捷键

效果

  Ctrl + D

复制行.

例子  i_vbap TYPE STANDARD TABLE OF vbap + Ctrl-D = i_vbap TYPE STANDARD TABLE OF vbap
i_vbap TYPE STANDARD TABLE OF vbap

  Ctrl + /

跳转到左上角我们输入T-CODE的输入框。这个真的很方便,省去了从键盘切换到鼠标的时间,有的时候你切换键盘和鼠标再回到键盘仅仅是为了点击这个输入框

  Ctrl + J

将每个单词的首字母转换为大写,写注释的时候十分有用。

例子:  * this is a comment which will give absolutely no useful information 将转换为
* This Is A Comment Which Will Give Absolutely No Useful Information

  Ctrl + I  &
  Ctrl + Shift + I

增量搜索。 这是查找(Ctrl + F) 功能的一个小小增强,可以在你键入的同时搜索,对没耐心的人来说很有用                                            加上Shift反向搜索

  Ctrl + K

大小写切换.

  Alt + 选择

在你指向选择表中某些字段的情况下,自动选择是一个很有用的功能。

例子:

caufv-aufnr,

caufv-werks,

caufv-objnr,

caufv-plnbez,

caufv-gamng,

caufv-gasmg,

caufv-gmein,

caufv-plnnr,

caufv-plnal,

caufv-dispo,

caufv-fevor,

caufv-cy_seqnr ,

caufv-aufpl,

caufv-gstrp,

caufv-gltrp,

caufv-gstrs,

caufv-gltrs,

caufv-gstri,

caufv-gltri,

 

你可以按住ALT键来把下面的值选中并复制到剪切板中(类似Ctrl+Y)

 

aufnr,

werks,

objnr,

plnbez,

gamng,

gasmg,

gmein,

plnnr,

plnal,

dispo,

fevor,

cy_seqnr ,

aufpl,

gstrp,

gltrp,

gstrs,

gltrs,

gstri,

gltri,

  Tab & Shift tab

增加和删除缩进

  Ctrl + O

前往程序的某一行

  Ctrl + Shift + S

把当前文件以ABAP格式保存到桌面上,因为学会了这个快捷键,我才了解到.abap格式的存在

  Ctrl + Selection

当你按住Ctrl选择 **** + -> or <- 的时候,可以选取到符号左侧或者右侧的单词

  Ctrl + . & Ctrl + ,

注释和解除注释

  Ctrl+Alt+T

交换当前行与上一行的位置。(译者注:个人测试未成功)
例子: INCLUDE ZTEST_ABAP_HTTP_CLIENT_TOP.
     INCLUDE ZTEST_ABAP_HTTP_CLIENT_C01. 变为


INCLUDE ZTEST_ABAP_HTTP_CLIENT_C01.
INCLUDE ZTEST_ABAP_HTTP_CLIENT_TOP.
  Ctrl+Shift+L/X 删除整行
  Ctrl + ] & Ctrl + [ 跳转到上一个段落、下一个段落

 




















































段落是用句子间留空行的方式创建的
 Ctrl + Shift + Num8 &
 Ctrl + Shift + Num2

在编辑器中以行为单位上下移动,光标位置不随之改变

 

 

这个和Page Up & Page Down相似,只是每次移动的是行而不是整页

 Ctrl + Spacebar

显示补全选项列表(译者注:可能和输入法冲突)

 

例子: 输入CREATE之后,按 Ctrl + Spacebar将会显示一个列表让你选择DATA或者OBJECT

Ctrl + U/L              

转换为大写/小写

更多编辑器工具

 除了这个,还有一些其它东西可以在编辑器选项中设置。 

代码模板

代码模板选项

 

  这里我使用了一个文本模板。它可以用在标记修改、或者定义以及实现本地类的情况,等等。

 * Begin of Insertion <SID>K12345 <username>
* End of Insertion   <SID>K12345  <username>

  当我在编辑器输入i*的时候,它可以提示代码的补全...

i->Insert

  当我点击tab补全的时候,弹出了TR号对话框

Enter template Parameter

  我们给出的TR号将会被添加到注释中。

变量名补全

  这是一个小小的设置,但是它会将你从不停地复制粘贴/重复输入各种小单词的繁琐中拯救出来。

suggestion

  当你选中这个选项之后,他会提示你每一个变量名比如...

lwa->lwa_reference

  在长变量名的情况下特别有用。

  如果你使用的编辑器是ADT(Eclipse)的话,在Window->Preferences中更改相关选项:

 

结论

  除了编辑器和调试器功能,导航和使用位置列表(where used-list)也是我们经常使用的功能。由于这些特性,代码维护和支持的工作变得相对而言不那么繁重了。

  另一个比较cool的地方是可以使用API来拓展核心编辑器的功能,这使得应用开发者也可以使用代码自定义编辑器特征。因为任何第三方开发者都有可能借此产生有关编辑器拓展的好主意,SAP方面也能由此得到有创意的东西。

  就我目前的探索情况,我还没有发现任何BADI或者类可以用于执行编辑器功能,也许我应该多找找或者再等等。

 

更新:这篇博文得到的反响感动了我,让我去更深入地挖掘这个主题,之后我遇到了这个:

编程快捷键——极客风格

  大部分列出的快捷键和没列出的快捷键可以在SAP-GUI编辑器选项中查看。

  还是那样,点击编辑器界面右下角的编辑器选项按钮,

 

   

  然后如图选择键盘选项...

     Keyboard

  现在,大部分快捷键都在上面的清单中列出来了。

  我们可以按自己的意愿重新分配任何快捷键。

 

  也有些没有默认分配快捷键的cool功能,Copy Append就是其中之一,很有用,而且未分配。

      CopyAppend

  现在,根据新设置,按Ctrl+Alt+C,我就可以将内容追加到剪切板了。

  例子:

     data

+ Ctrl + Alt + C

+key=

    result

  相似地,你可以设置Cut Append,跳转到书签,格式化选择文本等等..

自动完成

记不住难记的德文字段名?自动完成功能可以帮助你。(实践上不太好用,不如eclipse)

设置位置:

 

ADT中的多彩高亮

有点厌倦了万年不变的蓝色黑色代码?如果你使用的是ADT编辑器,可以使用Window->Preferences中的相关设置来把关键字变得五颜六色。(本节内容系译者自行添加)

 

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

 英文原文:Shortcuts that can make an ABAP'er life easier

 转载请注明

 

前文:

SAP Adobe Form 教程一 简单示例

SAP Adobe Form 教程二 表

SAP Adobe Form 教程三 日期,时间,floating field

SAP Adobe Form 教程四 动态隐藏和显示字段

SAP Adobe Form 教程五 图片

SAP Adobe Form 几种文本类型

 

在本文中,我们将演示在FormCalc中使用SUM,然后在SAP Adobe forms中使用JavaScript动态更改文本样式。

使用脚本的主要优点是,我们可以改进功能,并且可以在运行期间动态地控制表单。

SAP Adobe Form 支持2种脚本语言:

  •     FormCalc
  •     JavaScript

这两种脚本语言各有优缺点,可以根据需要决定使用哪种。本文将提供两种脚本语言的一些常见业务场景。

注意,之前已经有一篇涉及Javascript的文章,可以参考:SAP Adobe Form 教程四 动态隐藏和显示字段

 

本文链接:https://www.cnblogs.com/hhelibeb/p/15522710.html

原文标题:SAP Adobe Form Tutorial. Part XVI. Practical Use Case of FormCalc and JavaScript

 

前提

  • SAP Adobe Form的table相关的基础知识
  • 对JavaScript和FormCalc基本功能的了解
  • ABAP编码能力

业务需求

1. 在发送给客户的详细报表中,我们希望在所有行项目末尾显示总金额和总单位小计。

2. 在语句的描述部分,我们希望以粗体和不同的样式显示层次结构的标题产品,以便很容易在整个语句中识别标题产品。

解决方案

我们需要创建一个Adobe Form和与全局数据的interface。我们将在interface的“code initialization”中的全局数据内表中添加一些测试数据,然后将这些全局内表与adobe form layout中的UI表绑定。

另外,我们还可以通过在驱动程序中编写处理逻辑并将所需的内部表作为adobe form的导入参数传递来实现这一点。因为这个博客更多的是关于脚本的使用,所以没有考虑数据处理的最佳方法。

步骤

1,在事务代码SFP创建interface ZPB_TEST_SCRIPTS。

2,创建2个全局变量内表,details和descriptions。

 

3,表类型ZPB_TEST_DESCR、ZPB_TEST_DETAILS的结构如下,

4,前往code initialization,为内表填入测试数据,

 

 

5,前往事务SFP,创建新form,添加interface ZPB_TEST_SCRIPTS。

6,拖放全局变量到context。

 

7,前往Layout用这两个全局变量创建表格。

a, 前往Data View,

 

b,选择GT_DETAILS,拖放到Layout的Detail页,

c,你会看到表格自动创建,并绑定了GT_DETAILS。

 

 

d,为小计创建页脚行。前往Hierarchy,展开GT_DETAILS,在DATA后创建一个新的行。前往新行的Object,变更行类型为Footer。

 

请注意,如果我们使用“表格助手”创建表格,则会自动创建页脚。因为前往是通过Data View创建的表格,所以必须手动创建页脚。

下一步是写Formcalc脚本的步骤。

8, 在“NET_UNITS”下的页脚中选择文本字段,然后转到脚本编辑器,

 

9,现在转到“Show Events”下拉列表,你会发现所有事件都显示为灰色。为什么?

 

这是因为对于少数UI元素类型,不允许编写脚本,这就是为什么所有事件都仅处于显示模式。要启用事件并编写脚本逻辑,我们需要将UI元素的类型从“Text”更改为“Text Field”。

10,修改NET UNITS和TOTAL ROYALTIES的页脚字段为“Text Field”。

 

 

可以注意到,对于上面高亮显示的字段,边框颜色已更改为红色,而对于其他字段,边框颜色仍为蓝色。颜色是标识文本用户界面或文本字段用户界面的指示器

接着,重复步骤8和9,选择合适的事件来编写脚本。

需求是求和、显示小计。

11,选择Calculate事件,语言选择为Formcalc。

 

写入SUM代码。sum (DATA[*].NET_UNITS)

 

12,创建一个测试驱动程序以生成结果pdf(请参阅以前的博客以创建用于测试Adobe forms的驱动程序),并生成一个包含小计的pdf:

 

通过使用FormCalc本的一个求和函数,我们可以在Adobe forms中计算表中行项目的和,不需要使用任何ABAP逻辑。

FormCalc文档:https://helpx.adobe.com/pdf/aem-forms/6-2/formcalc-reference.pdf

JS的使用例子

13,重复步骤7的a-c部分,在Data View为description创建另一个表,使用全局变量GT_DESCRIPTION。

 

还记得另一个业务需求吗?我们需要在运行期间根据粗体/斜体设置将描述字段中的标题产品设置为粗体,并使用不同的文本样式和项目设置为斜体。

14,在Hierarchy中选择GT_DESCRIPTION的DATA行,前往脚本编辑器。

 

 

15,选择“form : ready”事件,语言为Javascript,写入代码,

 

 代码如下,

 

输出结果,

 

前文:

SAP Adobe Form 教程一 简单示例

SAP Adobe Form 教程二 表

SAP Adobe Form 教程三 日期,时间,floating field

SAP Adobe Form 教程四 动态隐藏和显示字段

SAP Adobe Form 教程五 图片

 

Adobe Form中可选的文本类型分为3种,如下图,

 

1. Text Module

可以在事务Smartforms中创建Text Module。它是全局文本。我们可以在Smartform和Adobe Form中使用它。


2. Include text

又叫Standard Texts,通过事务代码SO10创建,它也是全局文本,可以在Smartform和Adobe Form中使用。和Text Module的区别在于,Text Module只能用于Smartform和Adobe Form,Include text还可以在script中使用。


3. Dynamic text

Dynamic text支持输出类型为TSFTEXT的内表,它的结构包含TDFORMAT和TDLINE这两个字段。处理过长文本的话应该会对它很熟悉,

 

本文链接:https://www.cnblogs.com/hhelibeb/p/15516120.html

参考:

SAP Adobe Interactive Form Tutorial. Part IX. Displaying Dynamic Text in Adobe Forms

the difference between Standard Text and text module

 

前文:

SAP Adobe Form 教程一 简单示例

SAP Adobe Form 教程二 表

SAP Adobe Form 教程三 日期,时间,floating field

SAP Adobe Form 教程四 动态隐藏和显示字段

 

原文标题:SAP Adobe Interactive Form Tutorial. Part V. Images, Graphics and Logo in Adobe Forms

本文链接:https://www.cnblogs.com/hhelibeb/p/15512978.html

前提:需要通过SE78上传图片。

 

上传完成后,请检查确认图片已经在系统中存在,

 

 

创建interface。

事务代码SFP,

 

 在interface中添加一个IV_LOGO参数,类型为XSTRING,

 

 

创建form,

 

拖放参数IV_LOGO到Context,

 

 

在Context的YRAM_ADOBE_FORM5右击,并且选择create->graphic.

 

 

下一步很重要:把Graphic type从Graphic Reference改为Graphic content。

 

 

 

输入字段名IV_LOGO,选择MIME TYPE为‘IMAGE/BMP’.

 

保存,并前往Layout的Data View标签页。拖放Graphic到layout。

 

可以根据需要拉伸或压缩图片。可能需要删除图片标题,即默认图像字段文本。

 

出于演示目的,我在图片下方添加了另一个文本元素。

检查、保存和激活。

带有图形和表单界面的Layout已经完成。 注意到了吗,我们的Layout中有两个元素。图片字段和图形内容。 相当于变量名和实际内容。

调用adobe form的驱动程序,

1 *&---------------------------------------------------------------------*
2 *======================================================================*
3 *YRAM_ADOBE_FORM_PROGRAM5 *
4 *======================================================================*
5 *Project : SAP Adobe Forms Tutorial *
6 *Author : Ramanjula Naidu DARURU (www.SAPYard.com) *
7 *Description : Printing a logo in the adobe form *
8 *======================================================================*
9 REPORTyram_adobe_form_program5.10 
11 *======================================================================*
12 *Selection Screen
13 *======================================================================*
14 PARAMETERS : p_logo TYPE rstxt-tdname.15 *======================================================================*
16 *Data Objects
17 *======================================================================*
18 
19 DATA: gv_fm_name TYPE rs38l_fnam, "FM Name
20 gs_fp_docparams TYPEsfpdocparams,21 gs_fp_outputparams TYPEsfpoutputparams,22 gv_name TYPEtdobname,23 gv_logo TYPExstring ,24 gv_bmp TYPExstring.25 *======================================================================*
26 *Constants
27 *======================================================================*
28 CONSTANTS : gc_btype TYPE tdbtype VALUE 'BCOL',29 gc_id TYPE tdidgr VALUE 'BMAP',30 gc_object TYPE tdobjectgr VALUE 'GRAPHICS',31 gv_form_name TYPE fpname VALUE 'YRAM_ADOBE_FORM5'.32 
33 *======================================================================*
34 *START of Calling the Form
35 *======================================================================*
36 *&---------------------------------------------------------------------*
37 **&&~~ Form Processing: Call Form - Open
38 *39 CALL FUNCTION 'FP_JOB_OPEN'
40 CHANGING
41 ie_outputparams =gs_fp_outputparams42 EXCEPTIONS
43 cancel = 1
44 usage_error = 2
45 system_error = 3
46 internal_error = 4
47 OTHERS = 5.48 IF sy-subrc <> 0.49 "Suitable Error Handling
50 ENDIF.51 *&---------------------------------------------------------------------*
52 **&&~~ Get the Function module name based on Form Name
53 *54 CALL FUNCTION 'FP_FUNCTION_MODULE_NAME'
55 EXPORTING
56 i_name =gv_form_name57 IMPORTING
58 e_funcname =gv_fm_name.59 IF sy-subrc <> 0.60 "Suitable Error Handling
61 ENDIF.62 
63 *Passing the logo name
64 gv_name =p_logo.65 
66 *Get the image/logo graphic information
67 CALL METHOD cl_ssf_xsf_utilities=>get_bds_graphic_as_bmp68 EXPORTING
69 p_object = gc_object "GRAPHICS
70 p_name = gv_name "Name of the Logo
71 p_id = gc_id "BMAP
72 p_btype = gc_btype "BCOL for color, 'BMON' for Black & White
73 RECEIVING74 p_bmp =gv_bmp75 EXCEPTIONS
76 not_found = 1
77 internal_error = 2
78 OTHERS = 3.79 
80 gv_logo =gv_bmp.81 
82 *&---------------------------------------------------------------------*
83 **&&~~ Take the FM name by execuing the form - by using Pattern-
84 **&&~~ call that FM and replace the FM Name by gv_fm_name
85 **&&~~ Call the Generated FM
86 CALL FUNCTIONgv_fm_name87 EXPORTING
88 /1bcdwb/docparams =gs_fp_docparams89 *iv_name = p_name
90 *iv_flag = p_flag
91 iv_logo =gv_logo92 EXCEPTIONS
93 usage_error = 1
94 system_error = 2
95 internal_error = 3
96 OTHERS = 4.97 IF sy-subrc <> 0.98 *Implement suitable error handling here
99 ENDIF.100 *&---------------------------------------------------------------------*
101 
102 *&---------------------------------------------------------------------*
103 *&---- Close the spool job
104 CALL FUNCTION 'FP_JOB_CLOSE'
105 EXCEPTIONS
106 usage_error = 1
107 system_error = 2
108 internal_error = 3
109 OTHERS = 4.110 IF sy-subrc <> 0.666666 *<error handling>
112 ENDIF.