定义如下partner_name
字段:
@Odoo.Functional(method="storePartnerName", store=true, depends={"partner_id"})
OColumn partner_name = new OColumn("Partner name", OVarchar.class)
.setLocalColumn();
public String storePartnerName(OValues values) {
try {
if (!values.getString("partner_id").equals("false")) {
JSONArray partner_id = new JSONArray(values.getString("partner_id"));
return partner_id.getString(1);
}
} catch (Exception e) {
e.printStackTrace();
}
return "false";
}
您可以简单地partner_name
使用:
row.getString("partner_name")
编辑:
请注意,当您第一次运行应用程序或从应用程序设置中清除数据时,会创建数据库。每次更新数据库列时都需要清理应用程序数据。
如果该列是在数据库创建后添加的,则不会添加到相应的表中。这是因为数据库没有升级。要解决此问题,您可以:
清理应用程序数据以更新您的数据库列
删除用户帐户(这将删除数据库)或重新安装应用程序以重新创建数据库。
或者您可以更改销售订单模型DATABASE_VERSION
中的odoo/datas/OConstants
then overrideonModelUpgrade
方法并手动升级表(更改销售订单表并使用 SQL 查询添加合作伙伴名称列:)ALTER TABLE sale_order ADD partner_name VARCHAR(100)
。
创建和同步新的销售订单时,应自动计算和存储合作伙伴名称。
我注意到在同步后没有为现有记录设置合作伙伴名称,因此我添加了另一个 SQL 查询来计算和设置旧记录的合作伙伴名称的值。
例子:
@Override
public void onModelUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
db.execSQL("ALTER TABLE sale_order ADD partner_name VARCHAR(100)");
db.execSQL("UPDATE sale_order SET partner_name = (SELECT name from res_partner WHERE _id=partner_id) WHERE partner_name IS NULL AND partner_id IS NOT NULL");
}
编辑(配置):
使用新配置,您将收到以下错误(这将阻止使用注释创建字段):
W/System.err: java.lang.NullPointerException: Attempt to invoke virtual method 'boolean java.lang.Class.isAssignableFrom(java.lang.Class)' on a null object reference
W/System.err: at com.odoo.core.orm.OModel.compatibleField(OModel.java:349)
代码:
if (type.getDeclaringClass().isAssignableFrom(Odoo.api.class)) {
尝试删除.getDeclaringClass()
编辑:并非所有合作伙伴名称都显示
org.json.JSONException
尝试将partner_id
字符串转换为 JSON 数组时发生错误。
W/System.err: org.json.JSONException: Unterminated array at character 12 of [114.0, UH PARTNER]
当它尝试转换包含空格的名称时会发生错误。为避免这种情况,您可以将partner_id
字符串转换为对象列表。
在partnerName
方法中,替换以下代码:
JSONArray partner_id = new JSONArray(values.getString("partner_id"));
return partner_id.getString(1);
和:
List<Object> partner_id = (ArrayList<Object>) values.get("partner_id");
return partner_id.get(1) + "";