intra-mart Accel Platform 2014 Spring(Granada) / Release Note

第1版 2014-04-01

«  8.2.1. 安装/环境构筑   ::   Contents   ::   8.2.3. 系统管理  »

8.2.2. 共通

8.2.2.1. PermanentData 及 SharedMemory 中可以使用的键名的最大长度取决于文件系统。

  • 对PermanentData及SharedMemory中使用的Storage上的文件名进行转义处理。
    • getInstance和entry参数内部各自附有其他的前缀。
      (同时支持空字符键及文件夹和文件)
    • 在与字符串相同处理的位置变换全部字符。
      (支持不可作为文件名的字符串和文件系统依存)
    由于将进行了转义处理的键名原样作为文件名来进行处理,所以键名的最大长度依存于文件系统上
    文件名的最大长度。

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小时的偏差。)
    1. 1970 年以前的日期。

    2. 位于 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);
    
    则执行结果如下。
    1. date.toString() → Sun Aug 01 1948 00:00:00 GMT+0900 (JST)
    2. 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);
    
    则执行结果如下。
    1. 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.1. 安装/环境构筑   ::   Contents   ::   8.2.3. 系统管理  »