priority-web-sdk 中的子表单枚举
SubForm enumeration in priority-web-sdk
我正在像这样枚举表单/子表单:
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:
好的,我现在收到 Sub-form ID 并将其与 parent 表单一起传递给我的函数,如果存在的话:
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)。但是,当我在 parent 表单(由 formstart 调用创建)上调用 startSubForm 时,传递给 [onSuccsess] 事件的结果表单 object 是 parent 表单,而不是请求的 sub-form.
一个例子...
parent.startSubForm("EXTFILES" ...
其中 parent 是由 formStart 使用 parent.name = "ORDERS"
创建的表单 object
...then(
function (subform) {
subform.name也是="ORDERS"
有什么想法吗?
更新 3:
这是 parent / 返回的 sub-form objects.
Parent表格.
{
"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
返回 parent 表单而不是请求的子表单的另一个示例...
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
object上的subForms
属性是一个javascriptobject,其中的键是内部子表单名称和值是带有子表单标题的 object。
for (subformName in form.subForms) {
console.log("--Opening subform: " + subformName);
}
将输出:
Subforms of Sales Orders.
--Opening subform EXTFILES
为了检索具有子表单所有属性的 form
object,您必须以 startSubForm
.
开始子表单
其次,startSubForm
函数是formStart
检索到的parentform
object的实例方法。它不是优先级模块的全局方法。
所以你应该这样做:
formStart('ORDERS',...)
.then(function(form) {//retrieve the parent form object
form.startSubForm('EXTFILES') //start a subform for that form
.then(function(subform) { ...}
});
startSubForm
为特定表单启动一个子表单,这就是为什么应该在其 parent 表单的特定 form
object 上调用它的原因。为了启动 sub-sub 表单,应该在 subform
object 等
上调用 startSubForm
一般来说,我会提到所有为特定表单执行操作的方法都是 form
object 的实例方法。可用实例方法的列表记录在案 here
我正在像这样枚举表单/子表单:
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: 好的,我现在收到 Sub-form ID 并将其与 parent 表单一起传递给我的函数,如果存在的话:
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)。但是,当我在 parent 表单(由 formstart 调用创建)上调用 startSubForm 时,传递给 [onSuccsess] 事件的结果表单 object 是 parent 表单,而不是请求的 sub-form.
一个例子...
parent.startSubForm("EXTFILES" ...
其中 parent 是由 formStart 使用 parent.name = "ORDERS"
创建的表单 object...then(
function (subform) {
subform.name也是="ORDERS"
有什么想法吗?
更新 3:
这是 parent / 返回的 sub-form objects.
Parent表格.
{
"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
返回 parent 表单而不是请求的子表单的另一个示例...
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
object上的subForms
属性是一个javascriptobject,其中的键是内部子表单名称和值是带有子表单标题的 object。
for (subformName in form.subForms) {
console.log("--Opening subform: " + subformName);
}
将输出:
Subforms of Sales Orders.
--Opening subform EXTFILES
为了检索具有子表单所有属性的 form
object,您必须以 startSubForm
.
其次,startSubForm
函数是formStart
检索到的parentform
object的实例方法。它不是优先级模块的全局方法。
所以你应该这样做:
formStart('ORDERS',...)
.then(function(form) {//retrieve the parent form object
form.startSubForm('EXTFILES') //start a subform for that form
.then(function(subform) { ...}
});
startSubForm
为特定表单启动一个子表单,这就是为什么应该在其 parent 表单的特定 form
object 上调用它的原因。为了启动 sub-sub 表单,应该在 subform
object 等
startSubForm
一般来说,我会提到所有为特定表单执行操作的方法都是 form
object 的实例方法。可用实例方法的列表记录在案 here