首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >优先级中的SubForm枚举-web

优先级中的SubForm枚举-web
EN

Stack Overflow用户
提问于 2017-06-19 13:55:44
回答 1查看 123关注 0票数 1

我列举的表单/子表单如下:

代码语言:javascript
复制
var pdqFormLoad = function(form) {
    if (form) {
        var
            i,
            col,
            subf
            ;

        console.log("Opened form [%s].", form.title);

        console.log("\nColumns of $s.", form.title);
        for (i in form.columns) {
            col = form.columns[i];
            console.log("  -- %j", col);
        };

        console.log("\nSubforms of %s.", form.title);
        for (subf in form.subForms) {
            console.log(
                "  -- Opening subform %s.",
                subf
            );
            pdq.startForm(form, subf, pdqFormLoad);
        };

    }
    else {
        console.log("No form.");

    };
};

首先,我注意到只提供了title属性。不幸的是,formName函数的“startSubForm”参数需要内部表单名称,而不是标题描述符。

代码语言:javascript
复制
/* Debug output */
Connectiong to https://www.eshbelsaas.com/ui/.
Opening form [ORDERS] in company [usdemo].
Opened form [Sales Orders].

Subforms of Sales Orders.
  --Opening subform
    {"title":"Attachments"}.

因此,我没想到随后对startSubForm的调用会起作用:

代码语言:javascript
复制
pdq.subForm = function (FormName, pdqFormLoad) {

    console.log("Opening subform [%s] in company [%s].", FormName, _config.company);

    eventEmitter.on('pdqFormLoad', pdqFormLoad);
    priority.startSubForm(FormName, pdq.ErrorCallback, pdq.onUpdateFields).then(
        function (form) {        
            eventEmitter.emit('pdqFormLoad', form);

        },

        function () {
            eventEmitter.emit('pdqFormLoad', null);

        }
    );
}

我没想到的是这个包会否认所有关于这个函数的知识:

代码语言:javascript
复制
Opening subform [Attachments] in company [usdemo].
(node:38560) UnhandledPromiseRejectionWarning: 
Unhandled promise rejection (rejection id: 1): 
TypeError: priority.startSubForm is not a function

有什么建议吗,请@新美布希里,莱尔?

更新2:好的,我现在接收子表单ID,并将它与父表单一起传递给我的函数,如果存在类似这样的内容的话:

代码语言:javascript
复制
pdq.startForm = function (parent, FormName, pdqFormLoad) {

    eventEmitter.on('pdqFormLoad', pdqFormLoad);

    if (parent) {
        console.log("Parent form.\n%j", parent);
        parent.startSubForm(FormName, pdq.ErrorCallback, pdq.onUpdateFields).then(
            function (subform) {
                console.log("Sub form.\n%j", subform);
                eventEmitter.emit('pdqFormLoad', subform);

            },

            function () {
                eventEmitter.emit('pdqFormLoad', null);

            }
        );

    } else {
        priority.formStart(
            FormName,
            pdq.ErrorCallback,
            pdq.onUpdateFields,
            _config.company,
            0
        ).then(
            function (form) {
                eventEmitter.emit('pdqFormLoad', form);

            },

            function () {
                eventEmitter.emit('pdqFormLoad', null);

            }
        );

    };

}

这适用于对formStart (parent==null)的调用。但是,当我在父窗体上调用startSubForm (由formstart调用创建)时,传递给onSuccsess事件的表单对象是父表单,而不是被请求的子窗体。

一个例子..。

代码语言:javascript
复制
parent.startSubForm("EXTFILES" ...

其中父对象是由formStart用parent.name = "ORDERS“创建的表单对象。

代码语言:javascript
复制
...then(
            function (subform) {

subform.name也= "ORDERS“

有什么想法吗?

更新3:

以下是父/返回的子表单对象。

父窗体.

代码语言:javascript
复制
{
  "name": "ORDERS",
  "title": "Sales Orders",
  "subForms": {
    "EXTFILES": { "title": "Attachments" },
    ...
  },
  "activations": {
    ...
  },
  "columns": {
    ...
  },
  "oneline": 0,
  "isquery": 0,
  "ishtml": 0
}

子表.

代码语言:javascript
复制
{
  "name": "ORDERS",
  "title": "Sales Orders",
  "subForms": {
    "EXTFILES": { "title": "Attachments" },
    ...
  },
  "activations": {
    ...
  },
  "columns": {
    ...
  },
  "oneline": 0,
  "isquery": 0,
  "ishtml": 0
}

更新4

调用startSubForm返回父窗体的另一个示例,而不是请求的子窗体.

代码语言:javascript
复制
    function thisapp(){
        return new Promise((resolve, reject) => {
            formStart('APPGEN', showMessage, updateFields).then(
                function (appgen) {

                    var thisQuery = QueryValue();
                    thisQuery.field="APPNAME";
                    thisQuery.fromval=config.appname;

                    var f = FilterValue();
                    f.QueryValues.push(thisQuery);

                    appgen.Filter = f;
                    appgen.getRows(0).then(
                        function(rows) {
                            appgen.setActiveRow(1);
                            resolve(appgen);
                        },
                        function(message){
                            reject(message)
                        }
                    )                   
                },

                function(message){
                    reject(message)
                }

            )

        });
    };

    function appForms(appgen, formName){
        return new Promise((resolve, reject) => {
            appgen.startSubForm("APPFORMS", showMessage, updateFields).then(
                function (appforms) {

                    var thisQuery = QueryValue();
                    thisQuery.field="FATENAME";
                    thisQuery.fromval=formName;

                    var f = FilterValue();
                    f.QueryValues.push(thisQuery);

                    appforms.Filter = f;
                    resolve(appforms);
                },

                function(message){
                    reject(message)
                }

            )
        });
    };

    function priorityReady() {

        login(config).then(
            function(){
                thisapp().then(
                    function(appgen){
                        appForms(appgen, "DOCUMENTS_Q").then(
                            function(appforms){
                                appforms.getRows(0).then(
                                    function(rows) {
                                        console.log(rows);
                                    }, showMessage
                                )
                            }, showMessage
                        )
                    }, showMessage
                )
            }, showMessage
        )

    }
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-06-20 06:35:10

我将逐一回答这两个问题:

首先,在打开的subForms对象上存在的form属性是一个javascript对象,其中键是内部子窗体名称,值是一个带有子表单标题的对象。

代码语言:javascript
复制
for (subformName in form.subForms) {                        
     console.log("--Opening subform: " + subformName);
}

将产出:

代码语言:javascript
复制
Subforms of Sales Orders.
  --Opening subform EXTFILES

为了检索具有子窗体的所有属性的form对象,您必须使用startSubForm启动子表单。

其次,startSubForm函数是由formStart检索的父form对象的实例方法。它不是优先级模块的全局方法。

因此,你应该做的是:

代码语言:javascript
复制
formStart('ORDERS',...)
  .then(function(form) {//retrieve the parent form object
     form.startSubForm('EXTFILES') //start a subform for that form
      .then(function(subform) { ...}
  });

startSubForm为特定表单启动一个子表单,这就是为什么应该对它的父窗体的特定form对象调用is。为了启动子子表单,应该在startSubForm对象上调用subform等。

通常,我要提到的是,为特定表单执行操作的所有方法都是form对象的实例方法。可用实例方法的列表被记录为这里

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44632551

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档