PeopleSoft-日志记录实现

PS记录日志的两种方法:

服务器log文件附件

1
2
3
4
5
6
7
Local File &fileLog;
&fileLog = GetFile("/file/******.log", "A", "A", %FilePath_Absolute);
/*判断是否打开文件*/
if &fileLog.isOpen then
&fileLog.WriteLine("Begin *****");
&fileLog.WriteLine("Begin *****");
end-if;

标准函数GetFile

1
GetFile(filename, mode [, charset] [, pathtype])filename
参数 含义
filename /file/test.log 文件路径名
mode R (读取模式)打开文件进行读取,文件的开始
W (写入模式)打开文件进行写入,会丢失之前写入的内容
A (追加模式)打开文件进行写入,从末尾开始。保留任何现有内容
U (更新模式):打开文件进行读取或写入,从文件开头开始。保留任何现有内容。使用此模式以及 GetPosition 和 SetPosition 方法来维护文件中当前读/写位置的检查点。在更新模式下,任何写入操作都会清除文件中位于您设置的位置之后的所有数据。注意:目前,对于 Unicode 文件,Update 模式以及 GetPosition 和 SetPosition 方法的效果没有很好地定义。仅对使用非 Unicode 字符集存储的文件使用更新模式。
E (有条件的“存在”读取模式)仅当文件存在时才打开文件进行读取,从头开始。如果它不存在,则 Open 方法无效。在尝试读取文件之前,请使用 IsOpen 属性确认它已打开。
N (有条件的“新”写入模式)打开文件进行写入,仅当它不存在时。如果已存在同名文件,则 Open 方法无效。在尝试写入文件之前,请使用 IsOpen 属性确认它已打开。
您可以在文件名中插入星号 () 以确保创建新文件。系统将星号替换为从 1 开始并以 1 递增的数字,并依次通过每个结果名称检查文件是否存在。它使用文件不*存在的名字。通过这种方式,您可以生成一组自动编号的文件。如果插入多个星号,除第一个星号外的所有星号都将被丢弃。
charset A-application server configuration file 中默认值;
U-Unicode UCS-2;
UTF8;
ASCII
UTF8BOM
Big5
一个字符串,指示读取文件时期望的字符集,或写入文件时要使用的字符集。您可以将 Unicode UCS-2 缩写为“U”,将应用服务器配置文件中指定的默认值缩写为“A”。所有其他字符集必须完整拼写,例如 ASCII、Big5、Shift-JIS、UTF8 或 UTF8BOM。
如果将“A”指定为字符集,或者您未指定字符集,则使用的字符集取决于应用程序服务器配置。在 psappsrv.cfg 和 psprcs.cfg 中,如果未在 GetFile 调用中设置,字符集参数将用作默认值。如果在配置 (.cfg) 文件中注释掉或未指定字符集参数,则默认字符集将为 UTF-8。您还可以使用记录字段值来指定字符集(例如,RECORD.CHARSET。)
可在PeopleTools: Global Technology 中找到对此参数有效的受支持字符集名称列表。请参见PeopleSoft 体系结构各层中的字符集
pathtype %FilePath_Relative(默认) 如果未指定路径类型,则默认值为 %FilePath_Relative。
%FilePath_Absolute 如果指定相对路径,则该路径将附加到根据系统选择的环境变量构造的路径。File 类的文档中提供了对相对路径和环境变量的完整讨论。请参阅使用相对路径
如果路径是绝对路径,则将逐字使用您指定的任何路径。您必须指定驱动器号和完整路径。指定路径时不能使用任何通配符。
组件处理器自动将特定于平台的分隔符转换为执行 PeopleCode 程序的适当形式。在 Windows 系统上,UNIX 的“/”分隔符被转换为“\”,而在 UNIX 系统上,Windows 的“\”分隔符被转换为“/”。
注意:文件路径的语法依赖于文件实际存放平台的文件系统;它仅取决于执行 PeopleCode 的平台。

创建日志表

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
/* begin 日志记录*/
Local Record &reApplyLog = CreateRecord(Record.C_EMPL_PRD_LOG);
&reApplyLog.C_APP_SEQ.Value = &recC_EMPL_PRD_REQ.C_APP_SEQ.Value;
If Not &reApplyLog.SelectByKey() Then
&reApplyLog.C_APP_SEQ.Value = &recC_EMPL_PRD_REQ.C_APP_SEQ.Value;
&reApplyLog.C_APP_DT.Value = &recC_EMPL_PRD_REQ.C_APP_DT.Value;
&reApplyLog.EMPLID.Value = &recC_EMPL_PRD_REQ.EMPLID.Value;
&reApplyLog.DEPTID.Value = &recC_EMPL_PRD_REQ.DEPTID.Value;
&reApplyLog.EMPLID2.Value = &recC_EMPL_PRD_REQ.EMPLID2.Value;
&reApplyLog.NAME1.Value = &recC_EMPL_PRD_REQ.NAME1.Value;
&reApplyLog.C_REQ_JSON.Value = &jsonBody;
&reApplyLog.C_INTERFACE_STATUS.Value = Substring(&responseBody, Len(&responseBody) - 2, 1);
&reApplyLog.DESCRLONG.Value = &responseBody;
&reApplyLog.LASTUPDDTTM.Value = %Datetime;
&reApplyLog.Insert();
Else
&reApplyLog.C_APP_SEQ.Value = &recC_EMPL_PRD_REQ.C_APP_SEQ.Value;
&reApplyLog.C_APP_DT.Value = &recC_EMPL_PRD_REQ.C_APP_DT.Value;
&reApplyLog.EMPLID.Value = &recC_EMPL_PRD_REQ.EMPLID.Value;
&reApplyLog.DEPTID.Value = &recC_EMPL_PRD_REQ.DEPTID.Value;
&reApplyLog.EMPLID2.Value = &recC_EMPL_PRD_REQ.EMPLID2.Value;
&reApplyLog.NAME1.Value = &recC_EMPL_PRD_REQ.NAME1.Value;
&reApplyLog.C_REQ_JSON.Value = &jsonBody;
&reApplyLog.C_INTERFACE_STATUS.Value = Substring(&responseBody, Len(&responseBody) - 2, 1);
&reApplyLog.DESCRLONG.Value = &responseBody;
&reApplyLog.LASTUPDDTTM.Value = %Datetime;
&reApplyLog.Update();
End-If;
/* end 日志记录*/