gpt4 book ai didi

javascript - Priority-web-sdk 中的 SubForm 枚举

转载 作者:行者123 更新时间:2023-11-28 04:30:45 25 4
gpt4 key购买 nike

我正在枚举表单/子表单,如下所示:

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.");

};
};

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

/* 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 的调用会起作用:

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

}
);
}

我没想到的是该包会拒绝该函数的所有知识:

Opening subform [Attachments] in company [usdemo].
(node:38560) UnhandledPromiseRejectionWarning:
Unhandled promise rejection (rejection id: 1):
TypeError: priority.startSubForm is not a function

@NeomiBushary、@Leor 有什么建议吗?


更新2:好的,我现在正在接收子表单 ID 并将其与父表单(如果存在)一起传递给我的函数:

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)。但是,当我在父表单(由 formstart 调用创建)上调用 startSubForm 时,传递给 [onSuccsess] 事件的结果表单对象是父表单,而不是请求的子表单。

一个例子...

parent.startSubForm("EXTFILES" ...

其中parent是由formStart创建的表单对象,其parent.name =“ORDERS”

...then(
function (subform) {

subform.name 也是 =“ORDERS”

请问有什么想法吗?


更新3:

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

家长表格。

{
"name": "ORDERS",
"title": "Sales Orders",
"subForms": {
"EXTFILES": { "title": "Attachments" },
...
},
"activations": {
...
},
"columns": {
...
},
"oneline": 0,
"isquery": 0,
"ishtml": 0
}

子表单。

{
"name": "ORDERS",
"title": "Sales Orders",
"subForms": {
"EXTFILES": { "title": "Attachments" },
...
},
"activations": {
...
},
"columns": {
...
},
"oneline": 0,
"isquery": 0,
"ishtml": 0
}


更新4

调用 startSubForm 返回父表单而不是请求的子表单的另一个示例...

    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
)

}

最佳答案

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

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

for (subformName in form.subForms) {                        
console.log("--Opening subform: " + subformName);
}

将输出:

Subforms of Sales Orders.
--Opening subform EXTFILES

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

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

所以你应该这样做:

formStart('ORDERS',...)
.then(function(form) {//retrieve the parent form object
form.startSubForm('EXTFILES') //start a subform for that form
.then(function(subform) { ...}
});

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

一般来说,我会提到,为特定表单执行操作的所有方法都是 form 对象的实例方法。可用实例方法的列表记录在here中。

关于javascript - Priority-web-sdk 中的 SubForm 枚举,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44632551/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com