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
    • 其他
    基准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.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.