主要功能:获取装配图下所有关联的工程图,形成列表,并下载选中的工程图附件。
1、后端
1、编写ComponentBuilder
package ext.cust.builder;
import com.ptc.jca.mvc.components.JcaComponentParams;
import com.ptc.mvc.components.*;
import ext.cust.ExportDrw;
import wt.epm.EPMDocument;
import wt.util.WTException;
import java.util.ArrayList;
@ComponentBuilder("ext.cust.builder.DownloadAttachBuilder")
public class DownloadAttachBuilder extends AbstractComponentBuilder{
@Override
public Object buildComponentData(ComponentConfig config, ComponentParams params) throws Exception {
String isReleased= ((JcaComponentParams)params).getHelperBean().getNmCommandBean().getRequest().getParameter("isReleased");
Object obj = ((JcaComponentParams) params).getHelperBean().getNmCommandBean().getPrimaryOid().getRefObject();
if(obj instanceof EPMDocument){
return new ExportDrw().getAllEPMDocument((EPMDocument) obj,isReleased);
}else{
return new ArrayList<>();
}
}
@Override
public ComponentConfig buildComponentConfig(ComponentParams params) throws WTException {
ComponentConfigFactory factory = getComponentConfigFactory();
TableConfig table = factory.newTableConfig();
table.setLabel("请选择需要下载的绘图");
ColumnConfig icon = factory.newColumnConfig("type_icon",false);
table.setTypes("wt.epm.EPMDocument");
table.setId("drwList");
table.setSelectable(true);
table.addComponent(icon);
table.addComponent(factory.newColumnConfig("number", true));
table.addComponent(factory.newColumnConfig("name", true));
table.addComponent(factory.newColumnConfig("version", false));
table.addComponent(factory.newColumnConfig("creator", false));
table.addComponent(factory.newColumnConfig("state", false));
return table;
}
}
2、注册mvc.xml
<bean id="downloadAttachBuilder" class="ext.cust.builder.DownloadAttachBuilder" />
2、前端
getAttachList.jsp
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@taglib uri="http://www.ptc.com/windchill/taglib/components" prefix="jca" %>
<%@taglib uri="http://www.ptc.com/windchill/taglib/core" prefix="wc" %>
<%@taglib uri="http://www.ptc.com/windchill/taglib/fmt" prefix="fmt" %>
<%@ taglib uri="http://www.ptc.com/windchill/taglib/changeWizards" prefix="cwiz" %>
<%@ taglib uri="http://www.ptc.com/windchill/taglib/mvc" prefix="mvc"%>
<%@ include file="/netmarkets/jsp/components/beginWizard.jspf"%>
<%@ page contentType="text/html; charset=UTF-8" %>
<div style="margin-top: 10px;margin-left: 10px">
下载方式:
<input type="radio" id="gender1" name="isReleased" value="false" text="" checked onclick="changeType()"/>最新
<input type="radio" id="gender2" name="isReleased" value="true" text="" onclick="changeType()"/>最新已批准
</div>
<jsp:include page="${mvc:getComponentURL('ext.cust.builder.DownloadAttachBuilder')}" />
<div style="text-align: right;margin-right: 10px">
<button type="button" onclick="download()">下载</button>
</div>
<script>
function download(){
let table = tableUtils.getTable("drwList");
let selections = table.getSelectionModel().getSelections();
let soids = [];
if(selections.length == 0){
alert("请至少选中一条需要下载的绘图!");
return;
}
for (let i = 0, l = selections.length; i < l; i++) {
soids.push(selections[i].get('oid'));
}
let tempForm = document.createElement("form");//创建form表单,以下数form表单的各种参数
tempForm.id = "tempForm";
tempForm.method = "post";
tempForm.action = "/Windchill/netmarkets/jsp/down/downloadAttach.jsp";
tempForm.target = "_blank";
let hideInput1 = document.createElement("input");//创建标签 <input></input> 标签 然后设定属性,最后追加为 form标签的子标签
hideInput1.type = "hidden";
hideInput1.name = "ids";
hideInput1.value = JSON.stringify(soids);
tempForm.appendChild(hideInput1);
document.body.appendChild(tempForm);
tempForm.submit();//提交POST请求
document.body.removeChild(tempForm)
}
function changeType(){
PTC.jca.table.Utils.reload('drwList', {}, true);
}
</script>
<%@ include file="/netmarkets/jsp/util/end.jspf"%>
downloadAttach.jsp
<%@ page import="wt.epm.EPMDocument" %>
<%@ page import="java.util.*" %>
<%@ page import="org.json.JSONArray" %>
<%@ page import="wt.fc.*" %>
<%@ page import="ext.cust.ExportDrw" %>
<%@ page import="ext.cust.Attachment" %>
<%@ page contentType="text/html; charset=UTF-8" %>
<%
String parameter = request.getParameter("ids");
String fileName = request.getParameter("file");
JSONArray array = new JSONArray(parameter);
ReferenceFactory rf = new ReferenceFactory();
List<EPMDocument> docs = new ArrayList<>();
for (int i = 0; i < array.length(); i++) {
WTReference reference = rf.getReference(array.getString(i));
EPMDocument document = (EPMDocument) reference.getObject();
docs.add(document);
}
if(docs.size() == 0){
out.write("未找到PDF附件,oid列表为"+docs);
}else{
ExportDrw exportDrw = new ExportDrw();
List<Attachment> epmAttach = exportDrw.getEPMAttach(docs);
if(epmAttach.size() == 0){
out.write("未找到PDF附件,oid列表为"+docs);
}else{
response.setHeader("Content-Disposition", "attachment; filename=" + System.currentTimeMillis() +".zip");
byte[] bytes = exportDrw.zipFile(exportDrw.getEPMAttach(docs));
response.getOutputStream().write(bytes);
}
}
%>
3、注册菜单项
actionmodels.xml
<model name="epmdocuments details page actions" menufor="wt.epm.EPMDocument">
<action name="downloadPDF" type="epmdocument"/>
</model>
actions.xml
<objecttype name="epmdocument" class="wt.epm.EPMDocument">
<action name="downloadPDF">
<command url="/netmarkets/jsp/down/getAttachList.jsp" windowType="popup" />
</action>
</objecttype>
action.properties、action_zh_CN.properties
empdocument.downloadPDF.icon=download.gif
empdocument.downloadPDF.tooltip=\u4e0b\u8f7dPDF
empdocument.downloadPDF.description=\u4e0b\u8f7dPDF