0

我一直在尝试实现这个 Stack Overflow 问题中提出的问题,这里:

根据日期计算 Archer GRC 中的状态

尝试根据用户从中选择的多个值列表创建状态字段,但已请求我们检查日期字段的值以确保已设置估计日期,以便计算可以确定状态是否记录是“进行中”、“迟到”或“未开始”。

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

我将如何添加此功能?

4

1 回答 1

1

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

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

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

  1. 覆盖 Archer 中每个申请表可用的顶部工具栏中的“保存”和“应用”按钮的行为。
  2. 一旦“保存”和“应用”按钮被“覆盖”,每次单击它们时都会调用您的函数。所以你需要创建一个点击处理函数。
  3. 您的单击处理程序函数将检查用户需要填充的值,并将返回警告,或者将调用“保存/应用”按钮的原始处理程序。

这是您可以开始使用的代码模板:

<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;
};

对此代码的一些评论:

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

Flak,一定要很好地测试你的自定义对象,祝你好运!

于 2015-09-13T03:15:18.273 回答