Как добавить вычисляемое поле в AllContentType? - PullRequest
1 голос
/ 23 февраля 2012

Сегодня у меня проблема после того, как я создал вычисляемое поле.Кажется, нет никакого способа добавить AllContentTypes.И DefaultView, может быть, я справлюсь с этим.И я также видел этот метод:

spList.Fields.AddFieldAsXml(spFieldUser.SchemaXml, True, SPAddFieldOptions.AddToAllContentTypes);

Но в этом случае я не уверен, смогу я его использовать или нет.Потому что мой код:

                      //SPField tempSPField = spList.Fields.CreateNewField(createSPColumnObject.ColumnType, createSPColumnObject.ColumnName);//We can not use this code line for creating Calculated (there is no constructor for this)
                        SPFieldCollection collFields = spList.Fields;
                        string strSPFieldCalculatedName = collFields.Add(createSPColumnObject.ColumnName, SPFieldType.Calculated, false);
                        if (createSPColumnObject.IsAddedToDefaultView)
                        {
                            SPView spView = spList.DefaultView;
                            spView.ViewFields.Add(strSPFieldCalculatedName);
                            spView.Update();
                        }               
                        SPFieldCalculated spFieldCalculated = null;
                        //                            
                        spFieldCalculated = (SPFieldCalculated)collFields[createSPColumnObject.ColumnName];
                        spFieldCalculated.ShowInDisplayForm = true;
                        //spFieldCalculated.ShowInEditForm = true;
                        spFieldCalculated.ShowInListSettings = true;
                        //spFieldCalculated.ShowInNewForm = true;
                        spFieldCalculated.ShowInViewForms = true;
                        //
                        spFieldCalculated.Description = createSPColumnObject.ColumnDescription;
                        spFieldCalculated.Formula =  string.Format(@"={0}",createSPColumnObject.CalcFormula);
                        spFieldCalculated.Update();                            
                        //spList.Fields.AddFieldAsXml(spFieldCalculated.SchemaXml, createSPColumnObject.IsAddedToDefaultView, SPAddFieldOptions.AddToAllContentTypes);// also use this code line because we will get an exception with a duplicate column ID.

                        spFieldCalculated.OutputType = SPFieldType.Text;
                        spList.Update();

Я полностью создал столбец Calculated, но как я могу добавить его ко всем типам содержимого?каждый мог бы помочь мне с этим?Кстати, для DefaultView, я сделал, как выше, верно?Может ли каждый дать мне знать об этом?

Я просто беспокоюсь о том, что у всех возникло недоразумение?Или обзор с отсутствующим кодом.Так что все могли бы, пожалуйста, взглянуть на мой код ясно?Спасибо всем.

Большое спасибо, :)

Стэндли Нгуен

1 Ответ

0 голосов
/ 06 марта 2012

Я не уверен, что полностью понимаю, что вы пытаетесь сделать, однако я могу пролить свет на некоторые части того, что вы пытаетесь сделать.

Когда вы создаете свое поле, оно появляется в действиях вашего сайта -> Настройки сайта -> Столбцы сайта. Если это так, вы создали это правильно. Если этого не произойдет, есть сотни примеров того, как это сделать, если вы ищете в Google.

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

Это не мой код, я выбрал его из Интернета, но он должен делать то, что вам нужно.

  SPContentType ct = web.ContentTypes[contentType];
  ct.FieldLinks.Add(new SPFieldLink(field));
  ct.Update();

Приветствие Truez

...