예제 #1
0
        /// <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);
        }
예제 #2
0
        /// <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>();
            }
        }