随笔 - 135  文章 - 1 评论 - 2077 trackbacks - 136
<2008年2月>
272829303112
3456789
10111213141516
17181920212223
2425262728291
2345678

QuickFlow下载
SPCAMLEditor 下载
camlquery 类库下载
Book: 《亮剑.NET:SharePoint Server 2007开发实战》
昵称:jianyi
园龄:4年10个月
粉丝:72
关注:7

搜索

 
 

随笔分类(125)

My Friends

wss

积分与排名

  • 积分 - 258333
  • 排名 - 289

最新评论

阅读排行榜

评论排行榜

推荐排行榜

SmartQuery 是一个WSS(MOSS)列表查询解决方案,可以给WSS的所有列表添加字段查询的功能。

您需要做的只是开发一个查询字段布局用户控件,声明查询字段及其排列,然后利用SmartQueryWebPart加载这个用户控件即可。

使用步骤:
----------------------------------------------------------------------

1)首先下载:http://files.cnblogs.com/jianyi0115/SmartQuery_v1.0.zip 并解压。

最新发布:http://camlquery.codeplex.com/ 


2) 将CodeArt.SharePoint.CamlQuery.dll和CodeArt.SharePoint.SmartQuery.dll加入GAC。

3)在站点的web.config的 <SafeControls>节点下添加webpart声明:
<SafeControl Assembly="CodeArt.SharePoint.SmartQuery, Version=1.0.0.0, Culture=neutral, PublicKeyToken=df96d56002e5fe16" Namespace="CodeArt.SharePoint.SmartQuery" TypeName="*" Safe="True" AllowRemoteDesigner="True" />

4)将示例查询布局用户控件 CodeArt_ExampleQueryLayout.ascx和CodeArt_ExampleQueryLayout2.ascx
复制到C:"Program Files"Common Files"Microsoft Shared"web server extensions"12"TEMPLATE"CONTROLTEMPLATES

5)进入> Web 部件库 > 新建 Web 部件   页面,添加

6)进行测试:示例控件是为 任务 列表开发的,因此,转到一个任务列表的AllItem.aspx页面,进入编辑模式,
添加 SmartQueryWebPart。

7)退出编辑模式,就可以看到效果了。


如何开发自己的查询布局控件:
----------------------------------------------------------------------------

1)查询布局用户控件可以是任意用户控件,只要实现了CodeArt.SharePoint.SmartQuery.ICamlProvider接口即可。

2)为了简化开发,用户控件可以从 CodeArt.SharePoint.SmartQuery.BaseLayoutControl继承,参考CodeArt_ExampleQueryLayout.ascx的代码:

<%@ Control Language="C#"
 Inherits
="CodeArt.SharePoint.SmartQuery.BaseLayoutControl,CodeArt.SharePoint.SmartQuery, Version=1.0.0.0, Culture=neutral, PublicKeyToken=df96d56002e5fe16"
%>
<%@ Register Tagprefix="codeArt" Namespace="CodeArt.SharePoint.SmartQuery" Assembly="CodeArt.SharePoint.SmartQuery, Version=1.0.0.0, Culture=neutral, PublicKeyToken=df96d56002e5fe16" %>
 
<div>     
     
<table>
     
<tr>
     
<td>
     标题:
     
</td>
     
<td><codeArt:QueryControl runat="server" FieldName="标题" id="f1" ShowTitle="false" /></td>
     
<td>
     截止日期:
     
</td>
     
<td> <codeArt:QueryControl runat="server" FieldName="截止日期" id="f2" ShowTitle="false"/></td>
      
<td>
     分配对象:
     
</td>
     
<td> <codeArt:QueryControl runat="server" FieldName="分配对象" id="f3" ShowTitle="false"/></td>
      
<td>
     优先级:
     
</td>
     
<td> <codeArt:QueryControl runat="server" FieldName="优先级" id="f4" ShowTitle="false"/></td>
     
<td>
     
<asp:Button runat="Server" Text="查询" ID="btn1" />
     
</td>
     
</tr>
     
</table>     
</div>



说明:QueryControl表示一个查询字段,它会按照字段类型呈现不同的样式,如 文本框,下拉列表,时间选择,人员选择等。

3)如果要进行更高级的控制,可以重载BaseLayoutControl的QueryExpression属性,来实现自己的查询条件控制。

请参考CodeArt_ExampleQueryLayout2.ascx的代码:

<%@ Control Language="C#"
 Inherits
="CodeArt.SharePoint.SmartQuery.BaseLayoutControl,CodeArt.SharePoint.SmartQuery, Version=1.0.0.0, Culture=neutral, PublicKeyToken=df96d56002e5fe16"
%>
<%@ Register Tagprefix="codeArt" Namespace="CodeArt.SharePoint.SmartQuery" Assembly="CodeArt.SharePoint.SmartQuery, Version=1.0.0.0, Culture=neutral, PublicKeyToken=df96d56002e5fe16" %>
<%@ Register Tagprefix="SharePoint" Namespace="Microsoft.SharePoint.WebControls" Assembly="Microsoft.SharePoint, Version=12.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %> <%@ Register Tagprefix="Utilities" Namespace="Microsoft.SharePoint.Utilities" Assembly="Microsoft.SharePoint, Version=12.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %>
<%@ Import Namespace="Microsoft.SharePoint" %>

<%@ Assembly Name="CodeArt.SharePoint.CamlQuery, Version=1.0.0.0, Culture=neutral, PublicKeyToken=43536cfde91ea799" %>
<%@ Import Namespace="CodeArt.SharePoint.CamlQuery"  %>

<script runat="server">
 
    
/// <summary>
    /// 创建查询表达式
    /// </summary>
    public override CamlExpression QueryExpression
    
{
        get
        
{
            CamlExpression expr 
= null;

            QueryField title 
= new QueryField("标题"false);

            QueryField des 
= new QueryField("说明"false);

            
if (txtTitle.Text != "")
                expr 
= title.Contains(txtTitle.Text);

            
if (txtDes.Text != "")
                expr 
= Append( expr , des.Contains( txtDes.Text ) );
           
            
return expr ;                    
        }

    }


    
/// <summary>
    /// 链接查询条件
    /// </summary>
    /// <param name="expr1"></param>
    /// <param name="expr2"></param>
    /// <returns></returns>
    CamlExpression Append( CamlExpression expr1 , CamlExpression expr2 )
    
{
        
if (expr1 == null)
            
return expr2;
        
else
            
return expr1 && expr2;       
    }


</script>
 
<div>     
     
<table>
     
<tr>
     
<td>
     标题:
     
</td>
     
<td>
     
<asp:TextBox runat="server" ID="txtTitle"></asp:TextBox>
     
</td>
     
<td>
     说明:
     
</td>
     
<td> <asp:TextBox runat="server" ID="txtDes"></asp:TextBox></td>
     
<td>
     
<asp:Button runat="Server" Text="查询" ID="btn1" />
     
</td>
     
</tr>
     
</table>          
</div>


--------------------------------------------
说明:SmartQuery采用CamlQuery类库实现查询条件的拼接,CamlQuery类库类库的使用参见压缩包里的CamlQuery_Manual.txt。
或参考以下链接:
WSS3.0开发--你还在为写CAML痛苦吗?
CodeArt.SharePoint.CamlQuery_0.9发布(源码)

4)布局控件开发好后,放到CONTROLTEMPLATES目录,然后到AllItem页面修改SmartQueryWebPart的LayoutControlPath属性为布局控件的虚拟路径,
如 ~/_CONTROLTEMPLATES/CodeArt_ExampleQueryLayout.ascx



下载 dll:http://files.cnblogs.com/jianyi0115/SmartQuery_v1.0.zip

另:SmartQueryWebPart的实现方式可以参考:
WSS3.0开发-过滤列表内容(1)

附:

发布所有源码了,到此下载:

http://camlquery.codeplex.com/SourceControl/ListDownloadableCommits.aspx

[注意:源码是跟SmartQuery放在一起的,算是SmartQuery类库的一个应用把]



posted on 2008-02-15 20:42 jianyi 阅读(5756) 评论(131) 编辑 收藏

FeedBack:
评论共2页: 上一页 1 2 
请问老大.如果查询WEBPART查询过的数据的列表再加上链接,出现了一个单选按钮.为什么再点查询按钮就不管用了呢.也就是查询不出来数据了 .
 回复 引用   
#33楼[楼主2008-05-07 09:25 jianyi      
@李保军
你对列表做了什么特殊配置吗?

 回复 引用 查看   
没有做其它配置,只是与其它WebPart建立了链接.
我只是传入了CAML语句.使用的是你第一篇的做法.

 回复 引用   
我使用的是任务列表,我在任务列表上加上了查询控件,当没有与其它列表建立连接时,是可以查询出来数据的,但当与其它列表建立连接,实现连动.则再点"查询"按钮就查询不出来数据了.老大能帮个忙给解决一下吗??
 回复 引用   
#36楼[楼主2008-05-07 13:59 jianyi      
@李保军
是有这个问题,同时设置列表的 ViewGuid = "" 即可。

 回复 引用 查看   
老大.我加过ViewGuid了.还是不行.
 回复 引用   
#38楼[楼主2008-05-07 14:21 jianyi      
@李保军
我测过是可以的,你再看看拉

 回复 引用 查看   
我用的就是下面的代码,老大.帮我看看对不对??

Microsoft.SharePoint.WebPartPages.ListViewWebPart listWp = (Microsoft.SharePoint.WebPartPages.ListViewWebPart)wp;
XmlDocument doc = new XmlDocument();
doc.LoadXml(listWp.ListViewXml);
XmlNode queryNode = doc.DocumentElement.SelectSingleNode("Query");
queryNode.InnerXml = this.Caml;


listWp.ViewGuid = "{B08605A0-4EEE-4C68-8D85-FC53FAECC5E4}";

listWp.ListViewXml = doc.InnerXml; //替换列表显示的Schema

 回复 引用   
#40楼[楼主2008-05-07 16:22 jianyi      
@李保军
listWp.ViewGuid = "{B08605A0-4EEE-4C68-8D85-FC53FAECC5E4}";
我的意思是要清空ViewGuid ,设置listWp.ViewGuid ="";

 回复 引用 查看   
嗯.清空了是可以用了,可是当翻页时,或者排序时就会把所有的信息显示出来,而不是查询出来的数据.老大,这个问题能解决吗??
 回复 引用   
#42楼[楼主2008-05-08 10:49 jianyi      
@李保军
每次页面提交的时候需要重新设置查询条件和ViewGuid,你去了解一下控件的生命周期,看在那个方法设置合适,多实验一下。---你可以参考SmartFormWebPart的代码,自己reflect一下。

 回复 引用 查看   
老大。你还在吗??我的那个翻页到现在我还没有弄出来。你能帮帮我吗??
视图清空了。可是当翻页时,两个WebPart之间的连接就会出现有时可以查询,有时就不能查询。

 回复 引用   
#44楼[楼主2008-05-15 15:05 jianyi      
@李保军
确保每次页面提交时都会去设置查询条件。

 回复 引用 查看   
#45楼 2008-05-18 15:21 笨笨丁      
老大请问问什么日期类型的字段,无论输入任何条件,查询出来的结果都是0呢?
 回复 引用 查看   
#46楼 2008-05-18 15:22 笨笨丁      
老大请问如果查询的字段是日期类型的,无论输入任何条件,查询出来的结果都是未查询到任何记录呢?谢谢,谢谢!

 回复 引用 查看   
#47楼[楼主2008-05-18 23:44 jianyi      
@笨笨丁
你是自己拼得查询条件还是用布局控件? 直接用布局控件是可以查时间类型字段的。

 回复 引用 查看   
#48楼 2008-05-19 08:29 笨笨丁      
直接用布局控件,因为MOSS确省的是格式是mm/dd/yyyy, 但我用Caml工具查出应该形成的格式是yyyy-mm-dd不知道是不是这个原因造成的?你那第一个例我什么都没改,放到Task里,别的字段查询都没问题,可就是时间不行!
 回复 引用 查看   
#49楼 2008-05-22 10:25 查询[未注册用户]
dll加入GAC后,<SafeControls>节点下添加webpart声明 后,进入> Web 部件库 > 新建 Web 部件 页面,找不到Dll,为什么呀?<trust level="Full" originUrl="" />,iisreset了,就是找不到dll.

 回复 引用   
#50楼[楼主2008-05-22 13:45 jianyi      
@查询
确认改的是同一个站点的web.config?

 回复 引用 查看   
#51楼 2008-06-02 15:17 1895[未注册用户]
@jianyi
jianyi大哥,如果在代码中需要根据判断逻辑来动态的增加CAML查询语句中的查询条件,有什么好的方案么?即类似拼SQL语句
string str="select * from a where c=c"
str=str+" and b=b"
这样的
您的camlquery库提供相关的功能么?
感觉CAML语句好难拼啊

 回复 引用   
#52楼[楼主2008-06-02 20:35 jianyi      
@1895
camlquery类库就是为了解决这个问题的,另外你可以试一下FriendQuery或Caml Builder(google下),或者可以利用SPCAMLEditor的智能提示写CAML。

 回复 引用 查看   
#53楼 2008-06-02 21:03 1895[未注册用户]
@jianyi

如果直接依靠外部工具写好CAML语句拷贝到代码里面使用当然没有问题拉
只是觉得在代码中根据逻辑直接在代码中拼写CAML查询语句困难

 回复 引用   
#54楼[楼主2008-06-02 21:08 jianyi      
@1895
那就试试我的CAMLQuery类库吧,SmartQueryWebPart那篇你看过吗?那个webpart核心就是用CAMLQuery类库实现的(类似的还有个老外写的Linq To SharePonit)。

 回复 引用 查看   
#55楼 2008-06-03 10:52 1895[未注册用户]
@jianyi
老大,看了那篇文章,如果我只使用你的CAMLQuery类库,如何拼写CAML句子呢?
目前我是这么写的,ICAMLExpression expr = titleField.Contains("123")||titleField.Contains("1");
但是不能动态判断是否需要增加查询条件啊

expr还可以动态扩充查询条件么?类似expr=expr ||titleField.Contains("123")
这样的
具体怎么实现呢?

 回复 引用   
#56楼[楼主2008-06-03 13:14 jianyi      
#57楼 2008-06-03 17:47 1895[未注册用户]
@jianyi

搞定了,以前用的那个CAMLQuery类库可能版本低了,去下载了0.9的版本,就解决问题了,谢谢老大!

 回复 引用   
#58楼 2008-06-30 19:13 amoszw[未注册用户]
测试了,不能找到文件夹内的项目!请问有办法吗?
 回复 引用   
#59楼[楼主2008-07-04 18:05 jianyi      
@amoszw
做一个新视图,选择不显示文件夹,在这个视图页面可以查到文件夹内的项目。

 回复 引用 查看   
#60楼 2008-07-17 13:27 lxrc[未注册用户]
yanyi,你那篇说的列表查询WebPart我一直在用,可是今天遇到一个现象。就是我在视图里,除了定义需要显示的字段名以外,我还定义了筛选条件,比如只显示性别为女的记录,可是我使用列表查询WebPart查询时却发现查询时连性别为男的也查询出来了。这是怎么回事呀。能帮帮我吗??
 回复 引用   
#61楼[楼主2008-07-17 20:21 jianyi      
@lxrc
解决了吗?需要重载public override CamlExpression QueryExpression属性,把试图的过滤条件附加上,如:
public override CamlExpression QueryExpression
{
get
{
CamlExpression expr = base.QueryExpression;

QueryField sex = new QueryField("性别", false);

expr = Append( expr , sex =="男" );

return expr ;
}
}

 回复 引用 查看   
#62楼 2008-08-20 14:12 kkdd[未注册用户]
日期的LessEqual 好像有问题

相等的日期显示不出

 回复 引用   
#63楼 2008-12-25 10:18 virus      
如何把时间段横向并排显示呢
 回复 引用 查看   
#64楼 2008-12-25 10:20 virus      
老大,可以开源吗
我想结合自己的情况修改啊
谢谢
msn:jorden008@hotmail.com

 回复 引用 查看   
#65楼 2008-12-25 10:27 virus      
如何来修改布局呢,比如说我的时间要并排显示,不要竖着显示,还有就是人名也要模糊查询,不用人员选择器
 回复 引用 查看   
#66楼 2008-12-25 10:46 virus      
LiteralControl child = new LiteralControl {
EnableViewState = false,
Text = html
};
这个是3.0的特性吧,还是3.5的啊
我反编译你的控件之后

 回复 引用 查看   
#67楼 2008-12-25 10:49 virus      
如何才可以让2005识别3.5的特性呢,我也安装3.5和3.0了
他不认识LiteralControl child = new LiteralControl {
EnableViewState = false,
Text = html
}; 这种特性啊

 回复 引用 查看   
#68楼 2008-12-25 10:54 virus      
CamlExpression.op_False(isNotNull)
这一行编译不过去啊,我看见你重载了操作符
public static bool operator false(CamlExpression right)
{
return false;
}

可是CamlExpression后面的op_False(isNotNull)是.不出来的啊,编译的时候会报错





 回复 引用 查看   
#69楼 2008-12-25 11:04 virus      
你的goto都找不到地方啊
没有标签定义的地方啊

 回复 引用 查看   
#70楼 2008-12-25 11:11 virus      
如果我想修改显示的外观,改重写那个方法呢
 回复 引用 查看   
#71楼[楼主2008-12-25 21:41 jianyi      
@virus
部分源码: http://www.codeplex.com/camlquery

 回复 引用 查看   
#72楼 2008-12-29 10:41 lxrc[未注册用户]
yianyi大哥,如何把一个列表中的根目录的记录移动到列表某个文件夹下面呀。我在数据库里把路径改了,还是不行,请问,要如何才能实现此功能呀?请教教我吧。
 回复 引用   
#73楼[楼主2009-01-01 21:34 jianyi      
@lxrc
如果是MOSS的话,道网站和结构管理中,好像可以移动。
WSS的话,自己写code移动吧。

 回复 引用 查看   
#74楼 2009-01-06 11:09 virus      
@jianyi
楼主啊,请问你是如何找到listviewwebpart的呢,我自己的ascx改如何才可以定位ListViewWebPart呢,定位才可以把组合的CAML传递给它的ListViewXml 属性,来控制显示查询的结果

 回复 引用 查看   
#76楼 2009-01-06 16:43 virus      
你的Leq和Lt弄反了吧
 回复 引用 查看   
#77楼 2009-01-08 09:29 virus      
我的网站开启了内容审批,在列表设置了内容审批
我的需求是公司新闻的发布系统,建立三个列表分别存放未发布新闻,已发布新闻,已过期新闻,审批通过之后copyto到已发布新闻列表,但是审批状态就被自动修改为“待定”,在首页用内容查询显示“已发布”列表中的记录的时候,只能显示审批状态为“已批准”的,我就想copyto之后,修改一下审批状态为“已批准”,但是好像修改不了,只能设置工作流完成之后修改审批状态,才可以修改,下面是我的代码,你看看吧,在item["审批状态"] = "已批准";这句报错说我“输入字符串的格式不正确。”
SPSecurity.RunWithElevatedPrivileges(delegate()
{
using(SPSite site=new SPSite("http://virus/sites/intranet"))
{
using (SPWeb web=site.OpenWeb("team"))
{
web.AllowUnsafeUpdates = true;

SPList list=web.Lists["已发布动态"];

foreach (SPListItem item in list.Items)
{

item["审批状态"] = "已批准";
item.Update();
}
list = web.Lists["已过期动态"];
foreach (SPListItem item in list.Items)
{
item["审批状态"] =(int) SPModerationStatusType.Approved;
item.Update();
}

web.AllowUnsafeUpdates = false;
}
}
}
);

 回复 引用 查看   
#78楼[楼主2009-01-08 22:57 jianyi      
@virus
参考:
/// <summary>
/// 改变内容审批状态
/// </summary>
/// <param name="approval"></param>
/// <param name="comments"></param>
private void UpdateModerationStatus(bool approval, string comments)
{
SPModerationStatusType approvalState = approval ? SPModerationStatusType.Approved : SPModerationStatusType.Denied;

SPListItem item = this.workflowProperties.Item;

item["_ModerationStatus"] = (int)approvalState;
item["_ModerationComments"] = comments;

item.Update();
}

 回复 引用 查看   
#79楼 2009-01-14 09:20 virus      
楼主好,我将你的SmartQuery反编译之后,可以打开之后
private void ChangeSchemaXmlQuery(XmlDocument doc, string query)
{
if (!string.IsNullOrEmpty(query))
{
string innerQuery = this.GetInnerQuery(query);
if (innerQuery != "")
{
XmlNode node = doc.DocumentElement.SelectSingleNode("Query");
XmlNode oldChild = node.SelectSingleNode("Where");
if (oldChild != null)
{
node.RemoveChild(oldChild);
}
XmlNode newChild = doc.CreateElement("Where");
newChild.InnerXml = innerQuery;
node.AppendChild(newChild);
doc.DocumentElement.SelectSingleNode("ViewEmpty").InnerXml = "<HTML><![CDATA[<font color='red'><b>鏈壘鍒扮鍚堟煡璇㈡潯浠剁殑璁板綍銆?/b></font>]]></HTML>";
}
}
}
doc.DocumentElement.SelectSingleNode("ViewEmpty").InnerXml = "<HTML><![CDATA[<font color='red'><b>鏈壘鍒扮鍚堟煡璇㈡潯浠剁殑璁板綍銆?/b></font>]]></HTML>";
这个汉字显示不正常了,如何处理呢
谢谢了

 回复 引用 查看   
#80楼 2009-01-14 13:20 virus      
listviewwebpart可以脱离sharepoint网站使用吗
 回复 引用 查看   
#81楼[楼主2009-01-16 00:25 jianyi      
@virus
汉字显示不正常--那个是反编译软件的问题。那句话是“查询结果不存在”,自己改改拉。

 回复 引用 查看   
#82楼[楼主2009-01-16 00:26 jianyi      
@virus
listviewwebpart不能脱离sharepoint网站使用

 回复 引用 查看   
#83楼 2009-01-22 14:31 virus      
我有一个需求,就是新闻,我开启了网站的发布功能,用三个文档库存放新闻:未发布,已发布,已过期
开启网站发布功能之后,会生成一个页面库,我就用他来存放未发布的网页,改名为“未发布新闻”

我有一个case,就是已发布或者已过期的新闻如果修改,修改之后要重新审批,我就将修改之后的页面移动到未发布中去,为此我写了eventhandler,重写了itemupdated接收器,可是运行有问题啊

下面是我的代码,可是不修改页面URL的时候可以正常运行,但是修改了URL就不拷贝也不删除了,为什么呢,这个itemupdated事件好像特殊的很,可否帮我看看呢,可是在我的windows服务中,我也是写了文档库的copyto方法,正常了,在itemupdated方法中就出问题,

对于这个需求有没有什么更好的解决方案呢

/// <summary>
/// 宸插彂甯冨姩鎬佺殑浜嬩欢鎺ユ敹鍣?
/// </summary>
public class CorpTrendReleasedItem : SPItemEventReceiver
{
public override void ItemUpdated(SPItemEventProperties properties)
{
//SPFileCollection releasedFiles = properties.ListItem.Web.GetFolder("DocLib").Files;
//SPFileCollection unReleasedFiles = properties.ListItem.Web.Folders["Pages"].Files;
//unReleasedFiles.Add(properties.ListItem.Name, releasedFiles[properties.ListItem.Name].OpenBinary(), true);
SPListItem item = properties.ListItem;
string filename = item.Name.ToString(); ;
using (SPSite site = item.Web.Site)
{
using (SPWeb web = item.Web)
{
if (Helper.IsAdmin(item.Web, "鍔ㄦ€佺鐞嗗憳") || Helper.IsSiteAdmin(item.Web))
{
//SPFileCollection sourceFiles = web.Folders["DocLib"].Files;
//SPFileCollection releasedFiles = web.GetFolder("DocLib").Files;
//SPFileCollection unReleasedFiles = web.Folders["Pages"].Files;
//byte[] bFile = releasedFiles[item.Name].OpenBinary();
//unReleasedFiles.Add(item.Name, bFile, true);
this.DisableEventFiring();
web.Folders["DocLib"].Files[properties.AfterUrl.Substring(properties.AfterUrl.IndexOf("/") + 1)].CopyTo(item.Web.Url + "/" +
item.Web.Lists["鏈彂甯冨姩鎬?].RootFolder.Url + "/" + properties.AfterUrl.Substring(properties.AfterUrl.IndexOf("/") + 1), true);
web.Folders["DocLib"].Files[properties.BeforeUrl].Delete();
this.EnableEventFiring();
}
else
{
properties.Cancel = true;
properties.ErrorMessage = "鍙湁绔欑偣闆嗙鐞嗗憳鍜屽姩鎬佺鐞嗗憳鍙互淇敼鏉$洰";
}
}
}

}




 回复 引用 查看   
#84楼 2009-04-16 19:21 麻将      
问几个问题:
1、如果我是自定义页面然后放上去的一个列表项,程序找的list是找到page去了,这个怎么解决?看了下代码

其中的

private SPList List
{
get
{
return SPContext.Current.List;
}
}
是不是该改成找到的那个ListViewWebpart的List?

2、如果我用spd修改过了视图,就是把视图改成了xsld,listviewwebpart就会变成dataFormWebpart了,smartQuery好像也就不能用了,怎么解决?
3、查询后我在视图中做的筛选就不能用了。。
是我用的版本有点低?

 回复 引用 查看   
#85楼[楼主2009-04-16 23:12 jianyi      
@麻将
1)你放到page库,Current List当然是page库了。当然要改。
2)smartQuerywebpart不知道spd修改过的视图。
3)smartQuery跟过滤好像不能一起用,没那么强大啊。

 回复 引用 查看   
#86楼 2009-07-24 11:01 lxrc[未注册用户]
请问一下jianyi大哥,我如何在IE7中自定义MOSS的注销功能??
 回复 引用   
#87楼[楼主2009-07-24 11:25 jianyi      
@lxrc
你研究下MOSS怎么做的啊~
<asp:LinkButton ID="LbLogin" runat="server" OnClientClick="LoginAsAnother('/_layouts/AccessDenied.aspx?loginasanotheruser=true', 0); return false;"
ForeColor="White">Login As</asp:LinkButton>
<script type="text/javascript">
function LoginAsAnother(url, bUseSource) {
document.cookie = "loginAsDifferentAttemptCount=0";
var ch = url.indexOf("?") >= 0 ? "&" : "?";
url += ch + "Source=/default.aspx?session=reset";
window.location.href = url;
}
</script>

 回复 引用 查看   
#88楼 2009-07-27 09:57 lxrc[未注册用户]
老大。我想在OCS2007中可以扩展的TAB标签中加入MOSS网站中的某个页面。比如:任务列表,我要实现的功能是:某个人在OCS2007上使用自己的帐号登录之后,可以在OCS2007扩展的标签页中获取自己的任务信息。且还可以点击任务标题查看不用再次输入帐户信息。
 回复 引用   
#89楼[楼主2009-07-27 22:00 jianyi      
@lxrc
可以啊。
客户端加入域,标签页面采用集成windows认证。扩展OCS标签页很多资料的。

 回复 引用 查看   
#90楼 2009-07-28 09:31 lxrc[未注册用户]
@jianyi
客户端已经加入域了,我在标签页中链接了MOSS网站中的某个页面。可是点击这个页面中的某个链接进入另一个页面时还需要再次输入帐号和密码。你说是不是OCS与MOSS网站用的COOKIES不一样。

 回复 引用   
#91楼[楼主2009-07-28 10:28 jianyi      
@lxrc
跟Cookie没关系,将OCS标签页所在的url加入客户端首信站点,设置自动发送当前用户名密码。

 回复 引用 查看   
#92楼 2009-08-31 10:01 lxrc[未注册用户]
我问一下,这个查询部件,有时候放在MOSS下重启一下IIS,这个部件所在的页面却出现403错误,这是怎么回事??????????
 回复 引用   
#93楼 2009-08-31 12:26 lxrc[未注册用户]
Moss2007 SP1之后,不能访问带JS文件的日历控件,如何解决??
 回复 引用   
#94楼[楼主2009-08-31 12:47 jianyi      
@lxrc
403错误---没碰到过,这个现象经常出现吗?
SP1之后,不能访问带JS文件的日历控件--是指日期类型的查询出不来?SP1上未作测试,这儿可以下载到完整的代码:http://camlquery.codeplex.com/ , 看看自己能否改改吧。

 回复 引用 查看   
#95楼 2009-08-31 13:14 lxrc[未注册用户]
就是必须是管理员帐号才能访问JS代码,匿名用户访问时则要输入管理员帐号才能访问。
 回复 引用   
#96楼[楼主2009-08-31 14:26 jianyi      
@lxrc
应该是文件权限的问题:
1)找到那个js文件的虚拟目录,设置其允许匿名访问
2)找到服务器上那个js文件,设置everyone可以读取

 回复 引用 查看   
#97楼 2009-09-04 14:35 pkiddy      
任务列表使用正常 其他列表要再弄代码
如果做的再人性化一点就更好了
希望:部署好这个部件 然后在其设置里面 可以设置 需要查询的列
过滤的 caml 语句等.

 回复 引用 查看   
#98楼[楼主2009-09-04 15:16 jianyi      
@pkiddy
haha,我们项目里用的版本就是这样的,可以直接设置查询列。
免费发布的这个版本优点是可以灵活控制布局,但是一定要写一个用户控件。

 回复 引用 查看   
#99楼 2009-09-11 09:07 pkiddy      
@jianyi
非常感谢你的控件和代码

因为以前一直从事脚本和c++开发
现在还不太会搞这个还在学习中
拿到你的代码自己也还没作出自己控件

我接触moss一年来,前面一直在搞基础实施
开发最近才多起来 感觉这个平台实在是大
本人最近用脚本写了个域管理系统
有机会多交流下 如果愿意的话可以交流下实施或管理成果

http://www.wood-son.com/

谢谢

 回复 引用 查看   
#100楼 2009-09-11 11:07 lxrc[未注册用户]
jianyi大哥,我现在要开发一个WebPart,这个WebPart是这样的:
就是我想把OCS中所有的用户(大约有2000多个)都显示在一个页面上,且可以分组,收缩。这样不会占用页面很大面积。而SharePoint中自带的“网站用户WebPart”不能分组,也不能收缩,如果用户太多的话,会拉的很长且找某个用户也不容易。
我的想法是再做一个WebPart能实现自带的网站WebPart上面的功能(有用户在线状态的小图标,且还可以点击出现下拉菜单发送信息进行对话),再则就是能够进行分组。大哥,你看能实现吗?用什么方法可以实现?您教教我好吗?

 回复 引用   
#101楼[楼主2009-09-11 12:33 jianyi      
@lxrc
1)你可以Reflect一下默认的那个webpart的代码看看它是怎么实现的(在线图标)。
2)可以考虑用TreeView,异步加载。

 回复 引用 查看   
#102楼 2009-09-18 14:45 lxrc[未注册用户]
老大,我现在遇到了一个郁闷的问题,只好又来麻烦jianyi大哥了,就是在OCS2007中定制标签页时,可以获取当前登录的用户的个人信息,我使用的是a.aspx?userid=sip:lbj@ze.local地址后面的lbj做为参数来获取数据的,个人信息是能获取到了,但又存在另外一个问题就是安全性问题,假如我不登录OCS2007,直接在浏览器里输入
a.aspx?userid=sip:lbj@ze.local,同样可以获取lbj的个人信息。---请问yianyi大哥,有什么好的办法解决吗??小弟急等中................

 回复 引用   
#103楼[楼主2009-09-18 16:49 jianyi      
@lxrc
tab页面启用集成window身份认证(只要页面,tabconfig.xml还要可以匿名访问),然后通过Page.Identity.Name获取current user

 回复 引用 查看   
#104楼 2009-09-22 14:46 lxrc[未注册用户]
@jianyi
引用jianyi:
@lxrc
tab页面启用集成window身份认证(只要页面,tabconfig.xml还要可以匿名访问),然后通过Page.Identity.Name获取current user


jianyi大哥,你教我上面方法,虽然实现了安全上的验证,可每次登录OCS进入Tab的WEB页面时,还得必须再次输入用户名和密码。这个不是最终的解决方案,客户不认可呀。想哭!!!

 回复 引用   
#105楼[楼主2009-09-22 16:04 jianyi      
@lxrc
客户端没加入域?加入域,设置IE自动发送用户名密码。应该没其他办法了。

 回复 引用 查看   
#106楼 2010-03-21 11:28 pkiddy      
引用jianyi:
@pkiddy
haha,我们项目里用的版本就是这样的,可以直接设置查询列。
免费发布的这个版本优点是可以灵活控制布局,但是一定要写一个用户控件。

你好 我又来了 这页回复太多 好卡

我对布局修改了下 我手动实现了下拉框
代码是
加入
.......
void Page_Load()
{
fieldName.Items.Clear();
fieldName.Items.Insert(0,new ListItem("项目名称", "项目名称"));
fieldName.Items.Insert(1,new ListItem("客户", "客户"));
}
...
<td>
搜索: <asp:DropDownList runat="server" id="fieldName"></asp:DropDownList>
</td>
.....

然后 用户会得到一个下拉框 需要查哪个字段就就选那个
然后 搜索根据下拉框 查询得到结果

现在希望在webpart 配置区域 传入需要布置控件的字段
也就是能否在输入布局路径处(LayoutControlPath) 再添加一个属性 指定要被选搜索字段
上面就变成传入 项目名称 和 客户字段 给布局文件
以后就是直接 在编辑页面上修改即可 不用再每次写布局文件到服务器
希望帮忙看看 如何设置参数 传递给布局文件
我顾及的东西太杂 不太精通 希望得到指教
十分感谢 盼复

 回复 引用 查看   
#107楼[楼主2010-03-21 16:38 jianyi      
@pkiddy
WebPart可以支持复杂的配置,你只需要配置要查询的字段,然后按照不同的字段输出不同的查询控件即可。

 回复 引用 查看   
#108楼 2010-03-24 15:10 pkiddy      
引用jianyi:
@pkiddy
WebPart可以支持复杂的配置,你只需要配置要查询的字段,然后按照不同的字段输出不同的查询控件即可。

这个设置能否在 最终用户设计界面上 设置呢 就像你设置 布局文件路径一样 我比如 我想输入 "项目名称|客户" 然后 布局文件里面就自动产生了 这两项的下拉控件 不知道这个这么添加
能否提示下 我该着手修改代码哪个部分呢?
感谢回复

 回复 引用 查看   
#109楼[楼主2010-03-24 15:21 jianyi      
@pkiddy
核心是你要用代码生成布局文件,布局文件是个UserControl,UserControl也就是一个类,你要用代码生成这个类。生成这个类需要一些配置信息,如那些字段需要查询,这个配置信息利用webpart的editpart去实现。你要自己实现那个查询WebPart,重写其查询控件加载的逻辑---默认的加载逻辑是通过加载一个UserControl实现的。

 回复 引用 查看   
#110楼 2010-03-29 23:11 pkiddy      
引用jianyi:
@pkiddy
核心是你要用代码生成布局文件,布局文件是个UserControl,UserControl也就是一个类,你要用代码生成这个类。生成这个类需要一些配置信息,如那些字段需要查询,这个配置信息利用webpart的editpart去实现。你要自己实现那个查询WebPart,重写其查询控件加载的逻辑---默认的加载逻辑是通过加载一个UserControl实现的。

感谢,我先试试,有结果再来看。

 回复 引用 查看   
#111楼 2010-06-12 16:07 donson      
zhang 大侠, 我在webpart中动态创建 QueryControl,帮忙解决一下。
谢谢!

Unhandled Execution Error:
Object reference not set to an instance of an object.
at CodeArt.SharePoint.SmartQuery.QueryControl.CreateChildControls()
at System.Web.UI.Control.EnsureChildControls()
at System.Web.UI.Control.PreRenderRecursiveInternal()
at System.Web.UI.Control.PreRenderRecursiveInternal()
at System.Web.UI.Control.PreRenderRecursiveInternal()
at System.Web.UI.Control.PreRenderRecursiveInternal()
at System.Web.UI.Control.PreRenderRecursiveInternal()
at System.Web.UI.Control.PreRenderRecursiveInternal()
at System.Web.UI.Control.PreRenderRecursiveInternal()
at System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)

 回复 引用 查看   
#112楼 2010-06-12 16:26 donson      
已经好了,谢谢jianyi.
 回复 引用 查看   
#113楼 2010-10-25 12:38 Benny2010      
你好,我想问一下,我今天用了你的控件,来查询PDF的文档库名称,查询不成功,总是提示没有任何信息。
 回复 引用 查看   
#114楼[楼主2010-10-25 13:18 jianyi      
@Benny2010
查询PDF的文档库名称?只能查文档属性。确认下字段名。

 回复 引用 查看   
#115楼 2010-10-25 14:45 Benny2010      
@jianyi
已经好了,我的字段名称写错了,谢谢。

现在问一个额外的问题,

用户进入列表后,不想看到任何文档,只想通过查询来找相应的文档。我设置了视图的过滤条件,但是这时候查询也不找不到如何文档了,有什么好的方法吗?或者其它的方式,谢谢

 回复 引用 查看   
#116楼[楼主2010-10-25 14:51 jianyi      
@Benny2010
那是因为SmartQuery的查询条件始终会结合视图的查询条件。
你可以仿照SmartQuery的实现,在没查询前,把ListViewWebpart隐藏掉。

 回复 引用 查看   
#117楼 2010-10-25 17:27 Benny2010      
@jianyi
弱弱的问一下,怎样隐藏ListViewWebpart,有没有参考手册,或者方式呀。
谢谢

 回复 引用 查看   
#118楼[楼主2010-10-25 17:31 jianyi      
@Benny2010
没。

 回复 引用 查看   
#119楼 2010-10-25 17:33 Benny2010      
@jianyi
如果是你来做的话,如何做,呵呵,谢谢。

还有个问题,我不想模糊查询,如何修改。你的源码,我已经下载过来了。

 回复 引用 查看   
#120楼[楼主2010-10-25 17:42 jianyi      
@Benny2010
你看源码吧,SmartQuery连ListViewWebPart的查询条件都改,你不就是改个Visialbe属性吗?

 回复 引用 查看   
#121楼 2010-10-25 20:34 Benny2010      
好的,谢谢。
你说的隐藏ListViewWebPart就是修改它的Visialbe属性。

 回复 引用 查看   
#122楼 2010-10-25 20:36 Benny2010      
再问一下,这个在2010上可以用吗,谢谢
 回复 引用 查看   
#123楼 2010-10-26 13:58 Benny2010      
你好,我加了属性了,但是不起作用,是加的不对吧。你帮我看看,谢谢

Microsoft.SharePoint.WebPartPages.ListViewWebPart listWp = (Microsoft.SharePoint.WebPartPages.ListViewWebPart)wp;

if (String.Compare(listWp.ListName, listId, true) != 0) continue;

listWp.Visible = false;

if (String.IsNullOrEmpty(qxml))
{
listWp.ListViewXml = this.List.Views[new Guid(listWp.ViewGuid)].HtmlSchemaXml; //还原
listWp.Visible = true;
}
else
{
XmlDocument doc = new XmlDocument();
doc.LoadXml(listWp.ListViewXml);

ChangeSchemaXmlQuery(doc, qxml);

listWp.ListViewXml = doc.InnerXml;
listWp.Visible = true;
}

 回复 引用 查看   
#124楼[楼主2010-10-26 14:15 jianyi      
@Benny2010
listWp.Visible = false; 会不起作用吗? 自己debug吧

 回复 引用 查看   
#125楼 2010-10-26 14:39 Benny2010      
不起作用:我是在这个方法里面加的
private void SetCurrentListViewSchemaQuery(string qxml)
{
if (String.IsNullOrEmpty(qxml)) return;

string listId = "{" + this.List.ID.ToString() + "}";

foreach (WebPart wp in this.Zone.WebParts)
{
if (wp is Microsoft.SharePoint.WebPartPages.ListViewWebPart)
{
Microsoft.SharePoint.WebPartPages.ListViewWebPart listWp = (Microsoft.SharePoint.WebPartPages.ListViewWebPart)wp;

if (String.Compare(listWp.ListName, listId, true) != 0) continue;

listWp.Visible = false;

if (String.IsNullOrEmpty(qxml))
{
listWp.ListViewXml = this.List.Views[new Guid(listWp.ViewGuid)].HtmlSchemaXml; //还原
listWp.Visible = true;
}
else
{
XmlDocument doc = new XmlDocument();
doc.LoadXml(listWp.ListViewXml);

ChangeSchemaXmlQuery(doc, qxml);

listWp.ListViewXml = doc.InnerXml;
listWp.Visible = true;
}

break;
}
}
}

 回复 引用 查看   
#126楼 2010-10-28 16:04 Benny2010      
我想用JS来取codeArt:QueryControl runat="server" FieldName="名称" id="f1" ShowTitle="false"

这个控件的值,但是取不到

 回复 引用 查看   
#127楼 2011-02-15 16:27 Benny2010      
你好,我在2010上编译了源代码,然后再添加WEBPART的时候,找不到SMARTWEBPART,是什么问题,谢谢
 回复 引用 查看   
#128楼[楼主2011-02-15 20:01 jianyi      
@Benny2010
需要手工将webpart添加到webpart库先。

 回复 引用 查看   
#129楼 2011-02-15 22:07 Benny2010      
谢谢,我已经把WEBPART加好了,但是查询不起作用了。
而且把ROBIN的文档库的选项屏蔽掉了,不知道是怎么回事,谢谢。

 回复 引用 查看   
#130楼[楼主2011-02-16 10:05 jianyi      
@Benny2010
默认SmartQueryWebpart不支持2010,需要自己改:http://camlquery.codeplex.com/workitem/9619

 回复 引用 查看   
#131楼 2011-03-22 15:06 Benny2010      
我想问一个问题,
我现在用2010 SPD做的WORKFLOW,INFOPATH做的表单,我想在在任务编辑表单,把INFOPATH嵌入进去,但是我在SPD中单击相关的工作流的任务编辑表单XSN,没有任何反应,这样的话,经理在审批的时候,就看不到表单的信息,还请您帮忙看看。

谢谢

 回复 引用 查看   
评论共2页: 上一页 1 2