/// <summary> /// 数据导入处理相关 /// </summary> /// <typeparam name="T"></typeparam> /// <typeparam name="TChannel"></typeparam> /// <param name="viewForm"></param> /// <param name="importDataInfo"></param> /// <param name="hasImportData"></param> /// <returns></returns> public static bool DataImport <T, TChannel>(MB.WinBase.IFace.IViewGridForm viewForm, int mainDocDataType, MB.WinClientDefault.DataImport.DataImportInfo importDataInfo, out System.Collections.IList hasImportData) where TChannel : class, IDisposable { DataRow[] drs = importDataInfo.ImportData.Tables[0].Select(); MB.WinBase.UIDataInputValidated dataValidated = new MB.WinBase.UIDataInputValidated(); List <T> lstData = new List <T>(); Type entityType = typeof(T); string[] logicKeys = MB.WinBase.LayoutXmlConfigHelper.Instance.GetLogicKeys(viewForm.ClientRuleObject.ClientLayoutAttribute.UIXmlConfigFile); var colPropertys = viewForm.ClientRuleObject.UIRuleXmlConfigInfo.GetDefaultColumns(); string errMsg = string.Empty; using (TChannel client = MB.WcfClient.WcfClientFactory.CreateWcfClient <TChannel>(viewForm.ClientRuleObject)) {// MB.Util.MyNetworkCredential.CreateWcfClientWithCredential<TChannel>()) { object val = MB.WcfServiceLocator.WcfClientHelper.Instance.InvokeServerMethod(client, "GetCreateNewEntityIds", mainDocDataType, drs.Length); int id = MB.Util.MyConvert.Instance.ToInt(val); foreach (DataRow dr in drs) { //在导入之前先进行数据的检验 bool check = dataValidated.DataRowValidated(colPropertys, dr, ref errMsg); if (!check) { throw new MB.Util.APPException(errMsg, MB.Util.APPMessageType.DisplayToUser); } T newInfo = (T)MB.Util.DllFactory.Instance.CreateInstance(entityType); MB.Util.MyReflection.Instance.FillModelObject(newInfo, dr); MB.Util.MyReflection.Instance.InvokePropertyForSet(newInfo, MB.BaseFrame.SOD.OBJECT_PROPERTY_ID, id++); MB.Util.MyReflection.Instance.InvokePropertyForSet(newInfo, MB.WinBase.UIDataEditHelper.ENTITY_STATE_PROPERTY, MB.Util.Model.EntityState.New); //导入时,需要进行逻辑主键的检验, (特别说明: 如果性能上存在问题,可以考虑批量检验的方式) if (logicKeys != null && logicKeys.Length > 0) { object[] checkPars = new object[] { mainDocDataType, newInfo, logicKeys }; bool b = (bool)MB.WcfServiceLocator.WcfClientHelper.Instance.InvokeServerMethod(client, "CheckValueIsExists", checkPars); if (b) { string desc = MB.WinBase.ShareLib.Instance.GetPropertyDescription(logicKeys, colPropertys); string valDesc = MB.WinBase.ShareLib.Instance.GetMultiEntityValueDescription(logicKeys, newInfo); string msg = "需要存储的对象属性(" + desc + ") 的值(" + valDesc + ") 在库中已经存在,本次导入不成功"; throw new MB.Util.APPException(msg, MB.Util.APPMessageType.DisplayToUser); } } lstData.Add(newInfo); object[] pars = new object[] { mainDocDataType, newInfo, false, null }; object re = MB.WcfServiceLocator.WcfClientHelper.Instance.InvokeServerMethod(client, "AddToCache", pars); } MB.WcfServiceLocator.WcfClientHelper.Instance.InvokeServerMethod(client, "Flush"); } hasImportData = lstData; return(true); }
/// <summary> /// /// </summary> /// <param name="clientRuleObject"></param> /// <param name="editType"></param> /// <param name="mainViewGrid"></param> public AbstractEditBaseForm(IClientRule clientRuleObject, ObjectEditType editType, MB.WinBase.Binding.BindingSourceEx bindingSource) { InitializeComponent(); if (!MB.Util.General.IsInDesignMode() && editType != ObjectEditType.DesignDemo) { _DataValidated = new MB.WinBase.UIDataInputValidated(this); _BindingSource = bindingSource; _ClientRuleObject = clientRuleObject; //根据业务类上的配置项来进行约束操作菜单项。 var rejectCfg = MB.WinBase.Atts.AttributeConfigHelper.Instance.GetModuleRejectCommands(_ClientRuleObject.GetType()); if (rejectCfg != null) { _RejectCommands = rejectCfg.RejectCommands; } //_RejectCommands _CurrentEditType = editType; // _MainViewGridControl = mainViewGrid; this.Load += new EventHandler(AbstractEditBaseForm_Load); _BeforeSaveDetailEntityCache = new MB.WinBase.UIEditEntityList(); _BeforeSaveDetailEntityCache.ListChanged += new ListChangedEventHandler(_DetailEditEntitys_ListChanged); bindingNavMain.ItemClicked += new ToolStripItemClickedEventHandler(bindingNavMain_ItemClicked); _BindingSource.ListChanged += new ListChangedEventHandler(_BindingSource_ListChanged); _BindingSource.PositionChanged += new EventHandler(_BindingSource_PositionChanged); _BindingSource.AddingNew += new AddingNewEventHandler(_BindingSource_AddingNew); // bntPositionItem.KeyDown += new KeyEventHandler(bntPositionItem_KeyDown); //_HasLoadDetailData = new Dictionary<KeyValuePair<object, int>, object>(); // _ExtendUICommands = new Dictionary<ToolStripButton, CommandID>(); _HasAddMainEntityEvent = new List <INotifyPropertyChanged>(); } }