Использование ItemAdding EventReceiver для обновления нескольких полей на основе значений из одного поля
-
10-12-2019 - |
Вопрос
У меня есть пользовательское SPField SharePoint 2010 типа SPFieldMultiColumn.Данные в этом столбце хранятся в виде строки с разделителями, которая анализируется и отображается в удобочитаемом формате в большинстве областей (просмотр списка, "просмотр свойств" и т.д.).Исходные данные выглядят следующим образом (формулировка изменена):
;#0;#LABEL1;#True;#GUID;#DESCRIPTION_OF_LABEL;#;#1;#LABEL2;#True;#GUID;#DESCRIPTION_OF_LABEL2;# ...
и так далее.Описания довольно длинные, что делает эту строку длиной в сотни символов и действительно уродливой, если ее не разобрать и не отрисовать.Проблема с этим заключается в том, что в определенных частях системы мы не можем контролировать рендеринг поля.Наиболее распространенная проблема, которую мы видим, связана с представлением таблицы данных, где отображаются необработанные данные, которые выглядят просто ужасно и делают таблицу данных практически непригодной для пользователей.Эти данные также отображаются в электронных письмах с предупреждениями и результатах поиска.
Мне было поручено сделать это "красивее", и мое решение состояло в том, чтобы добавить дополнительный столбец "отображать" и скрыть столбец "данные".Когда элемент обновляется или добавляется, у меня есть приемники событий, которые преобразуют и перемещают данные в поле отображения, что хорошо выглядит в представлении таблицы данных и так далее.
Все это отлично работает, за исключением того факта, что требуется 2 вызова Update () для каждого элемента, который получает эти метаданные.Один - когда заполняется поле "данные", а другой - когда приемник событий копирует данные на дисплей.
Наши производственные фермы (и службы контроля качества, но не для тестирования или разработки) используют удаленное хранилище больших двоичных объектов (RBS), и наша операционная группа обнаружила, что всякий раз, когда этот столбец (или, я думаю, любой другой столбец) обновляется в документе office (doc, docx и т.д.), Это приводит к появлению нового большого двоичного объекта в файловой системе.Таким образом, поскольку решение существует на сегодняшний день, новый загруженный файл сгенерирует 2 больших двоичных объекта (один для загрузки, другой для применения этих метаданных).С помощью этого нового eventreceiver мы теперь сгенерируем 3 больших двоичных объекта, что неприемлемо для нашей операционной группы (у нас нет на 50% больше места на диске для поддержки этого).
Об "исправлении" RBS не может быть и речи - поэтому мне нужно каким-то образом обновить оба этих столбца одновременно, а не обновлять один, который запускает приемник событий для обновления другого.
Есть ли какой-нибудь способ обновить 2 пользовательских SPF-поля с помощью 1 вызова функции Update()?
TL;DR:Пользовательское решение с 2 пользовательскими SPF-полями - одно обновляется через форму "редактировать", другое - через приемник событий (второе полностью зависит от первого в отношении своих данных).Как я могу обновить оба без использования приемника событий (только с одним вызовом Update()?)
Решение
Это звучит так, как будто вы используете ItemUpdated
событие.Если вы использовали ItemUpdating
Я полагаю, что вы могли бы изменить AfterProperties вместо выполнения второго обновления.
Это может быть вам полезно: NBSP:Приемники событий
Другие советы
При создании столбца поиска вы можете показать дополнительные столбцы из списка поиска.
Похоже, что вы хотите, чтобы вот список с вашей этикеткой / описанием, а затем столбец поиска в столбце метки и имеет описание в качестве дополнительного поля.Я не знаю, будет ли это совершенно очистить в виду описания данных, но это было бы улучшением.
Другое потенциальное решение этой проблемы - это рассчитанная колонна, но из того, что я вижу из вашего сценария, он не подходит.