Использование ItemAdding EventReceiver для обновления нескольких полей на основе значений из одного поля

sharepoint.stackexchange https://sharepoint.stackexchange.com//questions/53731

Вопрос

У меня есть пользовательское 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:Приемники событий

Другие советы

При создании столбца поиска вы можете показать дополнительные столбцы из списка поиска.

Похоже, что вы хотите, чтобы вот список с вашей этикеткой / описанием, а затем столбец поиска в столбце метки и имеет описание в качестве дополнительного поля.Я не знаю, будет ли это совершенно очистить в виду описания данных, но это было бы улучшением.

Другое потенциальное решение этой проблемы - это рассчитанная колонна, но из того, что я вижу из вашего сценария, он не подходит.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с sharepoint.stackexchange
scroll top