我有一个文档模板,就像附加的屏幕截图一样。现在我的要求是当我将其在alfresco网站上传时,我想动态更新该文档的某些值。我将通过节点模板或上传创建该文档。我想从文档属性页面提供这些值。 任何人都可以帮助我,我怎样才能做到这一点。
我尝试使用java脚本,但我遇到了一些问题。所以我想使用Alfresco CMIS API。但我在alfresco cmis中相当新。所以任何人都可以告诉我可以用于此任务的更好方法。
答案 0 :(得分:2)
我认为你应该通过Rule
触发自定义操作当有人更新节点时(例如通过编辑属性),您的操作将被触发,您将能够:
Here是了解如何创建自定义操作的优秀教程。
注意:如果您想第二次更改属性(例如,使用版本控制),则可能必须保留原始模板文档。
编辑(请参阅下面的讨论):
我假设您知道如何在露天使用规则:http://docs.alfresco.com/5.0/tasks/library-folder-rules-define.html
声明要分配给规则的新操作。当删除或更新Excel时,必须触发此操作
创建实现您需求的操作:
public class MyAction extends ActionExecuterAbstractBase {
...
@Override
protected void executeImpl(final Action arg0, final NodeRef arg1) {
// your code here
}
....
}
此操作将:
获取nodeRef参数(即excel文件)并加载文件
...
Inputstream inputstream = getFileFolderService().getReader(arg1).getContentInputStream();
...
NPOIFSFileSystem fs = null;
HSSFWorkbook workbook = null;
try {
fs = new NPOIFSFileSystem(inputstream);
workbook = new HSSFWorkbook(fs.getRoot(), true);
//get your data with POI
对于Excel的每一行:
制作模板的副本:
找到它:
getSearchService().query(searchParameters)
复制它:
getFileFolderService().copy(sourceNodeRef, targetParentRef, newName)
更新新文件的内容:
ContentWriter writerDoc = getContentService().getWriter(document.getNodeRef(), ContentModel.PROP_CONTENT,
true);
writerDoc.putContent(file/inputStream);
在您的上下文文件中,声明您的操作:
<bean id="my-action" class="x.y.z.MyAction" parent="action-executer">
<property name="searchService">
<ref bean="searchService" />
</property>
<property name="nodeService">
<ref bean="nodeService" />
</property>
<property name="contentService">
<ref bean="contentService" />
</property>
<property name="fileFolderService">
<ref bean="FileFolderService" />
</property>
....
</bean>
在“共享”中,使用您创建的操作为文件夹指定规则。