Odoo(OpenERP)实施方法论

转载自:http://blog.csdn.net/wangnan537/article/details/46823681

Odoo(OpenERP)的成功实施,离不开供需双方实施团队的通力合作,而好的规划更是顺利上线的关键所在。ERP系统涵盖的内容有很多,一个环节没有做好,也会影响到整个项目的有效推进。本文主要概述Odoo实施过程的不同阶段的一些关注点,涉及的角色包括实施方和客户方,仅作参考。

  1. 可行性研究
    企业在进行ERP选型时,需要明确:期望借助ERP系统解决哪些业务痛点?Odoo标准版的功能与公司业务流程的契合度有多高?如果认可标准版的设计思路,觉得可用性强,或是加上一些功能定制即可满足应用需求,那么就可以考虑立项事宜了。
  2. 需求分析与计划制定
    梳理现有的业务流程,分析哪些是Odoo的标准流程,哪些是非标流程;哪些非标流程可以在Odoo中通过定制开发实现,哪些非标流程应该抛弃。实施ERP应该将业务流程尽量标准化,全盘保留所有的非标流程无法解放生产力,抱残守缺终究难见成效。
  3. 定制开发与测试
    定制开发主要包括界面定制、工作流定制、报表定制。Odoo优雅的底层架构足以实现程序的敏捷开发,为确保开发工作全程可控,定制开发应该遵循迭代开发、增量交付的原则。交付前的测试,各角色用户应该充分参与。
  4. 系统部署与基础数据录入
    根据企业的实际情况,选择合适的部署方案: SAAS/供应商托管/内部部署。安装软件系统,进行初始化设置,录入基础数据,包括:用户、业务伙伴、产品、BOM、最小库存规则、盘点单、期初凭证等。应该通过模板导入大量的数据。
  5. 系统上线
    上线前要编制正式版用户手册,并对各部门用户进行集中培训。可设定模拟上线期,在此过渡期间,线上线下两套账并行,这样有助于发现前期测试的疏漏点,并及时完善。问题解决后正式投产,告别手工帐。
  6. 支持与维护
    要及时响应用户使用过程中遇到的问题,定期备份数据,维护服务器正常运行,进行必要的性能调优,防止宕机事故。Odoo新版本发布时是否跟进升级,应该坚持一个原则:如果程序一直运行正常,不应盲目追新;如果想应用新版本的某些功能,可以考虑升级,但升级前必须先在测试服务器进行详尽的测试。

python 单例代码

class Singleton(object):
    """单例模式"""

    _instance_lock = threading.Lock()

    def __new__(cls, *args, **kwargs):
        if not hasattr(cls, "_instance"):
            with cls._instance_lock:
                if not hasattr(cls, "_instance"):
                    impl = cls.configure() if hasattr(cls, "configure") else cls
                    instance = super(Singleton, cls).__new__(impl, *args, **kwargs)
                    if not isinstance(instance, cls):
                        instance.__init__(*args, **kwargs)
                    cls._instance = instance
        return cls._instance

clickOnce发布的程序,用管理员身份启动

原帖地址:
http://www.codeproject.com/Tips/627850/ClickOnce-deployment-vs-requestedExecutionLevel-eq

代码摘要:

using System;
using System.Diagnostics;
using System.Reflection;
using System.Security.Principal;
using System.Windows.Forms;

namespace MyProgramNamespace
{
    static class Program
    {
        /// <summary>
        /// The main entry point for the application.
        /// </summary>
        [STAThread]
        static void Main()
        {
            var wi = WindowsIdentity.GetCurrent();
            var wp = new WindowsPrincipal(wi);
 
            bool runAsAdmin = wp.IsInRole(WindowsBuiltInRole.Administrator);

            if (!runAsAdmin)
            {
                // It is not possible to launch a ClickOnce app as administrator directly,
                // so instead we launch the app as administrator in a new process.
                var processInfo = new ProcessStartInfo(Assembly.GetExecutingAssembly().CodeBase);

                // The following properties run the new process as administrator
                processInfo.UseShellExecute = true;
                processInfo.Verb = "runas";

                // Start the new process
                try
                {
                    Process.Start(processInfo);
                }
                catch (Exception)
                {
                    // The user did not allow the application to run as administrator
                    MessageBox.Show("Sorry, but I don't seem to be able to start " + 
                       "this program with administrator rights!");
                }

                // Shut down the current process
                Application.Exit();
            }
            else
            {
                // We are running as administrator
                Application.EnableVisualStyles();
                Application.SetCompatibleTextRenderingDefault(false);
                Application.Run(new Form1());
            }
        }
    }
}