是否可以使用字符串调用过程?

Is it possible call a procedure using strings?

我需要调用很多名称递增的过程。是否可以在字符串中生成过程的名称,然后使用该字符串调用它? Python 有它自己的 exec 方法,这将是理想的,但如果我可以动态选择一个函数的名称,我会很好。

编辑: 为了详细说明这是为了什么,我必须编写一个性能测试来重复多个代码单元的过程。根据给定的参数,我可以有 100 个代码单元,每个代码单元包含 30 个过程,因此要调用所有这些,我目前必须显式调用它们中的每一个。

startTime := Time();
progressDialog.Update(1,'Proc0A');
for i := 1 to 1000 do begin
  Set0_No0.Proc0A(1);
  progressDialog.Update(2,i);
end;
timeElapsed := Time() - startTime;
if timeElapsed = 0 then begin
  timeElapsed := 1;
end;
baseTime := timeElapsed;

FinishTest(timeElapsed, baseTime, 0, false, false, 1, 1, 1000);

startTime := Time();
progressDialog.Update(1,'Proc0B');
for i := 1 to 1000 do begin
  Set0_No0.Proc0B(1);
  progressDialog.Update(2,i);
end;
timeElapsed := Time() - startTime;
if timeElapsed = 0 then begin
  timeElapsed := 1;
end;

FinishTest(timeElapsed, baseTime, 0, true, false, 1, 1, 1000);

相反,我希望它像这样工作:

procedure CallMethod(setNo:Integer; codeunitNo:Integer; procedureNo:Integer; type:Code[5]; repetitions:Integer)
begin
  for i := 1 to repetitions do begin
    Exec('Set%1_No%2.Proc%3%4(1)',setNo,codeunitNo,procedureNo,type);
    Set0_No0.Proc0A(1);
    progressDialog.Update(2,i);
  end;
end;

您需要的功能在 AL 中不可用。

不过,您可以考虑以下几个选项:

  1. 结合使用 enumsinterfacescodeunits,您可以删除大量样板代码。
  2. 使用脚本(例如 PowerShell)您可以解析所有源文件,找到代码单元及其过程,然后生成调用每个过程的新代码单元。