private void initializeCodeActivity_Initialize_ExecuteCode(object sender, EventArgs e) { ReportFunctionActionNode reportFunctionActionNode = (ReportFunctionActionNode)ActionNode.Deserialize(this.Payload); Dictionary <string, string> piggybag = PiggybagSerializer.Deserialize(this.ExtraPayload); var replaceContext = new DynamicValuesHelperReplaceContext(this.EntityToken, piggybag); XElement markup = reportFunctionActionNode.FunctionMarkupDynamicValuesHelper.ReplaceValues(replaceContext); BaseRuntimeTreeNode baseRuntimeTreeNode = FunctionTreeBuilder.Build(markup); XDocument result = baseRuntimeTreeNode.GetValue() as XDocument; if (result == null) { string message = string.Format(StringResourceSystemFacade.GetString("Composite.C1Console.Trees", "TreeValidationError.ReportFunctionAction.WrongReturnValue"), "XDocument"); Log.LogError("TreeFacade", message); throw new InvalidOperationException(message); } this.Bindings.Add("Label", reportFunctionActionNode.DocumentLabelDynamicValueHelper.ReplaceValues(replaceContext)); this.Bindings.Add("Icon", reportFunctionActionNode.DocumentIcon.ResourceName); this.Bindings.Add("HtmlBlob", result.ToString()); }
public static ActionNode CreateActionNode(XElement element, Tree tree) { if (element.Name == TreeMarkupConstants.Namespace + "AddDataAction") { GenericAddDataActionNode actionNode = new GenericAddDataActionNode(); InitializeWithCommonValue(element, tree, actionNode, DefaultAddDataResourceName, StringResourceSystemFacade.GetString("Composite.C1Console.Trees", "GenericAddDataAction.DefaultLabel"), ActionLocation.AddPrimaryActionLocation, DefaultAddPermissionTypes); XAttribute typeAttribute = element.Attribute("Type"); XAttribute customFormMarkupAttribute = element.Attribute("CustomFormMarkupPath"); if (typeAttribute == null) { tree.AddValidationError(element.GetXPath(), "TreeValidationError.Common.MissingAttribute", "Type"); } else { actionNode.InterfaceType = TypeManager.TryGetType(typeAttribute.Value); if (actionNode.InterfaceType == null) { tree.AddValidationError(element.GetXPath(), "TreeValidationError.Common.UnknownInterfaceType", typeAttribute.Value); } } actionNode.CustomFormMarkupPath = customFormMarkupAttribute.GetValueOrDefault(null); return(actionNode); } else if (element.Name == TreeMarkupConstants.Namespace + "EditDataAction") { GenericEditDataActionNode actionNode = new GenericEditDataActionNode(); InitializeWithCommonValue(element, tree, actionNode, DefaultEditDataResourceName, StringResourceSystemFacade.GetString("Composite.C1Console.Trees", "GenericEditDataAction.DefaultLabel"), ActionLocation.EditPrimaryActionLocation, DefaultEditPermissionTypes); XAttribute customFormMarkupAttribute = element.Attribute("CustomFormMarkupPath"); actionNode.CustomFormMarkupPath = customFormMarkupAttribute.GetValueOrDefault(null); return(actionNode); } else if (element.Name == TreeMarkupConstants.Namespace + "DeleteDataAction") { GenericDeleteDataActionNode actionNode = new GenericDeleteDataActionNode(); InitializeWithCommonValue(element, tree, actionNode, DefaultDeleteDataResourceName, StringResourceSystemFacade.GetString("Composite.C1Console.Trees", "GenericDeleteDataAction.DefaultLabel"), ActionLocation.DeletePrimaryActionLocation, DefaultDeletePermissionTypes); return(actionNode); } else if (element.Name == TreeMarkupConstants.Namespace + "ReportFunctionAction") { ReportFunctionActionNode actionNode = new ReportFunctionActionNode(); InitializeWithCommonValue(element, tree, actionNode, DefaultReportFunctionResourceName); XAttribute documentLabelAttribute = element.Attribute("DocumentLabel"); XAttribute documentIconAttribute = element.Attribute("DocumentIcon"); XElement functionMarkupElement = element.Element((XNamespace)FunctionTreeConfigurationNames.NamespaceName + FunctionTreeConfigurationNames.FunctionTagName); if (functionMarkupElement == null) { tree.AddValidationError(element.GetXPath(), "TreeValidationError.Common.MissingFunctionMarkup"); } actionNode.FunctionMarkup = functionMarkupElement; actionNode.DocumentLabel = documentLabelAttribute.GetValueOrDefault(actionNode.Label); if (documentIconAttribute != null) { actionNode.DocumentIcon = FactoryHelper.GetIcon(documentIconAttribute.Value); } else { actionNode.DocumentIcon = actionNode.Icon; } return(actionNode); } else if (element.Name == TreeMarkupConstants.Namespace + "MessageBoxAction") { MessageBoxActionNode actionNode = new MessageBoxActionNode(); InitializeWithCommonValue(element, tree, actionNode, DefaultMessageBoxResourceName); XAttribute messageBoxTitleAttribute = element.Attribute("MessageBoxTitle"); XAttribute messageBoxMessageAttribute = element.Attribute("MessageBoxMessage"); if (messageBoxTitleAttribute == null) { tree.AddValidationError(element.GetXPath(), "TreeValidationError.Common.MissingAttribute", "MessageBoxTitle"); } else { actionNode.Title = messageBoxTitleAttribute.Value; } if (messageBoxMessageAttribute == null) { tree.AddValidationError(element.GetXPath(), "TreeValidationError.Common.MissingAttribute", "MessageBoxMessage"); } else { actionNode.Message = messageBoxMessageAttribute.Value; } XAttribute dialogTypeAttribute = element.Attribute("MessageDialogType"); string dialogTypeValue = dialogTypeAttribute.GetValueOrDefault("message"); switch (dialogTypeValue) { case "message": actionNode.DialogType = DialogType.Message; break; case "question": actionNode.DialogType = DialogType.Question; break; case "warning": actionNode.DialogType = DialogType.Warning; break; case "error": actionNode.DialogType = DialogType.Error; break; default: tree.AddValidationError(element.GetXPath(), "TreeValidationError.MessageBoxAction.UnknownDialogType", dialogTypeValue); break; } return(actionNode); } else if (element.Name == TreeMarkupConstants.Namespace + "CustomUrlAction") { CustomUrlActionNode actionNode = new CustomUrlActionNode(); InitializeWithCommonValue(element, tree, actionNode, DefaultCustomUrlResourceName); XAttribute urlAttribute = element.Attribute("Url"); XAttribute viewLabelAttribute = element.Attribute("ViewLabel"); XAttribute viewToolTipAttribute = element.Attribute("ViewToolTip"); XAttribute viewIconAttribute = element.Attribute("ViewIcon"); IEnumerable <XElement> postParameterElements = element.Elements(TreeMarkupConstants.Namespace + "PostParameters"); XElement postParametersElement = null; if (postParameterElements.Count() == 1) { postParametersElement = element.Element(TreeMarkupConstants.Namespace + "PostParameters"); } else if (postParameterElements.Count() > 1) { tree.AddValidationError(element.GetXPath(), "TreeValidationError.CustomUrlAction.TooManyPostParameterElements", "PostParameters"); } if (urlAttribute == null) { tree.AddValidationError(element.GetXPath(), "TreeValidationError.Common.MissingAttribute", "Url"); } else { actionNode.Url = urlAttribute.Value; } actionNode.ViewLabel = viewLabelAttribute.GetValueOrDefault(actionNode.Label); actionNode.ViewToolTip = viewToolTipAttribute.GetValueOrDefault(actionNode.ToolTip); actionNode.ViewIcon = FactoryHelper.GetIcon(viewIconAttribute.GetValueOrDefault(DefaultCustomUrlResourceName)); bool urlIsAbsolute = actionNode.Url != null && actionNode.Url.Contains("://"); XAttribute viewTypeAttribute = element.Attribute("ViewType"); string viewTypeValue = viewTypeAttribute.GetValueOrDefault(urlIsAbsolute ? "externalview" : "documentview"); switch (viewTypeValue) { case "externalview": actionNode.ViewType = CustomUrlActionNodeViewType.ExternalView; break; case "genericview": actionNode.ViewType = CustomUrlActionNodeViewType.GenericView; break; case "pagebrowser": actionNode.ViewType = CustomUrlActionNodeViewType.PageBrowser; break; case "filedownload": actionNode.ViewType = CustomUrlActionNodeViewType.FileDownload; break; case "documentview": actionNode.ViewType = CustomUrlActionNodeViewType.DocumentView; break; default: tree.AddValidationError(element.GetXPath(), "TreeValidationError.CustomUrlAction.UnknownViewType", viewTypeValue); break; } actionNode.PostParameters = new Dictionary <string, string>(); if (postParametersElement != null) { foreach (XElement parameterElement in postParametersElement.Elements(TreeMarkupConstants.Namespace + "Parameter")) { XAttribute keyAttribute = parameterElement.Attribute("Key"); XAttribute valueAttribute = parameterElement.Attribute("Value"); if (keyAttribute == null) { tree.AddValidationError(element.GetXPath(), "TreeValidationError.Common.MissingAttribute", "Key"); continue; } else if (string.IsNullOrWhiteSpace(keyAttribute.Value)) { tree.AddValidationError(element.GetXPath(), "TreeValidationError.Common.WrongAttributeValue", "Key"); continue; } if (valueAttribute == null) { tree.AddValidationError(element.GetXPath(), "TreeValidationError.Common.MissingAttribute", "Value"); continue; } actionNode.PostParameters.Add(keyAttribute.Value, valueAttribute.Value); } } return(actionNode); } else if (element.Name == TreeMarkupConstants.Namespace + "ConfirmAction") { ConfirmActionNode actionNode = new ConfirmActionNode(); InitializeWithCommonValue(element, tree, actionNode, DefaultConfirmResourceName); XAttribute confirmTitleAttribute = element.Attribute("ConfirmTitle"); XAttribute confirmMessageAttribute = element.Attribute("ConfirmMessage"); if (confirmTitleAttribute == null) { tree.AddValidationError(element.GetXPath(), "TreeValidationError.Common.MissingAttribute", "ConfirmTitle"); } else { actionNode.ConfirmTitle = confirmTitleAttribute.Value; } if (confirmMessageAttribute == null) { tree.AddValidationError(element.GetXPath(), "TreeValidationError.Common.MissingAttribute", "ConfirmMessage"); } else { actionNode.ConfirmMessage = confirmMessageAttribute.Value; } XElement functionMarkupElement = element.Element((XNamespace)FunctionTreeConfigurationNames.NamespaceName + FunctionTreeConfigurationNames.FunctionTagName); if (functionMarkupElement == null) { tree.AddValidationError(element.GetXPath(), "TreeValidationError.Common.MissingFunctionMarkup"); } actionNode.FunctionMarkup = functionMarkupElement; XAttribute refreshTreeAttribute = element.Attribute("RefreshTree"); string refreshTreeAttributeValue = refreshTreeAttribute.GetValueOrDefault("false").ToLowerInvariant(); if (refreshTreeAttributeValue == "true") { actionNode.RefreshTree = true; } else { actionNode.RefreshTree = false; } return(actionNode); } else if (element.Name == TreeMarkupConstants.Namespace + "WorkflowAction") { WorkflowActionNode actionNode = new WorkflowActionNode(); InitializeWithCommonValue(element, tree, actionNode, DefaultWorkflowResourceName); XAttribute workflowTypeAttribute = element.Attribute("WorkflowType"); if (workflowTypeAttribute == null) { tree.AddValidationError(element.GetXPath(), "TreeValidationError.Common.MissingAttribute", "ConfirmTitle"); } else { actionNode.WorkflowType = TypeManager.TryGetType(workflowTypeAttribute.Value); if (actionNode.WorkflowType == null) { tree.AddValidationError(element.GetXPath(), "TreeValidationError.Common.UnknownInterfaceType", workflowTypeAttribute.Value); } } return(actionNode); } else { tree.AddValidationError(element.GetXPath(), "TreeValidationError.Common.UnknownElement", element.Name); return(null); } }
public static ActionNode CreateActionNode(XElement element, Tree tree) { if (element.Name == TreeMarkupConstants.Namespace + "AddDataAction") { GenericAddDataActionNode actionNode = new GenericAddDataActionNode(); InitializeWithCommonValue(element, tree, actionNode, DefaultAddDataResourceName, StringResourceSystemFacade.GetString("Composite.C1Console.Trees", "GenericAddDataAction.DefaultLabel"), ActionLocation.AddPrimaryActionLocation, DefaultAddPermissionTypes); XAttribute typeAttribute = element.Attribute("Type"); XAttribute customFormMarkupAttribute = element.Attribute("CustomFormMarkupPath"); if (typeAttribute == null) { tree.AddValidationError(element.GetXPath(), "TreeValidationError.Common.MissingAttribute", "Type"); } else { actionNode.InterfaceType = TypeManager.TryGetType(typeAttribute.Value); if (actionNode.InterfaceType == null) tree.AddValidationError(element.GetXPath(), "TreeValidationError.Common.UnknownInterfaceType", typeAttribute.Value); } actionNode.CustomFormMarkupPath = customFormMarkupAttribute.GetValueOrDefault(null); return actionNode; } else if (element.Name == TreeMarkupConstants.Namespace + "EditDataAction") { GenericEditDataActionNode actionNode = new GenericEditDataActionNode(); InitializeWithCommonValue(element, tree, actionNode, DefaultEditDataResourceName, StringResourceSystemFacade.GetString("Composite.C1Console.Trees", "GenericEditDataAction.DefaultLabel"), ActionLocation.EditPrimaryActionLocation, DefaultEditPermissionTypes); XAttribute customFormMarkupAttribute = element.Attribute("CustomFormMarkupPath"); actionNode.CustomFormMarkupPath = customFormMarkupAttribute.GetValueOrDefault(null); return actionNode; } else if (element.Name == TreeMarkupConstants.Namespace + "DeleteDataAction") { GenericDeleteDataActionNode actionNode = new GenericDeleteDataActionNode(); InitializeWithCommonValue(element, tree, actionNode, DefaultDeleteDataResourceName, StringResourceSystemFacade.GetString("Composite.C1Console.Trees", "GenericDeleteDataAction.DefaultLabel"), ActionLocation.DeletePrimaryActionLocation, DefaultDeletePermissionTypes); return actionNode; } else if (element.Name == TreeMarkupConstants.Namespace + "DuplicateDataAction") { GenericDuplicateDataActionNode actionNode = new GenericDuplicateDataActionNode(); InitializeWithCommonValue(element, tree, actionNode, DefaultDuplicateDataResourceName, StringResourceSystemFacade.GetString("Composite.C1Console.Trees", "GenericDuplicateDataAction.DefaultLabel"), ActionLocation.OtherPrimaryActionLocation, DefaultDuplicatePermissionTypes); return actionNode; } else if (element.Name == TreeMarkupConstants.Namespace + "ReportFunctionAction") { ReportFunctionActionNode actionNode = new ReportFunctionActionNode(); InitializeWithCommonValue(element, tree, actionNode, DefaultReportFunctionResourceName); XAttribute documentLabelAttribute = element.Attribute("DocumentLabel"); XAttribute documentIconAttribute = element.Attribute("DocumentIcon"); XElement functionMarkupElement = element.Element((XNamespace)FunctionTreeConfigurationNames.NamespaceName + FunctionTreeConfigurationNames.FunctionTagName); if (functionMarkupElement == null) tree.AddValidationError(element.GetXPath(), "TreeValidationError.Common.MissingFunctionMarkup"); actionNode.FunctionMarkup = functionMarkupElement; actionNode.DocumentLabel = documentLabelAttribute.GetValueOrDefault(actionNode.Label); if (documentIconAttribute != null) { actionNode.DocumentIcon = FactoryHelper.GetIcon(documentIconAttribute.Value); } else { actionNode.DocumentIcon = actionNode.Icon; } return actionNode; } else if (element.Name == TreeMarkupConstants.Namespace + "MessageBoxAction") { MessageBoxActionNode actionNode = new MessageBoxActionNode(); InitializeWithCommonValue(element, tree, actionNode, DefaultMessageBoxResourceName); XAttribute messageBoxTitleAttribute = element.Attribute("MessageBoxTitle"); XAttribute messageBoxMessageAttribute = element.Attribute("MessageBoxMessage"); if (messageBoxTitleAttribute == null) { tree.AddValidationError(element.GetXPath(), "TreeValidationError.Common.MissingAttribute", "MessageBoxTitle"); } else { actionNode.Title = messageBoxTitleAttribute.Value; } if (messageBoxMessageAttribute == null) { tree.AddValidationError(element.GetXPath(), "TreeValidationError.Common.MissingAttribute", "MessageBoxMessage"); } else { actionNode.Message = messageBoxMessageAttribute.Value; } XAttribute dialogTypeAttribute = element.Attribute("MessageDialogType"); string dialogTypeValue = dialogTypeAttribute.GetValueOrDefault("message"); switch (dialogTypeValue) { case "message": actionNode.DialogType = DialogType.Message; break; case "question": actionNode.DialogType = DialogType.Question; break; case "warning": actionNode.DialogType = DialogType.Warning; break; case "error": actionNode.DialogType = DialogType.Error; break; default: tree.AddValidationError(element.GetXPath(), "TreeValidationError.MessageBoxAction.UnknownDialogType", dialogTypeValue); break; } return actionNode; } else if (element.Name == TreeMarkupConstants.Namespace + "CustomUrlAction") { CustomUrlActionNode actionNode = new CustomUrlActionNode(); InitializeWithCommonValue(element, tree, actionNode, DefaultCustomUrlResourceName); XAttribute urlAttribute = element.Attribute("Url"); XAttribute viewLabelAttribute = element.Attribute("ViewLabel"); XAttribute viewToolTipAttribute = element.Attribute("ViewToolTip"); XAttribute viewIconAttribute = element.Attribute("ViewIcon"); IEnumerable<XElement> postParameterElements = element.Elements(TreeMarkupConstants.Namespace + "PostParameters"); XElement postParametersElement = null; if (postParameterElements.Count() == 1) { postParametersElement = element.Element(TreeMarkupConstants.Namespace + "PostParameters"); } else if (postParameterElements.Count() > 1) { tree.AddValidationError(element.GetXPath(), "TreeValidationError.CustomUrlAction.TooManyPostParameterElements", "PostParameters"); } if (urlAttribute == null) { tree.AddValidationError(element.GetXPath(), "TreeValidationError.Common.MissingAttribute", "Url"); } else { actionNode.Url = urlAttribute.Value; } actionNode.ViewLabel = viewLabelAttribute.GetValueOrDefault(actionNode.Label); actionNode.ViewToolTip = viewToolTipAttribute.GetValueOrDefault(actionNode.ToolTip); actionNode.ViewIcon = FactoryHelper.GetIcon(viewIconAttribute.GetValueOrDefault(DefaultCustomUrlResourceName)); bool urlIsAbsolute = actionNode.Url != null && actionNode.Url.Contains("://"); XAttribute viewTypeAttribute = element.Attribute("ViewType"); string viewTypeValue = viewTypeAttribute.GetValueOrDefault(urlIsAbsolute ? "externalview" : "documentview"); switch (viewTypeValue) { case "externalview": actionNode.ViewType = CustomUrlActionNodeViewType.ExternalView; break; case "genericview": actionNode.ViewType = CustomUrlActionNodeViewType.GenericView; break; case "pagebrowser": actionNode.ViewType = CustomUrlActionNodeViewType.PageBrowser; break; case "filedownload": actionNode.ViewType = CustomUrlActionNodeViewType.FileDownload; break; case "documentview": actionNode.ViewType = CustomUrlActionNodeViewType.DocumentView; break; default: tree.AddValidationError(element.GetXPath(), "TreeValidationError.CustomUrlAction.UnknownViewType", viewTypeValue); break; } actionNode.PostParameters = new Dictionary<string, string>(); if (postParametersElement != null) { foreach (XElement parameterElement in postParametersElement.Elements(TreeMarkupConstants.Namespace + "Parameter")) { XAttribute keyAttribute = parameterElement.Attribute("Key"); XAttribute valueAttribute = parameterElement.Attribute("Value"); if (keyAttribute == null) { tree.AddValidationError(element.GetXPath(), "TreeValidationError.Common.MissingAttribute", "Key"); continue; } else if (string.IsNullOrWhiteSpace(keyAttribute.Value)) { tree.AddValidationError(element.GetXPath(), "TreeValidationError.Common.WrongAttributeValue", "Key"); continue; } if (valueAttribute == null) { tree.AddValidationError(element.GetXPath(), "TreeValidationError.Common.MissingAttribute", "Value"); continue; } actionNode.PostParameters.Add(keyAttribute.Value, valueAttribute.Value); } } return actionNode; } else if (element.Name == TreeMarkupConstants.Namespace + "ConfirmAction") { ConfirmActionNode actionNode = new ConfirmActionNode(); InitializeWithCommonValue(element, tree, actionNode, DefaultConfirmResourceName); XAttribute confirmTitleAttribute = element.Attribute("ConfirmTitle"); XAttribute confirmMessageAttribute = element.Attribute("ConfirmMessage"); if (confirmTitleAttribute == null) { tree.AddValidationError(element.GetXPath(), "TreeValidationError.Common.MissingAttribute", "ConfirmTitle"); } else { actionNode.ConfirmTitle = confirmTitleAttribute.Value; } if (confirmMessageAttribute == null) { tree.AddValidationError(element.GetXPath(), "TreeValidationError.Common.MissingAttribute", "ConfirmMessage"); } else { actionNode.ConfirmMessage = confirmMessageAttribute.Value; } XElement functionMarkupElement = element.Element((XNamespace)FunctionTreeConfigurationNames.NamespaceName + FunctionTreeConfigurationNames.FunctionTagName); if (functionMarkupElement == null) tree.AddValidationError(element.GetXPath(), "TreeValidationError.Common.MissingFunctionMarkup"); actionNode.FunctionMarkup = functionMarkupElement; XAttribute refreshTreeAttribute = element.Attribute("RefreshTree"); string refreshTreeAttributeValue = refreshTreeAttribute.GetValueOrDefault("false").ToLowerInvariant(); if (refreshTreeAttributeValue == "true") { actionNode.RefreshTree = true; } else { actionNode.RefreshTree = false; } return actionNode; } else if (element.Name == TreeMarkupConstants.Namespace + "WorkflowAction") { WorkflowActionNode actionNode = new WorkflowActionNode(); InitializeWithCommonValue(element, tree, actionNode, DefaultWorkflowResourceName); XAttribute workflowTypeAttribute = element.Attribute("WorkflowType"); if (workflowTypeAttribute == null) { tree.AddValidationError(element.GetXPath(), "TreeValidationError.Common.MissingAttribute", "ConfirmTitle"); } else { actionNode.WorkflowType = TypeManager.TryGetType(workflowTypeAttribute.Value); if (actionNode.WorkflowType == null) tree.AddValidationError(element.GetXPath(), "TreeValidationError.Common.UnknownInterfaceType", workflowTypeAttribute.Value); } return actionNode; } else { tree.AddValidationError(element.GetXPath(), "TreeValidationError.Common.UnknownElement", element.Name); return null; } }