根据日期从Archer GRC中的Value-List计算(非空验证)

时间:2014-06-05 21:45:27

标签: validation drop-down-menu rsa archer rsa-archer-grc

我一直在努力实现Stack Overflow问题中的问题,在这里:

Calculation for status in Archer GRC based on date

  

尝试根据多个值列表创建状态字段   用户选择,但已请求我们检查日期   一个值的字段,以确保已设置估计日期,以便   计算可以确定记录的状态是否为" In   进步","晚"或"未开始"。

...现在,我需要某种实际的弹出警告消息,以提示用户确保日期字段不为空。

我如何添加此功能?

1 个答案:

答案 0 :(得分:1)

为了提供您正在寻找的功能,您必须使用"自定义对象"。它是您在Archer中包含JavaScript代码的应用程序布局的对象。加载应用程序的表单后,将立即执行此代码。有一种特殊类型的字段"自定义对象"可以在布局编辑器中找到Archer中Application Builder中每个应用程序。

注意 - 我不建议一般使用自定义对象,也不建议使用RSA支持。每次修改给定应用程序中的布局时,都需要重新测试,有时还会更正自定义对象的ID。您可以编写ID独立的自定义对象并使用字段名称,但在这种情况下,自定义对象将具有更多代码。我更喜欢让自定义对象尽可能短。

您的自定义对象应执行以下操作:

  1. 覆盖"保存"的行为和"申请"顶部工具栏中的按钮可用于Archer中的每个申请表。
  2. 一次" Save"和"申请"按钮被"覆盖",每次点击你的功能都会被调用。所以你需要创建一个点击处理函数。
  3. 您的点击处理程序功能将检查用户是否需要填充值,并将返回警告,或者将调用原始处理程序"保存/应用"的按钮。
  4. 这是一个可以开始的代码模板:

    <script type="text/javascript">
    // ids are used to locate buttons
    var buttons_ids = [
        "master_btnSave",   //  "Save" button ID
        "master_btnApply"   //  "Apply" button ID
    ];
    // parameters are used in the "onclick" default handlers to call original handlers
    var buttons_parameters = [
        "master$btnSave",   //  "Save" parameter
        "master$btnApply"   //  "Apply" parameter
    ];
    
    document.getElementById(buttons_ids[0]).onclick = function(){   Validator_of_required_fields(buttons_parameters[0])};
    document.getElementById(buttons_ids[1]).onclick = function(){   Validator_of_required_fields(buttons_parameters[1])};
    // end of the script body
    
    //==== Validator function attached to Save and Apply buttons
    function Validator_of_required_fields(parameter){
        // ids of the input fields to validate
        var inputs_to_validate_ip_address = [ "master_DefaultContent_rts_XXX_YYY_t" ];
    
        // jQuery selector is used here. Archer v5.x has jQuery library loaded by default
        // you will need to modify this selector
        var field_value = $('#'+inputs_to_validate_ip_address[0]+':first').val();
    
        if(field_value.length = 0) {
            // Here you are calling Archer Warning function
            var msg = "[Text to display to user]";
            var title = 'Required Field';
            WarningAlert(msg,title);
            return false;
        };
    
        // default onclick processor
        ShowAnimationAndPostback(parameter);
        return false;
    };
    

    对此代码的一些评论:

    • 您需要修改验证功能以使用存储在您需要的字段中的值。
    • 我使用了一个非常不寻常的&#39;覆盖&#34;保存&#34;的行为的方式和&#34;申请&#34;按钮使用以下代码:
      document.getElementById(buttons_ids[0]).onclick = function(){ bla, bla, bla }
      有更简单的方法可以做到这一点,但这样自定义对象在IE8-11,FF,Chrome和Opera中运行良好。如果您找到一种更简单的方法来覆盖与浏览器无关的按钮,请告诉我。
    • 函数WarningAlert(msg,title);是内置的Archer警告消息函数。它在Archer v5.4中运行良好。如果WarningAlert在您的Archer版本中不起作用,您可能需要使用简单的JavaScript Alert功能。
    • 请注意&#34;保存&#34;和&#34;申请&#34;如果用户打开任何弹出对话框窗口以填充值列表或交叉引用字段,则可能会将按钮覆盖回默认值。如果是这种情况,则必须将提供的代码包装到另一个函数中并将其附加到OnLoadWindow事件(或类似的)。
    • 我尽量避免在自定义对象中使用任何JavaScript库。通过这种方式,支持它们更简单,并且您具有更少的依赖性。我在提供的示例中使用了jQuery,因为一旦页面加载,Archer就已经使用了这个库。

    Flak,确保测试你的自定义对象并祝你好运!