diff --git a/com.actionsoft.apps.coe.pal.datamigration/manifest.xml b/com.actionsoft.apps.coe.pal.datamigration/manifest.xml index a7f1da1c..0f84df6b 100644 --- a/com.actionsoft.apps.coe.pal.datamigration/manifest.xml +++ b/com.actionsoft.apps.coe.pal.datamigration/manifest.xml @@ -3,7 +3,7 @@ PAL数据迁移 1.0 - 12 + 16 北京炎黄盈动科技发展有限责任公司 false diff --git a/com.actionsoft.apps.coe.pal.datamigration/src/com/actionsoft/apps/coe/pal/datamigration/util/htmltodocx/HtmlToWord.java b/com.actionsoft.apps.coe.pal.datamigration/src/com/actionsoft/apps/coe/pal/datamigration/util/htmltodocx/HtmlToWord.java index 338fc7bd..b5ba58c6 100644 --- a/com.actionsoft.apps.coe.pal.datamigration/src/com/actionsoft/apps/coe/pal/datamigration/util/htmltodocx/HtmlToWord.java +++ b/com.actionsoft.apps.coe.pal.datamigration/src/com/actionsoft/apps/coe/pal/datamigration/util/htmltodocx/HtmlToWord.java @@ -1,10 +1,13 @@ +/* package com.actionsoft.apps.coe.pal.datamigration.util.htmltodocx; +*/ /** * @author baizp * @Description: * @date 2022/6/24 16:01 - */ + *//* + import org.docx4j.dml.wordprocessingDrawing.Inline; import org.docx4j.jaxb.Context; @@ -28,22 +31,26 @@ import java.io.*; import java.math.BigInteger; import java.util.List; +*/ /** * @program: htmltoword * @description: html 转 docx * @author: corey * @create: 2020-04-29 14:10 - **/ + **//* + public class HtmlToWord { private static ObjectFactory factory; private static WordprocessingMLPackage wordMLPackage; - /** + */ +/** * 将一段富文本字符串转为一个字节数组 * * @param data * @return - */ + *//* + public static byte[] resolveHtml(String data) { Document document = Jsoup.parseBodyFragment(data, "UTF-8"); ByteArrayOutputStream out = null; @@ -144,20 +151,28 @@ public class HtmlToWord { public static void setNum1(int level,P p){ - /*ObjectFactory factory = new org.docx4j.wml.ObjectFactory(); - P p = factory.createP();*/ + */ +/*ObjectFactory factory = new org.docx4j.wml.ObjectFactory(); + P p = factory.createP();*//* - /*org.docx4j.wml.Text t = factory.createText(); - t.setValue(em.text());*/ - /*org.docx4j.wml.R run = factory.createR(); + */ +/*org.docx4j.wml.Text t = factory.createText(); + t.setValue(em.text());*//* + + + */ +/*org.docx4j.wml.R run = factory.createR(); run.getContent().add(t); - p.getContent().add(run);*/ + p.getContent().add(run);*//* - /*org.docx4j.wml.PPr ppr = factory.createPPr(); - p.setPPr(ppr);*/ + */ +/*org.docx4j.wml.PPr ppr = factory.createPPr(); + + p.setPPr(ppr);*//* + org.docx4j.wml.PPr ppr =p.getPPr(); // Create and add PPrBase.NumPr numPr = factory.createPPrBaseNumPr(); @@ -176,14 +191,16 @@ public class HtmlToWord { //wordMLPackage.getMainDocumentPart().addObject(p); } - /** + */ +/** * @param @param text * @param @return 设定文件 * @return P 返回类型 * @throws * @Title: addParapraph * @Description: (文本转段落) - */ + *//* + private static P addParapraph(String text) { factory = Context.getWmlObjectFactory(); P paragraph = factory.createP(); @@ -197,13 +214,15 @@ public class HtmlToWord { return paragraph; } - /** + */ +/** * @param @param p * @param @param str 设定文件 * @return void 返回类型 * @throws * @Title: setFirstLine - */ + *//* + private static void setFirstLine(P p, String str) { PPr ppr = getPPr(p); Ind ind = ppr.getInd(); @@ -225,9 +244,11 @@ public class HtmlToWord { return ppr; } - /** + */ +/** * table @param @return 设定文件 @return Tbl 返回类型 @throws - */ + *//* + private static Tbl addTable(Element table) { factory = Context.getWmlObjectFactory(); Tbl tbl = factory.createTbl(); @@ -240,9 +261,11 @@ public class HtmlToWord { return tbl; } - /** + */ +/** * tr @param @return 设定文件 @return Tr 返回类型 @throws - */ + *//* + private static Tr addTableTr(Element tr) { Elements tds = tr.getElementsByTag("th").isEmpty() ? tr.getElementsByTag("td") : tr.getElementsByTag("th"); Tr ftr = factory.createTr(); @@ -255,9 +278,11 @@ public class HtmlToWord { return ftr; } - /** + */ +/** * 本方法创建一个单元格属性集对象和一个表格宽度对象. 将给定的宽度设置到宽度对象然后将其添加到 属性集对象. 最后将属性集对象设置到单元格中. - */ + *//* + private static void setCellWidth(Tc tableCell, int width) { TcPr tableCellProperties = new TcPr(); TblWidth tableWidth = new TblWidth(); @@ -266,9 +291,11 @@ public class HtmlToWord { tableCell.setTcPr(tableCellProperties); } - /** + */ +/** * 本方法为表格添加边框 - */ + *//* + private static void addBorders(Tbl table) { table.setTblPr(new TblPr()); CTBorder border = new CTBorder(); @@ -287,14 +314,16 @@ public class HtmlToWord { table.getTblPr().setTblBorders(borders); } - /** + */ +/** * 将图片从文件对象转换成字节数组. * * @param file 将要转换的文件 * @return 包含图片字节数据的字节数组 * @throws FileNotFoundException * @throws IOException - */ + *//* + private static byte[] convertImageToByteArray(File file) throws FileNotFoundException, IOException { InputStream is = new FileInputStream(file); long length = file.length(); @@ -316,7 +345,8 @@ public class HtmlToWord { return bytes; } - /** + */ +/** * Docx4j拥有一个由字节数组创建图片部件的工具方法, 随后将其添加到给定的包中. 为了能将图片添加 到一个段落中, 我们需要将图片转换成内联对象. * 这也有一个方法, 方法需要文件名提示, 替换文本, 两个id标识符和一个是嵌入还是链接到的指示作为参数. 一个id用于文档中绘图对象不可见的属性, * 另一个id用于图片本身不可见的绘制属性. 最后我们将内联 对象添加到段落中并将段落添加到包的主文档部件. @@ -324,7 +354,8 @@ public class HtmlToWord { * @param wordMLPackage 要添加图片的包 * @param bytes 图片对应的字节数组 * @throws Exception 不幸的createImageInline方法抛出一个异常(没有更多具体的异常类型) - */ + *//* + private static void addImageToPackage(WordprocessingMLPackage wordMLPackage, byte[] bytes) throws Exception { BinaryPartAbstractImage imagePart = BinaryPartAbstractImage.createImagePart(wordMLPackage, bytes); @@ -337,13 +368,15 @@ public class HtmlToWord { wordMLPackage.getMainDocumentPart().addObject(paragraph); } - /** + */ +/** * 创建一个对象工厂并用它创建一个段落和一个可运行块R. 然后将可运行块添加到段落中. 接下来创建一个图画并将其添加到可运行块R中. 最后我们将内联 * 对象添加到图画中并返回段落对象. * * @param inline 包含图片的内联对象. * @return 包含图片的段落 - */ + *//* + private static P addInlineImageToParagraph(Inline inline) { // 添加内联对象到一个段落中 ObjectFactory factory = new ObjectFactory(); @@ -356,7 +389,8 @@ public class HtmlToWord { return paragraph; } - /** + */ +/** * This method alters the default style sheet that is part of each document. *

* To do this, we first retrieve the style sheet from the package and then get @@ -365,7 +399,8 @@ public class HtmlToWord { * the alterations if applicable. * * @param - */ + *//* + public static void alterStyleSheet() { StyleDefinitionsPart styleDefinitionsPart = wordMLPackage.getMainDocumentPart().getStyleDefinitionsPart(); Styles styles = null; @@ -389,12 +424,14 @@ public class HtmlToWord { } } - /** + */ +/** * First we create a run properties object as we want to remove nearly all of * the existing styling. Then we change the font and font size and set the run * properties on the given style. As in previous examples, the font size is * defined to be in half-point size. - */ + *//* + private static void alterNormalStyle(Style style) { // we want to change (or remove) almost all the run properties of the // normal style, so we create a new one. @@ -404,16 +441,20 @@ public class HtmlToWord { style.setRPr(rpr); } - /** + */ +/** * For this style, we get the existing run properties from the style and remove * the theme font information from them. Then we also remove the bold styling, * change the font size (half-points) and add an underline. - */ + *//* + private static void alterHeading1Style(Style style) { RPr rpr = getRunPropertiesAndRemoveThemeInfo(style); removeBoldStyle(rpr); changeFontSize(rpr, 28); - /* addUnderline(rpr); */ + */ +/* addUnderline(rpr); *//* + } private static void alterHeading2Style(Style style) { @@ -421,7 +462,9 @@ public class HtmlToWord { removeBoldStyle(rpr); changeFontSize(rpr, 24); - /* addUnderline(rpr); */ + */ +/* addUnderline(rpr); *//* + } private static RPr getRunPropertiesAndRemoveThemeInfo(Style style) { @@ -432,7 +475,8 @@ public class HtmlToWord { return rpr; } - /** + */ +/** * Change the font of the given run properties to Arial. *

* A run font specifies the fonts which shall be used to display the contents of @@ -441,7 +485,8 @@ public class HtmlToWord { * properties. * * @param runProperties - */ + *//* + private static void changeFontToArial(RPr runProperties) { RFonts runFont = new RFonts(); runFont.setAscii("Arial"); @@ -449,47 +494,55 @@ public class HtmlToWord { runProperties.setRFonts(runFont); } - /** + */ +/** * Change the font size of the given run properties to the given value. * * @param runProperties * @param fontSize Twice the size needed, as it is specified as half-point value - */ + *//* + private static void changeFontSize(RPr runProperties, int fontSize) { HpsMeasure size = new HpsMeasure(); size.setVal(BigInteger.valueOf(fontSize)); runProperties.setSz(size); } - /** + */ +/** * Removes the theme font information from the run properties. If this is not * removed then the styles based on the normal style won't inherit the Arial * font from the normal style. * * @param runProperties - */ + *//* + private static void removeThemeFontInformation(RPr runProperties) { runProperties.getRFonts().setAsciiTheme(null); runProperties.getRFonts().setHAnsiTheme(null); } - /** + */ +/** * Removes the Bold styling from the run properties. * * @param runProperties - */ + *//* + private static void removeBoldStyle(RPr runProperties) { runProperties.getB().setVal(false); } - /** + */ +/** * As in the previous example, this method creates a footer part and adds it to * the main document and then returns the corresponding relationship. * * @return * @throws InvalidFormatException - */ + *//* + private static Relationship createFooterPart() throws InvalidFormatException { FooterPart footerPart = new FooterPart(); footerPart.setPackage(wordMLPackage); @@ -499,7 +552,8 @@ public class HtmlToWord { return wordMLPackage.getMainDocumentPart().addTargetPart(footerPart); } - /** + */ +/** * As in the previous example, we create a footer and a paragraph object. But * this time, instead of adding text to a run, we add a field. And just as with * the table of content, we have to add a begin and end character around the @@ -507,7 +561,8 @@ public class HtmlToWord { * content of the footer and then return it. * * @return - */ + *//* + public static Ftr createFooterWithPageNr() { Ftr ftr = factory.createFtr(); P paragraph = factory.createP(); @@ -520,7 +575,8 @@ public class HtmlToWord { return ftr; } - /** + */ +/** * Creating the page number field is nearly the same as creating the field in * the TOC example. The only difference is in the value. We use the PAGE * command, which prints the number of the current page, together with the @@ -528,7 +584,8 @@ public class HtmlToWord { * preserved when the field is updated. * * @param paragraph - */ + *//* + private static void addPageNumberField(P paragraph) { R run = factory.createR(); Text txt = new Text(); @@ -538,12 +595,14 @@ public class HtmlToWord { paragraph.getContent().add(run); } - /** + */ +/** * Every fields needs to be delimited by complex field characters. This method * adds the delimiter that precedes the actual field to the given paragraph. * * @param paragraph - */ + *//* + private static void addFieldBegin(P paragraph) { R run = factory.createR(); FldChar fldchar = factory.createFldChar(); @@ -552,12 +611,14 @@ public class HtmlToWord { paragraph.getContent().add(run); } - /** + */ +/** * Every fields needs to be delimited by complex field characters. This method * adds the delimiter that follows the actual field to the given paragraph. * * @param paragraph - */ + *//* + private static void addFieldEnd(P paragraph) { FldChar fldcharend = factory.createFldChar(); fldcharend.setFldCharType(STFldCharType.END); @@ -566,12 +627,14 @@ public class HtmlToWord { paragraph.getContent().add(run3); } - /** + */ +/** * This method fetches the document final section properties, and adds a newly * created footer reference to them. * * @param relationship - */ + *//* + public static void createFooterReference(Relationship relationship) { List sections = wordMLPackage.getDocumentModel().getSections(); @@ -590,11 +653,13 @@ public class HtmlToWord { sectPr.getEGHdrFtrReferences().add(footerReference); } - /** + */ +/** * Adds a page break to the document. * * @param documentPart - */ + *//* + private static void addPageBreak(MainDocumentPart documentPart) { Br breakObj = new Br(); breakObj.setType(STBrType.PAGE); @@ -608,3 +673,4 @@ public class HtmlToWord { } } } +*/ diff --git a/com.actionsoft.apps.coe.pal.datamigration/web/com.actionsoft.apps.coe.pal.datamigration/main.zip b/com.actionsoft.apps.coe.pal.datamigration/web/com.actionsoft.apps.coe.pal.datamigration/main.zip new file mode 100644 index 00000000..ac9a80f2 Binary files /dev/null and b/com.actionsoft.apps.coe.pal.datamigration/web/com.actionsoft.apps.coe.pal.datamigration/main.zip differ diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/util/CoeProcessLevelUtil.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/util/CoeProcessLevelUtil.java index 079f9cbd..84456ae4 100755 --- a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/util/CoeProcessLevelUtil.java +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/util/CoeProcessLevelUtil.java @@ -23,11 +23,13 @@ import com.actionsoft.apps.coe.pal.pal.ws.web.VersionUtil; import com.actionsoft.apps.resource.plugin.profile.DCPluginProfile; import com.actionsoft.bpms.bpmn.engine.cache.ProcessDefCache; import com.actionsoft.bpms.bpmn.engine.model.def.ProcessDefinition; +import com.actionsoft.bpms.commons.login.constant.LoginConst; import com.actionsoft.bpms.commons.mvc.view.ResponseObject; import com.actionsoft.bpms.org.model.DepartmentModel; import com.actionsoft.bpms.org.model.RoleModel; import com.actionsoft.bpms.org.model.UserModel; import com.actionsoft.bpms.server.DispatcherRequest; +import com.actionsoft.bpms.server.SSOUtil; import com.actionsoft.bpms.server.UserContext; import com.actionsoft.bpms.server.fs.DCContext; import com.actionsoft.bpms.server.fs.dc.DCProfileManager; @@ -2253,7 +2255,24 @@ public class CoeProcessLevelUtil { JSONObject attribute = new JSONObject(); attribute.put("name", property.getPropertyName()); attribute.put("key", property.getPropertyId()); - attribute.put("value", inputValue); + + + //如果是关联属性,增加链接功能 + if(attributeModel.getType().equals("relation")){ + + String sessionId = new SSOUtil().registerClientSessionNoPassword(plModel.getCreateUser(), LoginConst.DEFAULT_LANG, "localhost", LoginConst.DEVICE_PC); + + String relationFileId = JSONObject.parseObject(property.getPropertyValue()).get("relationFileId").toString(); + + + String url=SDK.getPortalAPI().getPortalUrl()+"/r/w?uuid="+relationFileId+"&teamId=&cmd=com.actionsoft.apps.coe.pal_pl_repository_designer&sid="+sessionId+""; + String appUrl=""+inputValue+""; + attribute.put("value", appUrl); + }else{ + attribute.put("value", inputValue); + } + + attribute.put("type", attributeModel.getType()); result.put(String.valueOf(index++), attribute); } diff --git a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/extend/js/designer.extend.link.view.portal.js b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/extend/js/designer.extend.link.view.portal.js index 58a29759..4c8c84d7 100755 --- a/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/extend/js/designer.extend.link.view.portal.js +++ b/com.actionsoft.apps.coe.pal/web/com.actionsoft.apps.coe.pal/lib/designer/extend/js/designer.extend.link.view.portal.js @@ -1445,6 +1445,7 @@ function isObjectRelationshipModel(linker, isAlert) { // 文件属性的处理 function initProcessDesc() { + debugger; var length = Object.keys(processDesc).length; var t = ''; for(var i = 1; i <= length; i++) {