
在peoplesoft自定义页面中,当开发者在html区域内嵌入一个<input type="text">元素并为其设置value属性以预填充初始值时,peoplecode在首次提交页面时,通常无法通过%request.getparameter直接捕获到这个预设的初始值。然而,一旦页面发生局部回发(例如,通过messagebox触发),该值在随后的提交中便能被正确捕获。
这种现象的根源在于PeopleSoft页面数据模型的初始化方式。当页面首次加载时,HTML区域的内容被视为一个静态字符串在客户端浏览器中渲染。输入框的value属性是这个静态HTML的一部分,但服务器端的PeopleCode数据模型并未自动将其视为一个可直接访问的字段值。只有当客户端发生一次显式的数据回传(例如,用户修改了输入框内容,或者发生了一次局部回发),浏览器才会将所有输入字段的当前状态(包括未修改的预设值)发送回服务器,此时PeopleCode才能捕获到这些值。
为了确保HTML区域内输入框的初始值和用户修改后的值都能被PeopleCode可靠地捕获,最健壮的方法是建立一个服务器端的支持数据模型,即将其绑定到一个PeopleSoft记录字段,通常是派生工作记录(Derived Work Record)上的字段。
首先,在Application Designer中创建一个新的工作记录(Work Record),或使用现有工作记录。在该记录中添加一个字段,其数据类型和长度应与HTML输入框预期接收的数据类型和最大长度匹配。此字段将作为HTML输入框在PeopleCode中的代理。
示例:
立即学习“前端免费学习笔记(深入)”;
在Application Designer中创建一个新的HTML对象。将您的HTML输入元素及其样式放入此HTML对象中。关键在于使用%bind(:1)占位符来动态插入字段值,而不是直接在HTML中硬编码value属性。%bind(:1)表示第一个绑定参数。
示例HTML对象 (HTML.MY_INPUT_AREA) 内容:
<input type="text" id="drivers" name="drivers_field" style="position:relative; width: 13em; left:3pt; top:3pt;color: #000000; font-family:Arial, sans-serif; font-weight: bold; font-size: 10pt; background-color: #FAFAD2;" size="13" placeholder="Example:N1234567" required="" maxlength="13" value="%bind(:1)">
请注意:name="drivers_field"属性在此处仍然存在,但对于通过绑定字段捕获值而言,其重要性低于id属性(用于客户端JavaScript操作)和value="%bind(:1)"。
在页面的Page Activate事件或任何需要初始化HTML区域值的事件中,使用GetHTMLText函数将HTML对象的内容加载到页面上的HTML区域控件所关联的字段中,并将您希望预填充的PeopleSoft字段的值作为绑定参数传入。
示例PeopleCode (在Page Activate事件中):
/* 声明函数,GetHTMLText通常位于FUNCLIB_HTML.HTML_AREA_FUNCS中 */ Declare Function GetHTMLText PeopleCode FUNCLIB_HTML.HTML_AREA_FUNCS Field Formula; /* 假设 DERIVED_WORK.HTML_INPUT_VALUE 是您在步骤1中创建的派生字段 */ /* 假设 MY_PAGE_REC.HTML_AREA_FIELD 是页面上HTML区域控件关联的字段 */ /* 设置派生字段的初始值。此值可以来自数据库、用户会话或任何PeopleCode可获取的源。 */ DERIVED_WORK.HTML_INPUT_VALUE = "R291992929399"; /* 使用GetHTMLText将HTML对象内容加载到HTML区域,并绑定派生字段的值。 HTML.MY_INPUT_AREA 是您在步骤2中创建的HTML对象。 DERIVED_WORK.HTML_INPUT_VALUE 作为第一个绑定参数,将替换HTML对象中的 %bind(:1)。 */ MY_PAGE_REC.HTML_AREA_FIELD = GetHTMLText(HTML.MY_INPUT_AREA, DERIVED_WORK.HTML_INPUT_VALUE);
一旦HTML输入框通过%bind与DERIVED_WORK.HTML_INPUT_VALUE关联,并且页面已加载,您就可以在任何后续的PeopleCode事件(如按钮的FieldChange事件、SavePostChange事件等)中直接访问DERIVED_WORK.HTML_INPUT_VALUE来获取用户输入或初始值。无需使用%Request.GetParameter。
示例PeopleCode (在保存按钮的FieldChange事件中):
/* 直接从派生字段获取值,无论用户是否更改过,该字段将始终反映当前UI上的值 */
Local String sCurrentValue = DERIVED_WORK.HTML_INPUT_VALUE;
If All(sCurrentValue) Then
MessageBox(0, "", 0, 0, "成功捕获到值: " | sCurrentValue);
/* 在这里可以继续您的业务逻辑,例如对值进行验证或保存到数据库 */
Else
MessageBox(0, "", 0, 0, "输入值为空。请提供有效信息。");
End-If;通过将PeopleSoft HTML区域内的输入框与一个派生记录字段进行绑定,我们能够有效地解决初始值无法被PeopleCode捕获的问题。这种方法不仅提供了清晰的数据模型,确保了服务器端对UI数据的全面控制,还简化了PeopleCode中对这些值的访问,提升了应用程序的健壮性和可维护性。遵循此教程,开发者可以构建更加稳定和可靠的PeopleSoft自定义页面。
以上就是PeopleSoft HTML区域输入值绑定与PeopleCode捕获指南的详细内容,更多请关注php中文网其它相关文章!
HTML怎么学习?HTML怎么入门?HTML在哪学?HTML怎么学才快?不用担心,这里为大家提供了HTML速学教程(入门课程),有需要的小伙伴保存下载就能学习啦!
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号