using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Linq; using System.Xml; using BGP.K3.BOS.Core.Xml; using BGP.K3.GSP.Core.Gsp; using Kingdee.BOS; using Kingdee.BOS.App.Data; using Kingdee.BOS.Core.Bill.PlugIn; using Kingdee.BOS.Core.DynamicForm.PlugIn.Args; using Kingdee.BOS.Orm.DataEntity; using Kingdee.BOS.Orm.Metadata.DataEntity; using Kingdee.BOS.ServiceHelper; using Kingdee.BOS.Util; namespace GZ.BGP.K3.GSP.Business.PlugIn.BaseData { [Description("BGP供应商表单插件")] [HotUpdate] public class BGPSUPPLIEREDIT : AbstractBillPlugIn { public override void AfterButtonClick(AfterButtonClickEventArgs e) { base.AfterButtonClick(e); if (e.Key == "F_BGP_BUTTON") { AddEntryMasterId(); } } private void AddEntryMasterId() { string text = $"SELECT FID,FKERNELXML FROM T_META_OBJECTTYPE WHERE FID='{Model.BusinessInfo.GetForm().Id}'"; DynamicObjectCollection source = DBServiceHelper.ExecuteDynamicObject(base.Context, text, (IDataEntityType)null, (IDictionary)null, CommandType.Text, new SqlParam[0]); DynamicObject dynamicObject = source.FirstOrDefault(); if (dynamicObject != null) { string text2 = dynamicObject["FKERNELXML"].ToString(); XmlDocument val = XmlUtility.ConvertStringToXmlDocument(text2); XmlElement elementsNode = XmlUtility.GetElementsNode(val); XmlElement appearancesNode = XmlUtility.GetAppearancesNode(val); ((XmlNode)elementsNode).AppendChild(TextFieldNode(val, "FSupplierContact")); ((XmlNode)appearancesNode).AppendChild(TextTextFieldAppearance(val, "FSupplierContact")); if (SaveMasterIdMetadata(Model.BusinessInfo.GetForm().Id, ((XmlNode)val).OuterXml)) { addCloumm("BGP_t_Cust_Entry100249", "FSupplierContact"); } } } private XmlNode TextFieldNode(XmlDocument doc, string entryKey) { string value = $"F{entryKey}".ToUpperInvariant(); XmlNode val = (XmlNode)(object)doc.CreateElement("TextField"); CreateAttribute(doc, val, "ElementType", "1"); CreateAttribute(doc, val, "ElementStyle", "0"); CreateXmlNode(doc, val, "ConditionType", "0"); CreateXmlNode(doc, val, "PropertyName", value); CreateXmlNode(doc, val, "EntityKey", entryKey.ToUpperInvariant()); CreateXmlNode(doc, val, "FieldName", value); CreateXmlNode(doc, val, "ListTabIndex", "100"); CreateXmlNode(doc, val, "Name", "分录MasterId"); CreateXmlNode(doc, val, "Id", Guid.NewGuid().ToString("N").ToLowerInvariant()); CreateXmlNode(doc, val, "Key", value); return val; } private XmlNode TextTextFieldAppearance(XmlDocument doc, string entryKey) { string value = $"F{entryKey}".ToUpperInvariant(); XmlNode val = (XmlNode)(object)doc.CreateElement("TextFieldAppearance"); CreateAttribute(doc, val, "ElementType", "1"); CreateAttribute(doc, val, "ElementStyle", "1"); CreateAttribute(doc, CreateXmlNode(doc, val, "EmptyText", ""), "action", "setnull"); CreateXmlNode(doc, val, "Key", value); CreateXmlNode(doc, val, "ListDefaultWidth", "100"); CreateXmlNode(doc, val, "EntityKey", entryKey.ToUpperInvariant()); CreateXmlNode(doc, val, "Tabindex", "100"); CreateXmlNode(doc, val, "LabelWidth", "100"); CreateXmlNode(doc, val, "Width", "100"); CreateXmlNode(doc, val, "Visible", "1023"); CreateXmlNode(doc, val, "VisibleExt", "100"); CreateXmlNode(doc, val, "Caption", "分录MasterId"); CreateXmlNode(doc, val, "Id", Guid.NewGuid().ToString("N").ToLowerInvariant()); return val; } private XmlAttribute CreateAttribute(XmlDocument doc, XmlNode node, string attributeName, string value) { XmlAttribute val = doc.CreateAttribute(attributeName); ((XmlNode)val).Value = value; ((XmlNamedNodeMap)node.Attributes).SetNamedItem((XmlNode)(object)val); return val; } private XmlNode CreateXmlNode(XmlDocument doc, XmlNode Pnode, string nodeName, string value) { XmlNode val = (XmlNode)(object)doc.CreateElement(nodeName); SetInnerText(val, value); Pnode.AppendChild(val); return val; } private void SetInnerText(XmlNode node, string txt) { if (node != null) { node.InnerText = txt; } } private bool SaveMasterIdMetadata(string fid, string xml) { string strSQL = "UPDATE T_META_OBJECTTYPE SET FKERNELXML=@FKERNELXML WHERE FID=@FID"; DBUtils.Execute(paramList: new SqlParam[2] { new SqlParam("@FID", KDDbType.String, fid), new SqlParam("@FKERNELXML", KDDbType.Xml, xml) }, ctx: base.Context, strSQL: strSQL); return true; } private bool addCloumm(string tablename, string entryKey) { //IL_001d: Unknown result type (might be due to invalid IL or missing references) //IL_0023: Invalid comparison between Unknown and I4 string arg = $"F{entryKey}".ToUpperInvariant(); string strSQL = ""; if ((int)GspDatabaseTypeHelper.GetGspDatabaseType(base.Context) == 1) { strSQL = string.Format("/*dialect*/\r\n IF NOT EXISTS (SELECT 1 FROM syscolumns INNER JOIN sysobjects ON sysobjects.id = syscolumns.id \r\n\t\t WHERE syscolumns.name = '{1}' AND sysobjects.name = '{0}')\r\n BEGIN\r\n ALTER TABLE {0} ADD {1} VARCHAR(50) null \r\n END", tablename, arg); } DBUtils.Execute(base.Context, strSQL); return true; } } }