ASP.NET连接到BaaN与BOBS

用.net去开发BaaN的应用,现在大概有这么几种方法:

1)直接连接BaaN的数据库。(风险很大,只有小公司会使用这种方法)
2)把BaaN的数据通过Exchange导出,然后导入到SQL server,这些动作都做成Job,再从SQL server抓取有用的数据进行开发。(数据不及时,不准确)
3)通过BaaN的客户端直接调用BaaN的函数、过程或方法。获取自己想要的数据。(只能做成桌面版,一个application,在同一时间,只能使用一次调用,如果做成web版的,有两个以上用户同时浏览数据,就会出错。)

可能还有更好的方法,我暂时还没有想到。

前几天,在baanboard上看到一篇文章,有人开发了一个Baan OLE Broker Server (BOBS),解决了同一个application在同时只能调用BaaN的函数一次的问题,可以同时重复调用BaaN的函数或方法。

如果你有BaaN的开发权限,可以考虑去用这个方法去调用BaaN的资料去web上秀出来。

BOBS的资料和介绍,可以去http://www.baanboard.com/node/1736下载。

BOBS的使用经验,供大家参考:

1)下载BOBS后,首先修改BaaNOleBrokerServer.config文件里面的配置,目前BOSS只支持两个版本的BaaN系统,IV和V。对LN还不支持。把BaaNVersion的值改为自己所使用的版本。

<projectSettings>
….
<add key="BaaNVersion" value="V" />
</projectSettings>

 其他的设置要根据自己的IIS的设置去配置。

运行程序,当出现下面的界面,恭喜你,可以使用了。

2)然后可以建一个web应用在你所配置的IIS上。
把web.config里面的appsettings加上
  <appSettings>
    <add key="ServerIP" value="实际服务器IP" />
    <add key="ServerPort" value="32001" />
 </appSettings>

3)当然,最主要还是要有BaaN的开发权限。
通过session ttadv2539m000新建DLL,在里面写你要调用的函数。然后编译。
我找了一个已经存在的DLL,是BaaN的标准DLL,whwmddll0007,里面可以查看某一颗料在某个仓库是否有库存,如果有,则返回TRUE,否则返回FALSE。
下面的程序仅供参考。

using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Text;
using System.Net;
using System.Net.Sockets;
using System.Collections;

public partial class inventory : System.Web.UI.Page
{
    public enum STATE { CONNECT, PROCESS_SESSION, DISCONNECT };
    private STATE m_processState = STATE.CONNECT;

    public String ReceivedData = "", BaaNParameters = "", BaaNCommand = "";

    private int size = 0;
    private byte[] data = new byte[128];
    public Socket clientSocet;

    public static String ServerIP = ConfigurationManager.AppSettings["ServerIP"].ToString();
    public static int ServerPort = Convert.ToInt32(ConfigurationManager.AppSettings["ServerPort"].ToString());
    protected void Page_Load(object sender, EventArgs e)
    {

    }
    protected void Button_submit_Click(object sender, EventArgs e)
    {
        open_connection();

        if (m_processState == STATE.PROCESS_SESSION)
        {
            BaaNParameters = ‘"’ + TextBox_wh.Text.ToString().Trim() + "","" + TextBox_item.Text + """;;

            BaaNCommand = "owhwmddll0007|whwmd.dll0007.item.present.in.warehouse(" + BaaNParameters + " )rn";
            clientSocet.Send(Encoding.Default.GetBytes(BaaNCommand));
            size = clientSocet.Receive(data);
            Label_size.Text = Encoding.Default.GetString(data, 0, size);
        }

    }

    private void open_connection()
    {
        String ClientID = "owhwmddll0007|dll0007.end()|" + DateTime.Now + "rn";
        // The firs part(before the first pipe) is the dll name, in the midle is the end function when running
        // an API session, and at the end, just the time

        clientSocet = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
        try
        {
            clientSocet.Connect(new IPEndPoint(IPAddress.Parse(ServerIP), ServerPort));
            m_processState = STATE.CONNECT;
        }
        catch
        {
            m_processState = STATE.DISCONNECT;
            //news
        }

        if (m_processState != STATE.DISCONNECT)
        {
            // Send the Client ID.
            clientSocet.Send(Encoding.Default.GetBytes(ClientID));
            m_processState = STATE.PROCESS_SESSION;
            try
            {
                clientSocet.ReceiveTimeout = 60000;
                size = clientSocet.Receive(data);
                Label_size.Text = Encoding.Default.GetString(data, 0, size);
            }
            catch (Exception re)
            {
                m_processState = STATE.DISCONNECT;
                Label_size.Text = "Error receiving data from server " + re.Message;

   &nb
sp;        }
            ReceivedData = Encoding.Default.GetString(data, 0, size);
            if (ReceivedData != "OK")
            {
                m_processState = STATE.DISCONNECT;
            }
        }

    }
}

openbravo,adempiere,compiere,weberp,openerp还是恩信?

开源ERP。最近看sourceforge排行榜上,Openbravo占据第一的位置,已经好久了。

中国大陆每天都会有企业关门,也每天有新的企业开张。“企业信息化”也是每个企业都在考虑的问题。一个超过100人的公司,如果每天用excel做来做去,那个做财务的员工,肯定每天都抱怨的要命。

尤其用过系统之后又跳槽到没有系统的公司的员工,肯定会认为公司简直没法待下去。

但是面对着现在ERP市场上浩瀚的海洋,和天文数字的价格,又会让中小企业的老板,自己摸摸钱包,回头对员工说,坚持住!克服困难!

开源ERP的出现又让中小型企业的老板看到一点希望,但是又有一些犹豫和疑惑,免费的,开源的,不用花钱就能有一套ERP系统。但是同时会用另外的声音,免费的就是最贵的东西,用了这个ERP系统,后续的实施和二次开发会不会成本更大?用了之后会不会骑虎难下?开源ERP这么多,哪个更适合公司的业务?看着这些ERP的介绍,都说自己的系统功能强大。但是事实上怎么样呢?只有用了才知道,用了后如果不合适,再换,那成本可是不一般了。

选ERP是一个重大的工程,甚至比实施ERP更关键!

compiere可以说是开源ERP的鼻祖,也是最成功的一个开源ERP系统。

adempiere和compiere同出一源,流程上比compiere更适合中国企业。

Openbravo界面就能征服很多用户。

恩信,测试过几次,我认为还是很适合中国用户的使用习惯的。

但是从使用的角度看,我认为adempiere是最值的推荐的一款开源ERP系统。

喜欢音乐

记得上初中的时候,有一段时间,疯狂的喜欢美术,上课画,下课画,总之是不停的画。画的内容说明都有,人,树,房子,操场,落日。。。。最多的是模仿一些名画,抓别人的照片画。

最近又突然疯狂的喜欢上了唱歌。

我一直说自己是个没有音乐细胞的,五音不全的音乐文盲。不喜欢唱歌,也不喜欢听歌,最主要是没时间听歌。

自从上次写了《方向》之后,对生活对人生又有了一点不同的看法,生活是一个长期的革命斗争,不是一朝一夕就能看到结果的,在这期间需要坚持,坚持一切应该坚持的东西。在坚持的空隙要享受生活,生活不是你赚够了什么再去享受,而是要在向山顶前进的途中一边爬山一边欣赏身边的美景,或偶尔放松一下溜下山坡重新来过。

我没想过自己能学会唱歌,一直认为自己的嗓子不行,以前和KNH的同仁去K歌,我也只是个听客。今年过了春节,开始经常给自己放假休息一下,让自己过一段时间就“三省吾身”。最重要的是开始感到又有了时间,又有了自由,给自己的心灵上的自由。在我自己的世界里任意遨游,偶尔也让自己做个小梦。最主要的是有了时间,想事情的时候,会戴上耳机听一些音乐。写程序的时候我也喜欢戴上耳机,免去外界的打扰。

慢慢的能哼一些以前经常听到的歌。

慢慢的能完整的唱下几首歌。

慢慢的明白了一个道理,这个世界上本来就没有天才!99%人的智商在90-110之间。只要你对一件事情付出自己的时间,总是比别人会厉害一些,如果你足够坚持,总有一天你会在这个方向上成为“X家”!

经过一段时间的筛选,发现伍佰的歌曲很吸引我。

《挪威森林》《突然的自我》《浪人情歌》《白鸽》《泪桥》《再度重相逢》《爱你一万年》《美丽新世界》。。。

刘德华的男低音也比较吸引我。

【转】一段让我思考的话

“无论是哭泣、撒娇还是任性,都是你这个年龄特有的权力。”

轻轻叹了口气,末曰继续说道。

“等你长大之后,就得学会为自己的行为负责,学会坚强,学会将所有的悲和苦藏起来咽下去。那个时候不管你愿不愿意,都不能轻易对人示弱,否则就无法活下去,更别提支持对你来说,非常重要的人。”

“你没见过的,没听过的、没经历过的让人寒心的事情还有很多,所谓现实,远远比你现在所要了解的复杂和让人无奈。人活着就是在不停战斗,和各种各样的事物战斗,和自己战斗,没有人能够选择避免,能够选择的,只有「主动面对」和「被动面对」两种。”

“所以有很多人,都活的很累很累。这不是他们的错。”

“而其中一部分人,会因为太累,选择逃跑。可是没有人能够逃得掉,越是想要远离,就越是会被仅仅束缚其中。那些抛弃了自己责任的人,背负的担子更多,他们不仅是输在了来自外界的挑战上,更是输给了自己。虽然他们很可恨,但是他们也很可悲。”

停了一会儿后,末曰才开口淡淡道:

“这就是为什么人需要互相扶持。”

“谁都会有累的时候,都需要在疲倦之时有个可以扶着自己走下去的人。但并非谁都能找到那个人。还有些人更为不幸,寻找了,但却找错了,在本该被扶持的时候却被推开,是非常可怕和绝望的事情,他们并非是主动逃跑,而是所面对的,达到自己无法承载的程度。”

“他们不是故意的,其实只要有那么一个小小的支点,他们就可以坚持下去。可是,他们找不到支点。”

“他们,是所有人中,最最不幸的一类。”

再次叹口气,末曰将流抱在怀里。

“如果你身边有这样的人,要记得原谅她。”

原谅么……

原来,自己真的有怨恨过啊。不是想念不是担心不是自以为的一切一切……在心底的某个角落,早就清楚一切的事情,那么能有的最为强烈的感情。

其实是恨。

安静蔓延开来,仿佛听得到空气的流动。

流不由抓紧末曰的衣服,他想要忍住眼泪,可是忍的很辛苦。

“所以我才说……”将流抱得更紧。

“痛的话就说出来,想哭就哭出来,生气就喊出来,有什么要求就提出来……失去这些权力的那天迟早会到来,也正是因为这样,才更要珍惜还拥有它们的时候。”