0

我试图掌握以下 3 个概念(类)的目的,它们是 Idempiere/Adempiere 的核心功能。

基于代码描述

我确实知道GridTab模型的状态代表 ad_tab,它是任何 ad_table 的 ViewModel 部分。简单的说我们会找到绑定到ad_table的数据。

首先,对于GridField我认为是视图的模型,如果我可以滥用它就像 DOM 状态:我们有什么字段、字段值和事件,我认为是以模板视图为中心的。

发现这两个(如果我的分析没有记错的话)让我感到奇怪。Ctx 真正代表什么?它代表什么状态?

该代码没有对此发表评论,任何人都可以回答我吗?

谢谢 。

4

2 回答 2

2

ADempiere 中 Context 的使用和意图与 Carlos 描述的相同,只是访问权限不同。在 Web 中,您可以从窗口的右上角访问上下文,如下所示。

显示上下文链接的 ADempiere 用户界面的片段

上下文如何提供全局状态的另一个例子是在测试中。这是一个测试设置类的片段,它使用时间和登录信息初始化上下文。然后,测试类可以访问上下文,使用数据库执行集成测试,就好像它们在实际使用中一样。这里的上下文仅限于登录信息,但可以扩展为包括测试所需的上下文的任何其他元素。

@BeforeAll
public static void setUpBeforeClass() {
    
    today = TimeUtil.getDay(System.currentTimeMillis());
    ctx = Env.getCtx();
    ctx.setProperty("#AD_Org_ID", Integer.toString(AD_ORG_ID));
    ctx.setProperty("#AD_User_ID", Integer.toString(AD_USER_ID));
    ctx.setProperty("#AD_Client_ID", Integer.toString(AD_CLIENT_ID));
    ctx.setProperty("#Date", TimeUtil.getDay(System.currentTimeMillis()).toString());
    ctx.setProperty("#AD_Language", "en");

    Ini.setClient (IS_CLIENT);
    Ini.loadProperties(false);
    org.compiere.Adempiere.startup(IS_CLIENT);

    trxName = Trx.createTrxName("TestRun_" + randomString(4));
    trx = Trx.get(trxName, false);
    
    try {
        mainSavepoint = trx.setSavepoint("AllTests_" + randomString(4));
    } catch (SQLException e) {
        fail(e.getMessage());
    }

}

@AfterAll
public static void tearDownAfterClass() {

    try {
        tryToRollback(mainSavepoint);
        trx.close();
    }
    catch(SQLException e) {
        fail("Unable to rollback. " + e.getMessage());
        
    }
    finally {
        trx.close();
        trx = null;
        ctx = null;
    }
    
}
于 2020-12-03T03:43:50.390 回答
2

在 iDempiere 中,上下文是整个应用程序的全局属性对象。

您可以将上下文视为可以从系统的任何位置访问的全局变量集。

单击 iDempiere 图标可以查看上下文变量,然后导航到错误选项卡,然后单击查看按钮,您会在该行后面找到变量:

=== Context ===

在上下文中,您可以找到很多信息:

  • 登录变量:一些以 # 开头的变量,例如 #AD_Role_ID
  • 默认值:标记为默认值的记录,也以 # 开头,例如 #C_BP_Group_ID
  • 会计相关变量:以 $ 开头的变量,如 $C_Currency_ID
  • 全局首选项:以 P 开头,如 P|AutoCommit
  • 窗口首选项:以 P 和数字开头,例如 P132|GL_Category_ID

然后,您感兴趣的上下文变量,打开的窗口上每个字段的值:

  • 窗口字段:以数字开头的字段,例如 1|DiscountSchema - 这意味着打开的第一个窗口中的字段 DiscountSchema
  • 选项卡字段:以两个数字开头的字段,例如 1|2|DatePromised - 这表示打开的第一个窗口(数字 1)的第三个选项卡(数字 2,选项卡从零开始编号)中的字段 DatePromised

您可以使用 Env.getContext... 方法访问这些上下文变量,还可以使用 Env.setContext... 方法添加和删除您自己的变量。

于 2020-11-11T21:50:40.120 回答