2015-01-15 45 views
1

我有一個在!python塊中創建的記錄,通過調用一個從Crm Lead創建銷售訂單的函數。現在我想在新創建的銷售訂單上測試工作流程。有沒有辦法將新的sale_order的id傳遞迴YAML,這樣我就可以使用!工作流指令了?將記錄ID從!python傳遞到Odoo/OpenERP測試中的YAML

+0

如果您發佈的代碼,我能適應我的樣本,以銷售訂單,客戶關係管理鉛和'!工作流程'標籤。 – yucer

回答

1

您可以在!python塊內將ID保存爲ir.model.data,並且該塊對其他塊可見。

這是一個示範創建由AA蟒蛇塊一組,並從記錄塊將用戶添加到它:

- 
    Create an external id 'test_group_id' 
-                                                            
    !python {model: res.groups}: |                                                    
    from openerp import SUPERUSER_ID                                                   
    obj_id = self.create(cr, uid, {'name':'Test Group'}, context=context)                                          
    imd_values = {'module':'base', 'model': model._name, 'name': 'test_group_id', 'res_id': obj_id}                                    
    id = self.pool['ir.model.data'].create(cr, SUPERUSER_ID, imd_values, context=context)                                      
    assert obj_id == ref('test_group_id'), 'saved reference should be equal'                                         
    assert id, 'external id should be saved'                                                 
- 
    The identifier 'test_group_id' should be visible from other "python" tags 
-                                                            
    !python {model: res.groups}: | 
    assert ref('test_group_id'), 'External Id should exists' 
- 
    Create user 'Test User' to include it in 'test_group_id' 
-                                                            
    !record {model: res.users, id: res_users_test, view: False}: 
    company_id: base.main_company 
    name: Test User 
    login: testuser 
    password: testuser 
- 
    Include the user in the referenced group. Then 'test_group_id' is visible from "record" tags. 
-                                                            
    !record {model: res.users, id: res_users_test}: 
    groups_id: 
     - base.test_group_id 
+0

我必須補充一點,這個解決方案只適用於'external id'('xml_id')對於這個測試是唯一的。 'yaml_import.py'中'process_record'的實現使用'get_id'來解析對外部id(帶有別名'ref')的引用。 'get_id'方法首先查找名爲'id_map'的緩存,該緩存不能從'!python'標記的代碼中訪問。 可以從!python標記訪問的環境變量在'process_python'方法的'code_context'字典中定義。 – yucer

+0

我假設你不想修改yaml_import.py代碼,否則你可以在'code_context'中包含'process_python':'{'yaml':self}'並用'yaml.id_map ['test_group_id']擴展我的代碼。 = id' – yucer