WIP 投料报 Invalid Serial Number
DELETE FROM MTL_SERIAL_NUMBERS_TEMP
WHERE
TRANSACTION_TEMP_ID = :b1
call count cpu elapsed disk query current rows
------- ------ -------- ---------- ---------- ---------- ---------- ----------
Parse 0 0.00 0.00 0 0 0 0
Execute 2 0.00 0.00 0 4 0 0
Fetch 0 0.00 0.00 0 0 0 0
------- ------ -------- ---------- ---------- ---------- ---------- ----------
total 2 0.00 0.00 0 4 0 0
Misses in library cache during parse: 0
Optimizer mode: ALL_ROWS
Parsing user id: 173
Elapsed times include waiting on following events:
Event waited on Times Max. Wait Total Waited
---------------------------------------- Waited ---------- ------------
SQL*Net message to client 2 0.00 0.00
SQL*Net message from client 2 0.00 0.00
********************************************************************************
SQL ID: 9mq64qp6s994x Plan Hash: 0
INSERT INTO MTL_SERIAL_NUMBERS_TEMP ( TRANSACTION_TEMP_ID , LAST_UPDATE_DATE ,
LAST_UPDATED_BY , CREATION_DATE , CREATED_BY , LAST_UPDATE_LOGIN ,
REQUEST_ID , PROGRAM_APPLICATION_ID , PROGRAM_ID , PROGRAM_UPDATE_DATE ,
VENDOR_SERIAL_NUMBER , VENDOR_LOT_NUMBER , FM_SERIAL_NUMBER ,
TO_SERIAL_NUMBER , SERIAL_PREFIX , ERROR_CODE , GROUP_HEADER_ID ,
PARENT_SERIAL_NUMBER , PRODUCT_TRANSACTION_ID , PRODUCT_CODE ,
PARENT_OBJECT_ID , PARENT_OBJECT_TYPE , PARENT_OBJECT_ID2 ,
PARENT_OBJECT_TYPE2 )
VALUES
( :b1 , :b2 , :b3 , :b4 , :b5 , :b6 , :b7 , :b8 , :b9 , :b10 , :b11 , :b12 ,
:b13 , :b14 , :b15 , :b16 , :b17 , :b18 , :b19 , :b20 , :b21 , :b22 , :b23 ,
:b24 )
call count cpu elapsed disk query current rows
------- ------ -------- ---------- ---------- ---------- ---------- ----------
Parse 0 0.00 0.00 0 0 0 0
Execute 2 0.02 0.02 0 0 10 2
Fetch 0 0.00 0.00 0 0 0 0
------- ------ -------- ---------- ---------- ---------- ---------- ----------
total 2 0.02 0.02 0 0 10 2
Misses in library cache during parse: 0
Optimizer mode: ALL_ROWS
Parsing user id: 173
Elapsed times include waiting on following events:
Event waited on Times Max. Wait Total Waited
---------------------------------------- Waited ---------- ------------
SQL*Net message to client 2 0.00 0.00
SQL*Net message from client 2 0.00 0.01
SQL*Net more data from client 2 0.00 0.00
********************************************************************************
Log file descriptor
Log ON state
:= '_' ;
:= NULL ;
FND_GLOBAL.CONC_REQUEST_ID;
;
3559334 fix. Variable not used in code, but resulting in
calls to fnd api.
number := NVL(FND_PROFILE.VALUE('INV_DEBUG_TRACE'),0);
Since the forms-server and MWA server recycles database connections
we need to always check for debug profiles values and see if they
are different from the values with which it was initialized earlier. If
different then reinitialize the debug variables
long l2, long l3)
throws InvTrxException
{
int j1 = getGroupId(i, j);
int k1 = l;
Object obj = null;
int i2 = -1;
if(TrxUtil.isTraceEnabled)
{
TrxUtil.log("Came here inside of validate serial status", 1);
TrxUtil.log("SrcTypeId = " + i + ",ActId=" + j + ",SerCtrl+" + k + ",CurStatus=" + l + ",TrxGroup=" + j1 + " ,LstTxnSrcTypId=" + l1 + ",xfrSerCtrl=" + i1 + ",mOrigWipEntId=" + l2 + ",TrxSrcId=" + l3);
}
switch(j1)
{
default:
break;
case 1: // '\001'
if(flag)
{
if(TrxUtil.isTraceEnabled)
TrxUtil.log("validate_status:SO_RMA_GROUP. isIssue true");
if(k == 2 || k == 3 || k == 5)
{
if(i == 8 && j == 21)
{
if(l == 3)
{
if(i1 == 1)
k1 = 4;
else
k1 = 5;
} else
{
if(TrxUtil.isTraceEnabled)
TrxUtil.log("Invalid status for Int. Order Intransit ship1 :" + l, 1);
TrxUtil.addMessage("INV", "INV_INVALID_SERIAL");
throw new InvTrxException("Invalid status in SO_RMA_GROUP");
}
} else
if(l == 3)
{
if(i == 8 && j == 3 && i1 == 6)
k1 = 1;
else
k1 = 4;
} else
{
if(TrxUtil.isTraceEnabled)
TrxUtil.log("Invalid status in RMA_GRP/Issue1 :" + l, 1);
TrxUtil.addMessage("INV", "INV_INVALID_SERIAL");
throw new InvTrxException("Invalid status in SO_RMA_GROUP");
}
} else
if(k == 6)
if(i == 8 && j == 21)
{
if(l == 1 || l == 3 || l == 6)
{
if(i1 == 1)
k1 = 4;
else
k1 = 5;
} else
{
if(TrxUtil.isTraceEnabled)
TrxUtil.log("Invalid status for Int. Order Intransit ship2 :" + l, 1);
TrxUtil.addMessage("INV", "INV_INVALID_SERIAL");
throw new InvTrxException("Invalid status in RMA_GRP");
}
} else
if(l == 1 || l == 3)
{
if(i == 8 && j == 3 && i1 == 6)
k1 = 1;
else
k1 = 4;
} else
{
if(TrxUtil.isTraceEnabled)
TrxUtil.log("Invalid status in RMA_GRP/Issue2 :" + l, 1);
TrxUtil.addMessage("INV", "INV_INVALID_SERIAL");
throw new InvTrxException("Invalid status in RMA_GRP");
}
break;
}
if(TrxUtil.isTraceEnabled)
TrxUtil.log("validate_status:SO_RMA_GROUP. isIssue false");
if(k == 2 || k == 3)
{
if(l == 1 || l == 4)
{
k1 = 3;
break;
}
if((i == 12 || i == 7) && (l == 5 || l == 7))
{
k1 = 3;
break;
}
if(TrxUtil.isTraceEnabled)
TrxUtil.log("Invalid status in RMA_GRP/Rcpt :" + l, 1);
TrxUtil.addMessage("INV", "INV_INVALID_SERIAL");
throw new InvTrxException("Invalid status in RMA_GRP");
}
if(k == 5)
{
if(l == 1 || l == 4)
{
k1 = 3;
break;
}
if((i == 12 || i == 7) && (l == 5 || l == 7))
{
k1 = 3;
break;
}
if(TrxUtil.isTraceEnabled)
TrxUtil.log("Invalid status in RMA_GRP/Rcpt2 :" + l, 1);
TrxUtil.addMessage("INV", "INV_INVALID_SERIAL");
throw new InvTrxException("Invalid status in RMA_GRP");
}
if(k != 6)
break;
if(l1 == 12L && l == 1 && TrxUtil.restrictRcptSerial)
{
if(TrxUtil.isTraceEnabled)
TrxUtil.log("Invalid status in RMA_GRP- Trying to receive the SerialNumber that is already received thro RMA :" + l, 1);
TrxUtil.addMessage("INV", "INV_INVALID_SERIAL");
throw new InvTrxException("Invalid status in RMA_GRP");
}
if((i == 7 || j == 12) && (l == 5 || l == 7))
{
k1 = 1;
break;
}
if(l == 1 || l == 4 || l == 5 || l == 7)
{
k1 = 1;
break;
}
if(TrxUtil.isTraceEnabled)
TrxUtil.log("Invalid status in RMA_GRP/Rcpt3 :" + l, 1);
TrxUtil.addMessage("INV", "INV_INVALID_SERIAL");
throw new InvTrxException("Invalid status in RMA_GRP");
case 2: // '\002'
if(TrxUtil.isTraceEnabled)
TrxUtil.log("validate_status:SUB_XFER_GROUP:Came here inside", 1);
if(k != 2 && k != 3 && k != 5)
break;
if(flag && l == 3)
{
k1 = 4;
if(TrxUtil.isTraceEnabled)
TrxUtil.log("validatestaus CurStatus=" + l, 1);
if(TrxUtil.isTraceEnabled)
TrxUtil.log("validatestaus Newstatus= " + k1, 1);
break;
}
if(!flag && (l == 4 || l == 3))
{
if(TrxUtil.isTraceEnabled)
TrxUtil.log("validatestaus CurStatus=" + l, 1);
k1 = 3;
break;
}
if(TrxUtil.isTraceEnabled)
TrxUtil.log("Invalid status in SUBXFER_GRP :" + l, 1);
TrxUtil.addMessage("INV", "INV_INVALID_SERIAL");
throw new InvTrxException("Invalid status in SuvXfer_Grp");
case 3: // '\003'
if(flag)
{
if(TrxUtil.isTraceEnabled)
TrxUtil.log("validate_status:INTRANS_GROUP. isIssue true");
if(k != 2 && k != 3 && k != 5)
break;
if(l == 3)
{
if(TrxUtil.isTraceEnabled)
TrxUtil.log("-----> Inside isIssue of INTRANS_GROUP");
if(i1 == 1)
k1 = 4;
else
k1 = 5;
break;
}
if(TrxUtil.isTraceEnabled)
TrxUtil.log("Invalid status in INTRAN group: curstat=" + l, 1);
TrxUtil.addMessage("INV", "INV_INVALID_SERIAL");
throw new InvTrxException("Invalid status in INTRAN ");
}
if(TrxUtil.isTraceEnabled)
TrxUtil.log("validate_status:INTRANS_GROUP. isIssue false");
if(k == 2 || k == 3)
{
if(l == 1 || l == 4 || l == 5 || l == 7)
{
k1 = 3;
break;
}
if(TrxUtil.isTraceEnabled)
TrxUtil.log("Invalid status in INTRAN Group:", 1);
TrxUtil.addMessage("INV", "INV_INVALID_SERIAL");
throw new InvTrxException("Invalid status in INTRAN ");
}
if(k == 5)
{
if(l == 1 || l == 4 || l == 5 || l == 7)
{
k1 = 3;
break;
}
if(TrxUtil.isTraceEnabled)
TrxUtil.log("Invalid status in INTRAN Group:", 1);
TrxUtil.addMessage("INV", "INV_INVALID_SERIAL");
throw new InvTrxException("Invalid status in INTRAN ");
}
if(k != 6)
break;
if((l == 5 || l == 7) && (i == 7 || j == 12))
{
k1 = 1;
break;
}
if(TrxUtil.isTraceEnabled)
TrxUtil.log("Invalid status in INTRAN Group:", 1);
TrxUtil.addMessage("INV", "INV_INVALID_SERIAL");
throw new InvTrxException("Invalid status in INTRAN ");
case 4: // '\004'
if(TrxUtil.isTraceEnabled)
TrxUtil.log("validate_status:PACKUNPACK_GROUP.");
if(flag && l == 3)
{
k1 = 4;
break;
}
if(!flag && (l == 4 || l == 3))
{
if(TrxUtil.isTraceEnabled)
TrxUtil.log("validatestaus CurStatus=" + l, 1);
k1 = 3;
break;
}
if(l == 3 || l == 5 && l1 == 5L)
break;
if(TrxUtil.isTraceEnabled)
TrxUtil.log("Invalid status in PACKUNPACK_GROUP :" + l, 1);
TrxUtil.addMessage("INV", "INV_INVALID_SERIAL");
throw new InvTrxException("Invalid status in PACKUNPACK_GROUP ");
case 6: // '\006'
if(flag)
{
if(TrxUtil.isTraceEnabled)
TrxUtil.log("validate_status:LOT_TRX_GROUP. isIssue true");
if(j == 40 || j == 41)
{
if(l != 3)
{
if(TrxUtil.isTraceEnabled)
TrxUtil.log("Invalid status in LOT_TRX_GROUP :" + l, 1);
TrxUtil.addMessage("INV", "INV_INVALID_SERIAL");
throw new InvTrxException("Invalid status in LOT_TRX_GROUP ");
}
k1 = 3;
break;
}
if(j != 42)
break;
if(TrxUtil.isTraceEnabled)
TrxUtil.log("CASE LOT_TRX_GROUP:Issue:TA_LOTTRANS");
if(l != 3)
{
if(TrxUtil.isTraceEnabled)
TrxUtil.log("Invalid status in LOT_TRX_GROUP for lot trans :" + l, 1);
TrxUtil.addMessage("INV", "INV_INVALID_SERIAL");
throw new InvTrxException("Invalid status in LOT_TRX_GROUP ");
}
if(TrxUtil.isTraceEnabled)
TrxUtil.log("CASE LOT_TRX_GROUP:Issue:TA_LOTTRANS: newStatus SN_NOTUSED");
k1 = 1;
break;
}
if(TrxUtil.isTraceEnabled)
TrxUtil.log("validate_status:LOT_TRX_GROUP. isIssue false");
if(j == 40 || j == 41)
{
if(l != 3)
{
if(TrxUtil.isTraceEnabled)
TrxUtil.log("Invalid status in LOT_TRX_GROUP :" + l, 1);
TrxUtil.addMessage("INV", "INV_INVALID_SERIAL");
throw new InvTrxException("Invalid status in LOT_TRX_GROUP ");
}
k1 = 3;
break;
}
if(j != 42)
break;
if(TrxUtil.isTraceEnabled)
TrxUtil.log("CASE LOT_TRX_GROUP:!Issue:TA_LOTTRANS:CurSTatus=> " + l);
if(l == 1 || l == 6 || l == 3)
{
k1 = 3;
break;
}
if(l != 4)
break;
if(TrxUtil.restrictRcptSerial)
{
if(TrxUtil.isTraceEnabled)
{
TrxUtil.log("CASE LOT_TRX_GROUP:Receipt of Issued Out Serials Not allowed :CurSTatus=> " + l);
TrxUtil.log("Invalid status due to RESTRICT_RCPT_SER :" + l, 1);
}
TrxUtil.addMessage("INV", "INV_INVALID_SERIAL");
throw new InvTrxException("Invalid status in STD_GRP");
}
k1 = 3;
break;
case 5: // '\005'
if(i == 5)
{
if(TrxUtil.isTraceEnabled)
TrxUtil.log("validate_status:STD_GROUP. srcType WIP, action:" + j);
if(j == 31 || j == 32)
try
{
PSChkWipEtyTyp.setLong(1, l3);
ResultSet resultset = PSChkWipEtyTyp.executeQuery();
if(resultset.next())
i2 = resultset.getInt(1);
resultset.close();
}
catch(Exception exception)
{
if(TrxUtil.isTraceEnabled)
TrxUtil.log(" Ex. in getting wip entity id" + exception);
}
if((j == 31 && l != 1 && l1 != 5L || j == 32 && l1 == 5L) && l2 == -1L)
{
if(TrxUtil.isTraceEnabled)
TrxUtil.log("Error: Wip entity id is null", 1);
if(i2 != 6 && i2 != 7)
{
if(TrxUtil.isTraceEnabled)
TrxUtil.log("Error: Not an EAM job and Wip entity id is null", 1);
TrxUtil.addMessage("INV", "INV_INVALID_SERIAL");
throw new InvTrxException("Invalid status in STD_GROUP ");
}
if(TrxUtil.isTraceEnabled)
TrxUtil.log("EAM job and Wip entity id is null, it is ok!!", 1);
}
if(j == 31 && l == 4 && l1 == 5L && l2 != 0L && l3 != 0L && i2 == 1 && l2 != l3 && TrxUtil.restrictRcptSerial)
{
if(TrxUtil.isTraceEnabled)
TrxUtil.log("Error: This serial was returned through some other job and can not be used for the current job ", 1);
TrxUtil.addMessage("INV", "INV_INVALID_SERIAL");
throw new InvTrxException("Invalid status in STD_GROUP ");
}
}
if(flag)
{
if(TrxUtil.isTraceEnabled)
TrxUtil.log("validate_status:STD_GROUP. isIssue true");
if(k != 2 && k != 3 && k != 5)
break;
if(l == 3)
{
k1 = 4;
break;
}
if(TrxUtil.isTraceEnabled)
TrxUtil.log("Invalid status in STD_GRP/Issue1 :" + l, 1);
TrxUtil.addMessage("INV", "INV_INVALID_SERIAL");
throw new InvTrxException("Invalid status in STD_GRP");
}
if(TrxUtil.isTraceEnabled)
TrxUtil.log("validate_status:STD_GROUP. isIssue false");
if(k == 2 || k == 3)
{
if(i == 5)
{
if(TrxUtil.restrictRcptSerial && j == 27 && l == 4 && l1 != 1L && l1 != 5L)
{
if(TrxUtil.isTraceEnabled)
TrxUtil.log("Invalid status due to RESTRICT_RCPT_SER :" + l, 1);
TrxUtil.addMessage("INV", "INV_INVALID_SERIAL");
throw new InvTrxException("Invalid status in STD_GRP");
}
} else
if(TrxUtil.restrictRcptSerial && j == 27 && l == 4 && l1 != 1L)
{
if(TrxUtil.isTraceEnabled)
TrxUtil.log("Invalid status due to RESTRICT_RCPT_SER :" + l, 1);
TrxUtil.addMessage("INV", "INV_INVALID_SERIAL");
throw new InvTrxException("Invalid status in STD_GRP");
}
if(TrxUtil.restrictRcptSerial && j == 31 && l == 4 && l1 != 5L)
{
if(TrxUtil.isTraceEnabled)
TrxUtil.log("Invalid status due to RESTRICT_RCPT_SER :" + l, 1);
TrxUtil.addMessage("INV", "INV_INVALID_SERIAL");
throw new InvTrxException("Invalid status in STD_GRP");
}
if(l == 1 || l == 4)
{
if(j == 3 && i1 == 6)
k1 = 1;
else
k1 = 3;
break;
}
if(i == 1 && l == 5 && l1 != 8L && l1 != 13L || i == 5 && l == 5 && l1 != 8L && l1 != 13L || i == 1 && l == 7)
{
k1 = 3;
break;
}
if(TrxUtil.isTraceEnabled)
TrxUtil.log("Invalid status in STD_GRP/Rcpt1 :" + l, 1);
TrxUtil.addMessage("INV", "INV_INVALID_SERIAL");
throw new InvTrxException("Invalid status in STD_GRP");
}
if(k != 5)
break;
if(i == 5)
{
if(TrxUtil.restrictRcptSerial && j == 27 && l == 4 && l1 != 1L && l1 != 5L)
{
if(TrxUtil.isTraceEnabled)
TrxUtil.log("Invalid status due to RESTRICT_RCPT_SER :" + l, 1);
TrxUtil.addMessage("INV", "INV_INVALID_SERIAL");
throw new InvTrxException("Invalid status in STD_GRP");
}
} else
if(TrxUtil.restrictRcptSerial && j == 27 && l == 4 && l1 != 1L)
{
if(TrxUtil.isTraceEnabled)
TrxUtil.log("Invalid status due to RESTRICT_RCPT_SER :" + l, 1);
TrxUtil.addMessage("INV", "INV_INVALID_SERIAL");
throw new InvTrxException("Invalid status in STD_GRP");
}
if(TrxUtil.restrictRcptSerial && j == 31 && l == 4 && l1 != 5L)
{
if(TrxUtil.isTraceEnabled)
TrxUtil.log("Invalid status due to RESTRICT_RCPT_SER :" + l, 1);
TrxUtil.addMessage("INV", "INV_INVALID_SERIAL");
throw new InvTrxException("Invalid status in STD_GRP");
}
if(l == 1 || l == 4)
{
if(j == 3 && i1 == 6)
k1 = 1;
else
k1 = 3;
break;
}
if(i == 1 && l == 5 && l1 != 8L && l1 != 13L || i == 5 && l == 5 && l1 != 8L && l1 != 13L || i == 1 && l == 7)
{
k1 = 3;
break;
}
if(TrxUtil.isTraceEnabled)
TrxUtil.log("Invalid status in STD_GRP/Rcpt2 :" + l, 1);
TrxUtil.addMessage("INV", "INV_INVALID_SERIAL");
throw new InvTrxException("Invalid status in STD_GRP");
}
return k1;
}
TrxUtil.log("SrcTypeId = " + i + ",ActId=" + j + ",SerCtrl+" + k + ",CurStatus=" + l + ",TrxGroup=" + j1 + " ,LstTxnSrcTypId=" + l1 + ",xfrSerCtrl=" + i1 + ",mOrigWipEntId=" + l2 + ",TrxSrcId=" + l3);
TrxUtil.log("Invalid status in STD_GRP/Rcpt2 :" + l, 1);
TrxUtil.addMessage("INV", "INV_INVALID_SERIAL");
throw new InvTrxException("Invalid status in STD_GRP");
:= 5; --mtl_txn_source_types--生产管理
WIP 投料报 Invalid Serial Number的更多相关文章
- 解决软件卸载时Abstract: "Invalid serial number" xe4
In RAD Studio, Delphi, C++Builder, XE4 there can become a scenario if you try to modify, repair, upg ...
- nginx 报invalid pid number
/opt/ibis/sbin/nginx -c /opt/ibis/conf/nginx.conf 这是make make install之后生成的文件夹和文件. -c c是configure的缩写 ...
- win8(x64)下,重新安装delphi 2007时出现“Invalid Serial Number”,如何解决?
1)在添加删除程序里卸载delphi 2007 2)删除C:\ProgramData\CodeGear 3)删除C:\Program Files (x86)CodeGear 4)删除d:\Progra ...
- PP生产订单创建、下达、报工、收货、投料
转自http://blog.sina.com.cn/s/blog_69fb8eb60102vpjd.html SAP 物料订单创建.下达.报工.收货与投料(ABAP代码) (2015-06-03 22 ...
- Source insight 3572版本安装及An invalid source insight serial number was detected解决方法
Source insight有最新版3572.3.50.0076 下载连接:http://www.sourceinsight.com/down35.html, http://www.sourcei ...
- 【排障】nginx在reload时候报错invalid PID number
nginx在reload时候报错invalid PID number nginx重新加载配置文件时候报错,提示无效的PID: 解决的办法有二: 第一种思路是因为是加载配置文件报的错,所以用-c 选项指 ...
- Source insight 3572安装和版本号An invalid source insight serial number was detected解
Source insight最新版本3572 下载链接:http://www.sourceinsight.com/down35.html, http://www.sourceinsight.com ...
- nginx重启报错:nginx: [error] invalid PID number "" in "/run/nginx.pid"
问题描述:执行 nginx -t 是OK的,然而在执行 nginx -s reload 的时候报错 nginx: [error] invalid PID number “” in “/run/ngin ...
- Centos7.5中Nginx报错:nginx: [error] invalid PID number "" in "/run/nginx.pid" 解决方法
服务器重启之后,执行 nginx -t 是OK的,然而在执行 nginx -s reload 的时候报错 nginx: [error] invalid PID number "" ...
随机推荐
- Yii2.0源码阅读-behavior的实现原理
Yii2.0中的一个思想就是组件化的思想,所以.大多数的类都直接或间接的继承自yii\base\Component,而组件的三大功能:属性.事件.行为. 行为的目的是为了方便的扩展一个类的功能,而不需 ...
- Qone 正式开源,使 javascript 支持 .NET LINQ
Qone 下一代 Web 查询语言,使 javascript 支持 LINQ Github: https://github.com/dntzhang/qone 缘由 最近刚好修改了腾讯文档 Excel ...
- js原生获取元素的css属性
习惯了用jQuery的css()的方法获取元素的css属性,突然不用jquery了,当要获得元素的css时候,我瞬间停顿了一下,咦?咋获取元素的css值?比如获取元素的width.是这样么?docum ...
- Python中的str与unicode处理方法
Python中的str与unicode处理方法 2015/03/25 · 基础知识 · 3 评论· Python 分享到:42 原文出处: liuaiqi627 的博客 python2.x中处理 ...
- MarkDown语法学习
功能性需求 输入密码 输入账号 多少度 输入 多少~~@~~度 sdsd 多少度 D是多少啊 [百度]http://www.baidu.com 百度 版本 内容 时间 v0. 需求描述 2018-4- ...
- Appium--swipe滑动方法
最近公司要求对APP模块自动化,以Android 自动化为例,把appium滑动的方法swipe()再小结下.滑动的目的,一方面是为了更好的查找元素,一方面就是为了滑屏操作.代码如下: package ...
- 用豆瓣镜像解决pip安装慢的问题
pip3 install django==1.9 -i http://pypi.douban.com/simple/
- [BBS]搭建开源论坛之JForum安装使用札记
本文作者:sushengmiyan 本文地址:http://blog.csdn.net/sushengmiyan/article/details/47761303 目录 目录 BBS搭建开源论坛之JF ...
- Android图表库MPAndroidChart(六)——换一种思考方式,水平条形图的实现过程
Android图表库MPAndroidChart(六)--换一种思考方式,水平条形图的实现过程 一.基本实现 我们之前实现了条形图,现在来看下水平条形图是怎么实现的,说白了就是横起来,看下效果: 说起 ...
- springMVC源码分析--AbstractUrlHandlerMapping(三)
上一篇博客springMVC源码分析--AbstractHandlerMapping(二)中我们介绍了AbstractHandlerMapping了,接下来我们介绍其子类AbstractUrlHand ...