android - 如何在odoo mobile中使用多对多关系
问题描述
我正在开发一个基于 Odoo 框架的 android 应用程序。当用户选择称为补偿的休假类型时,我需要显示补偿休假,这是一种多对多字段类型。
我尝试了一些代码,但是当我将多对多字段绑定到 XML 时出现错误:
这是我在 xml 中尝试过的代码
<odoo.controls.OField
android:id="@+id/com_off_ids"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="0.5"
app:fieldName="compoff_ids"
app:fieldTextAppearance="?android:textAppearanceMedium"/>
这是 HrHolidays 的 odoo 模型
OColumn employee_id = new OColumn("Employee", HrEmployee.class, OColumn.RelationType.ManyToOne);
OColumn department_id = new OColumn("Department", HrDepartment.class, OColumn.RelationType.ManyToOne);
OColumn company_id = new OColumn("Company", ResCompany.class, OColumn.RelationType.ManyToOne);
OColumn holiday_type = new OColumn("Mode", OSelection.class).addSelection("employee", "By Employee").addSelection("category", "By Employee Tag");
OColumn type = new OColumn("Type", OSelection.class).addSelection("remove", "Remove").addSelection("add", "Add").setDefaultValue("remove");
@Odoo.Domain("[['line_id', '=', @leave_year_id]]")
@Odoo.onChange(method = "partnerIdOnChange")
OColumn holiday_status_id = new OColumn("Leave Type", HrHolidayStatus.class, OColumn.RelationType.ManyToOne);
OColumn leave_year_id = new OColumn("Leave Year", LeaveYear.class, OColumn.RelationType.ManyToOne);
OColumn compoff_ids = new OColumn("",CompLeaveRel.class, OColumn.RelationType.ManyToMany).setRelBaseColumn("leave_id").setRelRelationColumn("comp_id").setRelTableName("comp_leave_rel");
在上面的代码中,“Compoff_ids”字段是我需要存储值的多对多字段。
这是 CompLeaveRel 模型字段
OColumn name = new OColumn("", OVarchar.class);
OColumn leave_id = new OColumn("", OVarchar.class);
OColumn comp_id = new OColumn("",OVarchar.class);
这是我将 OColum 绑定到 XML 小部件时遇到的错误:
java.lang.NullPointerException: Attempt to invoke virtual method 'int odoo.controls.OField$FieldType.ordinal()' on a null object reference
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2778)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2856)
at android.app.ActivityThread.-wrap11(Unknown Source:0)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1589)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loop(Looper.java:164)
at android.app.ActivityThread.main(ActivityThread.java:6494)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:807)
Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'int odoo.controls.OField$FieldType.ordinal()' on a null object reference
谁能告诉我如何在odoo移动框架中使用和获取多对多字段的数据。
从过去两天开始,我在这里被封锁了
对不起我的英语不好。
解决方案
您可以将列定义为:
OColumn column_name = new OColumn("Description", table_name.class, OColumn.RelationType.ManyToMany);
并使用他们在CRM应用程序中使用的相同结构来显示 one2many 字段(ExpandableListControl和它的Adapter)或类似简单的标签。
推荐阅读
- modelica - 无法在 Dymola 中生成平面 Modelica 代码?
- amazon-web-services - 降低 AMI 快照的成本
- python - 在 Python 中使用 Gekko 运行时间序列线性优化
- python - 在python中迭代大型csv文件中的行的最佳方法,写入新的
- python-3.x - 如何使用 OpenCV Python 遮蔽圆圈外的区域?
- machine-learning - YOLO 中的联合交叉 (IOU) 基本事实
- python - Google Chrome 扩展程序不显示我的图标(Selenium 模式,没有 GOOGLE WEBSTORE)
- google-cloud-platform - 为什么 Google Cloud Debugger 不能自动检测我的源代码?
- r - 如何在 R 中解析多个分隔数据中的列/值
- c# - 在 C# 中杀死进程 Razer Synapse