8.2.2. 共通¶
8.2.2.2. 对错误页面进行定制后,会在 IFRAME 重定向程序的 IFRAME 内显示错误页面。¶
若定制了 http404.jsp 等,则在 IFRAME 重定向器内发生了错误时会显示全局浏览等。上述情况下,有下述回避对策。可通过在定制的错误页面DOM元素#im_error_url 中设定错误页面本身的URL来回避该问题。
8.2.2.3. 变更帐号context中的输入日期格式,可能导致无法正常执行与日期相关的处理。¶
在某些处理途中,不可变更账号context的输入用日期格式。若变更,则有可能发生无法正确进行日期相关处理的情况。
8.2.2.4. 用户context的 departmentByCompany 及 postByCompany 变为 undefined 。¶
下述情况下,departmentByCompany 和 postByCompany 会在转换时失败。
- 在companyCd中使用了“-”时的UserContext的返回值
- 在公司代码的最前面添加了“-”的数值时
8.2.2.5. 用 DEBUG 级别输出日志时,有时会将帐号的密码写到日志中。¶
若以 DEBUG 级别输出日志,则在对帐号信息进行了添加/更新/删除等变更时,有可能将含有密码的帐号信息输出到日志中。以 DEBUG 级别输出日志只是用于开发的功能,请在开发之外的环境中将日志级别设为 INFO 以上。
8.2.2.6. 有些检索画面的检索操作需要区分大小写字母。¶
在各画面的关键字检索功能中,存在区分拉丁字母的大写字母/小写字母进行检索的功能。相应画面如下。
- 许可设定画面
例如,若以“IFRAME”这个名称登记了数据,则以 “iframe” 检索也无法找到。
8.2.2.7. 在 Windows 环境下,访问地址大小写字母输入错误,可能会导致运行异常。¶
在 Windows环境下,也可通过 Web Application Server 的设定实现不区分大写字母小写字母访问URL。由于 intra-mart Accel Platform 的URL路径基本上都是用小写字母定义的,所以用大写字母输入了URL时,有可能不正常动作。
8.2.2.8. 强烈建议不要不通过API而直接更新和删除数据。¶
- 若不使用API直接更新、删除了表数据,则对以后的画面、API动作不作保证。
8.2.2.9. 不能采用通过重写URL进行会话管理的方式。¶
intra-mart Accel Platform 不支持通过URL重写的会话管理方式。请一定使用通过Cookie管理会话的方式。
8.2.2.10. 帐号和档案需同步。¶
若只生成了账号、档案数据,则有可能出现无法维护、不能正常动作的功能。请一定同步使用。
8.2.2.11. 对数据库日志进行设置后,启动时将输出Error级别的日志。¶
进行数据库日志用的设定后,虽然会在启动时输出错误级别的日志但在动作上没有问题。此外,不推荐使用数据库日志。强烈推荐使用适于所使用 Database 的日志工具等。<!-- - Parameter for intra-mart only --> <intra-mart> <database> <log sqlparam="false" isEnabledMode="CALLER_CLASS_NAME" /> </database> . . .コラム
启动时输出的日志
[12-10-01 00:00:00.000] {main} !!!! Please check your LOGBACK configuration file !!!!
8.2.2.12. URL中不能使用“%28”(“(”的编码形式)。¶
- 若在URL中使用了“%28”(编码后“(”),则会输出错误日志。
8.2.2.13. 有关脚本开发模式的限制。¶
- 若使用下述API进行了对象的持续化,则无法使用Java API直接取得该内容。
- Client#set
- Permanent#set
- Cache#set
- Module#external#set
8.2.2.14. 使用 Archiver4Storage 输出的zip文件,根据OS的情况有可能由于分隔文字不同而无法正常解压缩。¶
对于 Windows 环境以及 Version7.2 以前的环境中使用 Archiver4Storage API 输出的zip文件,若在 Linux/Unix 环境上进行了文件的解压缩,则无法正常解压缩。
8.2.2.15. 明确设定了 Base URL 时,用已设定的 Base URL 以外的 URL 访问时,登录会失败。¶
可以Tenant为单位或系统为单位设定 Base URL。(从 intra-mart Accel Platform 2014 Spring(Granada) 开始可以使用以Tenant为单位设定 Base URL 的功能。)若已设置 Base URL,画面上的链接和画面迁移均以 Base URL 为基准。使用已设定的 Base URL 以外的URL访问时,虽然会正常显示画面,但之后发生画面迁移时,会以 Base URL 为基准的URL来访问相应画面。最先访问的URL和 Base URL 的Domain不同时,由于 Cookie 的基准Domain不同,无法维持会话。因此有可能发生预期之外的错误。具体错误例子如下所示。本地环境中,也可在登录画面通过下述URL访问。
- http://localhost:8080/imart/login
- http://127.0.0.1:8080/imart/login
- http://<IP地址>:8080/imart/login
- 其他
基准URL与访问的URL不同时,虽然会正常显示登录画面,执行登录后会检查SecureToken,但由于无法参照会话信息,会发生权限错误(HTTP403)。若发生了由于权限错误而导致的无法登录的问题,请确认Base URL是否正确。
8.2.2.16. 在脚本开发模式中,处理以夏令时显示的时间时,无法正确变换为日期对象(Date)的字符串显示形式。¶
若 JavaScript 的 Date 实例全部满足下述条件,则无法从Date实例正确变换成日期字符串表现。(时间会发生1小时的偏差。)
1970 年以前的日期。
位于 Web Application Server 工作的JavaVM默认时区内的夏令时期间内。※ 此现象是脚本开发模式引擎(Rhino)的式样。例如,使用用户时区及指定显示格式(例如:“yyyy/MM/dd HH:mm:ss”格式)将系统时区的时间数据整形成日期时间字符串。若 Web Application Server 时区是JST(日本标准时间),执行下述代码后var date = new Date(1948, 7, 1, 0, 0, 0); var dateString = DateTimeFormatter.format('yyyy/MM/dd HH:mm:ss', date); Debug.browse(date.toString(), dateString);则执行结果如下。
- date.toString() → Sun Aug 01 1948 00:00:00 GMT+0900 (JST)
- dateString → 1948/08/01 01:00:00
首先,实现意识到时区的应用程序时,请使用 DateTime API 处理时间。上述的现象可通过使用 DateTime API 处理日期正确变换成字符串表现。var systemTimeZone = SystemTimeZone.getDefaultTimeZone().data; var dateTimeSystemTZ = new DateTime(1948, 7, 1, 0, 0, 0, systemTimeZone); var dateTimeUserTZ = dateTimeSystemTZ.withTimeZone(Contexts.getAccountContext().timeZone).data; var dateString = DateTimeFormatter.format('yyyy/MM/dd HH:mm:ss', dateTimeUserTZ); Debug.browse(dateString);则执行结果如下。
- dateString → 1948/08/01 00:00:00
此外,在“脚本开发模式 编程指南”及“SAStruts+S2JDBC 编程指南”中提供了“国际化编程示例”。请一并参考。接下来,若不进行意识到时区的运行,则可通过下述设定回避上述现象。
在时区主表中添加 Etc/GMT 格式的时区 ID。打开 WEB-INF/conf/time-zone-config/im-time-zone-config.xml,添加time-zone-id标签。关于时区主表,请参照设定文件。<time-zone-config> <time-zone-id>Etc/GMT-9</time-zone-id> </time-zone-config> 在 Web Application Server 工作的 Java-VM 系统属性“user.timezone”中指定Etc/GMT格式的时区 ID。Resin 时,打开<%RESIN_HOME%/conf/resin.properties>,在“jvm_args”属性中设定“-Duser.timezone”。# Arg passed directly to the JVM jvm_args : -Xmx1024m -XX:MaxPermSize=256m -Duser.timezone=Etc/GMT-9 将Tenant的时区变更成Etc/GMT格式的时区 ID。将系统数据库 im_tenant_info 表的 time_zone_id 值变更成 Etc/GMT-9。或在Tenant管理功能的Tenant时区变更画面变更值。(选择GMT+09:00) 将全部用户的时区变更成 Etc/GMT 格式的时区ID或未设定。也可通过直接变更数据库的值设定用户的时区。具体来说,请将Tenant数据库的 b_m_account_b 表的 time_zone_id 的值变更成 null 或 Etc/GMT-9。
8.2.2.17. 表名的前缀是 intra-mart Accell Platform 的保留字。¶
- 无法将下述表名当成前缀使用。
- b_m_*
- b_vc_*
- bk_imm_*
- im_*
- imaz_*
- imjob_*
- imm_*
- imw_*
8.2.2.18. 构筑多个Tenant时,推荐以实例为单位分开要连接的数据库。¶
- 通过WAR文件构筑多个Tenant时,推荐以实例为单位分开要连接的数据库。
8.2.2.19. 遵循各种数据库/JDBC驱动的式样及限制。¶
遵循各种数据库/JDBC驱动的式样及限制。作为例子发行的SQL中,若是 SQLServer,则可指定 2100 个占位符(使用PreparedStatement)。若是 Oracle,在IN语句中可指定 1000 个占位符。
8.2.2.20. intra-mart Accel Platform 动作的URL必须是第1层路径。¶
intra-mart Accel Platform 动作的URL必须设定为 http://host/imart 这样位于第1层的路径。这指的是,不只是 intra-mart Accel Platform 动作的服务器上的设定,从客户端(浏览器)侧可看到的路径也需要被设定为第1层路径。例:虽然 /imart 会动作,但不保证在 /foo/imart 以及 / 这样路径下的动作。
8.2.2.21. 若使用 JSP 在循环处理内记述UI标签,则只有第一次通过常量值指定的值有效。¶
若使用 JSP 在循环处理内记述UI标签,则只有第一次通过常量值指定的值有效。【条件】在<imart:repeat/>和<imart:loop/>内指定由常量值指定的UI标签。(例) <% String id = "#"; String prefix = "c"; %> <imart:loop count="5" index="loop_number"> <input type="text" id="<%= prefix + loop_number %>" /> <im:calendar floatable="true" altField="<%= id + prefix + loop_number %>" showButtonPanel="true" /> </imart:loop>此时,floatable 只有第一次是 true,而第2次之后就成了默认的 false。【回避方法】请不要使用常量值,而作为参数指定。(例) <% String id = "#"; String prefix = "c"; String floatable = "true"; %> <imart:loop count="5" index="loop_number"> <input type="text" id="<%= prefix + loop_number %>" /> <im:calendar floatable="<%= floatable %>" altField="<%= id + prefix + loop_number %>" showButtonPanel="true" /> </imart:loop>
8.2.2.22. 不作预告删除非公开样式或API。¶
请不要使用非公开样式或API。请不要使用未在API列表等中公开的样式或API。将来,也有可能不作预告被删除掉。使用时,关于删除时的动作错误不负一切责任。
8.2.2.23. 要想访问Tenant的资源,处理对象的Tenant必须已被特别指定。¶
在处理对象的Tenant未被特别指定的状态下,无法访问Tenant数据库或公共存储。在 intra-mart Accel Platform 上,如果出现以下情况,则Tenant处于未解决状态。・服务器启动时共通库的初始化时等情况。・账号context生成时SSO用户代码提供者的执行时等情况。
8.2.2.24. 在 jQuery 上进行 dom 操作时,脚本可能会被执行2次。¶
作为 jQuery 的动作,当插入对象的要素上存在脚本标签时,将进行2次评价。以如下函数为对象。
- text
- append
- prepend
- before
- after
- wrapAll
- wrapInner
- replaceWith
- wrap
- html
在下例中,插入要素(#element)中含有ready函数,由于其中显示Alert,因此Alert会被调用两次。<code class="html"> <script> (function($) { $(document).ready(function($) { // 读取时登记了事件 $('#imui-container').append($('#element')); }); })(jQuery) </script> <div id="element"> 插入的要素 <script> (function($) { $(document).ready(function($) { // 读取时登记了事件 alert('load_start'); // Alert被调用两次。 }); })(jQuery) </script> </div> </code>
8.2.2.25. 产品所提供的程序源代码在进行自定义时,不支持相关功能/模块。¶
使用产品所提供的程序源代码时,可自由定制。但是,产品所提供的程序源代码已进行过定制时,将不支持与其相关的功能/模块,敬请注意。另外,开发包括定制在内的应用程序时,请作为用户模块创建并嵌入到 IM-Juggling中。详情请参照“e Builder 用户操作指南”-“开发流程”。
8.2.2.26. 在会话被取消时,偶尔会发生 Exception。¶
受所选模块的影响,偶尔会发生以下 Exception。(例:登录会话管理模块)java.lang.IllegalStateException: SessionImpl[aaaQZ8hMegzwp6RNphRMu,/xxxx]: can't call getAttribute() when session is no longer valid.