0

ライブラリにレコードを追加する方法を理解しました。私が理解しようとしている唯一のことは、ルックアップリストからのユーザーの選択をどのように(またはおそらくどこに)保存するかです。

以下のコードスニペットでは、新しいリストアイテムを保存しています。エラーなしで保存されますが、フィールド「AwardType」と「AwardReason」はルックアップフィールドであり、エラーは発生しませんが、何も保存されません。ユーザーからのルックアップフィールド選択に保存するにはどうすればよいですか?

using (SPSite site = new SPSite(SPContext.Current.Web.Url))
{
    using (SPWeb web = site.OpenWeb())
    {
        using (FileStream fs = (new FileInfo(fileUpload.PostedFile.FileName)).OpenRead())
        {
            SPList list = web.Lists["Awards"];
            Hashtable ht = new Hashtable();
            ht.Add("wfRecipientName", txtRecipientName.Text);
            ht.Add("Office", txtOrganization.Value);
            ht.Add("AwardType", ddAwardTypes.SelectedValue);
            ht.Add("AwardReason", ddAwardReasons.SelectedValue);

            SPFile destfile = list.RootFolder.Files.Add(fileUpload.FileName, fs, ht, false);
        }
    }
}
4

3 に答える 3

3

ルックアップの値の保存は、SPFieldLookupValue(ID、Value)を使用して行われます。

このメソッドによって返されるオブジェクトは、ハッシュテーブルを介したプロパティではなく、リストアイテムフィールドに格納する必要があります。以下の私の例では、Awardsリストはドキュメントライブラリであり、AwardTypeはタイプルックアップのフィールドです。

SPList list = web.Lists["Awards"];
Hashtable ht = new Hashtable();
ht.Add("Office", "Chicago"); // standard property
SPFile file = list.RootFolder.Files.Add(System.IO.Path.GetFileName(FileUpload1.PostedFile.FileName), fs, ht, true);
SPListItem item = file.Item; // get the item for the just-added file.

// assign the lookup column using SPFieldLookupValue
item["AwardType"] = new SPFieldLookupValue(
    Int32.Parse(DropDownList1.SelectedValue),
            DropDownList1.Text);
item.Update();  // to save the lookup column.
于 2012-09-07T06:07:59.067 に答える
0

興味深いことに、ライン

SPListItem item = file.Item; // get the item for the just-added file.

キーです。

以下のコードを使用すると問題が発生しました-ルックアップが一貫して更新されませんでした!?

file.Item["AwardType"] = new SPFieldLookupValue(
    Int32.Parse(DropDownList1.SelectedValue),
            DropDownList1.Text);
于 2013-03-08T00:07:02.620 に答える
0

ルックアップの値ではなく、SPFieldLookUpValueを文字列としてHashTableに追加する必要があります。int、string、date以外のHashTableに格納されているプロパティは、ドキュメントの作成時に解析されません。

    SPFieldLookupValue v = new SPFieldLookupValue(item["lookUpField"].ToString());
Hashtable documentProperties = new Hashtable();
documentProperties.Add("key", v.ToString());
 SPFile file = docLib.RootFolder.Files.Add("fileName", memoryStream, documentProperties, true);

SPUserのような複雑なオブジェクトでも同じことができます。

SPFieldUserValue userValue = new SPFieldUserValue(web, web.CurrentUser.ID, web.CurrentUser.LoginName);
  documentProperties.Add("SPuSER", userValue.ToString());
于 2014-12-10T10:06:07.597 に答える