这里所说的开发都是基于Fiori Elements来说的SAPUI5开发,这有别于其它的SAPUI5开发,所以需要注意,在看这文章之前,你需要知道Fiori Elements开发与其它的SAPUI5开发有什么不一样的地方,然后再看如下内容。
在上一文中,我们通过创建CDS 并使用BOPF创建一个动作,在我们的Fiori Elements APP中实现的收货功能,但在我们点击按钮时,我们还会有一些其它的扩展功能,这里我们学习按钮的对话功能。
1.简单按钮
此按钮的开发方式,可参看这里。
2.应答确认按钮
在一些关键动作功能时,为了防止用户错误操作,当用户点击时,需要弹出对话框,让用户确认是否要如此操作。
此操作,当前在后台(CDS注释)中还不被支持,只能在SAPUI5的本地OData注释文件中进行修改,写入如下内容。
1 2 3 4 5 6 7 |
<edmx:DataServices> <Schema xmlns="http://docs.oasis-open.org/odata/ns/edm"> <Annotations Target="ZFIORI1_SRV.ZFIORI1_SRV_Entities/ZMM_C_POEKPOMigo_ok"> <Annotation Term="Common.IsActionCritical" Bool="true"/> </Annotations> ..... |
OData批注的目标属性指向按钮函数,它是BOPF操作的OData表示形式。目标分为三部分,其中包括ODATA服务名称和以点分隔的实体容器,以及函数导入名称以斜杠分隔的函数。在此示例中,服务名称为“ ZFIORI1_SRV”。实体容器通常被命名为服务名称和关键字“ ENTITIES”的组合。因此,在我们的示例中,实体容器的名称为“ ZFIORI1_SRV_ENTITIES”。函数导入名称通常是实体集名称(ZMM_C_POEKPO)和BOPF动作名称(Migo_ok)的串联字符。在我们的示例中,函数导入名称为“ ZMM_C_POEKPOMigo_ok”。在某些情况下,实体集名称和BOPF操作名称的串联对于函数导入名称而言可能太长了。在这种情况下,函数导入名称将以不同的方式生成。此函数名,我们可以在SEGW中看到。
3.带输入参数的对话框
在一引起操作时,需要用户决定输入操作的一些信息。比如在前面的收货时,我们使用的过账日期是使用在代码中写的的固定日期,而要用户输入时,我们可以在用户点击确认收货按钮后,弹出对话框让用户来输入。
3.1.先创建一个结构,
用于提供需要输入的字段,可以SE11建立,也可以直接命令建立。
1 2 3 4 5 6 7 |
@EndUserText.label : '收货输入' @AbapCatalog.enhancementCategory : #NOT_CLASSIFIED define structure zsmigo_input { budat : budat; bktxt : bktxt; } |
3.2.在ACTIONS中增加使用此结构。
激活后前端操作就会出现如图让输入了。
3.3.修改代码,取输入参数
在此ACTIONS的ZCL_MM_A_MIGO_OK类方法/BOBF/IF_FRW_ACTION~EXECUTE中就会有传入参数IS_PARAMETERS,此结构就是前面定义的结构参数 了。这样在执行方法时就可以直接使用传入的参数值了。
同时在BOPF的对应的CDS生成的ODATA也会增加输入参数结构字段。
3.4.问题
1.使用时发现在对话输入框上的文本是字段名,而不是字段名的描述,可在在前端的annotation.xml文件,就可以了。
1 2 3 4 5 6 7 8 9 |
<edmx:DataServices> <Schema xmlns="http://docs.oasis-open.org/odata/ns/edm"> <Annotations Target="ZFIORI1_SRV.ZFIORI1_SRV_Entities/ZMM_C_POEKPOMigo_ok"> <Annotation Term="Common.IsActionCritical" Bool="true"/> </Annotations> <Annotations Target="ZFIORI1_SRV.ZFIORI1_SRV_Entities/ZMM_C_POEKPOMigo_ok/Budat"> <Annotation Term="Common.Label" String="过账日期"/> </Annotations> |
2.BUDAT我们在SAP定义的是DATUM的日期类型,但UI前端显示的是DATETIEM类型,这是由于ODATA服务生成的类型已变成DATETIME了,网上的解决办法是在前端的 annotation 文件中修改(我觉得应该是metadata.xml文件)才对。但不论在那个文件中修改我都还没成功,待验证
1 |
<Parameter Name="Budat" Type="Edm.DateTime" Precision="0" Mode="In" Nullable="true" sap:display-format="Date"/> |