我有两列名为Quantity
和Issued Quantity
。我希望当我在Quantity
列中添加值时,例如3
,Issued Quantity
将自动生成3
。另外,我希望它反过来发生。
该示例位于Purchase Order
窗口,PO Line
标签上。在Quantity
部分。当我将4
放入Quantity
字段时,PO Quantity
字段会自动生成4
。
我尝试模仿列和字段,但它不起作用。
答案 0 :(得分:0)
这是在Adempiere中由renamed完成的,该Callout在Adempiere所称的Application Dictionary
中配置从你给出的例子;更新采购订单上的数量。 如果您使用系统用户登录Adempiere,则可以查看和修改应用程序词典。
从主菜单中选择 Application Dictionary-> Table&柱。
在打开的搜索框中输入 C_OrderLine 作为数据库表名称。
现在列标签并向下滚动列表以找到 QtyEntered 列。切换到表单视图,接近结尾,您将看到可以输入字段标注。
您应该看到C_OrderLine.QtyEntered字段已经有一个值“ org.compiere.model.CalloutOrder.qty; org.compiere.model.CalloutOrder.amt ”,表明它应该运行类 org.compiere.model.CalloutOrder 中的方法 qty ,然后是 org.compiere.model.CalloutOrder中的方法 amt 上课。
如果您打开这些类,您可以看到评估和修改值的容易程度。打破它的一些...如果你打开CalloutOrder.java类,你可以向下滚动直到找到qty方法。
if (isCalloutActive() || value == null)
return "";
您需要使用上面的签名来创建您创建的任何新的标注方法。遵循这种方法,Adempiere将为您传递正确的值
int M_Product_ID = Env.getContextAsInt(ctx, WindowNo, "M_Product_ID");
最好使用上面的方法启动方法,确保不要在Callout中打开Callout - 这会违反Adempiere规则。
else if (mField.getColumnName().equals("QtyEntered"))
{
int C_UOM_To_ID = Env.getContextAsInt(ctx, WindowNo, "C_UOM_ID");
QtyEntered = (BigDecimal)value;
BigDecimal QtyEntered1 = QtyEntered.setScale(MUOM.getPrecision(ctx, C_UOM_To_ID), BigDecimal.ROUND_HALF_UP);
if (QtyEntered.compareTo(QtyEntered1) != 0)
{
log.fine("Corrected QtyEntered Scale UOM=" + C_UOM_To_ID
+ "; QtyEntered=" + QtyEntered + "->" + QtyEntered1);
QtyEntered = QtyEntered1;
mTab.setValue("QtyEntered", QtyEntered);
}
QtyOrdered = MUOMConversion.convertProductFrom (ctx, M_Product_ID,
C_UOM_To_ID, QtyEntered);
if (QtyOrdered == null)
QtyOrdered = QtyEntered;
boolean conversion = QtyEntered.compareTo(QtyOrdered) != 0;
log.fine("UOM=" + C_UOM_To_ID
+ ", QtyEntered=" + QtyEntered
+ " -> " + conversion
+ " QtyOrdered=" + QtyOrdered);
Env.setContext(ctx, WindowNo, "UOMConversion", conversion ? "Y" : "N");
mTab.setValue("QtyOrdered", QtyOrdered);
}
是一个如何从现有窗口中提取值的示例...无论列/字段如何,您只需要输入“M_Product_ID”,即要提取到的字段名称,语法将保持不变使用
现在这个标注被多个列/字段调用,所以它被一个大的if ... then ... else乱七八糟地执行相关字段所需的逻辑。它并不漂亮,但这是针对业务开发人员,他们将更多地专注于业务逻辑而不是编码主体。
您感兴趣的代码是
mTab.setValue("QtyOrdered", QtyOrdered);
代码
{{1}}
是否设置了其他数量字段的数量Qty Ordered。
此外,调用不能是Java。可以链接任何[JSR223脚本] [3]。我自己从未尝试过这种方法,但甚至可以使用Drools规则引擎实现 Callouts !