Commit 7552ec3e authored by shyWang's avatar shyWang

PDM前端改造

流程 任务
parent f2c66700
......@@ -48,6 +48,8 @@ public class SearchOperatorEnumUtil {
public static final Map<Class<?>, String> typeItemMap = new HashMap();// 类型映射
public static final Map<String, String> typeStrPrefixMap = new HashMap();// 类型映射
public static final Map<String, String> viewMap = new HashMap();// 视图映射
public static final Map<Class<?>, String> typePrefixMap = new HashMap();// 类型映射
......@@ -79,6 +81,9 @@ public class SearchOperatorEnumUtil {
typePrefixMap.put(DxPartReferenceLinkVO.class, "wt.part.WTPartReferenceLink:");
typePrefixMap.put(DxPartDescribeLinkVO.class, "wt.part.WTPartDescribeLink:");
//TODO add
typeStrPrefixMap.put("com.yonde.dcs.xbom.common.entity.vo.DxPartVO", "wt.part.WTPart:");
typeStrPrefixMap.put("com.yonde.dcs.document.common.entity.vo.DxDocumentVO", "wt.doc.WTDocument:");
}
public static void initTypeItemMap() {
......
......@@ -63,7 +63,6 @@ public class BaseSearchService <V extends IdVO> implements RemoteAccess {
new Object[] { searchQueryCondition});
}
logger.error("findByConfigSpecSelect===111" + searchQueryCondition.toString());
/*boolean enforce = SessionServerHelper.manager.setAccessEnforced(false);*/
List<IdVO> partList = DxSearchUtil.findByConfigSpecSelect(searchQueryCondition);;
return partList;
......
......@@ -13,25 +13,26 @@ import wt.util.WTException;
import java.io.Serializable;
import java.util.Locale;
public class DxMasterVO implements Serializable {
public class DxMasterVO extends IdVO implements Serializable {
private String number;
private String name;
private String objectType;
private String createTime;
private String modifyTime;
/* private String createTime;
private String modifyTime;*/
private Long creatorId;
private Long modifierId;
private DxUserVO creator;
/* private DxUserVO creator;
private DxUserVO modifier;
private Long id;
private Long id;*/
public DxMasterVO() {
}
public DxMasterVO(RevisionControlled controlled) throws WTException {
super(controlled);
if(null != controlled) {
if (controlled instanceof WTDocument) {
WTDocument doc = (WTDocument) controlled;
......@@ -39,22 +40,19 @@ public class DxMasterVO implements Serializable {
this.id = PersistenceHelper.getObjectIdentifier(wtDocumentMaster).getId();
this.number = wtDocumentMaster.getNumber();
this.name = wtDocumentMaster.getName();
this.createTime = DateTimeUtil.timeStampToString(wtDocumentMaster.getCreateTimestamp());
this.modifyTime = DateTimeUtil.timeStampToString(wtDocumentMaster.getModifyTimestamp());
} else if(controlled instanceof WTPart) {
WTPart part = (WTPart) controlled;
WTPartMaster wtPartMaster = (WTPartMaster) part.getMaster();
this.id = PersistenceHelper.getObjectIdentifier(wtPartMaster).getId();
this.number = wtPartMaster.getNumber();
this.name = wtPartMaster.getName();
this.createTime = DateTimeUtil.timeStampToString(wtPartMaster.getCreateTimestamp());
this.modifyTime = DateTimeUtil.timeStampToString(wtPartMaster.getModifyTimestamp());
}
this.objectType = controlled.getDisplayType().getLocalizedMessage(Locale.SIMPLIFIED_CHINESE);
this.creator = new DxUserVO(controlled.getCreator().getPrincipal());
this.modifier = new DxUserVO(controlled.getModifier().getPrincipal());
this.creatorId = creator.getUserId();
this.modifierId = modifier.getUserId();
this.objectType = controlled.getDisplayType().toString();
this.setCreator(new DxUserVO(controlled.getCreator().getPrincipal()));
this.setModifier(new DxUserVO(controlled.getModifier().getPrincipal()));
this.creatorId = this.getCreator().getUserId();
this.modifierId = this.getModifier().getUserId();
this.subTypeName = "DxMaster";
}
}
......@@ -82,22 +80,6 @@ public class DxMasterVO implements Serializable {
this.objectType = objectType;
}
public String getCreateTime() {
return createTime;
}
public void setCreateTime(String createTime) {
this.createTime = createTime;
}
public String getModifyTime() {
return modifyTime;
}
public void setModifyTime(String modifyTime) {
this.modifyTime = modifyTime;
}
public Long getCreatorId() {
return creatorId;
}
......@@ -114,27 +96,4 @@ public class DxMasterVO implements Serializable {
this.modifierId = modifierId;
}
public DxUserVO getCreator() {
return creator;
}
public void setCreator(DxUserVO creator) {
this.creator = creator;
}
public DxUserVO getModifier() {
return modifier;
}
public void setModifier(DxUserVO modifier) {
this.modifier = modifier;
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
}
......@@ -3,12 +3,10 @@ package com.yonde.common;
import com.ptc.windchill.enterprise.templateutil.ActionValidator;
import com.yonde.basedata.vo.ObjFileLinkVO;
import com.yonde.basedata.vo.RepoFileVO;
import com.yonde.part.vo.DxPartVO;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.io.IOUtils;
import org.apache.commons.lang.StringUtils;
import org.apache.log4j.Logger;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.commons.CommonsMultipartFile;
import wt.access.AccessControlHelper;
import wt.access.AccessPermission;
......@@ -23,9 +21,7 @@ import wt.fc.WTObject;
import wt.folder.Folder;
import wt.folder.FolderHelper;
import wt.inf.container.WTContainerRef;
import wt.lifecycle.LifeCycleHelper;
import wt.lifecycle.LifeCycleManaged;
import wt.lifecycle.State;
import wt.lifecycle.*;
import wt.log4j.LogR;
import wt.method.RemoteAccess;
import wt.method.RemoteMethodServer;
......@@ -408,4 +404,17 @@ public class DxCommonUtils implements RemoteAccess, Serializable {
return folderStr;
}
/**
* 重置对象的生命周期模板和状态
*/
public static void reassignLifeCycle(WTContainerRef cref, LifeCycleManaged obj, String LifeCycleTemplateName, String state) throws WTException {
if (LifeCycleTemplateName != null && LifeCycleTemplateName.length() > 0) {
LifeCycleTemplate template = LifeCycleHelper.service.getLifeCycleTemplate(LifeCycleTemplateName, cref);
LifeCycleTemplateReference templateRef = template.getLifeCycleTemplateReference();
obj = LifeCycleHelper.service.reassign(obj, templateRef);
}
if (state != null && state.length() > 0) {
LifeCycleHelper.service.setLifeCycleState(obj, State.toState(state));
}
}
}
This diff is collapsed.
......@@ -22,16 +22,14 @@ import wt.part.WTPart;
import wt.pds.StatementSpec;
import wt.query.*;
import wt.session.SessionServerHelper;
import wt.util.WTAttributeNameIfc;
import wt.util.WTException;
import wt.util.WTPropertyVetoException;
import wt.vc.Iterated;
import wt.vc.views.View;
import wt.vc.views.ViewHelper;
import wt.vc.wip.WorkInProgressHelper;
import java.io.Serializable;
import java.lang.reflect.InvocationTargetException;
import java.rmi.RemoteException;
import java.sql.Timestamp;
import java.util.ArrayList;
import java.util.List;
......@@ -41,6 +39,7 @@ public class DxSearchUtil implements RemoteAccess, Serializable {
private static Logger logger = LogR.getLogger(DxSearchUtil.class.getName());
private static final long serialVersionUID = 1L;
@Deprecated
public static DxPageImpl findByConfigSpec (SearchQueryCondition searchQueryCondition) throws Exception {
if (!RemoteMethodServer.ServerFlag) {
return (DxPageImpl) RemoteMethodServer.getDefault().invoke("findByConfigSpecSelect", DxSearchUtil.class.getName(), null,
......@@ -57,11 +56,7 @@ public class DxSearchUtil implements RemoteAccess, Serializable {
searchItems = searchQueryCondition.getSearchVersion().getSearchItems();
}
QuerySpec querySpec = DxSearchUtil.buildQuerySpec(searchItems, WTPart.class);
/* LatestConfigSpec ls = new LatestConfigSpec();
querySpec = ls.appendSearchCriteria(querySpec);*/
QueryResult qr = PersistenceHelper.manager.find((StatementSpec) querySpec);
//LatestConfigSpec lcs = new LatestConfigSpec();
//qr = lcs.process(qr);
partList = new ArrayList<DxPartVO>();
while (qr.hasMoreElements()) {
WTObject o = (WTObject) qr.nextElement();
......@@ -103,12 +98,28 @@ public class DxSearchUtil implements RemoteAccess, Serializable {
QuerySpec querySpec = DxSearchUtil.buildQuerySpec(searchItems, cls);
/* LatestConfigSpec ls = new LatestConfigSpec();
querySpec = ls.appendSearchCriteria(querySpec);*/
QueryResult qr = PersistenceHelper.manager.find((StatementSpec) querySpec);
BasicPageableQuerySpec bpqs = new BasicPageableQuerySpec();
bpqs.setPrimaryStatement(querySpec);
logger.error("pageFrom====" + (searchQueryCondition.getPageFrom()-1)*searchQueryCondition.getPageSize());
logger.error("pageSize====" + searchQueryCondition.getPageSize());
bpqs.setOffset((searchQueryCondition.getPageFrom()-1)*searchQueryCondition.getPageSize());
bpqs.setRange(searchQueryCondition.getPageSize());
bpqs.setBackgroundThreadEnabled(false);
QueryResult qr = PersistenceHelper.manager.find(querySpec);
//LatestConfigSpec lcs = new LatestConfigSpec();
//qr = lcs.process(qr);
partList = new ArrayList<DxPartVO>();
partList = new ArrayList();
while (qr.hasMoreElements()) {
WTObject o = (WTObject) qr.nextElement();
Object element = qr.nextElement();
WTObject o = null;
logger.error("[]=====arrysList" + element);
if (element instanceof Object[]) {
Object[] objects = (Object[]) element;
o = (WTObject) objects[0];
} else {
o = (WTObject) element;
}
buildQueryResult(o, partList, indices);
}
} finally {
......@@ -199,20 +210,23 @@ public class DxSearchUtil implements RemoteAccess, Serializable {
/* if (fieldName.equals("masterId")) {
return null;
}*/
// TODO
if (fieldName.equals("checkOuted") || fieldName.equals(SearchOperatorEnumUtil.DX_ID)|| fieldName.equals("creatorId")) {
// TODO fieldName.equals(SearchOperatorEnumUtil.DX_ID)||
if (fieldName.equals("checkOuted") || fieldName.equals("creatorId")) {
continue;
}
//视图
if (fieldName.equals(SearchOperatorEnumUtil.DX_VIEWID)) {
addQuerySpecOp(querySpec, operator);
String viewName = SearchOperatorEnumUtil.viewMap.get(String.valueOf(item.value));
logger.error("viewName=========" + viewName);
if (StringUtils.isEmpty(viewName)) {
continue;
}
View view = ViewHelper.service.getView(viewName);
logger.error("view=========" + view);
if (view == null) {
continue;
}
addQuerySpecOp(querySpec, operator);
SearchCondition sc = buildScd(clazz, typeSearchMap.get(fieldName), item.operator.name(), PersistenceHelper
.getObjectIdentifier(view).getId());
if (ObjectsUtil.nonNull(sc)) {
......@@ -266,7 +280,7 @@ public class DxSearchUtil implements RemoteAccess, Serializable {
op, scVal);
return sc;
}
if (value instanceof Long || fieldName.contains(Iterated.MASTER_REFERENCE)) {
if (value instanceof Long || fieldName.contains(Iterated.MASTER_REFERENCE) || fieldName.equalsIgnoreCase(WTAttributeNameIfc.ID_NAME)) {
sc = new SearchCondition(clazz, fieldName,
op, Long.valueOf(String.valueOf(value)));
return sc;
......
......@@ -6,6 +6,7 @@ import wt.fc.ReferenceFactory;
import wt.fc.WTObject;
import wt.fc.WTReference;
import wt.lifecycle.LifeCycleHelper;
import wt.method.RemoteMethodServer;
import wt.part.WTPart;
import wt.session.SessionContext;
import wt.session.SessionHelper;
......@@ -94,4 +95,30 @@ public class RfUtil {
}
return p;
}
/**
* 根据对象oid获取WTReference
*
* @param oid
* @return
*/
public static WTReference getObjectRefByOid(String oid) {
try {
boolean enforce = SessionServerHelper.manager.setAccessEnforced(false);
WTReference wtreference = null;
try {
ReferenceFactory referencefactory = new ReferenceFactory();
wtreference = referencefactory.getReference(oid);
return wtreference;
} catch (Exception e) {
e.printStackTrace();
} finally {
SessionServerHelper.manager.setAccessEnforced(enforce);
}
return wtreference;
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
}
package com.yonde.common;
import wt.fc.PersistenceHelper;
import wt.fc.QueryResult;
import wt.org.WTUser;
import wt.query.QuerySpec;
import wt.query.SearchCondition;
import wt.util.WTException;
import java.util.ArrayList;
import java.util.Enumeration;
import java.util.List;
public class WTUserUtil {
public static WTUser getUserById(String s) throws WTException {
WTUser wtuser = null;
QuerySpec queryspec = null;
QueryResult queryresult = null;
queryspec = new QuerySpec(WTUser.class);
if (s.equalsIgnoreCase("wcadmin")) {
s = "Administrator";
}
SearchCondition searchcondition = new SearchCondition(WTUser.class, "name", "LIKE", s, false);
queryspec.appendSearchCondition(searchcondition);
queryspec.appendAnd();
queryspec.appendWhere(new SearchCondition(WTUser.class, WTUser.DISABLED, SearchCondition.IS_FALSE));
queryresult = PersistenceHelper.manager.find(queryspec);
if (queryresult.hasMoreElements()) {
wtuser = (WTUser) queryresult.nextElement();
}
return wtuser;
}
public static WTUser getUser(String userName) {
WTUser user = null;
try {
if (userName != null) {
if (userName.equalsIgnoreCase("wcadmin")) {
userName = "Administrator";
}
QuerySpec qs = new QuerySpec(WTUser.class);
// 条件: 指定编号
qs.appendWhere(new SearchCondition(WTUser.class, WTUser.NAME, SearchCondition.EQUAL, userName));
qs.appendAnd();
qs.appendWhere(new SearchCondition(WTUser.class, WTUser.DISABLED, SearchCondition.IS_FALSE));
QueryResult qr = PersistenceHelper.manager.find(qs);
if (qr.hasMoreElements()) {
user = (WTUser) qr.nextElement();
}
}
} catch (Exception e) {
e.printStackTrace();
}
return user;
}
/**
* 通过用户名称模糊查询系统中用户对象。
*
* @param userName
* @return
*/
public static List<WTUser> getUsers(String userName) {
List<WTUser> userList = new ArrayList<WTUser>();
WTUser user = null;
try {
if (userName != null) {
QuerySpec qs = new QuerySpec(WTUser.class);
qs.appendOpenParen();
// 条件: 指定编号
//qs.appendWhere(new SearchCondition(WTUser.class, WTUser.NAME, SearchCondition.LIKE, userName, false));
qs.appendWhere(new SearchCondition(WTUser.class, WTUser.FULL_NAME, SearchCondition.LIKE, "%" + userName + "%", false));
qs.appendOr();
qs.appendSearchCondition(new SearchCondition(WTUser.class, WTUser.NAME, SearchCondition.LIKE, "%" + userName + "%", false));
qs.appendCloseParen();
qs.appendAnd();
qs.appendWhere(new SearchCondition(WTUser.class, WTUser.DISABLED, SearchCondition.IS_FALSE));
QueryResult qr = PersistenceHelper.manager.find(qs);
while (qr.hasMoreElements()) {
user = (WTUser) qr.nextElement();
if (!user.isDisabled()) {
userList.add(user);
}
}
}
} catch (Exception e) {
e.printStackTrace();
}
return userList;
}
public static void main(String[] args) throws Exception {
QuerySpec qs = new QuerySpec(WTUser.class);
qs.appendOpenParen();
// 条件: 指定编号
//qs.appendWhere(new SearchCondition(WTUser.class, WTUser.NAME, SearchCondition.LIKE, userName, false));
qs.appendWhere(new SearchCondition(WTUser.class, WTUser.FULL_NAME, SearchCondition.LIKE, "%111%", false));
qs.appendOr();
qs.appendSearchCondition(new SearchCondition(WTUser.class, WTUser.NAME, SearchCondition.LIKE, "%555%", false));
qs.appendCloseParen();
qs.appendAnd();
qs.appendWhere(new SearchCondition(WTUser.class, WTUser.DISABLED, SearchCondition.IS_FALSE));
System.out.print(qs);
}
/**
* 通过用户全名获取用户对象
*
* @param userFullName
* @return
*/
public static WTUser getUserByFullName(String userFullName) {
WTUser user = null;
try {
if (userFullName != null) {
QuerySpec qs = new QuerySpec(WTUser.class);
// 条件: 指定编号
qs.appendWhere(new SearchCondition(WTUser.class, WTUser.FULL_NAME, SearchCondition.EQUAL, userFullName, false));
qs.appendAnd();
qs.appendWhere(new SearchCondition(WTUser.class, WTUser.DISABLED, SearchCondition.IS_FALSE));
QueryResult qr = PersistenceHelper.manager.find(qs);
while (qr.hasMoreElements()) {
user = (WTUser) qr.nextElement();
if (!user.isDisabled()) {
return user;
}
}
}
} catch (Exception e) {
e.printStackTrace();
}
return user;
}
public static Boolean isAdministrator(WTUser principal) throws WTException {
try {
Enumeration groupNames = principal.parentGroupNames();
while (groupNames.hasMoreElements()) {
if ("Administrators".equals(groupNames.nextElement())) {
return true;
}
}
} catch (WTException e) {
throw new WTException(e.getLocalizedMessage());
}
return false;
}
}
This source diff could not be displayed because it is too large. You can view the blob instead.
......@@ -4,6 +4,7 @@ import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonTypeInfo;
import com.yonde.basedata.entity.users.DxUserVO;
import com.yonde.basedata.vo.*;
import com.yonde.common.CommonUtil;
import com.yonde.common.DxCommonUtils;
import com.yonde.common.IBAHelper;
import com.yonde.context.vo.DxContextVO;
......@@ -16,6 +17,7 @@ import wt.session.SessionHelper;
import wt.type.ClientTypedUtility;
import wt.util.WTException;
import wt.vc.wip.WorkInProgressHelper;
import wt.vc.wip.Workable;
import java.io.Serializable;
import java.lang.reflect.InvocationTargetException;
......@@ -88,7 +90,7 @@ public class DxDocumentVO extends RevisionControlledVO implements Serializable {
this.number = wtDoc.getNumber();
this.setModifier(new DxUserVO(wtDoc.getModifier().getPrincipal()));
this.setCreator(new DxUserVO(wtDoc.getCreator().getPrincipal()));
this.dynamicAttrs = IBAHelper.getAllIBAValues(wtDoc);
this.state = wtDoc.getState().getState().toString();
//this.subTypeName = ClientTypedUtility.getTypeIdentifier(wtDoc).getTypename();
this.subTypeName = "managementDoc";//TODO 要映射
......@@ -96,10 +98,15 @@ public class DxDocumentVO extends RevisionControlledVO implements Serializable {
this.latest = wtDoc.isLatestIteration();
this.checkOuted = WorkInProgressHelper.isCheckedOut(wtDoc);
//this.setOperator("NO_CHANGE");
this.lifecycleTemplateId = PersistenceHelper.getObjectIdentifier(wtDoc.getLifeCycleTemplate().getObject()).getId();
if (WorkInProgressHelper.isCheckedOut(wtDoc)) {
wtDoc = (WTDocument) CommonUtil.getWorkingCopyVersion(wtDoc);
}
this.dynamicAttrs = IBAHelper.getAllIBAValues(wtDoc);
if (StringUtils.isNotEmpty(wtDoc.getDescription())) {
this.getDynamicAttrs().put("description", wtDoc.getDescription());
}
this.lifecycleTemplateId = PersistenceHelper.getObjectIdentifier(wtDoc.getLifeCycleTemplate().getObject()).getId();
this.setObjFileLinks(DxCommonUtils.buildObjFileLinks(wtDoc));
} finally {
SessionContext.setContext(previous);
......
......@@ -553,38 +553,39 @@ public class DxPartService implements RemoteAccess, Serializable {
new Class[] { Long.class},
new Object[] { id});
}
/* SessionContext previous = SessionContext.newContext();
SessionContext previous = SessionContext.newContext();
try {
SessionHelper.manager.setAdministrator();
} finally {
SessionContext.setContext(previous);
}*/
WTPart partById = DxPartUtil.getPartById(id);
String viewName = partById.getViewName();
if(!viewName.equalsIgnoreCase("Planning")){
WTPart ppart = PartUtil.getLatestViewPart(partById.getNumber(),"Planning");
ArrayList<WTPart> list = new ArrayList<WTPart>();
if(ppart==null){
WTPartConfigSpec partConfigSpec = WTPartConfigSpec
.newWTPartConfigSpec(WTPartStandardConfigSpec.newWTPartStandardConfigSpec(ViewHelper.service.getView("Design"), null));
PartUtil.getAllChildByView(partById,partConfigSpec,list);
ppart = (WTPart) ViewHelper.service.newBranchForView(partById, "Planning");
ppart.setContainer(partById.getContainer());
CommonUtil.setFolder("/Default/PBOM/PBOM零部件", partById.getContainerReference(), ppart);
PersistenceHelper.manager.save(ppart);
}
for(WTPart tempPart : list){
tempPart = (WTPart) ViewHelper.service.newBranchForView(partById, "Planning");
tempPart.setContainer(partById.getContainer());
CommonUtil.setFolder("/Default/PBOM/PBOM零部件", partById.getContainerReference(), tempPart);
PersistenceHelper.manager.save(tempPart);
WTPart partById = DxPartUtil.getPartById(id);
String viewName = partById.getViewName();
if(!viewName.equalsIgnoreCase("Planning")){
WTPart ppart = PartUtil.getLatestViewPart(partById.getNumber(),"Planning");
ArrayList<WTPart> list = new ArrayList<WTPart>();
if(ppart==null){
WTPartConfigSpec partConfigSpec = WTPartConfigSpec
.newWTPartConfigSpec(WTPartStandardConfigSpec.newWTPartStandardConfigSpec(ViewHelper.service.getView("Design"), null));
PartUtil.getAllChildByView(partById,partConfigSpec,list);
ppart = (WTPart) ViewHelper.service.newBranchForView(partById, "Planning");
ppart.setContainer(partById.getContainer());
CommonUtil.setFolder("/Default/PBOM/PBOM零部件", partById.getContainerReference(), ppart);
PersistenceHelper.manager.save(ppart);
}
for(WTPart tempPart : list){
tempPart = (WTPart) ViewHelper.service.newBranchForView(partById, "Planning");
tempPart.setContainer(partById.getContainer());
CommonUtil.setFolder("/Default/PBOM/PBOM零部件", partById.getContainerReference(), tempPart);
PersistenceHelper.manager.save(tempPart);
}
}
}else{
throw new Exception("无需转视图");
}else{
throw new Exception("无需转视图");
}
} finally {
SessionContext.setContext(previous);
}
}
}
......@@ -9,6 +9,8 @@ import com.yonde.basedata.vo.RevisionControlledVO;
import com.yonde.common.CommonUtil;
import com.yonde.common.IBAHelper;
import com.yonde.context.vo.DxContextVO;
import org.apache.commons.lang.StringUtils;
import wt.doc.WTDocument;
import wt.fc.PersistenceHelper;
import wt.org.WTOrganization;
import wt.part.WTPart;
......@@ -112,7 +114,6 @@ public class DxPartVO extends RevisionControlledVO implements Serializable {
this.setVersion(new DxVersionVO(wtPart));
this.setDxContext(new DxContextVO(wtPart.getContainer()));
this.dynamicAttrs = IBAHelper.getAllIBAValues(wtPart);
this.state = wtPart.getState().getState().toString();
this.subTypeName = "Component";//TODO 要映射
//ClientTypedUtility.getTypeIdentifier(wtPart).getTypename();
......@@ -121,6 +122,10 @@ public class DxPartVO extends RevisionControlledVO implements Serializable {
this.checkOuted = WorkInProgressHelper.isCheckedOut(wtPart);
this.lifecycleTemplateId = PersistenceHelper.getObjectIdentifier(wtPart.getLifeCycleTemplate().getObject()).getId();
if (this.checkOuted) {
wtPart = (WTPart) CommonUtil.getWorkingCopyVersion(wtPart);
}
this.dynamicAttrs = IBAHelper.getAllIBAValues(wtPart);
this.defaultUnit = wtPart.getDefaultUnit().getDisplay();
this.endItem = wtPart.isEndItem();
......
......@@ -3,6 +3,7 @@ package com.yonde.part.vo;
import com.fasterxml.jackson.annotation.JsonTypeInfo;
import com.yonde.basedata.vo.IdVO;
import com.yonde.common.IBAHelper;
import com.yonde.common.ObjectsUtil;
import com.yonde.common.PartUtil;
import wt.fc.PersistenceHelper;
import wt.part.Quantity;
......@@ -51,11 +52,13 @@ public class DxUsageLinkVO extends IdVO implements Serializable {
this.setUnit(qt.getUnit().toString());
WTPartMaster uses = (WTPartMaster) usageLink.getUses();
WTPart child = PartUtil.getLatestPartByNoViewWithState(uses.getNumber(), parent.getViewName(), null, false);
this.setTargetId(PersistenceHelper.getObjectIdentifier(child.getMaster()).getId());
this.setSourceId(PersistenceHelper.getObjectIdentifier(parent).getId());
if (level > 0) {
this.setTarget(new DxPartVO(child));
if (ObjectsUtil.nonNull(child)) {
this.setTargetId(PersistenceHelper.getObjectIdentifier(child.getMaster()).getId());
if (level > 0) {
this.setTarget(new DxPartVO(child));
}
}
this.setSourceId(PersistenceHelper.getObjectIdentifier(parent).getId());
if (level < 0) {
this.setSource(new DxPartVO(parent));
}
......
package com.yonde.wfc.controller;
import com.yonde.basedata.entity.api.ApiResult;
import com.yonde.basedata.vo.IdVO;
import com.yonde.wfc.service.WfcProcessService;
import com.yonde.wfc.vo.*;
import org.springframework.data.domain.Page;
import org.springframework.web.bind.annotation.*;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@RestController
@RequestMapping(value = "/workflow")
public class WfcProcessController {
@PostMapping("/inst")
//@ApiOperation("查询流程实例列表")
public List<DxWfProcessVO> getProcessList(@RequestBody DxWfProcessSearchVO processInstSearchVO) {
List<DxWfProcessVO> allProcess = new ArrayList<DxWfProcessVO>();
try {
allProcess = WfcProcessService.getAllProcess(processInstSearchVO);
} catch (Exception e) {
e.printStackTrace();
}
return allProcess;
}
@GetMapping({"/task/hisTaskList"})
//@ApiOperation("历史任务列表")
public List<DxWfProcessTaskVO> getHisTaskList(@RequestParam("instId") String instId, @RequestParam(value = "activityId",required = false) String activityId) {
List<DxWfProcessTaskVO> hisTaskList = new ArrayList<DxWfProcessTaskVO>();
try {
hisTaskList = WfcProcessService.getHisTaskList(instId);
} catch (Exception e) {
e.printStackTrace();
}
return hisTaskList;
}
@GetMapping({"/task/todo"})
//@ApiOperation("查询待办任务列表")
public List<DxWfProcessTaskVO> getTodoTaskList(@RequestParam("userName") String userName) {
List<DxWfProcessTaskVO> todoTaskList = new ArrayList<DxWfProcessTaskVO>();
try {
todoTaskList = WfcProcessService.getTodoTaskList(userName);
} catch (Exception e) {
e.printStackTrace();
}
return todoTaskList;
}
@GetMapping({"/task/countOfType"})
public Map<String, Integer> getTaskTypeAndCount(@RequestParam("userName") String userName) {
Map<String, Integer> resultMap = new HashMap<String, Integer>();
List<DxWfProcessTaskVO> todoTaskList = null;
try {
todoTaskList = WfcProcessService.getTodoTaskList(userName);
resultMap.put("todoTask", todoTaskList.size());
resultMap.put("forwardTask", 0);
resultMap.put("unClaimedTask", 0);
} catch (Exception e) {
e.printStackTrace();
}
return resultMap;
}
@GetMapping({"/task/finished"})
//@ApiOperation("查询已办任务列表")
public List<DxWfProcessTaskVO> getFinishedTaskList(DxWfProcessTaskSearchVO taskSearchVO, @RequestParam(defaultValue = "1") int page, @RequestParam(defaultValue = "10") int size) {
return null;
}
@GetMapping({"/inst/{instId}"})
//@ApiOperation("流程实例详情")
public DxWfProcessVO getProcessDetail(@PathVariable("instId") String instId) {
DxWfProcessVO processDetail = null;
try {
processDetail = WfcProcessService.getProcessDetail(instId);
} catch (Exception e) {
e.printStackTrace();
}
return processDetail;
}
@GetMapping({"/inst/{instId}/bizPBO"})
//@ApiOperation("查询流程业务对象PBO")
public Object getProcessBusinessObjectById(@PathVariable("instId") String instId) {
IdVO idVO = null;
try {
idVO = WfcProcessService.getProcessBusinessObjectById(instId);
} catch (Exception e) {
e.printStackTrace();
}
return idVO;
}
@GetMapping({"/task/{id}"})
//@ApiOperation("任务详情")
public DxWfProcessTaskVO getTaskDetail(@PathVariable String id) {
DxWfProcessTaskVO taskDetail = null;
try {
taskDetail = WfcProcessService.getTaskDetail(id);
} catch (Exception e) {
e.printStackTrace();
}
return taskDetail;
}
@PostMapping({"/template/operation"})
//@ApiOperation("常用操作的提交")
public ApiResult executeOperation(@RequestBody DxWfTaskOperationArgsVO operationArgsVO) {
try {
WfcProcessService.executeOperation(operationArgsVO);
} catch (Exception e) {
e.printStackTrace();
return ApiResult.error("501", "操作失败", e);
}
return ApiResult.ok((Object)null, "操作成功");
}
}
This diff is collapsed.
package com.yonde.wfc.vo;
import com.yonde.common.WorkflowUtil;
import wt.doc.WTDocument;
import wt.fc.Persistable;
import wt.part.WTPart;
import wt.workflow.engine.WfProcess;
import wt.workflow.engine.WfTemplateProcessor;
import java.io.Serializable;
import java.util.Map;
public class DxWfBizExtInfo implements Serializable {
private String taskTitle;
private String processTitle;
private String bizObjectState;
private String bizTitle;
private Map<String, Object> bizAttrValues;
private String bizConfig;
public DxWfBizExtInfo() {
}
public DxWfBizExtInfo(String taskTitle, String processTitle, String bizObjectState) {
this.taskTitle = taskTitle;
this.processTitle = processTitle;
this.bizObjectState = bizObjectState;
}
public DxWfBizExtInfo(WfProcess process) {
Persistable pbo = WorkflowUtil.getPBO(process);
String taskTitle = "";
if (pbo instanceof WTDocument) {
WTDocument document = (WTDocument) pbo;
taskTitle = document.getName() + "_" + document.getNumber();
this.bizObjectState = document.getState().toString();
} else if (pbo instanceof WTPart) {
WTPart part = (WTPart) pbo;
taskTitle = part.getName() + "_" + part.getNumber();
this.bizObjectState = part.getState().toString();
} else {
// TODO 更改单 等
}
this.taskTitle = taskTitle;
String processName = process.getTemplate().getName();
this.processTitle = processName + "_" + taskTitle;
}
public String getTaskTitle() {
return taskTitle;
}
public void setTaskTitle(String taskTitle) {
this.taskTitle = taskTitle;
}
public String getProcessTitle() {
return processTitle;
}
public void setProcessTitle(String processTitle) {
this.processTitle = processTitle;
}
public String getBizObjectState() {
return bizObjectState;
}
public void setBizObjectState(String bizObjectState) {
this.bizObjectState = bizObjectState;
}
public String getBizTitle() {
return bizTitle;
}
public void setBizTitle(String bizTitle) {
this.bizTitle = bizTitle;
}
public Map<String, Object> getBizAttrValues() {
return bizAttrValues;
}
public void setBizAttrValues(Map<String, Object> bizAttrValues) {
this.bizAttrValues = bizAttrValues;
}
public String getBizConfig() {
return bizConfig;
}
public void setBizConfig(String bizConfig) {
this.bizConfig = bizConfig;
}
}
package com.yonde.wfc.vo;
import wt.project.Role;
import java.io.Serializable;
import java.util.Locale;
public class DxWfParticipantInfoExtVO implements Serializable {
private static final long serialVersionUID = 1L;
private String dxClassname = "com.yonde.dex.wfc.common.vo.extension.DxWfParticipantInfoExtVO";
private String pluginName;
private String pluginContent;
private String pluginShowContent;
/** @deprecated */
@Deprecated
private Boolean isRequired;
public DxWfParticipantInfoExtVO() {
}
public DxWfParticipantInfoExtVO(Role role) {
this.pluginShowContent = role.getDisplay(Locale.SIMPLIFIED_CHINESE);
this.pluginContent = role.getDisplay();
this.pluginName = role.getStringValue();
}
public String getDxClassname() {
return dxClassname;
}
public void setDxClassname(String dxClassname) {
this.dxClassname = dxClassname;
}
public String getPluginName() {
return pluginName;
}
public void setPluginName(String pluginName) {
this.pluginName = pluginName;
}
public String getPluginContent() {
return pluginContent;
}
public void setPluginContent(String pluginContent) {
this.pluginContent = pluginContent;
}
public String getPluginShowContent() {
return pluginShowContent;
}
public void setPluginShowContent(String pluginShowContent) {
this.pluginShowContent = pluginShowContent;
}
public Boolean getRequired() {
return isRequired;
}
public void setRequired(Boolean required) {
isRequired = required;
}
}
package com.yonde.wfc.vo;
import org.springframework.format.annotation.DateTimeFormat;
import java.io.Serializable;
import java.util.Date;
import java.util.List;
public class DxWfProcessSearchVO implements Serializable {
private String procInstId;
//private ProcessStateEnum state;
private String name;
private String modelName;
private List<String> processDefId;
private String processDefKey;
private String startedUserId;
@DateTimeFormat(
pattern = "yyyy-MM-dd HH:mm:ss"
)
private Date gmtCreateStart;
@DateTimeFormat(
pattern = "yyyy-MM-dd HH:mm:ss"
)
private Date gmtCreateEnd;
@DateTimeFormat(
pattern = "yyyy-MM-dd HH:mm:ss"
)
private Date gmtFinishStart;
@DateTimeFormat(
pattern = "yyyy-MM-dd HH:mm:ss"
)
private Date gmtFinishEnd;
private Boolean hasTimeout;
private List<String> pbos;
private String pbo;
private String pboClass;
private Long pboId;
private List<String> appNames;
private String category;
private Boolean checkOwnerSignAddFlag = false;
public String getProcInstId() {
return procInstId;
}
public void setProcInstId(String procInstId) {
this.procInstId = procInstId;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getModelName() {
return modelName;
}
public void setModelName(String modelName) {
this.modelName = modelName;
}
public List<String> getProcessDefId() {
return processDefId;
}
public void setProcessDefId(List<String> processDefId) {
this.processDefId = processDefId;
}
public String getProcessDefKey() {
return processDefKey;
}
public void setProcessDefKey(String processDefKey) {
this.processDefKey = processDefKey;
}
public String getStartedUserId() {
return startedUserId;
}
public void setStartedUserId(String startedUserId) {
this.startedUserId = startedUserId;
}
public Date getGmtCreateStart() {
return gmtCreateStart;
}
public void setGmtCreateStart(Date gmtCreateStart) {
this.gmtCreateStart = gmtCreateStart;
}
public Date getGmtCreateEnd() {
return gmtCreateEnd;
}
public void setGmtCreateEnd(Date gmtCreateEnd) {
this.gmtCreateEnd = gmtCreateEnd;
}
public Date getGmtFinishStart() {
return gmtFinishStart;
}
public void setGmtFinishStart(Date gmtFinishStart) {
this.gmtFinishStart = gmtFinishStart;
}
public Date getGmtFinishEnd() {
return gmtFinishEnd;
}
public void setGmtFinishEnd(Date gmtFinishEnd) {
this.gmtFinishEnd = gmtFinishEnd;
}
public Boolean getHasTimeout() {
return hasTimeout;
}
public void setHasTimeout(Boolean hasTimeout) {
this.hasTimeout = hasTimeout;
}
public List<String> getPbos() {
return pbos;
}
public void setPbos(List<String> pbos) {
this.pbos = pbos;
}
public String getPbo() {
return pbo;
}
public void setPbo(String pbo) {
this.pbo = pbo;
}
public String getPboClass() {
return pboClass;
}
public void setPboClass(String pboClass) {
this.pboClass = pboClass;
}
public Long getPboId() {
return pboId;
}
public void setPboId(Long pboId) {
this.pboId = pboId;
}
public List<String> getAppNames() {
return appNames;
}
public void setAppNames(List<String> appNames) {
this.appNames = appNames;
}
public String getCategory() {
return category;
}
public void setCategory(String category) {
this.category = category;
}
public Boolean getCheckOwnerSignAddFlag() {
return checkOwnerSignAddFlag;
}
public void setCheckOwnerSignAddFlag(Boolean checkOwnerSignAddFlag) {
this.checkOwnerSignAddFlag = checkOwnerSignAddFlag;
}
}
package com.yonde.wfc.vo;
import org.springframework.format.annotation.DateTimeFormat;
import java.io.Serializable;
import java.util.Date;
import java.util.List;
public class DxWfProcessTaskSearchVO implements Serializable {
//TaskQueryTypeEnum taskQueryType;
private String procInstId;
private String processInstName;
private String taskName;
private String assignee;
//private TaskStateEnum taskState;
@DateTimeFormat(
pattern = "yyyy-MM-dd HH:mm:ss"
)
private Date receiveTime1;
@DateTimeFormat(
pattern = "yyyy-MM-dd HH:mm:ss"
)
private Date receiveTime2;
@DateTimeFormat(
pattern = "yyyy-MM-dd HH:mm:ss"
)
private Date finishTime1;
@DateTimeFormat(
pattern = "yyyy-MM-dd HH:mm:ss"
)
private Date finishTime2;
private Boolean hasTimeout;
private List<String> pbos;
private String pbo;
private String pboClass;
private Long pboId;
private String pboStatus;
private String taskDefinitionKey;
private List<String> taskDefinitionKeys;
private List<String> processDefKey;
private List<String> appNames;
private List<String> categorys;
private String proxyUser;
}
This diff is collapsed.
package com.yonde.wfc.vo;
import com.yonde.basedata.search.SearchOperatorEnumUtil;
import com.yonde.common.DateTimeUtil;
import com.yonde.common.ObjectsUtil;
import wt.fc.Persistable;
import wt.fc.PersistenceHelper;
import wt.util.WTException;
import wt.workflow.definer.WfProcessTemplate;
import wt.workflow.engine.WfProcess;
import java.io.Serializable;
import java.sql.Timestamp;
import java.util.Locale;
public class DxWfProcessVO implements Serializable {
private String id;
private String name;
private String businessKey;
private String businessName;
private String status;
private String procDefId;
private String procDefKey;
private String procDefName;
private String procDefVersion;
private String owner;
private String ownerName;
private String gmtCreate;
private String gmtFinished;
private Long costTimeInMillis;
private Long expireTimeInMillis;
private String dueDate;
//private DxWfBizExtInfo bizExtInfo;
private String pboClass;
private String pboId;
private String appName;
private String category;
private boolean ownerSignAddFlag;
private String businessStatus;
public DxWfProcessVO() {
}
public DxWfProcessVO(WfProcess process) throws WTException {
if (process == null) {
return;
}
this.id = String.valueOf(PersistenceHelper.getObjectIdentifier(process).getId());
this.name = process.getName();
this.status = process.getState().getDisplay(Locale.CHINA);
this.businessStatus = process.getState().toString();
this.owner = String.valueOf(PersistenceHelper.getObjectIdentifier(process.getCreator().getObject()).getId());
this.ownerName = process.getCreator().getDisplayName();
Persistable pbo = (Persistable) process.getContext().getValue("primaryBusinessObject");
this.pboId = String.valueOf(PersistenceHelper.getObjectIdentifier(pbo).getId());
this.pboClass = SearchOperatorEnumUtil.typeItemMap.get(pbo.getClass());
WfProcessTemplate template = (WfProcessTemplate) process.getTemplate().getObject();
this.procDefName = template.getName();
this.procDefKey = template.getIdentity();
this.procDefId = String.valueOf(PersistenceHelper.getObjectIdentifier(template).getId());
this.gmtCreate = DateTimeUtil.timeStampToString(process.getCreateTimestamp());
Timestamp endTime = process.getEndTime();
if (ObjectsUtil.nonNull(endTime)) {
this.gmtFinished = DateTimeUtil.timeStampToString(endTime);
this.dueDate = this.gmtFinished;
}
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getBusinessKey() {
return businessKey;
}
public void setBusinessKey(String businessKey) {
this.businessKey = businessKey;
}
public String getBusinessName() {
return businessName;
}
public void setBusinessName(String businessName) {
this.businessName = businessName;
}
public String getStatus() {
return status;
}
public void setStatus(String status) {
this.status = status;
}
public String getProcDefId() {
return procDefId;
}
public void setProcDefId(String procDefId) {
this.procDefId = procDefId;
}
public String getProcDefKey() {
return procDefKey;
}
public void setProcDefKey(String procDefKey) {
this.procDefKey = procDefKey;
}
public String getProcDefName() {
return procDefName;
}
public void setProcDefName(String procDefName) {
this.procDefName = procDefName;
}
public String getProcDefVersion() {
return procDefVersion;
}
public void setProcDefVersion(String procDefVersion) {
this.procDefVersion = procDefVersion;
}
public String getOwner() {
return owner;
}
public void setOwner(String owner) {
this.owner = owner;
}
public String getOwnerName() {
return ownerName;
}
public void setOwnerName(String ownerName) {
this.ownerName = ownerName;
}
public Long getCostTimeInMillis() {
return costTimeInMillis;
}
public void setCostTimeInMillis(Long costTimeInMillis) {
this.costTimeInMillis = costTimeInMillis;
}
public Long getExpireTimeInMillis() {
return expireTimeInMillis;
}
public void setExpireTimeInMillis(Long expireTimeInMillis) {
this.expireTimeInMillis = expireTimeInMillis;
}
public String getPboClass() {
return pboClass;
}
public void setPboClass(String pboClass) {
this.pboClass = pboClass;
}
public String getPboId() {
return pboId;
}
public void setPboId(String pboId) {
this.pboId = pboId;
}
public String getAppName() {
return appName;
}
public void setAppName(String appName) {
this.appName = appName;
}
public String getCategory() {
return category;
}
public void setCategory(String category) {
this.category = category;
}
public boolean isOwnerSignAddFlag() {
return ownerSignAddFlag;
}
public void setOwnerSignAddFlag(boolean ownerSignAddFlag) {
this.ownerSignAddFlag = ownerSignAddFlag;
}
public String getBusinessStatus() {
return businessStatus;
}
public void setBusinessStatus(String businessStatus) {
this.businessStatus = businessStatus;
}
public String getGmtCreate() {
return gmtCreate;
}
public void setGmtCreate(String gmtCreate) {
this.gmtCreate = gmtCreate;
}
public String getGmtFinished() {
return gmtFinished;
}
public void setGmtFinished(String gmtFinished) {
this.gmtFinished = gmtFinished;
}
public String getDueDate() {
return dueDate;
}
public void setDueDate(String dueDate) {
this.dueDate = dueDate;
}
}
package com.yonde.wfc.vo;
import java.io.Serializable;
public class DxWfRouteExtInfoVO implements Serializable {
private String dxClassname = "com.yonde.dex.wfc.common.vo.extension.DxWfRouteExtInfoVO";
private String name;
private String displayName;
//private RouteActionTypeEnum routeActionType;
private Boolean isDefault = false;
private Boolean isCheckForm = false;
private Boolean isCheckParticipant = false;
//private List<DxWfTaskExtServiceMappingVO> serviceMappings;
public DxWfRouteExtInfoVO() {
}
public DxWfRouteExtInfoVO(String name) {
this.name = name;
this.displayName = name;
if (!"驳回".equals(name) && !"取消".equals(name)) {
this.isCheckParticipant = true;
}
}
public String getDxClassname() {
return dxClassname;
}
public void setDxClassname(String dxClassname) {
this.dxClassname = dxClassname;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getDisplayName() {
return displayName;
}
public void setDisplayName(String displayName) {
this.displayName = displayName;
}
public Boolean getDefault() {
return isDefault;
}
public void setDefault(Boolean aDefault) {
isDefault = aDefault;
}
public Boolean getCheckForm() {
return isCheckForm;
}
public void setCheckForm(Boolean checkForm) {
isCheckForm = checkForm;
}
public Boolean getCheckParticipant() {
return isCheckParticipant;
}
public void setCheckParticipant(Boolean checkParticipant) {
isCheckParticipant = checkParticipant;
}
}
package com.yonde.wfc.vo;
import java.io.Serializable;
import java.util.Map;
public class DxWfTaskOperationArgsVO implements Serializable {
private String operationName;
private String routerSelect;
private String taskDefinitionKey;
private String processDefinitionId;
private String processInstId;
private String description;
private String operator;
private String targetUserId;
private String id;
private Map<String, Object> participants;
private Map<String, Object> variables;
private Boolean isBefore;
public DxWfTaskOperationArgsVO() {
}
public String getOperationName() {
return operationName;
}
public void setOperationName(String operationName) {
this.operationName = operationName;
}
public String getRouterSelect() {
return routerSelect;
}
public void setRouterSelect(String routerSelect) {
this.routerSelect = routerSelect;
}
public String getTaskDefinitionKey() {
return taskDefinitionKey;
}
public void setTaskDefinitionKey(String taskDefinitionKey) {
this.taskDefinitionKey = taskDefinitionKey;
}
public String getProcessDefinitionId() {
return processDefinitionId;
}
public void setProcessDefinitionId(String processDefinitionId) {
this.processDefinitionId = processDefinitionId;
}
public String getProcessInstId() {
return processInstId;
}
public void setProcessInstId(String processInstId) {
this.processInstId = processInstId;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
public String getOperator() {
return operator;
}
public void setOperator(String operator) {
this.operator = operator;
}
public String getTargetUserId() {
return targetUserId;
}
public void setTargetUserId(String targetUserId) {
this.targetUserId = targetUserId;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public Map<String, Object> getParticipants() {
return participants;
}
public void setParticipants(Map<String, Object> participants) {
this.participants = participants;
}
public Map<String, Object> getVariables() {
return variables;
}
public void setVariables(Map<String, Object> variables) {
this.variables = variables;
}
public Boolean getIsBefore() {
return isBefore;
}
public void setBefore(Boolean before) {
isBefore = before;
}
}
package com.yonde.wfc.vo;
import java.io.Serializable;
public class DxWfTaskOtherFormInfoVO implements Serializable {
private String tabName;
private String configName;
private Boolean isInner = true;
private Boolean isShow = true;
private String webServerName;
private String comType;
private String dxClassname = "com.yonde.dex.wfc.common.vo.extension.DxWfTaskOtherFormInfoVO";
public DxWfTaskOtherFormInfoVO() {
}
public DxWfTaskOtherFormInfoVO(String tabName, String configName) {
this.tabName = tabName;
this.configName = configName;
}
public String getTabName() {
return tabName;
}
public void setTabName(String tabName) {
this.tabName = tabName;
}
public String getConfigName() {
return configName;
}
public void setConfigName(String configName) {
this.configName = configName;
}
public Boolean getIsInner() {
return isInner;
}
public void setInner(Boolean inner) {
isInner = inner;
}
public Boolean getIsShow() {
return isShow;
}
public void setShow(Boolean show) {
isShow = show;
}
public String getWebServerName() {
return webServerName;
}
public void setWebServerName(String webServerName) {
this.webServerName = webServerName;
}
public String getComType() {
return comType;
}
public void setComType(String comType) {
this.comType = comType;
}
public String getDxClassname() {
return dxClassname;
}
public void setDxClassname(String dxClassname) {
this.dxClassname = dxClassname;
}
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment