起步软件技术论坛-X3

 找回密码
 立即注册
搜索
查看: 269|回复: 12

【结贴】代码调用表达式编辑器时,字段如何读取?**

[复制链接]
发表于 2008-9-1 16:31:39 | 显示全部楼层 |阅读模式
你好:
   代码调用表达式编辑器时,字段如何读取,如下边的“lstrings”

BizUtils.EditExpression( lStrings, lFuncs, lExpression, nil) then  //调出表达式编辑器
回复

使用道具 举报

发表于 2008-9-1 18:02:37 | 显示全部楼层
static function EditExpression(AFields: Business.System.TStrings; AFunctions: Business.System.TList; AExprText: string; AExpr: Justep.System.Expr.TExpr): Boolean;
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-9-2 09:03:32 | 显示全部楼层
可能我表述的不清楚
BizUtils.EditExpression( lStrings, lFuncs, lExpression, nil)
中第一个参数是字段,这个参数如何设置,才能在运行时,点击"字段"按钮显示当前数据集的字段列表?   
请告诉我方法
回复 支持 反对

使用道具 举报

发表于 2008-9-2 10:01:55 | 显示全部楼层
AFields   : 数据集业务字段列表,参与表达式运算。格式有两种(不需要在Tstrings里记录BizField对象):
1、DataSetID.FieldID=DataSetDisplayName.FieldDisplayName
2、FieldURL=DataSetDisplayName.FieldDisplayName
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-9-2 15:00:44 | 显示全部楼层
var
  lExpression: string;
  lDataField: TDataField;
  lBizParam : TBizParam ;
  lFuncs: TList;
  lStrings:TStringList;
  lExpr: TBizExpr;
  lreturn: Variant;
begin
  lStrings:=TStringList.Create;
  lFuncs:=TList.Create;
  try
    BizExpr.ExprFunctions.Get(lFuncs,nil,true);
    lExpression := DataSetfreefield.BizFieldByName('FExpr').AutoFillDef.Expression.Text;
    if BizUtils.EditExpression(lStrings, lFuncs, lExpression, nil) then  
    begin
      DataSetfreefield.BizFieldByName('FExpr').AutoFillDef.Expression.Text := lExpression;
      ...
     ...
    end;

  finally
    lFuncs.Free;
  end;
  lStrings.free;
end;


请问,以上这段程序里,如何让“表达式编辑器”的“字段”按钮可以操作并能列出相关字段?
回复 支持 反对

使用道具 举报

发表于 2008-9-2 16:00:18 | 显示全部楼层
lStrings怎么设置的?
要在当前环境里能够找到你在lStrings中指定的数据集或者表的字段才行。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-9-4 13:07:54 | 显示全部楼层
在5楼的程序里,如何设置这个lStrings,能达到可以使用字段按钮?我现在就是不知道怎么设置才来请教起步高手的

4楼的我没看明白如何使用
回复 支持 反对

使用道具 举报

发表于 2008-9-4 13:53:13 | 显示全部楼层
lstrings.add('数据集ID.字段ID=标准数据集1.字段1');
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-9-4 14:51:56 | 显示全部楼层
以下代码是在业务信息里的一个函数里实现的
'freefield 是数据集的ID   ,“自由项”是数据集的显示名称
公式设置的自动添充为“状态”
当运行到计算那块时提示如下错误:
“运行系统初始化时侯发生异常,符号“freefield.fstate”没有定义。类型:EEXPR”

var
  lExpression: string;
  lDataField: TDataField;
  lBizParam : TBizParam ;
  lFuncs: TList;
  AFields:TStringList;
  lExpr: TBizExpr;
  lreturn: Variant;
begin
  AFields:=TStringList.Create ;

  AFields.Add('freefield.FFREECNAME=自由项.计算表达式');     
  AFields.Add('freefield.FSTATE=自由项.状态');
  lFuncs:=TList.Create;
  try
    BizExpr.ExprFunctions.Get(lFuncs,nil,true);
    lExpression := DataSetfreefield.BizFieldByName('FExpr').AutoFillDef.Expression.Text;
    if BizUtils.EditExpression(AFields , lFuncs, lExpression, nil) then
    begin
      DataSetfreefield.BizFieldByName('FExpr').AutoFillDef.Expression.Text := lExpression;
      lExpr:=TBizExpr.Create(Context);
      try
        lExpr.Text :=lExpression;
        lreturn:=lExpr.Calc  ;
        DataSetfreefield.Edit;
        DataSetfreefield.FieldByName('FExpr').AsString := variants.VarToStr(lreturn);
      finally
        lExpr.Free ;
      end;
    end;

  finally
    lFuncs.Free;
  end;
  AFields.Free ;
end;
回复 支持 反对

使用道具 举报

发表于 2008-9-4 16:49:49 | 显示全部楼层
freefield这个数据集打开了马?
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Justep Inc.

GMT+8, 2025-7-26 01:50 , Processed in 0.040326 second(s), 16 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表