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
- 其他
若Base 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。将来,也有可能不作预告被删除掉。使用时,关于删除时的动作错误不负一切责任。