今天下载了bugfeeHelper,配置完成以后,也登录成功,但是却接收不到bugfree的bug提交情况。
查看了bugfee的版本,发现是2.1.3,发布时间是2011年6月份,但是bugfreehelper最新版本是2008年6月份。
看了下bugfree的更新记录,发现对界面做了不少的更新,就怀疑是不是界面的改变,导致bugfreehelper拿不到数据。
于是就按这个思路查看了bugfreehelper的源代码,结果跟自己想到一样。
解决方法:(由于本人不会Delphi,只能通过该php了)
1.在得到最近的bug数的方法中,bugfreehelper是通过页面返回的记录结果来计算的
在bugfreehelper的MonitorBug.pas源代码可以找到
TParamList.FindSubStr(Html, '<td style="text-align:left;border:0;width:30%">'#13#10, #13#10, Html);
StartIndex := Pos('/', Html);
if StartIndex <= 0 then Exit;
StartIndex := StartIndex + 1;
RecordStr := MidStr(Html, StartIndex, MaxInt);
BugCount := StrToIntDef(RecordStr, 0);
在之前版本的页面结构里,是“<td style="text-align:left;border:0;width:30%">”,
但是新版的改为“<td style="text-align:right;width:50%">”,只要将这个地方改为原来的样式就可以(对页面的影响不大)
bugfreehelper得到结果以后,是通过截取字符串来得到bug数的,新版的bugfree还是有点问题,需要去掉一些空格
将:
{$Lang.Pagination.Result}
{$PaginationDetailInfo.FromNum}-{$PaginationDetailInfo.ToNum}/{$PaginationDetailInfo.RecTotal}
改为:
{$Lang.Pagination.Result} {$PaginationDetailInfo.FromNum}-{$PaginationDetailInfo.ToNum}/{$PaginationDetailInfo.RecTotal}
这样就可以了
2.bug数是可以得到了,但是得到的结果却是不对的,是所有的bug数,而不是自己的bug数,对比了一下新版的查询包跟旧版的查询包,发现新版的多了几个参数(QueryFieldCount,QueryRowOrder)。
看了下bugfree的源代码,发现QueryFieldCount没有用到,而QueryRowOrder这个是用来计算一个有几个查询条件的。问题解决了。。。
就是原来旧版没有这个参数,导致查询条件都没有用上。修改方法如下:
在bugfree\Include\FuncModel.inc.php页面中,就如如下的判断,如果这个参数没有,就手动加上(大概在495行)
if($QueryRowOrderStr=='' || $QueryRowOrderStr==null){
$QueryRowOrderStr='SearchConditionRow0,SearchConditionRow2,SearchConditionRow3,SearchConditionRow6,SearchConditionRow5,SearchConditionRow4';
}
加入这个的依据是原来使用了6个查询条件,在bugfreehelper源代码里也看到了如下的代码
UnclosedBugCountParam = 'AutoComplete=on&AndOr0=And&Field0=ProjectName&Operator0=%3D&' +
'Value0=&AndOrGroup=AND&AndOr1=And&Field1=OpenedBy&Operator1=%3D&Value1=&' +
'AndOr2=And&Field2=ModulePath&Operator2=LIKE&Value2=&AndOr3=And&' +
'Field3=AssignedTo&Operator3=%3D&Value3=${username}&AndOr4=And&' +
'Field4=BugID&Operator4=%3D&Value4=&AndOr5=And&Field5=BugTitle&' +
'Operator5=LIKE&Value5=&PostQuery=%E6%8F%90%E4%BA%A4%E6%9F%A5%E8%AF%A2%E5%86%85%E5%AE%B9&QueryType=Bug';
这个是拼接查询条件的。
自此,这个问题就解决了。。。