вы не можете "скопировать" поле из sitecoll A в sitecoll B, вы должны воссоздать его. Обычный способ сделать это - на самом деле использовать функцию, которая создает поле поиска, но я полагаю, что это не тот случай (это должно было быть сделано в начале, в будущем я предлагаю, как вы создаете поля, видя, как это происходит). метод многоразовый).
Что вам нужно сделать, так это в объекте SPSite b sitecoll создать новое поле, используя исходное поле field.SchemaXml
, таким образом, вы получите всю необходимую информацию для воссоздания поля с нуля в sitecoll b. вам нужно использовать AddFieldAsXml
коллекции SPSite.Fields, если вы хотите установить внутреннее имя нового поля, поскольку свойство InternalName доступно только для чтения.
Читайте как здесь
Проверьте, существует ли поле:
using(SPSite targetSite = new SPSite("urloftargetsite"))
{
using(SPWeb targetWeb = sourceSite.OpenWeb())
{
if(!targetWeb.Fields.ContainsField(originalField.InternalName))
{
targetWeb.Fields.AddFieldAsXml("caml string here");
}
}
}