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

搜索

 

我参与的团队

随笔分类(100)

My Friends

SilverLight

wss

积分与排名

  • 积分 - 173235
  • 排名 - 358

最新随笔

最新评论

阅读排行榜

评论排行榜

60天内阅读排行

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

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

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

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类库的一个应用把]



Tag标签: wss,moss,列表查询
0
0
(请您对文章做出评价)
« 上一篇:CodeArt.SharePoint.CamlQuery_0.9发布(源码)
» 下一篇:web录音的实现
posted on 2008-02-15 20:42 jianyi 阅读(3350) 评论(105)  编辑 收藏 网摘 所属分类: Sharepoint

FeedBack:
评论共2页: 上一页 1 2 
#6楼 2008-02-20 14:00 eyes[未注册用户]
@jianyi0115
现在是可以正常使用了,用了半天没有发现问题~~~~:-)

  回复  引用    
#7楼[楼主] 2008-02-20 16:08 jianyi0115      
@songcan
访问群体的问题就不清楚了。。。
你要怎么扩展日志列表呢?(技术上可以考虑EventHandler,CustomField,WebPart,SPD修改页面等)。

  回复  引用  查看    
#8楼 2008-02-21 17:40 songcan      
楼主老大我希望用最少或不写代码使用MOSS来完成工作日志的功能,所以想扩展日历列表的功能
  回复  引用  查看    
#9楼[楼主] 2008-02-22 09:42 jianyi0115      
@songcan
日志的功能可以用Audit实现啊,跟日历列表没什么关系吧?

  回复  引用  查看    
#10楼 2008-02-22 16:38 songcan      
楼主老大非常感谢您的解答,我要做的不是日志功能,是工作日志,比方说 记录一个人今天干了什么,而且要求领导可以查看,给予批示意见,原本想把日历列表拿过来用,但是发现满足不了需求,所以才想要所以想扩展日历列表的功能,
看了您的列表字段及的控制,功能好强大,不过好像没法选择用户组,有一个问题列表能否指定给某个用户组才能查看,请问列表项能否做到除了创建者本人,其他人都不能删除,谢谢您!

  回复  引用  查看    
#11楼[楼主] 2008-02-22 19:33 jianyi0115      
@songcan
列表字段的控制暂时没做到用户组,以后会添加的。
列表项除了创建者本人,其他人不能删除可以考虑用EventHandler做 ,ItemDeleting方法中判断当前用户是否是创建者,不是的话设置e.Cancel=true,禁止删除 。

  回复  引用  查看    
#12楼 2008-02-25 20:35 songcan      
非常感谢老大的解答,小弟还有一个问题请教,新建一个列表,N个账户可以对列表添加列表项,请问怎样默认显示登陆进入此列表的人添加的列表项,谢谢老大!
  回复  引用  查看    
#13楼[楼主] 2008-02-25 22:49 jianyi0115      
@songcan
你可以试试以下两种方法:
1)列表设置->设置 > 高级设置 ->项目级权限
指定用户可以读取的项目 为 仅自己的项目
2)利用视图来实现:视图的修改条件设为 创建者=[本人]

  回复  引用  查看    
#14楼 2008-02-26 09:32 songcan      
谢谢老大,但我不想这么做,我想打开页面时默认就显示自己的,但可以通过条件去查询别人的,这样做好像做不到
  回复  引用  查看    
#15楼[楼主] 2008-02-26 10:42 jianyi0115      
@songcan
默认显示自己的-》通过修改默认视图过滤条件
查看别人的-》新建一个视图-添加查询控件-可以按照这篇文章来做查询控件

  回复  引用  查看    
#16楼 2008-02-26 12:37 songcan      
多谢老大,查询WebPart很好用,但是假设我需要在按钮中或其他控件中加入自己的逻辑应该怎样做呢?
  回复  引用  查看    
#17楼 2008-02-26 12:52 songcan      
还有就是查询WebPart能对自定义的列表进行查询吗?
  回复  引用  查看    
#18楼 2008-02-26 13:22 songcan      
除了任务列表的AllItem.aspx页面外,其它的列表的AllItem.aspx页面均无法添加
查询WebPart,请问老大是什么原因?

  回复  引用  查看    
#19楼[楼主] 2008-02-26 20:34 jianyi0115      
@songcan
这里将的查询SmartWebPart就是对列表进行查询的。。AllItem.aspx放查询webpart才有意义,其他页面添加了也没用啊,SmartWebPart查询结果要依靠
.aspx的列表控件进行展现的。至于不能添加是因为其他页面不允许进入编辑模式啊。

  回复  引用  查看    
#20楼 2008-02-26 20:58 songcan      
老大您误会我的意思了,除了任务类别的列表外,其他如日历或一般列表的AllItem.aspx页面都无法添加SmartWebPart,不是在其它页面添加
  回复  引用  查看    
#21楼 2008-02-27 16:01 eyes[未注册用户]
楼主有用过SPGridView吗?知道怎样在Code-Behind添加超链接吗?~~~我绑定了一个List的数据,我想点ID号进入对应的DispForm.aspx~~~~~~~
  回复  引用    
#22楼[楼主] 2008-02-27 20:29 jianyi0115      
@songcan
算是一个bug吧,SmartQueryWebPart的LayoutControlPath属性默认是
~/_CONTROLTEMPLATES/CodeArt_ExampleQueryLayout.ascx,
而CodeArt_ExampleQueryLayout.ascx这个布局控件的字段是针对任务的,
其他列表某些字段不存在,所以出错。
只要修改一下CodeArt_ExampleQueryLayout.ascx,把列表不存在的字段对应的QueryControl删掉就可以添加了。
最新版本已经改正这个问题,请重新下载。
http://www.cnblogs.com/Files/jianyi0115/SmartQuery_v1.0.zip

  回复  引用  查看    
#23楼[楼主] 2008-02-27 20:49 jianyi0115      
@eyes
关于SPGridView:
你可以把SPGridView当成GridView来用。
添加超链接可以用模板列,绑定到函数:
<%#BindLink(Container.DataItem)%>
code:
protected string BindLink(object item)
{
SPListItem spItem = item as SPListItem;
return "a href='"+ GetDispFormUrl(item["EncodedAbsUrl"].ToString()) +item.ID+"|' "+item.Title+"/a";
}
private string GetDispFormUrl(string itemUrl)
{
StringBuilder sb = new StringBuilder("");
string[] arr = itemUrl.Split('/');
for (int i = 0; i < arr.Length - 1; i++)
{
sb.Append(arr[i]);
sb.Append("/");
}
return sb.ToString() + "DispForm.aspx?id=" ;
}
//也可以用其他方法获取disform的url。必须写死成相对路径。

  回复  引用  查看    
#24楼 2008-02-28 09:08 eyes[未注册用户]
为什么我在.aspx里面加入控件的时候如下所示,Columns标签里只有
SPBoundField,SPMenuField两种控件~~~没有模板列?~~~

<SharePoint:SPGridView ID="SPGridView1" runat="server" AutoGenerateColumns="False" Width="100%">
<Columns>
<SharePoint:SPBoundField></SharePoint:SPBoundField>
<SharePoint:SPMenuField></SharePoint:SPMenuField>
</Columns>
<AlternatingRowStyle CssClass="ms-alternating" />
</SharePoint:SPGridView>

  回复  引用    
#25楼 2008-02-28 09:57 eyes[未注册用户]
楼主给的代码有点小BUG,我改写了一下:-)
protected string BindLink(object item,strig linkparam,string linkdisp)
{
SPListItem spItem = item as SPListItem;
return "<a href='"+ GetDispFormUrl(spItem["EncodedAbsUrl"].ToString()) +spItem[linkparam]+"'> "+spItem[linkdisp]+"</a>";
}

不过我是建了一个TreeView,在设置node的text时调用BindLink的~~~

  回复  引用    
#26楼[楼主] 2008-02-28 15:39 jianyi0115      
@eyes
不会没有没有模板列吧?只是没有提示。手工写拉~
有bug很正常,在这个编辑器里写的啊。html显示不出来,只能转义...

  回复  引用  查看    
#27楼 2008-02-29 16:53 eyes[未注册用户]
谢谢楼主,问题解决了:-)
  回复  引用    
#28楼 2008-03-05 17:22 songcan      
老大您好,SmartQuery WEBPART能否跟过滤列表结合起来呢?
假设要查询的列表有三个字段,姓名、性别、出生日期
当性别下拉框我选择男的时候,列表项自动过滤为性别为男的列表项显示,并且当我点击查询按钮的时候,我选中的性别选项一样作为查询条件传送

我要的就是 SmartQuery WEBPART +Filter WEBPART的效果,请问这个
怎么实现?

  回复  引用  查看    
#29楼[楼主] 2008-03-05 20:17 jianyi0115      
@songcan
SmartQuery内部设计为页面Postback的时候发送查询条件给当前页面的ListViewWebPart,你可以在布局控件中加个DropDownList,设为AutoPostback=true.然后重载这个属性:
override CamlExpression QueryExpression{get;}
实现自己的查询逻辑。

当然,你也可以不采用SmartQuery,参考这篇文章:
http://www.cnblogs.com/jianyi0115/archive/2008/02/05/1034505.html
从底层实现。

  回复  引用  查看    
#30楼 2008-03-07 16:30 eyes[未注册用户]
例如我打开一个列表的allitems.aspx,然后做了好几个筛选和排序操作,能否设置一个button,点击的时候通过获取listviewxml的query节点来获取我当前的所有筛选和排序设置?~~~
如果可以的话是不是可以做到这个功能:通过点击一个button,以当前筛选和排序设置保存成一个个人视图。我觉得这个功能比较人性化,所见即所得:-)

  回复  引用    
#31楼[楼主] 2008-03-07 20:01 jianyi0115      
@eyes
可以的,只要你生成需要的Caml查询语句,然后修改listViewWebPart的 listviewxml属性的query节点即可。

  回复  引用  查看    
请问老大.如果查询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自动发送用户名密码。应该没其他办法了。

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