Files
PastSaid fa480006a8 1
2024-07-16 10:33:50 +08:00

143 lines
6.1 KiB
C#

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<string, Type>)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;
}
}
}