动态 PDF 图章对话框的 Javascript 不起作用

问题描述

我一直在尝试在图章上创建一个带有 4 个动态文本字段(Text1、Text2、Text3 和 Text4)的动态 PDF-XChange 图章,用户可以在放置图章之前在对话框中编辑。我想要的是让用户选择图章和对话框弹出窗口以打开 4 个用户输入字段:

  1. RMA 状态 - 用户添加状态(名为 RMAS)
  2. 用户输入任何内容的自由文本字段(名为 FREE)
  3. 用户的身份信息(名为 TEAM)中提取用户姓名和业务团队
  4. 今天的日期,可编辑,以防他们事后盖章(命名为 DATE)

我让它在弹出一个对话框的地方连续 4 次向用户询问每个问题,但请求的是一个带有 4 个文本字段的对话框。我似乎无法弄清楚我下面的代码需要如何更改才能工作,但我对此很陌生。

目前它只打开最后一个问题(日期),在对话框激活之前没有被我的 JavaScript 日期代码填充,没有其他问题。如果我删除日期元素,它会询问它之前的问题(名称和业务单位),但它不会显示一个对话框,其中包含使用代码末尾处理的数据预先填充的所有 4 个问题,这些数据已经过测试单独工作。

我的代码在下面评论。如果有人可以帮助我使用预先填充的 4 个文本字段打开对话框,我很想看看我哪里出错了。如果你能帮我把数据添加到邮票的 Text1 到 Text4 框中,我会欣喜若狂!

// Dialog DeFinition 
var oDlg = {
    
    RMAStatus: "",FreeText: "",NameAndUnit: "",TodaysDate: "",description:
    {
        name: "Stamp details",elements:
        [
            {
                type: "view",elements:
                [
                    {
                        type: "view",elements:
                        [
                            {
                                item_id: "lbl1",type: "static_text",name: "&RMA Stage",},{
                                width: 200,height: 22,type: "edit_text",item_id: "rmas",}
                        ],type: "view",name: "&Free text field",height: 88,item_id: "free",name: "&Your name and team",item_id: "team",name: "&Stamp date",item_id: "date",}
                        ]
                    },{
                        type: "ok_cancel",}
                ]
            }
        ]
    },initialize: function(dialog) { // where the data in dialog elements is set when the dialog is first activated
        dialog.load({
            "rmas":this.RMAStage,"free":this.FreeText,"team":this.CorrectName,"date":this.todaysDate,});
    },commit: function(dialog) { // where element data is acquired when the user presses the OK button
        var data = dialog.store();
        this.RMAStage = data["rmas"];
        this.FreeText = data["free"];
        this.CorrectName = data["team"];
        this.todaysDate = data["date"];
    }
};

/*
 * Pre-fill the dialog text fields with the data below
 */
/* RMA STAGE (for RMAS to be populated) */
oDlg.RMAStage = "RMA Stage";

/* FREE TEXT FIELD (for FREE to be populated)  */
oDlg.FreeText = "";

/* NAME AND UNIT (for TEAM to be populated)  */
var IdentityName,IdentityNameSplit,Unit;

/* Set Organisation Unit */
Unit = "Parks & Landscapes Team";  // Unlikely to change

/* Find correctly formatted username from Identity info */
if((identity.name != null) && !/^\s*$/.test(identity.name))
    IdentityName = identity.name;
else
    IdentityName = identity.loginName.replace(/\./g," ").replace(/\./g," ").replace(/\b(\w)/g,function(Word,cFst){return cFst.toupperCase()});

if (IdentityName.indexOf(',') > -1) { // If the result is "Surname,Firstname" swap the names to make "Firstname Surname"
    IdentityNameSplit = IdentityName.split(',');
    oDlg.NameAndUnit = IdentityNameSplit[1] + " " + IdentityNameSplit[0] + "," + Unit;
}
else
    oDlg.NameAndUnit = IdentityName + "," + Unit;

/* FORMATTED DATE FIELD (for DATE to be populated)  */
var stampDate;
stampDate = new Date();
oDlg.TodaysDate = util.printd("dd mmmm,yyyy",stampDate);

// Start dialog function
app.execDialog (oDlg);

解决方法

成功了!如果其他人想为自己复制/粘贴此解决方案:

var pagDlg =
{

    result: "cancel",DoDialog: function () { return app.execDialog(this); },//definitions
    strDefFmt: "dd-mm-yyyy",strFmt: "dddd d mmmm,yyyy",vDate: new Date,strDate: "",iOChecked: false,abwChecked: false,//
    SetListSel: function (list,path) {
        if (path.length == 0) return;
        eval("list[\"" + ((path.join != "function") ? path : path.join("\"][\"")) + "\"] = 1");
    },GetListSel: function (oLstResult) {
        for (var item in oLstResult) {
            if ((typeof oLstResult[item] == "number") && (oLstResult[item] > 0))
                return item;
        }
        return "";
    },formatDate: function (d,f) {
        return util.printd(f,d);
    },//Initialize values that will be used in the pop-up dialogue
    initialize: function (dialog) {
        var unit = "Technical Services & Design";
        this.strDate = this.formatDate(this.vDate,this.strDefFmt);
        //this.strDate = this.formatDate(this.vDate,"dd mmmm,yyyy");
        //
        var dlgInit =
        {
            "date": this.strDate,"free": "Enter your description text here.",//enable this checkbox option as default
            "abw_2": IdentityName + "," + unit,"rma": "RMA Stage",};
        dialog.load(dlgInit);
        iOChecked = dlgInit["free"]; // initialise and keep it the same as the value in dlgInit
        abwChecked = dlgInit["abw_2"];
        rmaChecked = dlgInit["rma"];
    },commit: function (dialog) { // Called when OK button is pressed
        var oRslt = dialog.store();
        var path = new Array();
        var d = oRslt["date"];  //OK Go date
        //
        if (typeof d == "string")
            d = util.scand(this.strDefFmt,d);
        if (d != null)
        {
            var cur = new Date;
            d = new Date(d.getFullYear(),d.getMonth(),d.getDate(),cur.getHours(),cur.getMinutes(),cur.getSeconds());
        }
        this.vDate = d;
        //

        this.rmaChecked = oRslt["rma"];
        this.iOChecked = oRslt["free"];
        this.abwChecked = oRslt["abw_2"];
        this.strDate = oRslt["date"];
    },//Description of the layout of the Dialoge Window
    description:
    {
        name: "Stamp details",width: 450,elements:
        [
            {
                type: "view",elements:
                [
                    {
                        type: "view",align_children: "align_row",elements:
                        [
                            {
                                item_id: "lbl1",name: "RMA Stage",type: "static_text",width: 100,},{
                                item_id: "rma",type: "edit_text",width: 300,]
                    },{
                        type: "view",name: "Free text",alignment: "align_top",align_children: "align_top",{
                                item_id: "free",multiline: true,height: 88,name: "Name and team",{
                                item_id: "abw_2",name: "Date",{
                                item_id: "date",DateEdit: true,}
                        ]

                    },{
                        type: "ok_cancel",]
            }
        ]
    }
};
/* NAME */
var IdentityName,IdentityNameSplit;

/* Find correctly formatted username from Identity info */
if((identity.name != null) && !/^\s*$/.test(identity.name))
    IdentityName = identity.name;
else
    IdentityName = identity.loginName.replace(/\./g," ").replace(/\./g," ").replace(/\b(\w)/g,function(Word,cFst){return cFst.toUpperCase()});

if (IdentityName.indexOf(',') > -1) { // If the result is "Surname,Firstname" swap the names to make "Firstname Surname"
    IdentityNameSplit = IdentityName.split(',');
    IdentityName = IdentityNameSplit[1] + " " + IdentityNameSplit[0];
}

if (event.source.forReal && (event.source.stampName == "#T2CKw07Lo6sr42d6F3ao#0"))
{
    if (pagDlg.DoDialog() == "ok")
    {
        var d = pagDlg.vDate; 

        this.getField("Text1").value = pagDlg.rmaChecked; // RMA Stage
        this.getField("Text2").value = pagDlg.iOChecked; // Free text
        this.getField("Text3").value = pagDlg.abwChecked; // Name and team
        this.getField("Text4").value = util.printd(pagDlg.strFmt,d); // Date
    }
    else
    {
        app.alert("Stamp cancelled",3);
    }
}
else
{
    var d = pagDlg.vDate;
    event.value = util.printd(pagDlg.strFmt,d);
}

希望有人会觉得这很有用。