【问题标题】:Suitescript - Hiding line fields during Sales Order/Invoice entrySuitescript - 在销售订单/发票输入期间隐藏行字段
【发布时间】:2015-10-23 04:34:37
【问题描述】:

我想知道是否有人知道在某些 Netsuite 角色不允许查看成本的情况下隐藏某些字段(例如成本)的方法。

我可以在 PostSourcing 和 validateline 等期间使用 nlapiDisableLineItemField 防止用户在没有适当权限的情况下更改售价...

但是对于成本字段,如果用户没有 COST 访问权限,我想隐藏它们。我意识到我可以通过创建一个不包含成本的单独表单来做到这一点,但是如果我可以通过脚本隐藏信息,这意味着我在考虑其他事情时可以减少重复工作。

【问题讨论】:

    标签: netsuite suitescript


    【解决方案1】:

    您可以使用 beforeLoad userevent script 来隐藏正文级别字段(但是,不能对行项目字段执行相同操作,因为 nlobjform 上没有任何 API 允许这样做。对于子列表/行项目字段,您将不得不编写客户端脚本验证或从表单中删除该字段,就像您在问题中提到的那样)。

    在您加载用户事件脚本之前,您可以访问表单,然后使用类似下面的内容来隐藏正文级别的字段。

    function beforeLoadEntryFunction(type, form)
    {
      if(nlapiGetRole() === 'NON_ACCESSIBLE_ROLE_ID'){
       form.getField(YOUR_BODY_FIELD_ID).setDisplayType('hidden');
      }
    }
    

    编辑: 对于 sublist/lineitem 字段,创建 client script,代码为

    function clientScriptEntryFunction(type, form)
        {
          if(nlapiGetRole() === 'NON_ACCESSIBLE_ROLE_ID'){
           form.getField(YOUR_BODY_FIELD_ID).setDisplayType('hidden');
           nlapiDisableLineItemField(SUBLIST_ID, LINE_FIELD_ID);
          }
        }
    

    在before load user event 中使用form.setScript(YOUR_CLIENT_SCRIPT_ID),因为您已经可以访问表单对象。

    记住,客户端脚本应该是全局客户端脚本

    【讨论】:

    • 好的,看来表单方法是目前唯一的选择。也许 Netsuite 会在未来某个时候添加该功能。
    • 添加,您可能希望在 document.ready 事件之后调用客户端脚本入口函数,以确保 NS 脚本可用/下载,或者执行简单的 setTimeout 直到 'window.nlapiDisableLineItemField !== undefined '
    【解决方案2】:

    如果您的目的是纯粹的审美,您可以执行客户端 onLoad 脚本并通过 jQuery 隐藏字段,您可以按名称进行选择,即使版本升级也不会改变。

    jQuery 库包含在 NetSuite 中。

    【讨论】:

    • 不建议在 NetSuite 中编写 DOM 依赖项,因为任何时候都会崩溃,NetSuite 会对其进行更改,如果您计划使用 SuiteApp,您的应用将不符合 SuiteApp 的条件
    • 不是。这是一个黑客。但从其他可用的回复来看,这可能是他现在唯一的选择。
    • 另外,我认为你不能保证 html 标签中的 name 属性是不变的。它可能不太可能改变,但没有官方说法,netsuite 可以将其视为 DOM 依赖
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多