} // getPercentDone() /// <summary> /// Run the next iteration of this batch operation /// </summary> public void runBatchOp(CswNbtObjClassBatchOp BatchNode) { try { if (BatchNode != null && BatchNode.OpNameValue == CswEnumNbtBatchOpName.MultiEdit) { BatchNode.start(); MultiEditBatchData BatchData = new MultiEditBatchData(BatchNode.BatchData.Text); if (BatchData.SourceNodeId != null && BatchData.CopyNodeIds.Count > 0 && BatchData.NodeTypePropIds.Count > 0) { CswNbtNode SourceNode = _CswNbtResources.Nodes[BatchData.SourceNodeId]; if (SourceNode != null) { string NodeIdStr = BatchData.CopyNodeIds.First.ToString(); CswPrimaryKey CopyToNodePk = new CswPrimaryKey(); CopyToNodePk.FromString(NodeIdStr); if (Int32.MinValue != CopyToNodePk.PrimaryKey) { CswNbtNode CopyToNode = _CswNbtResources.Nodes[CopyToNodePk]; if (CopyToNode != null && _CswNbtResources.Permit.isNodeWritable(CswEnumNbtNodeTypePermission.Edit, CopyToNode.getNodeType(), CopyToNode.NodeId)) { foreach (CswNbtMetaDataNodeTypeProp NodeTypeProp in BatchData.NodeTypePropIds.Select(PropId => _CswNbtResources.MetaData.getNodeTypeProp(CswConvert.ToInt32(PropId)))) { CopyToNode.Properties[NodeTypeProp].copy(SourceNode.Properties[NodeTypeProp]); } CopyToNode.postChanges(false); //BatchNode.appendToLog( "Copied values for: " + CopyToNode.NodeName + " (" + CopyToNode.NodeId.PrimaryKey.ToString() + ")" ); } // if( CopyToNode != null ) } // if( Int32.MinValue != CopyToNodePk.PrimaryKey ) // Setup for next iteration BatchData.CopyNodeIds.RemoveAt(0); BatchNode.BatchData.Text = BatchData.ToString(); BatchNode.PercentDone.Value = getPercentDone(BatchNode); } // if( SourceNode != null ) else { BatchNode.finish(); } } else { BatchNode.finish(); } BatchNode.postChanges(false); } // if( BatchNode != null && BatchNode.OpNameValue == NbtBatchOpName.MultiEdit ) } catch (Exception ex) { BatchNode.error(ex); } } // runBatchOp()
} // Int32CollectionToJArray public Double getPercentDone(CswNbtObjClassBatchOp BatchNode) { Double ret = 100; if (BatchNode != null && BatchNode.OpNameValue == CswEnumNbtBatchOpName.MultiEdit) { MultiEditBatchData BatchData = new MultiEditBatchData(BatchNode.BatchData.Text); if (BatchData.StartingCount > 0) { ret = Math.Round((Double)(BatchData.StartingCount - BatchData.CopyNodeIds.Count()) / BatchData.StartingCount * 100, 0); } } return(ret); } // getPercentDone()
/// <summary> /// Create a new batch operation to handle a copyNodeProps/multi edit operation /// </summary> /// <param name="SourceNode"></param> /// <param name="CopyNodeIds"></param> /// <param name="NodeTypePropIds"></param> public CswNbtObjClassBatchOp makeBatchOp(CswNbtNode SourceNode, Collection <CswPrimaryKey> CopyNodeIds, Collection <Int32> NodeTypePropIds) { CswNbtObjClassBatchOp BatchNode = null; if (null != SourceNode) { MultiEditBatchData BatchData = new MultiEditBatchData(string.Empty); BatchData.SourceNodeId = SourceNode.NodeId; BatchData.CopyNodeIds = pkArrayToJArray(CopyNodeIds); BatchData.StartingCount = CopyNodeIds.Count(); BatchData.NodeTypePropIds = Int32CollectionToJArray(NodeTypePropIds); BatchNode = CswNbtBatchManager.makeNew(_CswNbtResources, _BatchOpName, BatchData.ToString()); } // if(null != SourceNode) return(BatchNode); } // makeBatchOp()