2
<record id="rule_605" model="ir.actions.server">    
       <field name="name">Example of action server item</field>
       <field name="condition">True</field>
       <field name="state">code</field>  
       <field name="sequence" eval="456"/>
       <field name="code">True</field>
       <field name="model_id" eval="Selling"/>
 </record>

我对自定义模块中的上述代码片段感到困惑。?

正确的方法是什么?我知道有些字段可能是错误的!

如何设置model_id?

4

1 回答 1

5

服务器操作是 Open ERP 最强大的功能之一(但我应该说文档记录很差)。我在这里尽力解释开放 ERP 中的服务器操作。

服务器操作,用于在到达工作流的特定阶段时触发要在服务器端执行的一个或多个操作。

例如。

  1. 批准销售订单后,将其添加到客户历史记录中。
  2. 确认销售发票后,邮寄给客户。
  3. 当 CRM 案例关闭时,在客户端弹出一个窗口,用于汇总交互/反馈等。

要创建服务器操作,请转到:管理>>自定义>>操作>>服务器操作。

创作步骤:

步骤 1:服务器操作的定义

  1. 动作名称:与名称一样明显

  2. 对象:将触发服务器操作的对象/模型。例如。销售订单

  3. 行动类型:稍后会详细介绍,因为每个案例都会被处理。顺序:当动作类型为多动作时使用,其中一系列动作将按顺序发生。

  4. 条件:单行python条件。例如。如果您想在出现超过 5000 的凭证时发送短信提醒。object.amount>5000. 如果没有条件,你必须给 True 才能执行。

  5. 动作类型特定选项卡:这里我将详细解释每个动作类型

    1. 虚拟:虚拟舞台什么也不做。(天知道它为什么在那里..)

    2. 客户端操作:您可以选择要打开的表单、要运行的向导或要启动的报告。从列表中选择报告。

    3. 迭代:基于python循环表达式,您可以迭代服务器操作,例如:当股票向内移动并且您确认它时,您希望每个行项目都被历史化..您可以循环表达式object.move_lines并创建另一个服务器操作,即指做历史记录的工作。

    4. Python 代码:您可以执行多行 Python 代码。返回值是变量的值action = {}。仅当您想弹出特定于上下文的特定窗口(表单)时,这才有意义。恕我直言,您不需要返回值。注意:代码使用python的exec函数执行,该函数在字典命名空间中运行,变量为:object, time, cr, uid,ids

    5. 触发器:可以使用此触发工作流的任何转换。您需要设置的选项是。工作流模型:要在其上触发工作流的目标对象。“触发”字段应具有目标模型记录的 ID。例如,如果您想触发发票更改,请拥有发票 ID。“触发器名称”是您必须用来启动转换的信号。下拉列表列出了所有可能的触发器。注意:触发器名称列表还显示了来自其他模型的所有可能的转换,因此请确保选择正确的触发器。型号在括号中给出。

    6. 电子邮件:设置电子邮件地址、主题和消息。您需要为此配置 Open ERP 构建 smtpserver。Power email,一种用于 Open ERP 的通用电子邮件架构,可用于发送电子邮件,因为它提供了更多功能和自动化电子邮件(无需干扰服务器操作)。它可在: http: //launchpad.net/poweremail和下载在http://launchpad.net/poweremail/+download

    7. 短信:选择手机号码。eg:[[ object.shipping_address.mobile ]]和主题。

    8. 创建对象:这用于在触发服务器操作时在任何模型中创建新记录。讨论的历史特性可以使用它来实现。字段映射用于为记录中的字段赋值

让我们看看这个例子

<record id="ir_actions_server_timsheet_sheet" model="ir.actions.server">
            <field name="sequence" eval="5"/>
            <field name="state">code</field>
            <field name="type">ir.actions.server</field>
            <field name="model_id" ref="model_hr_timesheet_current_open"/>
            <field name="code">action = pool.get('hr.timesheet.current.open').open_timesheet(cr, uid, None, context)</field>
            <field name="condition">True</field>
            <field name="name">My Timesheet</field>
        </record>

model_hr_timesheet_current_open是此操作触发的对象的对象的引用,对于您的案例<field name="model_id" eval="Selling"/>model_id 不是出售,而是此触发操作的对象引用。

于 2013-06-25T06:36:39.290 回答