如何解决使用系统管理员以外的用户时,odoo ir.sequence不起作用
我正在研究Openerp7 我尝试将附件转换为保存在服务器中的文件,而不是将其保存在数据库中
我的问题是文件命名 我正在尝试使用ir.sequence为她的名字添加一个序列号
当我使用系统管理员登录时工作正常 但是当使用任何其他用户登录时:ir.sequence不会创建序列 函数create返回False
我的xml代码:
<record id="ir_attachment" model="ir.sequence.type">
<field name="name">ir attachment</field>
<field name="code">ir.attachment</field>
</record>
<record id="seq_ir_attachment" model="ir.sequence">
<field name="name">ir attachment</field>
<field name="code">ir.attachment</field>
<field name="prefix">Att</field>
<field name="padding">5</field>
<field name="implementation">no_gap</field>
</record>
python代码:
data_rec.write({'file_name':self.pool.get(“ ir.sequence”)。get(cr,uid,'ir.attachment')})
解决方法
get
方法返回False
,因为ir.attachment
公司不存在于当前可见的公司中,并且与False
不同(设置为默认值)。
get
方法将通过调用_next方法结束,如果我们提供了空序列ID列表(False
),则该方法将返回seq_ids
。
序列ID列表(ids
)的计算方式如下:
company_ids = self.pool.get('res.company').search(cr,uid,[],context=context) + [False]
ids = self.search(cr,['&',('code','=',sequence_code),('company_id','in',company_ids)])
当您使用系统管理员登录时,它可以正常工作,因为超级用户会绕过安全规则并可以看到所有可用的公司,但是用户只能根据规则选择当前可见的公司。
在选择当前用户的可见公司之后,OpenERP将False
添加到该列表中(这意味着,如果序列company_id
is not set,则序列ID对应于所传递的代码(search
方法的返回值将始终返回,而不取决于用户设置),然后它将尝试查找序列号等于传递给get
方法和{{ 1}}在所选公司中存在。
如果当前用户可见的公司中不存在序列company_id
字段值,它将返回一个空列表,并且company_id
方法将返回_next
,因为False
是空的。
seq_ids
在搜索结果中包括用户允许的公司:
对res公司搜索方法进行了更改,使得可以通过传递def _next(self,cr,seq_ids,context=None):
if not seq_ids:
return False
抛出上下文来返回用户公司及其所有允许的公司。
您可以在user_preference
_search方法中找到一条注释,突出显示以下内容:
res.company
示例:
if context.get('user_preference'):
# We browse as superuser. Otherwise,the user would be able to
# select only the currently visible companies (according to rules,# which are probably to allow to see the child companies) even if
# she belongs to some other companies.
user = self.pool.get('res.users').browse(cr,SUPERUSER_ID,context=context)
cmp_ids = list(set([user.company_id.id] + [cmp.id for cmp in user.company_ids]))
return cmp_ids
将附件存储在服务器文件系统中的替代方法:
要将文件存储在OpenERP服务器文件系统中,可以安装文档管理系统。
if context is None:
context = {}
context["user_preference"] = True
self.pool.get("ir.sequence").get(cr,'ir.attachment',context=context)
的 如果不安装文档管理系统,则附加到OpenERP资源的文件将直接存储在数据库中。 一旦安装了文档管理系统,文件的内容将不再存储在数据库中,而是存储在OpenERP服务器文件系统上名为“文件存储”的目录中。。>
然后,您可以使用简单的拖放操作,将附件完全独立于OpenERP界面或FTP服务器读取并添加到OpenERP资源。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。