0

私は SharePoint を初めて使用します。SpFieldChoice から派生したカスタム フィールド タイプを持っています。私のフィールドではユーザーが複数の値を選択できます。古いカスタム列を新しい列に置き換え、古い列のデータを新しい列にコピーする必要があります。 . 古い列では、ユーザーがチェックボックスをオンにして複数の値を選択することもできます。データを新しいフィールドにコピーする次のコードがあります。

foreach (SPListItem item in list.Items)
{
    if (item[oldField.Title] == null)
    {
        item[newFld.Title] = string.Empty;
        item.Update();
    }
    else
    {
        string[] itemvalues = item[oldField.Title].ToString().Split(new string[] {";#"}, StringSplitOptions.None);
        StringBuilder multiLookupValues = new StringBuilder();
        multiLookupValues.Append(";#");
        for (int cnt = 0; cnt < (itemvalues.Length) / 2; cnt++)
        {
           multiLookupValues.Append (itemvalues[(cnt * 2) + 1].ToString() + ";#");
        }
        item[newFld.Title] = multiLookupValues.ToString();  
        item.SystemUpdate(false) ;
    }
}

このコードは、結果の stringbuilder の長さが 255 文字未満になるまで正常に機能しますが、この長さが 255 文字を超えると、次の例外が発生します。選択値が無効です。選択フィールドに無効なデータが含まれています。値を確認して、もう一度やり直してください。

データを SpFiledChoice にコピーする他の方法はありますか? どうすればこの問題を解決できますか? 私を助けてください。

4

1 に答える 1

0

文字列が値 += を超えないように、更新を複数回行います。ただし、値が 255 を超えることができないという問題がある場合は、選択方法を検討する必要があります。長さを超えていて、値を複数回更新してもうまくいかない場合 (サイト列にも同じ制限があります)、次善の策を講じることができます。

1) 選択肢を保持する新しいリストを作成する 2) 宛先フィールドをルックアップに変更する 3) 各アイテムに応じて更新する (ルックアップ フィールドから ID を取得する)

これに制限はありません。

デビッド・スターリング

david_sterling@sterling-consulting.com

www.sterling-consulting.com

于 2012-12-09T13:55:08.980 に答える