料号过滤项目号

实现功能:做一个自定义参照,绑定到项目(色号)里,替换掉系统原来的参照。在料号(底布花型)参照里选出一个料号,这个料号作为参数传到自定义项目参照里,过滤出相关的项目来,(不相关的不在参照里显示)。顺便带出一个实体扩展字段10(工厂色)。
一、自定义一个参照。
做好一个料号项目号关联实体(UFIDA.U9.MO.JR.hduzh.JRItemProjBE.MetaData.dll,杜忠搞定),发布后在,在发布对象浏览器里找到并把proj_ID, proj_code, proj_name, proj_shortname, DescFlexField_PubDescSeg10字段拖出来
在数据库里查询到工厂色存到实体扩展字段十里,所以也要拖进去。
添加一个参数ItemID。过滤表达式设置为:UFIDA::U9::MO::JR::hduzh::JRItemProjBE::JRItemProj.Item.ID=@ItemID。发布,拷贝.dll,执行sql

二、建立UI扩展。
SOProjRef.cs

1,在数据库里查到标准销售里的WebPart名称,添加引用。定义一个变量。
StandardSOMainUIFormWebPart soWebPart;
2,找到项目号控件ID,把控件强转成参照类型,并把自定义台照绑定到该控件里。(找控件ID时,通过查看源文件找,在没有个性化的数据库里找,这里,个性化之后的ID是project,但是一直找不到,没个性化时是project2。搞定)
    public override void AfterInit(UFSoft.UBF.UI.IView.IPart Part, EventArgs args)
        {
            base.AfterInit(Part, args);
            soWebPart = (StandardSOMainUIFormWebPart)Part;
            System.Web.UI.Control c = soWebPart.FindControl("Project2");
            IUFFldReference refprj = (IUFFldReference)c;
            UIControlBuilder.SetReferenceControlRefInfo(refprj, "2e07d219-5840-4e0b-9567-6cb2f7822392", 580, 408, "Proj_Name", "Proj_Code", "Proj_ID", soWebPart.Model.SO_SOLines.FieldProject_Code, soWebPart.Model.SO_SOLines.FieldProject_Name);
}
3,注册回调函数,
   当料号(ID为ItemInfo_ItemID)的值改变时,料号的值作为参数过滤条件,过滤出相关色号的值。
    public override void AfterLoad(UFSoft.UBF.UI.IView.IPart Part, EventArgs args)
        {
            base.AfterLoad(Part, args);
            soWebPart = (StandardSOMainUIFormWebPart)Part;
            this.GridItemRef_DoBeforeCallback(soWebPart);
            this.GridItemRef_DoBeforeCallback2(soWebPart);
        }
        //当ItemInfo_ItemID的值改变时,把值作为过滤参数,通过过滤条件过滤出相关的色号
        private void GridItemRef_DoBeforeCallback(StandardSOMainUIFormWebPart soWebPart)
        {
            IUFDataGrid datagrid = (IUFDataGrid)soWebPart.GetUFControlByName(soWebPart.TopLevelContainer, dataGridName);
            //定义一个关联控件
            AssociationControl assoCGrid = new AssociationControl();
            assoCGrid.SourceServerControl = datagrid;
            assoCGrid.SourceControl.EventName = "OnCellDataChanged";
            ((UFWebClientGridAdapter)assoCGrid.SourceControl).FireEventCols.Add("ItemInfo_ItemID");

            ClientCallBackFrm callBackFrm = new ClientCallBackFrm();
            callBackFrm.DoCustomerAction += new ClientCallBackFrm.ActionCustomer(assoCGrid_DoBeforeItemAction);
            callBackFrm.ParameterControls.Add(datagrid);
            callBackFrm.Add(assoCGrid);
            soWebPart.Controls.Add(callBackFrm);
        }

        private Object assoCGrid_DoBeforeItemAction(CustomerActionEventArgs args)
        {
            IUFDataGrid datagrid = (IUFDataGrid)soWebPart.GetUFControlByName(soWebPart.TopLevelContainer, dataGridName);
            string rowIndex = ((ArrayList)args.ArgsHash[UFWebClientGridAdapter.ALL_GRIDDATA_SelectedRows])[0].ToString(); //返回被选种的行号
            ArrayList resGrid = (ArrayList)args.ArgsHash[datagrid.ClientID];
            int rowCount = ((ArrayList)args.ArgsHash[datagrid.ClientID]).Count; //返回当Grid行数
            soWebPart.CurrentState["JR_rowCount"] = rowCount;
            UFWebClientGridAdapter grid = new UFWebClientGridAdapter(datagrid);
            string itemCode = string.Empty;
            string itemID = "";

            //获得客户料号
            itemID = ((Hashtable)((ArrayList)args.ArgsHash[datagrid.ClientID])[int.Parse(rowIndex)])["ItemInfo_ItemID"].ToString();
            if (string.IsNullOrEmpty(itemID))
            {
                return args;
            }
            //把itemID存为缓存,在参照项目里设置过滤条件,如果缓存不为空,则过滤条件为"Item.ID=@itemID",参数@itemID值为缓存的值
            soWebPart.CurrentState["JRProjectRef_ItemID"] = itemID;
            return args;
        }
4,   确定项目(色号)之后,工厂色也可以确定唯一,自动带出来。
        private void GridItemRef_DoBeforeCallback2(StandardSOMainUIFormWebPart soWebPart)
        {
            IUFDataGrid datagrid = (IUFDataGrid)soWebPart.GetUFControlByName(soWebPart.TopLevelContainer, dataGridName);

            AssociationControl assoCGrid = new AssociationControl();
            assoCGrid.SourceServerControl = datagrid;
            assoCGrid.SourceControl.EventName = "OnCellDataChanged";
            ((UFWebClientGridAdapter)assoCGrid.SourceControl).FireEventCols.Add("Project");

            ClientCallBackFrm callBackFrm = new ClientCallBackFrm();
            callBackFrm.DoCustomerAction += new ClientCallBackFrm.ActionCustomer(assoCGrid_Project_CellDataChangedAction);
            callBackFrm.ParameterControls.Add(datagrid);
            callBackFrm.Add(assoCGrid);
            soWebPart.Controls.Add(callBackFrm);
}
        private Object assoCGrid_Project_CellDataChangedAction(CustomerActionEventArgs args)
        {
            IUFDataGrid datagrid = (IUFDataGrid)soWebPart.GetUFControlByName(soWebPart.TopLevelContainer, dataGridName);
            string rowIndex = ((ArrayList)args.ArgsHash[UFWebClientGridAdapter.ALL_GRIDDATA_SelectedRows])[0].ToString();
            UFWebClientGridAdapter grid = new UFWebClientGridAdapter(datagrid);
            string itemCode = string.Empty;
            if (soWebPart.CurrentState["cRef_DescFlexField_PubDescSeg10"] != null)
            {
                string pubDescSeg10 = soWebPart.CurrentState["cRef_DescFlexField_PubDescSeg10"].ToString();
                grid.CellValue.Add(new Object[] { rowIndex, "DescFlexField_PubDescSeg10", new string[] { pubDescSeg10, pubDescSeg10, pubDescSeg10 } });
                args.ArgsResult.Add(grid.ClientInstanceWithValue);
            }
            return args;
}

三,在参照的项目里(文件为JRProjectRefRefWebPartCodeBehindExtend.cs),把UI缓存的值赋给参数ItemID,实现过滤条件。当参数为空,则不用过滤,显示所有的色号
1,      #region 自定义数据初始化加载和数据收集
        private void OnLoadData_Extend(object sender)
        {
            //标准销售料品ID不为空,过滤,把缓存的底布花型(料号)赋给自定义参照的参数。为空,把过滤条件去掉
            if (this.CurrentState["JRProjectRef_ItemID"] != null)
            {
                this.Model.cRef.CurrentFilter.OPath = "Item.ID = @ItemID";
                this.Model.cRef.CurrentFilter.Parameters["@ItemID"].DataValue = this.CurrentState["JRProjectRef_ItemID"];
            }
            //料品ID不为空,过滤,为空,把过滤条件去掉

            else
            {
                this.Model.cRef.CurrentFilter.OPath = "";
            }
            OnLoadData_DefaultImpl(sender);

        }

 2,       #region 自己扩展 Extended Event handler
        public void AfterOnLoad()
        {
            //工厂色有值时才传进去,否则会出现未将对像实例化错误
            if (this.Model.cRef.RecordCount > 0)
            {
                if (!string.IsNullOrEmpty(this.Model.cRef.FocusedRecord.DescFlexField_PubDescSeg10))
                {
                    this.CurrentState["cRef_DescFlexField_PubDescSeg10"] = this.Model.cRef.FocusedRecord.DescFlexField_PubDescSeg10;

                }
            }
        }

四,修改WebPart配置文件(D:/UFIDA/U9V201/Portal/ WebPartExtend.config),添加以下节点
<ExtendedPart parentPartFullName="UFIDA.U9.SCM.SM.SOUIModel.StandardSOMainUIFormWebPart"
extendedPartFullName="UFIDA.U9.SCM.SD.ItemProj.SOProjRef"
extendedPartAssemblyName="UFIDA.U9.SCM.SD.ItemProj">
</ExtendedPart>
第一个参数为WebPart全名,第二个为UI项目dll名+类名,第三个参数为UI项目dll名

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值