Set_XXX_Property Build-Ins

本文详细介绍了 Oracle Forms 中各种内置属性设置方法,包括 set_item_property 和 set_item_instance_property 的区别及应用场景。通过实例展示了如何根据不同的条件动态调整界面元素的可见性和可编辑性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Build-In List

· SET_APPLICATION_PROPERTY
· SET_BLOCK_PROPERTY
· SET_CANVAS_PROPERTY
· SET_FORM_PROPERTY
· SET_ITEM_PROPERTY
· SET_ITEM_INSTANCE_PROPERTY
· SET_LOV_PROPERTY
· SET_MENU_ITEM_PROPERTY
· SET_PARAMETER_ATTR
· SET_RADIO_BUTTON_PROPERTY
· SET_RECORD_PROPERTY
· SET_RELATION_PROPERTY
· SET_REPORT_OBJECT_PROPERTY
· SET_TAB_PAGE_PROPERTY
· SET_VIEW_PROPERTY
· SET_WINDOW_PROPERTY


Example

set_item_property

begin
if :<block_name>.<chk_name>='Y' then
set_item_property('<block_name>.<list_item_name>',VISIBLE/UPDATEABLE,PROPERTY_TRUE);
else
set_item_property('<block_name>.<list_item_name>',VISIBLE/UPDATEABLE,PROPERTY_FALSE);
end if;
end;

or

app_item_property.set_property ('<block_name>.<list_item_name>', enabled/enterable, property_on);


set_block_property

set_block_property ('<block_name>', query_allowed/update_allowed/delete_allowed, property_true);


SET_LOV_PROPERTY

SET_LOV_PROPERTY('inv_serial_lov', GROUP_NAME, 'inv_serial18');


Set_Record_Property

/*
** Built-in: SET_RECORD_PROPERTY
** Example: Mark the third record in the EMP block as if it
** were a queried record.
*/
BEGIN
Set_Record_Property( 3, ’EMP’, STATUS, QUERY_STATUS);
END;


-----------------------------------------------------------------------------------------------------------------------

Difference Between Set_Item_Instance_Property and Set_Item_Property
SET_ITEM_PROPERTY:Block中的所有Records
SET_ITEM_INSTANCE_PROPERTY:对当前Record起作用

If you want to turn fields 'on' and 'off' depending on information in a row then use 'set_item_instance_property(enterable)' in the Post_Query trigger on the block

IF :BLK_DISPLAY.METER_TYPE_ID = 'H' THEN
SET_ITEM_INSTANCE_PROPERTY('BLK_DISPLAY.MILES',CURRENT_RECORD,VISUAL_ATTRIBUTE,'VA_DISPLAY_ONLY');
SET_ITEM_INSTANCE_PROPERTY('BLK_DISPLAY.MILES',CURRENT_RECORD,NAVIGABLE,PROPERTY_FALSE);
SET_ITEM_INSTANCE_PROPERTY('BLK_DISPLAY.MILES',CURRENT_RECORD,UPDATE_ALLOWED,PROPERTY_FALSE);
SET_ITEM_INSTANCE_PROPERTY('BLK_DISPLAY.HOURS',CURRENT_RECORD,VISUAL_ATTRIBUTE,'VA_UPDATE');
SET_ITEM_INSTANCE_PROPERTY('BLK_DISPLAY.HOURS',CURRENT_RECORD,NAVIGABLE,PROPERTY_TRUE);
SET_ITEM_INSTANCE_PROPERTY('BLK_DISPLAY.HOURS',CURRENT_RECORD,UPDATE_ALLOWED,PROPERTY_TRUE);
ELSIF :BLK_DISPLAY.METER_TYPE_ID = 'M' THEN
SET_ITEM_INSTANCE_PROPERTY('BLK_DISPLAY.MILES',CURRENT_RECORD,VISUAL_ATTRIBUTE,'VA_UPDATE');
SET_ITEM_INSTANCE_PROPERTY('BLK_DISPLAY.MILES',CURRENT_RECORD,NAVIGABLE,PROPERTY_TRUE);
SET_ITEM_INSTANCE_PROPERTY('BLK_DISPLAY.MILES',CURRENT_RECORD,UPDATE_ALLOWED,PROPERTY_TRUE);
SET_ITEM_INSTANCE_PROPERTY('BLK_DISPLAY.HOURS',CURRENT_RECORD,VISUAL_ATTRIBUTE,'VA_DISPLAY_ONLY');
SET_ITEM_INSTANCE_PROPERTY('BLK_DISPLAY.HOURS',CURRENT_RECORD,NAVIGABLE,PROPERTY_FALSE);
SET_ITEM_INSTANCE_PROPERTY('BLK_DISPLAY.HOURS',CURRENT_RECORD,UPDATE_ALLOWED,PROPERTY_FALSE);
END IF;


Reference:

Oracle Forms Developer Form Builder Reference, Volume 1 - Release 6i : http://docs.oracle.com/pdf/A73074_01.pdf

1、问题和解决方法 (1)可以运行python3 test.py [选项,例如-s1, S],它会重新编译项目,而不必在/test和/build间来回切换。 如果发现没有build,要使用mkdir build创建这个文件夹,而不是像指导书说的cd进去。框架本身没有提供/build。 如果实验二的时候在build下遇到了报错说版本不匹配,可以把CMakeLists.txt中的cmake_minimum_required(VERSION 3.20)更改为3.10,好像只有实验二有这个问题,可能是写的时候敲歪了。 如果报错说缺少某些文件,可以尝试检测CMakeLists.txt中的 # --------------------- from src --------------------- aux_source_directory(./src/ir IR_SRC) add_library(IR ${IR_SRC}) aux_source_directory(./src/tools TOOLS_SRC) add_library(Tools ${TOOLS_SRC}) # --------------------- from src --------------------- 保证没有注释掉这些资源文件路径,然后重新make。 (2)只有重新编译后再运行run.py或score.py才能应用更改。如果运行test的时候发现S选项会报错,参考test.py进行修改 它本身的结构其实比较简单,先后调用了编译,run.py和score.py,并没有做什么别的工作 (3)如果想只运行单个测试点,可以修改run.py的以下位置: for src in src_files:     fname, ftype = src.split('.')        if("XX" not in fname):         continue               cmd = ' '.join([compiler_path, testcase_dir + src, step, "-o", output_dir + fname + "." + oftype])     if is_windows:         cmd = cmd.replace('/','\\')     cp = subprocess.run(cmd, shell=True, stderr=subprocess.PIPE, stdout=subprocess.DEVNULL)     if cp.returncode != 0:         record[src] = {"retval": cp.returncode, "err_detail": cp.stderr}     else:         record[src] = {"retval": 0}     print(src, record[src]) XX是测试点的序号,例如95。这句话的意思是如果测试点的名称里面没有95就什么都不做 (4)如果评测的时候卡死了,但控制台又没输出是哪个测试点,可以修改score.py的以下位置:     if step == "-s0":         for i in ["basic", "function"]:             output_dir = output_base + i + '/'             ref_dir = ref_base + i + '/'             if os.path.exists(output_dir):                 files = os.listdir(output_dir)                 for file in files:                     if not (file[-3:] == ".tk"):                         continue                     cmd = ' '.join(["diff", ref_dir + file, output_dir + file, '-w'])                     if is_windows:                         cmd = cmd.replace('/','\\')                     # print(cmd)                     print(file, "*******************************")                     cp = subprocess.run(cmd, shell=True, stderr=subprocess.DEVNULL, stdout=subprocess.PIPE)                     if cp.returncode != 0:                         record[file] = {"retval": cp.returncode, "err_detail": "diff test failed"}                     else:                         score += 1                         record[file] = {"retval": 0}                     print(file, record[file]) 这样它就会在测试每个样例前先打印名称。注意此处修改的是-s0的部分,如果在其他实验卡死了就修改对应的位置 (5)如果发现写的cout,哪怕是cerr也并没有在控制台输出任何内容,可以在感觉有问题的地方加上: FILE *trace = fopen("trace", "w"); fprintf(trace, "%s\n", toString(ins->op).c_str()); fclose(trace); // assert(0 && "xxx"); 意思是新建一个叫trace的文件,然后把想打印的东西打印到这个文件里面去。"w"表示写模式,它会直接覆写原有的trace,没有就新建。 如果想在文件最后打印而不是完全覆写,可以使用"a"。如果程序正常结束了,那么不写fclose也会自动保存trace,无伤大雅。 但如果中途因为assert之类的问题挂掉了,那么不写fclose,想打印的内容就不会被实际写入文件,可能是留在缓冲区之类的地方, 然后就随着程序结束清空掉了。所以如果在trace里也没找到想要的输出,可以在报错的位置之前加上fclose。 assert报错的时候控制台会告诉是哪个文件的哪一行触发了这个断言,或者可以使用: python3 xx.py [选项] | grep 'xxx' 其中xxx是写在assert里面的内容的一部分,例如对于assert(0 && "invalid"),可以填'0'或者'inv'之类的 |是管道符,用于将符号前的指令在控制台的输出用作符号后的指令的输入。grep则是linux本身提供的文本搜索指令。这条指令会筛选并高亮所搜索的输出内容。如果不幸错麻了,筛选完还是看不清,可以使用: python3 xx.py [选项] | grep 'xxx' > GG.txt 输出方向符>会将输出重定位到GG.txt这个文件中,而不是打印在终端。>是覆盖,>>是追加。 类似上面这种,举例说明写编译器实现时候可能遇见的问题以及解决方法
最新发布
06-16
execute_process(COMMAND sh -c "git symbolic-ref --short -q HEAD" OUTPUT_VARIABLE GIT_BRANCH OUTPUT_STRIP_TRAILING_WHITESPACE) execute_process(COMMAND sh -c "git rev-list HEAD --abbrev=8 --abbrev-commit --max-count=1" OUTPUT_VARIABLE GIT_LAST_COMMIT OUTPUT_STRIP_TRAILING_WHITESPACE) execute_process(COMMAND sh -c "git rev-list HEAD --count" OUTPUT_VARIABLE GIT_COMMITS_NUM OUTPUT_STRIP_TRAILING_WHITESPACE) execute_process(COMMAND sh -c "git status --short --untracked-files=no | wc -l" OUTPUT_VARIABLE GIT_DIFF_STATUS OUTPUT_STRIP_TRAILING_WHITESPACE) if ( ${GIT_DIFF_STATUS} EQUAL "0" ) set(BUILD_VERSION "R${GIT_LAST_COMMIT}_${GIT_BRANCH}") else() set(BUILD_VERSION "R${GIT_LAST_COMMIT}M_${GIT_BRANCH}") endif() #build date string(TIMESTAMP DATETIME "%Y%m%d%H%M%S") #enable gdb debug symbol if (NOT CMAKE_BUILD_TYPE) set(CMAKE_BUILD_TYPE "Release") message (STATUS "No CMAKE_BUILD_TYPE selected, defaulting to ${CMAKE_BUILD_TYPE}") endif() message (STATUS "The CMAKE_BUILD_TYPE is selected to ${CMAKE_BUILD_TYPE}") set(CMAKE_CXX_FLAGS_BASE "$ENV{CXXFLAGS} -pipe -Wall -Wno-unknown-pragmas -Wno-format-zero-length -lrt -Wno-ignored-attributes") #set(CMAKE_CXX_FLAGS_BASE "${CMAKE_CXX_FLAGS_BASE} -save-temps") set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_BASE} -O2 -g") set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_BASE} -O3") #set(CMAKE_DEBUG_POSTFIX _D) set_property(GLOBAL PROPERTY RULE_LAUNCH_COMPILE "${CMAKE_COMMAND} -E time") set_property(GLOBAL PROPERTY RULE_LAUNCH_LINK "${CMAKE_COMMAND} -E time")
07-22
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值