判断当前单据是新增、编辑、查看状态
使用
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");