判断当前单据是新增、编辑、查看状态、DBUtils.ExcuteDataSet、ExecuteDynamicObject原创
金蝶云社区-空鹅机
空鹅机
18人赞赏了该文章 310次浏览 未经作者许可,禁止转载编辑于2024年10月18日 11:26:37

判断当前单据是新增、编辑、查看状态

使用 

this.View.OpenParameter.Status.Equals(OperationStatus.ADDNEW)

EDIT

VIEW


sql = "填写你的SQL"

DataSet ds = DBUtils.ExecuteDataSet(this.Context, sql);

此语句将返回一个DataSet(来源于System.Data)

DataTable dt = ds.Tables[0] 

这是一个DataTable

将用到其中的属性dt.Rows.Count 

if (dt.Rows.Count>0)

{

    for (int i = 0, i < dt.Rows.Count; i++)

    {

        this.Model.SetValue("EntityKey单据体中的标识", dt.Rows[i]["字段名"], 行号) ;

    }

}


请注意!

DBUtils.ExecuteDataSet方法已经被弃用!

请尽可能使用

DBUtils.ExecuteDynamicObject方法!

此方法返回一个DynamicObjectCollection


问题来了,ExecuteDynamicObject怎么用呢?

sql = "SELECT TOP 1 FID FROM T_PUR_POORDER"选择采购订单第一条的FID

DynamicObjectCollection result = ExecuteDynamicObject(this.Context, sql)

此时,这个DynamicObjectCollection的第一层的每一个索引对应着数据库查询的每一条记录 


我要拿到第一条记录

result[0] 

我要拿到第一条记录中的FID

result[0]["FID"]

这就拿到了 

this.Model.SetValue("FNote", result[0]["FID"])

就能够成功设置!


【好奇为什么每个数据库方法都要传入this.Context?】

答:因为this.Context包含了上下文的信息,比如,账套信息,组织信息,用户名,处理事务所需要的信息,都一句话写完了。不然你要自己去建立数据库连接的话,变量就不止this.Context这么简单了。


IEnumerable<IDataRecord> dataRecords = DBUtils.ExecuteEnumerable(this.Context, sql);

【IDataRecord提供每行对列值的访问权限, 金蝶注释】

他是Enumerable类型的话,你就可以使用foreach语句


                    string sql = "SELECT TOP 10 FMATERIALID, FDATE FROM T_SAL_ORDERENTRY T1E LEFT JOIN T_SAL_ORDER T1 ON T1E.FID = T1.FID WHERE T1.FSALEORGID = 101421 ORDER BY FDATE DESC";//选出最新的十条记录

                    IEnumerable<IDataRecord> dataRecords = DBUtils.ExecuteEnumerable(this.Context, sql);

                    int i = 0;

                    foreach(IDataRecord dataRecord in dataRecords)

                    {

                        this.Model.CreateNewEntryRow("FSaleOrderEntry");

                        this.Model.SetValue("FMaterialId", dataRecord["FMaterialId"], i);

                        this.View.InvokeFieldUpdateService("FMaterialId", i);

                        i++;

                    }

                    this.View.UpdateView("FSaleOrderEntry");



使用ExecuteDynamicObject 也是和上面格式同样的 

                    string sql = "SELECT TOP 10 FMATERIALID, FDATE FROM T_SAL_ORDERENTRY T1E LEFT JOIN T_SAL_ORDER T1 ON T1E.FID = T1.FID WHERE T1.FSALEORGID = 101421 ORDER BY FDATE DESC";

                    DynamicObjectCollection dynamicObjectCollection =  DBUtils.ExecuteDynamicObject(this.Context, sql);//这句话修改!

                    int i = 0;

                    foreach (DynamicObject dynamicObject in dynamicObjectCollection)//这句话修改!

                    {

                        this.Model.CreateNewEntryRow("FSaleOrderEntry");

                        this.Model.SetValue("FMaterialId", dynamicObject["FMaterialId"], i);

                        this.View.InvokeFieldUpdateService("FMaterialId", i);

                        i++;

                    }

                    this.View.UpdateView("FSaleOrderEntry");



图标赞 18
18人点赞
还没有人点赞,快来当第一个点赞的人吧!
图标打赏
0人打赏
还没有人打赏,快来当第一个打赏的人吧!