从同一上下文加载两个列表,并在其中一个列列中搜索特定值 [英] Load two lists from same context and search for specific value in one of the list columns

查看:59
本文介绍了从同一上下文加载两个列表,并在其中一个列列中搜索特定值的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有2个共享点列表,其名称存储在包变量中:Library和List.On库,我上传了一些excel文件,在DeliveryParam上,我有一些数据包含2个字段:Email和Flag。我应该这样做查找DeliveryParam的电子邮件列,其中
a与电子邮件匹配(var email =(string)Dts.Variables [" User :: AT_Email"]。Value;)变量值,如果找到匹配,我应该提取相应的标志值(来自DeliveryParam列表)变成一个变量并在下一段代码中使用它。 


我实际上已经想通了,但请告诉我是否有其他最好和最快的在列表项字段"电子邮件"中对搜索字符串用户名进行比较的方法。


               

public void Main()

{

            var site =(string)Dts.Variables [" $ Package :: Site"]。Value;

            var library =(string)Dts.Variables [" $ Package :: Library"]。Value;

            var DeliveryParam =(string)Dts.Variables [" $ Package :: List"]。Value;

            var directory =(string)Dts.Variables [" $ Package :: Directory"]。Value;

            var EmailFlag ="" ;;

            var username =(string)Dts.Variables [" User :: AT_Uname"]。Value;



            var email =(string)Dts.Variables [" User :: AT_Email"]。Value;



            var path = Path.Combine(目录,文件名);

           试试
            {

$
  &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; var documentName = Regex.Replace(filename," [#%& *:<>?/ |]",String.Empty);
$


&NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; var context = new ClientContext(site);



  &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; var securePassword = new SecureString();

  &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; var password =" abcd12#";
$


  &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; foreach(charc in password.ToCharArray())securePassword.AppendChar(c);

  &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; context.Credentials = new SharePointOnlineCredentials(@" xyz@abc.com",securePassword);



  &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; var list = context.Web.Lists.GetByTitle(library);
$


List Deliverylist = context.Web.Lists.GetByTitle(DeliveryParam);

  &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; CamlQuery camlQuery = new CamlQuery();

  &NBSP; &NBSP; &NBSP;   ListItemCollection collListItem = Deliverylist.GetItems(camlQuery);


  &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP;

  &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; context.Load(list.RootFolder);


context.Load(
$
        ;   collListItem,items => items.Include(

          item => item [" Email" ;],

          item => item [" Flag"]));

  &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; context.ExecuteQuery();


foreach(collListItem中的ListItem oListItem)

  &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; {

  &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP;  

  &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; bool found = oListItem [" Username"]。ToString()。Equals(username);

  &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; if(found)

  &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; {

  &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; EmailFlag = oListItem [" Flag"]。ToString();

  &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP;休息;

  &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; }¥b $ b  &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP;否则

  &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; {EmailFlag =" No" ;; }¥b $ b  &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; }

  &NBSP; &NBSP; &NBSP; &NBSP; &NBSP;  }


}







&NBSP; &NBSP; &NBSP;&NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP;&NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP;&NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP;&NBSP; &NBSP; &NBSP; &NBSP; &NBSP;  

解决方案


 


< p style ="">我认为您可以根据用户名进行查询,如果ListItemCollection collListItem = Deliverylist.GetItems(camlQuery)返回大于0,则查找匹配项。


caml查询将根据您的字段类型而有所不同,如果您需要进一步的帮助,可以共享您的列表定义。


以下是一些供您参考的链接(基于单个过滤器)行文本字段)。


https://sharepoint.stackexchange.com/questions/153838/csom-camlquery -is-returns-data-i-dont-believe-it-should


https://karinebosch.wordpress.com/2012/02/03/caml-and -the-client-object-model /


最好的问候,




I have 2 sharepoints lists whose names are stored in package variables: Library and List.On library,i upload some excel files and on DeliveryParam,i have some data with 2 fields: Email and Flag.I am supposed to look up the Email column of DeliveryParam for a match with email(var email = (string)Dts.Variables["User::AT_Email"].Value;) variable value and if match found,i should extract the corresponding Flag value(from DeliveryParam List) into a variable and use it in next piece of code. 

I actually figured out ,but pls let me know if there is other best and fastest method to do comparison of search string username within the list item field "Email".

               

public void Main()
{
            var site = (string)Dts.Variables["$Package::Site"].Value;
            var library = (string)Dts.Variables["$Package::Library"].Value;
            var DeliveryParam = (string)Dts.Variables["$Package::List"].Value;
            var directory = (string)Dts.Variables["$Package::Directory"].Value;
            var EmailFlag = "";
            var username = (string)Dts.Variables["User::AT_Uname"].Value;

            var email = (string)Dts.Variables["User::AT_Email"].Value;

            var path = Path.Combine(directory, filename);
            try
            {

                var documentName = Regex.Replace(filename, "[#%&*:<>?/|]", String.Empty);

                var context = new ClientContext(site);

                var securePassword = new SecureString();
                var password = "abcd12#";

                foreach (char c in password.ToCharArray()) securePassword.AppendChar(c);
                context.Credentials = new SharePointOnlineCredentials(@"xyz@abc.com", securePassword);

                var list = context.Web.Lists.GetByTitle(library);

List Deliverylist = context.Web.Lists.GetByTitle(DeliveryParam);
                CamlQuery camlQuery = new CamlQuery();
         ListItemCollection collListItem = Deliverylist.GetItems(camlQuery);

               

                context.Load(list.RootFolder);

context.Load(
                 collListItem,items => items.Include(
                 item => item["Email"],
                 item => item["Flag"]));

                context.ExecuteQuery();

foreach (ListItem oListItem in collListItem)
                {
                   
                    bool found = oListItem["Username"].ToString().Equals(username);
                    if (found)
                    {
                        EmailFlag = oListItem["Flag"].ToString();
                        break;
                    }
                    else
                    { EmailFlag = "No"; }
                }

             }

}



                                                         

解决方案

Hi, 

I think you could query based on username, if ListItemCollection collListItem = Deliverylist.GetItems(camlQuery) returns more than 0, find matches.

The caml query will be different based on your field type, if you need further assistance, you could share your list definition.

Here are some links for your reference(filter based on single line text field).

https://sharepoint.stackexchange.com/questions/153838/csom-camlquery-is-returning-data-i-dont-believe-it-should

https://karinebosch.wordpress.com/2012/02/03/caml-and-the-client-object-model/

Best Regards,

Lee


这篇关于从同一上下文加载两个列表,并在其中一个列列中搜索特定值的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆