private static void AddSummaryRowInfoToExcelTable(BpmnInfo bpmn, DmnInfo dmnInfo, VariablesInfo variableInfo, int rowIndex, ExcelWorksheet wsSheet, string[] dmnFields, string variableUseType = null) { var startTableCellAddress = wsSheet.Tables.FirstOrDefault()?.Address.Start.Address; for (int i = 0; i < dmnFields.Length; i++) { var propertyName = dmnFields[i]; var value = (GetPropertyStringValue(dmnInfo, propertyName) ?? GetPropertyStringValue(variableInfo, propertyName)) ?? GetPropertyStringValue(bpmn, propertyName); if (dmnFields[i] == "VariablesUseType" && !string.IsNullOrEmpty(variableUseType)) { value = variableUseType; } var cellAdress = AddRowAndColumnToCellAddress(startTableCellAddress, rowIndex + 1, i); wsSheet.Cells[cellAdress].Value = value; } }
public static void GetDmnInfoFromBpmnModel(XDocument xmlBpmn, List <DmnInfo> dmns, ref List <BpmnInfo> bpmnDataList) { var businessRuleTasks = xmlBpmn.Descendants() .Where(x => x.Name.ToString().Contains("businessRuleTask")); var process = xmlBpmn.Descendants() .Single(x => x.Name.ToString().Contains("process")); var ruleTasks = businessRuleTasks as XElement[] ?? businessRuleTasks.ToArray(); if (ruleTasks.Any()) { foreach (XElement element in ruleTasks) { var bpmnId = process.Attribute("id")?.Value; var dmnId = element.Attributes().Single(a => a.Name.ToString().Contains("decisionRef"))?.Value; var dmn = dmns.First(d => d.DmnId == dmnId); BpmnInfo bpmnInfo; if (bpmnDataList.Any(bp => bp.BpmnId == bpmnId)) { bpmnInfo = bpmnDataList.First(bp => bp.BpmnId == bpmnId); bpmnInfo.DmnInfos.Add(dmn); } else { bpmnInfo = new BpmnInfo() { BpmnId = process.Attribute("id")?.Value, BpmnNavn = process.Attribute("name")?.Value, DmnResultatvariabel = element.Attributes().Single(a => a.Name.ToString().Contains("resultVariable"))?.Value }; bpmnInfo.DmnInfos = new List <DmnInfo>() { dmn }; bpmnDataList.Add(bpmnInfo); } } } }
public void Test1() { var file = "dmnTest1.dmn"; var file2 = "dmnTest2.dmn"; var file3 = "BpmnTest01.bpmn"; var dmns = new List <tDefinitions>(); var filePath1 = Path.Combine(Directory.GetCurrentDirectory() + @"..\..\..\..\Data\", file); var filePath2 = Path.Combine(Directory.GetCurrentDirectory() + @"..\..\..\..\Data\", file2); var bpmn = Path.Combine(Directory.GetCurrentDirectory() + @"..\..\..\..\Data\", file3); XDocument bpmnXml = XDocument.Load(bpmn); using (Stream dmnStream = File.Open(filePath1, FileMode.Open)) { dmns.Add(DmnConverter.DeserializeStreamDmnFile(dmnStream)); } using (Stream dmnStream = File.Open(filePath2, FileMode.Open)) { dmns.Add(DmnConverter.DeserializeStreamDmnFile(dmnStream)); } var dmnDataDictionaryModels = new List <DmnInfo>(); var excelPkg = new ExcelPackage(); foreach (var tdefinitions in dmns) { var Items = tdefinitions.Items; var decision = Items.Where(t => t.GetType() == typeof(tDecision)); foreach (tDecision tdecision in decision) { tDecisionTable decisionTable = null; try { DmnConverter.GetDecisionsVariables(tdecision, Path.GetFileNameWithoutExtension(filePath1), ref dmnDataDictionaryModels); } catch { // } } } var bpmnDataDictionary = new List <BpmnInfo>(); DmnConverter.GetDmnInfoFromBpmnModel(bpmnXml, dmnDataDictionaryModels, ref bpmnDataDictionary); //List<DataDictionaryModel> dataDictionaryModels = new List<DataDictionaryModel>(); foreach (var dmnData in dmnDataDictionaryModels) { var submodel = new BpmnInfo(); try { var value = dmnData.GetType(); var property = value.GetProperty("DmnId"); String name = (String)(property.GetValue(dmnData, null)); } catch { } //dataDictionaryModels.Add(new DataDictionaryModel() //{ // BpmnData = submodel, // DmnData = dmnData //}); } ExcelWorksheet wsSheet = excelPkg.Workbook.Worksheets.Add("DmnTEK"); //Filter all dmn by Id var dmnIds = dmnDataDictionaryModels.GroupBy(x => x.DmnId).Select(y => y.First()); var objectPropertyNames = new[] { "DmnId", "DmnName", "TekKapitel", "TekLedd", "TekTabell", "TekForskriften", "TekWebLink" }; ExcelConverter.CreateDmnExcelTableDataDictionary(dmnIds, wsSheet, "dmnTek", objectPropertyNames); ExcelWorksheet wsSheet1 = excelPkg.Workbook.Worksheets.Add("Variables"); var dmnVariablesIds = DmnConverter.GetVariablesFormDmns(dmnDataDictionaryModels); var dmnVariablesIdstPropertyNames = new[] { "VariabelId", "VariabelNavn", "VariabelBeskrivelse", "IFC4", "IfcUrl" }; ExcelConverter.CreateVariablesExcelTableDataDictionary(dmnVariablesIds, wsSheet1, "Variables", dmnVariablesIdstPropertyNames); ExcelWorksheet wsSheet2 = excelPkg.Workbook.Worksheets.Add("Dmn+Variables"); var objectPropertyNames1 = new[] { "DmnId", "VariabelId", "VariabelType" }; ExcelConverter.CreateDMNAndVariablesExcelTableDataDictionary(dmnIds, wsSheet2, "Dmn+Variables", objectPropertyNames1); ExcelWorksheet wsSheet3 = excelPkg.Workbook.Worksheets.Add("summary"); var summaryPropertyNames = new[] { "FileName", "BpmnId", "DmnId", "VariabelId", "VariabelType", "VariablesUseType", "Kilde" }; ExcelConverter.CreateSummaryExcelTableDataDictionary(bpmnDataDictionary, wsSheet3, "summary", summaryPropertyNames); var path = string.Concat(@"c:\temp\"); Directory.CreateDirectory(path); var filePath = Path.Combine(path, string.Concat("dataDictionary", ".xlsx")); excelPkg?.SaveAs(new FileInfo(filePath)); File.Exists(filePath).Should().BeTrue(); }