前言
如图,每创建一个connection,用户都需要填写8个字段。查看Airport
的字段可以发现,每个Airport都包含了city
和country
。也就是说,其实只需要填写出发机场和到达机场,只要机场代码是正确的,那程序应该可以自动填写对应机场的city和country字段。
为了实现这个功能,就需要用到determination
。
一、添加Determination
和validation相似,determination也包括声明和实现两个部分。
1.声明
在Behavior Definitions
中,找到ZR_XXX
,添加声明,这里是getCities
,在保存时通过AirportFromID
和AirportToID
字段触发。
2.实现
点击警告,自动生成实现方法。
在方法中添加以下代码。
DATA read_data TYPE TABLE FOR READ RESULT zr_kdlaconn.
READ ENTITIES OF zr_kdlaconn IN LOCAL MODE
ENTITY connection
FIELDS ( cityfrom cityto )
WITH CORRESPONDING #( keys )
RESULT read_data.
LOOP AT read_data INTO DATA(conn).
SELECT SINGLE FROM /dmo/i_airport
FIELDS city, countrycode
WHERE airportid = @conn-AirportFromID
INTO ( @conn-cityfrom, @conn-CountryFrom ).
SELECT SINGLE FROM /dmo/i_airport
FIELDS city, countrycode
WHERE airportid = @conn-AirportToID
INTO ( @conn-CityTo, @conn-CountryTo ).
MODIFY read_data FROM conn.
ENDLOOP.
DATA update_data TYPE TABLE FOR UPDATE zr_kdlaconn.
update_data = CORRESPONDING #( read_data ).
MODIFY ENTITIES OF zr_kdlaconn IN LOCAL MODE
ENTITY connection
UPDATE
FIELDS ( cityfrom countryfrom cityto countryto )
WITH update_data
REPORTED DATA(reported_records).
reported-connection = CORRESPONDING #( reported_records-connection ).
3.核心逻辑
3.1.read_data
DATA read_data TYPE TABLE FOR READ RESULT zr_kdlaconn.
READ ENTITIES OF zr_kdlaconn IN LOCAL MODE
ENTITY connection
FIELDS ( cityfrom countryfrom cityto countryto )
WITH CORRESPONDING #( keys )
RESULT read_data.
read_data
用来临时存储用户的输入值,内表类型。按前言的要求,read_data
中的结构仅CarrierID
,ConnectionID
,AirportFromID
,AirportToID
四个字段有输入值。CityFrom
,CountryFrom
,CityTo
,CountryTo
字段的值需要代码自动填充。
3.2.填充字段
LOOP AT read_data INTO DATA(conn).
SELECT SINGLE FROM /dmo/i_airport
FIELDS city, countrycode
WHERE airportid = @conn-AirportFromID
INTO ( @conn-cityfrom, @conn-CountryFrom ).
SELECT SINGLE FROM /dmo/i_airport
FIELDS city, countrycode
WHERE airportid = @conn-AirportToID
INTO ( @conn-CityTo, @conn-CountryTo ).
MODIFY read_data FROM conn.
ENDLOOP.
通过AirportID
查找机场的city
和countrycode
值,并更新内表read_data
。
3.3. 更新数据
DATA update_data TYPE TABLE FOR UPDATE zr_kdlaconn.
update_data = CORRESPONDING #( read_data ).
MODIFY ENTITIES OF zr_kdlaconn IN LOCAL MODE
ENTITY connection
UPDATE
FIELDS ( cityfrom countryfrom cityto countryto )
WITH update_data
REPORTED DATA(reported_records).
reported-connection = CORRESPONDING #( reported_records-connection ).
声明update_data
内表,并用read_data
更新字段,再用update_data
更新用户的输入。
二、测试
在I_CONNECTION view中查找数据,这里使用AA-0017。
填写必要字段,city和country留空,保存。
结果中,city和country自动填写。
验证city和country是否正确,在/dmo/i_airport
view中查找HAV
和MIA
两个机场,对比上图,city
和country
结果正确。
总结
打完收工。