我们的目标是使用从PluginService
对象检索的值实现一个预填充的文档创建表单。
当用户右键单击一个文档并选择“New document from this one”时,它会触发一个Action
,打开一个AddContentItemDialog
。然后,调用服务来检索所选文档的属性(也许这不是必要的,通过Firefox开发者面板,我看到大多数,也许所有的自定义属性都已经被提取了)。
我可以填充文本字段属性,但不能填充ChoiceList
属性:它们不会更新,尽管它们 * 可能 * 在内部填充。
下面是一个代码的注解示例:
require(["dojo/_base/declare",
"dojo/_base/lang",
"dojo/aspect",
"ecm/model/Request",
"ecm/widget/dialog/AddContentItemDialog"],
function(declare, lang, aspect, Request, AddContentItemDialog) {
// Parameters passed to the service as HttpServletRequest
// (Custom function)
var serviceParams = getServicesParams(items[0]);
// Object store and parentFolder retrieving (needed below)
var parentFolder = items[0].parent;
var objectStore = items[0].objectStore;
// Retrieving the template to use for the dialog
// (Custom function)
var entryTemplate = retrieveTemplate(objectStore, parentFolder);
// Service call
Request.invokePluginService("FormPlugin", "FormService", {
requestParams: serviceParams,
requestCompleteCallback: function(response) {
// Creating the global dialog box
var addContentItemDialog = new AddContentItemDialog();
// Box containing the document properties
var addContentItemPropertiesPane =
addContentItemDialog.addContentItemPropertiesPane;
// Box containing general stuff
var addContentItemGeneralPane =
addContentItemDialog.addContentItemGeneralPane;
// Showing the dialog box
addContentItemDialog.show(
repository,
parentFolder, /* parent folder */
true, /* document being added*/
false, /* not virtual */
null, /* no callback function */
null, /* no teamspace */
true, /* use an entry template */
entryTemplate, /* entry template */
true /* can't choose directory from another rep */
);
// Waiting for complete rendering before filling the properties and general fields
aspect.after(addContentItemPropertiesPane,
"onCompleteRendering",
function() {
// Setting the destination and lock it
var folderSelector = addContentItemGeneralPane.folderSelector;
folderSelector.setRoot(parentFolder, objectStore);
folderSelector .setDisabled(true);
// Property filling - Work :-)
addContentItemDialog.setTitle("New document from another");
addContentItemDialog.setIntroText("This form allow you to create a document from another one.");
addContentItemPropertiesPane.setPropertyValue("DocumentTitle", "Prefilled title");
// Property filling - Doesn't work :-(
addContentItemPropertiesPane.setPropertyValue("A_ChoiceList_Prop",
[ "Value\\1", "Value\\2", "Value\\3"]);
}, true);
}
});
});
});
也许我错过了一些神奇的IBM代码行来完成它。
1条答案
按热度按时间nafvub8i1#
***已更新。****1)代码现在正确地等待检索条目模板内容。2)此答案也适用于以前版本的ICN。3)此答案在全局范围内定义函数。**请格外小心,您可能会遇到与其他插件和ICN代码名称冲突的情况。*请改用回调函数,或“强”命名您的函数。
我按照以下步骤编写插件操作:
1.检索源文档和父文件夹
1.调用获取所单击文档的属性的插件服务
1.检索Entry Template并使用获取的Properties填充其默认值
1.创建一个
AddContentItemDialog
对象,并通过向其传递Entry Template来显示该对象。Entry Template由
EntryTemplate
对象描述。它有一个引用数组的键propertiesOptions
。该数组的每个元素代表一个文档属性。每个元素包含一个名为defaultValue
的键:字符串值作为字符串(显然)传递,日期作为ISO 8601格式的字符串(
yyyy-MM-ddTHH:mm:ss
)传递,列表作为数组传递。例如,给定
n1
、n2
、n3
和propertyOption
条目:下面是PluginAction的Javascript客户端代码的实现。我没有提供服务实现,也没有提供填充Entry Template的代码,因为这有点离题。(关于编写ICN插件的更多信息,您可以参考ICN红皮书 * Customizing and Extending IBM Content Navigator *。)
还请注意,我不认为这个答案是最好的方式来设计的行动插件,不要犹豫,建议优化/良好实践相关的版本。我只是发现痛苦的重叠回调函数,所以我的目标是在顶层定义他们中的大多数,我不喜欢单片代码。
一、主块部分:
FormService
在完成后调用processRetrievalResponse()
。在这个例子中,我们将从检索我们想要的模板开始。RetrievalWaiter
代码。这里,没有while
循环,因为它将是令人厌恶的消耗。这个对象只是依赖于setTimeOut()来定期检查条目模板内容的检索。现在,该显示对话框了。