@Override public void onDataLoad(DataLoadEvent se) { WebSession ses = getGlobalContext().getWebSession(); String cmd = (String) ses.getAttribute("cmd"); String pk_message = (String) ses.getAttribute("pk_message"); LfwWidget widget = getGlobalContext().getPageMeta().getWidget("main"); Dataset ds = widget.getViewModels().getDataset("msgds"); /** 初始化数据集 */ ds.setCurrentKey(Dataset.MASTER_KEY); Row row = ds.getEmptyRow(); ds.addRow(row); ds.setSelectedIndex(ds.getRowIndex(row)); ds.setEnabled(true); /** 撰写 */ if (cmd.equals("compose")) { return; } PtMessageVO vo = null; try { vo = PortalServiceUtil.getMessageQryService().getMessageByPK(pk_message); } catch (PortalServiceException e) { LfwLogger.error(e.getMessage(), e); } if (vo == null || vo.getPk_message() == null) return; /** 转发 */ if (cmd.equals("fwd")) { row.setString(ds.nameToIndex("title"), "转发:" + vo.getTitle()); row.setString(ds.nameToIndex("content"), vo.doGetContent()); } /** 回复 */ if (cmd.equals("reply")) { if (!MCConstant.PERSON_MESSAGE.equals(vo.getSystemcode())) throw new LfwRuntimeException("无法回复非私人信息!"); row.setString(ds.nameToIndex("title"), "回复:" + vo.getTitle()); row.setString(ds.nameToIndex("pk_user"), vo.getPk_sender()); row.setString(ds.nameToIndex("username"), vo.getSendername()); } }
/** * 根据状态转换成相应地记录应答格式,注意,因为如果是删除记录不会返回ajax应答,所以 此处不处理删除状态。 * * @param xmlSb * @param pm * @param rows * @param state */ protected void processRecord(StringBuffer xmlSb, RowData data) { StringBuffer rowCountsb = null; int size = data.getRowCount(); for (int i = 0; i < size; i++) { Row row = data.getRow(i); int fieldCount = row.size(); rowCountsb = new StringBuffer(); boolean isEmptyRow = (row instanceof EmptyRow); String recordSign = "<" + EventContextConstant.record + ""; String recordESign = "</" + EventContextConstant.record + ">"; if (isEmptyRow) { recordSign = "<" + EventContextConstant.erecord; recordESign = "</" + EventContextConstant.erecord + ">"; } xmlSb.append(recordSign + " id=\"" + row.getRowId() + "\" "); if (!isNull(row.getParentId())) xmlSb.append(" parentid=\"" + row.getParentId() + ">"); else xmlSb.append(">"); if (!isEmptyRow) { String[] startend = getStartEndByState(row.getState()); xmlSb.append(startend[0]); Object value = null; for (int j = 0; j < fieldCount; j++) { value = row.getValue(j); if (value != null) { // 处理日期时间类型 dingrf if (row.getContent()[j] instanceof UFDate) { value = ((UFDate) row.getContent()[j]).getMillis(); } else if (row.getContent()[j] instanceof UFDateTime) { value = ((UFDateTime) row.getContent()[j]).getMillis(); } else if (row.getContent()[j] instanceof UFLiteralDate) { value = ((UFLiteralDate) row.getContent()[j]).getMillis(); } rowCountsb.append(JsURLEncoder.encode(value.toString(), "UTF-8")); } else rowCountsb.append(EventContextConstant.NULL); if (j < fieldCount - 1) rowCountsb.append(","); } xmlSb.append(rowCountsb); xmlSb.append(startend[1]); // dingrf记录本行中发生修改的列索引 String changedSign = "<" + EventContextConstant.changed + ">"; String changedESign = "</" + EventContextConstant.changed + ">"; xmlSb.append(changedSign); for (int k = 0; k < row.getChangedIndices().size(); k++) { xmlSb.append(row.getChangedIndices().get(k)); if (k < row.getChangedIndices().size() - 1) xmlSb.append(","); } xmlSb.append(changedESign); } xmlSb.append(recordESign + "\n"); } try { Method m = RowData.class.getDeclaredMethod("getDeleteRows", new Class[] {}); m.setAccessible(true); Row[] delRows = (Row[]) m.invoke(data, new Object[] {}); if (delRows != null && delRows.length > 0) { for (int i = 0; i < delRows.length; i++) { xmlSb.append( "<" + EventContextConstant.drecord + " id=\"" + delRows[i].getRowId() + "\"/>"); } } } catch (Exception e) { LfwLogger.error(e); } }
private void processFormular(Dataset ds) { RowData rd = ds.getCurrentRowData(); if (rd == null) return; int rcount = rd.getRowCount(); List<String> executedFpList = new ArrayList<String>(); int fieldCount = ds.getFieldSet().getFieldCount(); for (int i = 0; i < fieldCount; i++) { try { Field field = ds.getFieldSet().getField(i); List<String> fieldFormulars = new ArrayList<String>(); String formular = field.getEditFormular(); if (formular != null) fieldFormulars.add(formular); formular = field.getLoadFormular(); if (formular != null) fieldFormulars.add(formular); Iterator<String> fit = fieldFormulars.iterator(); while (fit.hasNext()) { formular = fit.next(); String exp = null; if (formular != null) exp = JsURLDecoder.decode(formular, "UTF-8"); // 如果没有加载公式,继续下一个字段 if (exp == null) continue; if (executedFpList.contains(exp)) continue; executedFpList.add(exp); String[] expArr = exp.split(";"); fp.setExpressArray(expArr); VarryVO[] varryVOs = fp.getVarryArray(); if (varryVOs == null || varryVOs.length == 0) continue; String[] formularNames = new String[varryVOs.length]; Map<String, Integer> indexMap = getIndexMap(ds); for (int j = 0; j < varryVOs.length; j++) { String[] keys = varryVOs[j].getVarry(); if (keys != null) { for (String key : keys) { List<Object> valueList = new ArrayList<Object>(); for (int k = 0; k < rcount; k++) { Row r = rd.getRow(k); // Object value = r.getValue(indexMap.get(key)); Field f = ds.getFieldSet().getField(key); if (f != null && value != null) { // //如果是Double类型,进行一下转换 if (StringDataTypeConst.UFDOUBLE.equals(f.getDataType()) || StringDataTypeConst.DOUBLE.equals(f.getDataType()) || StringDataTypeConst.Decimal.equals(f.getDataType())) { if (!(value instanceof UFDouble)) value = new UFDouble(value.toString()); } else if (StringDataTypeConst.INTEGER.equals(f.getDataType())) { if (!(value instanceof Integer)) value = new Integer((String) value); } } valueList.add(value); } fp.addVariable(key, valueList); } formularNames[j] = varryVOs[j].getFormulaName(); } } Object[][] result = fp.getValueOArray(); if (result != null) { for (int l = 0; l < formularNames.length; l++) { int index = ds.nameToIndex(formularNames[l]); if (index == -1) { LfwLogger.error( "can not find column:" + formularNames[l] + ", ds id:" + ds.getId()); continue; } for (int k = 0; k < rcount; k++) { Row r = rd.getRow(k); r.setValue(index, result[l][k]); } } } } } catch (Throwable e) { Logger.error(e.getMessage(), e); } } }