壹佰网|ERP100 - 企业信息化知识门户

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 5299|回复: 19

compiere的二次开发,添加产品属性.

[复制链接]
发表于 2006/8/29 09:43:21 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。如果您注册时有任何问题请联系客服QQ: 83569622  。

您需要 登录 才可以下载或查看,没有帐号?注册

x
我的已经汉化过了.打开产品界面.里面有搜索关键字,条码,sku编码等字段对应的是M_product的value,upc
,sku字段现在就是我新建一个产品,在添写搜索关键字的时候光标离开时,就让它判断该value是否已存在若有
提示出该关键字已有请请输而且后面的条码和sku编码就不用输了直接赋搜索关键字的值.用到FocusListener的接口有个focusLost(FocusEvent e),不知道有没有做过这样的功能.知道在那段代码里写吗?该怎么去实现?
谢谢!
发表于 2006/8/29 11:10:55 | 显示全部楼层

用compiere的callout实现

这个用compiere 的callout来实现,肯本不需要从底层开始,用awt/swing来编程。
callout的例子,源码里有很多,可以随便找一个参考以下。
基本过程是,在Application Dictionary里的Table&column里面,找到M_Product这张表,然后,找到value这个字段,在最下面有一个callout的输入项,填入package.classname.method,然后,用java实现这个class和method, class的基类和method的申明看一下别的那些callout怎么写的。

用compiere做customerization,基本上你不用懂swing
 楼主| 发表于 2006/8/29 11:25:25 | 显示全部楼层
这位朋友我新建一个产品的时候在 M_Product表里是没有这条记录的,我的意思是说在输入后
还没点保存的时候就对其进行判断且后面的条码和sku编码就不需要再次输入.
 楼主| 发表于 2006/8/29 11:47:42 | 显示全部楼层

Pshen你好可以交流下吗?

我的msn:xiaxinhuo@hotmail.com
我急需要你的帮助谢谢!
发表于 2006/8/29 16:03:22 | 显示全部楼层
原帖由 xiaxinhuo 于 2006-8-29 11:25 发表
这位朋友我新建一个产品的时候在 M_Product表里是没有这条记录的,我的意思是说在输入后
还没点保存的时候就对其进行判断且后面的条码和sku编码就不需要再次输入.



是,callout就是做这个的
 楼主| 发表于 2006/8/29 16:41:35 | 显示全部楼层
那你可以给我写个方法看一下我不大怎么明白,或者说不会写.谢谢了!
发表于 2006/8/29 16:58:11 | 显示全部楼层

  1. public class XXXXXXX extends CalloutEngine
  2. {
  3.       public String AAAAAAA (Properties ctx, int WindowNo, MTab mTab, MField mField, Object value)
  4.         {
  5.                      string str = (String)value;
  6.                      // 然后检查
  7.                       。。。。。。。。
  8.                       。。。。。。。。
  9.   
  10.                     // 下面是把这个值放到sku里
  11.                    mTab.setValue("SKU", str);
  12.                    mTab.setValue ("UPC", str);

  13.                    return 一个string回去,这个string会出现在窗口下状态栏上
  14.            }
  15. }

复制代码
 楼主| 发表于 2006/8/29 17:24:14 | 显示全部楼层

其实我以前就仿照了可不成功现在还是这样,我把我写的给你看下

public String value1 (Properties ctx, int WindowNo, MTab mTab, MField mField, Object value)//开始
        {
                String Value = (String)value;
                //if (Value== null || Value.intValue() == 0)
                        //return "";

                String sql = "SELECT Value from M_Product";                //        1

                try
                {
                        PreparedStatement pstmt = DB.prepareStatement(sql, null);
                //        pstmt.setInt(1, C_BPartner_ID.intValue());
                        ResultSet rs = pstmt.executeQuery();
                        //BigDecimal bd;
                        if (rs.next())
                        {
                                //        Location
                                String ii =(String) rs.getString("Value");
                                if (Value==ii)
                                JOptionPane.showMessageDialog(null, "该关键字已有不能重复", "错误", JOptionPane.ERROR_MESSAGE);
                               
                                else
                                        {mTab.setValue("UPC", ii);
                                mTab.setValue("SKU", ii);}
       
                        }
                        rs.close();
                        pstmt.close();
                        return Value;
                }
                catch (SQLException e)
                {
                        log.log(Level.SEVERE, sql, e);
                        return e.getLocalizedMessage();
                }

               
        }        // 结束
将非常感谢你的帮助PShen
 楼主| 发表于 2006/8/29 17:27:25 | 显示全部楼层
我是直接在calloutiinout.javal里添加这个方法的.value的callout是org.compiere.model.calloutinout.value1.
eclipse的错误信息是:
===========> APanel.actionPerformed: New [11]
java.lang.NullPointerException
        at org.compiere.model.MTab.processCallout(MTab.java:2227)
        at org.compiere.model.MTab.dataNew(MTab.java:807)
        at org.compiere.apps.APanel.cmd_new(APanel.java:1234)
        at org.compiere.apps.APanel.actionPerformed(APanel.java:1135)
        at org.compiere.apps.AppsAction.actionPerformed(AppsAction.java:260)
        at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
        at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
        at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
        at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
        at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)
        at java.awt.AWTEventMulticaster.mouseReleased(Unknown Source)
        at java.awt.Component.processMouseEvent(Unknown Source)
        at javax.swing.JComponent.processMouseEvent(Unknown Source)
        at java.awt.Component.processEvent(Unknown Source)
        at java.awt.Container.processEvent(Unknown Source)
        at java.awt.Component.dispatchEventImpl(Unknown Source)
        at java.awt.Container.dispatchEventImpl(Unknown Source)
        at java.awt.Component.dispatchEvent(Unknown Source)
        at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
        at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
        at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)

===========> MTab.processCallout: 1 [11]
 楼主| 发表于 2006/8/29 17:33:38 | 显示全部楼层
我到产品界面点新建时它就弹出对话框提示错误
java.lang.NullPointerException
希望你可以帮我解决下除了说谢谢我也不知道说什么好了还是谢谢吧
发表于 2006/8/29 17:47:50 | 显示全部楼层
用eclipse跟踪一下吧,是那行除了问题。
还有,你这个程序,写得很有问题。

1, 如果value是空,是可以直接跳出去的
2, 你把所有的产品,全部select出来,然后拿第一个和你的value比较?
3, value == ii ?
 楼主| 发表于 2006/8/29 17:57:48 | 显示全部楼层
这为大哥那你在我原有的上面动下发给我看看好吗?
我现在好着急将非常的感谢.真的很谢谢你!
发表于 2006/8/29 18:00:51 | 显示全部楼层
先解决NullPointerException的问题吧。
把你的MTab.java的2227行上下的贴出来看看吧
发表于 2006/8/29 18:04:02 | 显示全部楼层
public String value1 (Properties ctx, int WindowNo, MTab mTab, MField mField, Object value)//开始
        {
                String Value = (String)value;
                if (Value== null || Value.equals(""))
                        return "";

                String sql = "SELECT Value from M_Product WHERE Value like ?";                //        1

                try
                {
                        PreparedStatement pstmt = DB.prepareStatement(sql, null);
                        pstmt.setString(1, Value);
                        ResultSet rs = pstmt.executeQuery();
                        //BigDecimal bd;
                        if (rs.next())
                        {
                            JOptionPane.showMessageDialog(null, "该关键字已有不能重复", "错误", JOptionPane.ERROR_MESSAGE);
                         }
                         else
                         {
                            mTab.setValue("UPC", Value);
                            mTab.setValue("SKU", Value);
                           
                         }                           
        
                        
                        rs.close();
                        pstmt.close();
                        return "";
                }
                catch (SQLException e)
                {
                        log.log(Level.SEVERE, sql, e);
                        return e.getLocalizedMessage();
                }

               
        }        // 结束
 楼主| 发表于 2006/8/29 18:22:55 | 显示全部楼层
这位大哥太感谢了我把那个新建问题解决了.现在可以了.不过遇到一个新问题,就是说
我M_product里有一个value是123,我现在要输入的value是1234那这个时候,我还没输
4时它就弹出了错误对话框.我想要做点修改,就是等我的value都输入完后再判断,你觉得
怎样改动.除了说谢谢我真的不知道怎样感谢你!
Jojo 该用户已被删除
发表于 2006/8/29 19:33:02 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
发表于 2006/8/30 15:35:36 | 显示全部楼层
原帖由 xiaxinhuo 于 2006-8-29 18:22 发表
这位大哥太感谢了我把那个新建问题解决了.现在可以了.不过遇到一个新问题,就是说
我M_product里有一个value是123,我现在要输入的value是1234那这个时候,我还没输
4时它就弹出了错误对话框.我想要 ...



不要用callout了
放到MProduct.beforeSave里去做吧。
 楼主| 发表于 2006/8/30 15:58:31 | 显示全部楼层
啊,到MProduct.beforeSave去做,我看了beforeSave(),无从下手.可以告诉我该怎样去实现吗/
我学compiere还不到一个月对里面好多原代码都不是懂!
发表于 2006/9/1 15:03:38 | 显示全部楼层
[quot]我看了beforeSave(),无从下手[/quot]

你非看懂它的代码干嘛? beforeSave是基类PO的方法。
只需要覆盖一下,成功了reture true, 失败了return false
 楼主| 发表于 2006/9/6 10:55:19 | 显示全部楼层

大家分享

public void focusGained(FocusEvent e)
        {
                String colName = ((VString)e.getSource()).getName();
                Object oldValue = ((VString)e.getSource()).getText();
if(colName.compareToIgnoreCase("Value")==0 || colName.compareToIgnoreCase("SKU")==0
                                || colName.compareToIgnoreCase("UPC")==0)
                        hmFocus.put(colName,oldValue);
        }
        public void focusLost (FocusEvent e)
        {
                if (e.isTemporary())
                        return;
                String colName = ((VString)e.getSource()).getName();
                String value = ((VString)e.getSource()).getText();
        if((hmFocus.size() > 0) && (hmFocus.get(colName)).toString()!=null &&(hmFocus.get(colName)).toString().compareToIgnoreCase(value)!=0)
                {
                        StringBuffer sql = new StringBuffer("select * from M_PRODUCT where "
                                        + colName + " = '"+ value+"'");
                        int no = DB.executeUpdate(sql.toString());
                        if(no > 0)
                        {
                        ((VString)e.getSource()).setValue(hmFocus.get(colName));
JOptionPane.showMessageDialog(this,colName+ "为"+value+"的商品已存在",null,JOptionPane.OK_OPTION);
                        }
                        else
                        {
                if((colName.compareToIgnoreCase("UPC")==0) && (m_mTab.getValue("Value")==null ||(m_mTab.getValue("Value")).toString().trim().length() == 0))
                                        m_mTab.setValue("Value",value);
                                else if((colName.compareToIgnoreCase("SKU")==0) && (m_mTab.getValue("Description")==null ||(m_mTab.getValue("Description")).toString().trim().length() == 0))
                                        m_mTab.setValue("Description",value);
                        }
                }
        }
hmFocus是HashMap,实现了我上面说的功能!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|Archiver|小黑屋|手机版|壹佰网 ERP100 ( 京ICP备19053597号-2 )

Copyright © 2005-2012 北京海之大网络技术有限责任公司 服务器托管由互联互通
手机:13911575376
网站技术点击发送消息给对方83569622   广告&合作 点击发送消息给对方27675401   点击发送消息给对方634043306   咨询及人才点击发送消息给对方138011526

GMT+8, 2025/11/29 01:13 , Processed in 0.019842 second(s), 16 queries , File On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表