void btn_Click(object sender, ButtonPressedEventArgs e)
 {
     using (DocFWOForm form = new DocFWOForm(new Guid(), "", GetPickListDataource("BusinessApproveStatus", true), this.ResourceServiceProvider)) {
         form.ShowDialog();
         ButtonEdit btn  = sender as ButtonEdit;
         ParaEntity para = CurrentFunction.ParaList.FirstOrDefault(c => c.Name == btn.Name);
         if (para != null)
         {
             _dataSource[para.Name] = form.RtnValues;
         }
     }
 }
        void dataSource_PropertyChanged(object sender, System.ComponentModel.PropertyChangedEventArgs e)
        {
            ParaEntity para = CurrentFunction.ParaList.FirstOrDefault(c => c.ConditionName == e.PropertyName);

            if (para == null || para.ParaTypeFlag != ParaTypeEnum.PickList)
            {
                return;
            }
            DependencyObject obj = sender as DependencyObject;

            if (obj[e.PropertyName].ToString() == "8")
            {
                _table.SuspendLayout();
                Control control = _table.GetControlFromPosition(2, para.Row);

                ButtonEdit btn = ControlUtils.CreateButtonEdit(_dataSource, para.Name, para.Name, false, string.Empty, control.TabIndex);
                btn.ButtonClick += new ButtonPressedEventHandler(btn_Click);
                btn.Width        = control.Width;
                _table.Controls.Remove(control);
                _table.Controls.Add(btn, 2, para.Row);
                _table.ResumeLayout(true);
            }
            else
            {
                _table.SuspendLayout();
                Control control = _table.GetControlFromPosition(2, para.Row);

                LookUpEdit lookup = ControlUtils.CreateLookUpEdit(_dataSource, para.Name, para.Name, true, 0, null, control.TabIndex);
                lookup.Anchor = AnchorStyles.Left;
                lookup.Width  = 150;
                lookup.Name   = para.Name;
                GetPickDataSource(para.PickListTypeName, lookup);

                _table.Controls.Remove(control);
                _table.Controls.Add(lookup, 2, para.Row);
                _table.ResumeLayout(true);
            }
        }
Exemplo n.º 3
0
        static internal XmlDocument GenerateXml(ParaEntity entity)
        {
            var entityType = entity.GetType().Name;
            var doc        = new XmlDocument();
            var rootNode   = doc.CreateElement(entityType);

            if (entity.Id > 0)
            {
                var attribute = doc.CreateAttribute("id");
                attribute.Value = entity.Id.ToString();
                rootNode.Attributes.Append(attribute);
            }

            foreach (var sf in entity.StaticFields)
            {
                bool foundFieldType = false;

                var fieldVal = sf.Value;
                //For Static fields set FieldType to ignore to skip xml generation
                if (fieldVal == null || sf.IgnoreSerializeXml)
                {
                    continue;
                }

                //generate the nested XML for entity references
                if (fieldVal is IEntityReference)
                {
                    var entRef        = fieldVal as IEntityReference;
                    var entityRefType = entRef.GetEntity().GetType().Name; //property name in the class
                    //check if there is an XmlElement attribute on the property. Null if none exists
                    var entRefTypeOverride = GetEntityReferenceXmlAttributeValue(entRef);

                    XmlGenerateComplexEntityNode(doc, rootNode, sf.Name, entRefTypeOverride ?? entityRefType, "id", entRef.GetEntity().Id.ToString());
                    foundFieldType = true;
                }

                //List fields
                //TODO: Need to use the XmlAttributes, since class types may not match the item node name (ex CsrRole vs Role)
                if (sf.FieldType == "entitymultiple")
                {
                    var node    = doc.CreateElement(sf.Name);
                    var sfList  = sf.Value as IEnumerable <ParaEntityBaseProperties>;
                    var attList = sf.Value as IEnumerable <Attachment>;

                    //attachments are a special case that don't extend ParaEntityBaseProperties, so check first
                    //Check the internal setting to determine whether to delete the list of attachments (send an empty node)
                    if (attList != null && (entity.GetFieldValue <bool?>("AllowDeleteAllAttachments") == true || attList.Any()))
                    {
                        var nodeName = sf.Name;
                        node = XmlGenerateAttachmentNodes(doc, nodeName, attList);
                        rootNode.AppendChild(node);
                    }
                    //Don't populate if the list is empty
                    else if (sfList != null && sfList.Any())
                    {
                        //Handle the very specific download folders scenario
                        if (entity is Download && sf.Name == "Folders")
                        {
                            node = GenerateDownloadFoldersNode(entity as Download, doc, rootNode);
                            rootNode.AppendChild(node);
                        }
                        else
                        {
                            foreach (var ent in sfList)
                            {
                                var nodeName  = ent.GetType().Name;
                                var nodechild = doc.CreateElement(nodeName);
                                var attribute = doc.CreateAttribute("id");
                                attribute.Value = ent.Id.ToString();
                                nodechild.Attributes.Append(attribute);
                                node.AppendChild(nodechild);
                            }
                        }

                        rootNode.AppendChild(node);
                    }
                    foundFieldType = true;
                }

                //for simple types, a tostring suffices
                if (fieldVal is Int32 ||
                    fieldVal is Int64 ||
                    fieldVal is string)
                {
                    XmlGenerateElement(doc, rootNode, sf.Name, sf.Value.ToString());
                    foundFieldType = true;
                }
                //C# outputs boolean.ToString as "True" or "False"... Needs to be lower case for XML
                if (fieldVal is bool)
                {
                    XmlGenerateElement(doc, rootNode, sf.Name, sf.Value.ToString().ToLower());
                    foundFieldType = true;
                }
                //DateTimes are more odd
                if (fieldVal is DateTime)
                {
                    var          val            = (DateTime)fieldVal;
                    const string dateTimeFormat = "yyyy-MM-ddTHH:mm:ssZ";
                    XmlGenerateElement(doc, rootNode, sf.Name, val.ToString(dateTimeFormat));
                    foundFieldType = true;
                }

                if (!foundFieldType)
                {
                    throw new Exception(String.Format("No XML generation logic found for field type: {0}", sf.FieldType));
                }
            }

            ObjectGenerateCustomFieldsXml(doc, rootNode, entity.CustomFields);
            doc.AppendChild(rootNode);
            return(doc);
        }