首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >自定义字段SharePoint BCS编辑和NewForm

自定义字段SharePoint BCS编辑和NewForm
EN

Stack Overflow用户
提问于 2014-07-31 20:17:10
回答 1查看 803关注 0票数 0

场景:我通过BCS获得了一个数据源,它的表示方式就像总是用BCS表示的那样。我想做的是定制New,以便在我的一个字段中允许一个DropDown

--我尝试过:基于SPFieldChoide (在自定义列表中测试并运行得很好)创建一个自定义字段,并通过BCS文件(.bdcm)将属性SPCustomFieldType添加到我想要自定义的字段中。

错误:I可以打开ReadItem/NewForm/EditForm页面,并且自定义字段呈现得很好,但是它在打开ReadList页面时抛出了一个错误

执行web部件时出错: System.NotSupportedException:方法'GetFieldAttributeValue‘在BiConvenioGrupoChoiceField中不支持外部列表。 在Microsoft.SharePoint.SPExternalList.ThrowNotSupportedExceptionForMethod(String sMethodName,类型为typeThrowing) 在Microsoft.SharePoint.SPFieldChoice.get_Sortable() 在Microsoft.SharePoint.SPField.AnnotateField(XmlNode fieldRefNode) 在Microsoft.SharePoint.WebPartPages.XsltListViewWebPart.AddInFieldSchema(XmlNodeList fieldRefNodes,SPList list) 在Microsoft.SharePoint.WebPartPages.XsltListViewWebPart.AddInTypeInfoIntoViewXml(XmlNode viewXml) 在Microsoft.SharePoint.WebPartPages.XsltListViewWebPart.ModifyXsltArgumentList(ArgumentClassWrapper argList) 在Microsoft.SharePoint.WebPartPages.DataFormWebPart.PrepareAndPerformTransform(Boolean bDeferExecuteTransform)

我们来看一遍密码。

自定义字段.cs

代码语言:javascript
复制
class BiConvenioGrupoChoiceField : SPFieldChoice
{
    #region Constructors
    public BiConvenioGrupoChoiceField(SPFieldCollection fields, string fieldName) : base(fields, fieldName) { }
    public BiConvenioGrupoChoiceField(SPFieldCollection fields, string typeName, string displayName) : base(fields, typeName, displayName) { }
    #endregion

    #region Properties
    public override string TypeDisplayName
    {
        get
        {
            return "BiConvenioGrupoChoiceField";
        }
    }        
    public override BaseFieldControl FieldRenderingControl
    {
        get
        {   
            BaseFieldControl fieldControl = new BiConvenioGrupoChoiceFieldControl();
            fieldControl.FieldName = InternalName;
            return fieldControl;
        }
    }
    #endregion
}

自定义字段控制

代码语言:javascript
复制
class BiConvenioGrupoChoiceFieldControl : BaseFieldControl
{
    DropDownList customDropDown;
    protected override string DefaultTemplateName
    {
        get
        {
            return "DropDownRenderingTemplate";
        }
    }
    protected override void CreateChildControls()
    {
        try
        {
            base.CreateChildControls();
            customDropDown = (DropDownList)TemplateContainer.FindControl("customDropDown");
            if (customDropDown != null)
            {
                customDropDown.ID = this.FieldName;
                if (this.ControlMode == SPControlMode.New || this.ControlMode == SPControlMode.Edit)
                {                        
                        customDropDown.Items.Add(new ListItem("Option 0", "0"));
                        customDropDown.Items.Add(new ListItem("Option 1", "1"));
                        customDropDown.Items.Add(new ListItem("Option 2", "2"));
                        customDropDown.Items.Add(new ListItem("Option 9", "9"));
                }
            }
        }
        catch (Exception ex)
        {
            SystemLogger.Logger.Log(ex, LoggingLevel.Fatal);
        }
    }

    public override object Value
    {
        get
        {
            EnsureChildControls();
            return customDropDown.SelectedValue;
        }
        set
        {
            this.EnsureChildControls();
            customDropDown.SelectedValue = (string)ItemFieldValue;
        }
    }
}

BCS.bdcm

代码语言:javascript
复制
<Method Name="Create">
              <Parameters>
                <Parameter Name="returnCCCadastrados" Direction="Return">
                  <TypeDescriptor Name="ReturnCCCadastrados" TypeName="Models.ConvenioBI, CCCadastradosBDC">
                    <TypeDescriptors>
                      <TypeDescriptor Name="Dbico_sq" DefaultDisplayName="Id" IdentifierName="Dbico_sq" TypeName="System.Int32" />
                      <TypeDescriptor Name="Descricao" DefaultDisplayName="Descrição" TypeName="System.String" />
                      <TypeDescriptor Name="CodigoCorporativo" DefaultDisplayName="Código Corporativo" TypeName="System.String" />
                      <TypeDescriptor Name="Login" DefaultDisplayName="Criado Por" TypeName="System.String" />
                      <TypeDescriptor Name="Grupo" DefaultDisplayName="Grupo" TypeName="System.String">
                        <Properties>
                          <Property Name="SPCustomFieldType" Type="System.String">BiConvenioGrupoChoiceField</Property>
                        </Properties>
                      </TypeDescriptor>
                      <TypeDescriptor Name="DtCriacao" DefaultDisplayName="Data Criação" IsCollection="false" TypeName="System.DateTime">
                        <Interpretation>
                          <NormalizeDateTime LobDateTimeMode="UTC" />
                        </Interpretation>
                      </TypeDescriptor>
                      <TypeDescriptor Name="DtAtualizacao" DefaultDisplayName="Data Atualização" IsCollection="false" TypeName="System.DateTime" >
                        <Interpretation>
                          <NormalizeDateTime LobDateTimeMode="UTC" />
                        </Interpretation>
                      </TypeDescriptor>
                    </TypeDescriptors></TypeDescriptor></Parameter>
                <Parameter Name="newCCCadastrados" Direction="In">
                  <TypeDescriptor Name="NewCCCadastrados" TypeName="Models.ConvenioBI, CCCadastradosBDC">
                    <TypeDescriptors>                      
                      <TypeDescriptor Name="Descricao" DefaultDisplayName="Descrição" TypeName="System.String" CreatorField="true" />
                      <TypeDescriptor Name="CodigoCorporativo" DefaultDisplayName="Código Corporativo" TypeName="System.String" CreatorField="true" />
                      <TypeDescriptor TypeName="System.String" Name="Grupo" DefaultDisplayName="Grupo" CreatorField="true" >
                        <Properties>
                          <Property Name="SPCustomFieldType" Type="System.String">BiConvenioGrupoChoiceField</Property>
                        </Properties>
                      </TypeDescriptor>
                    </TypeDescriptors>
                  </TypeDescriptor>
              </Parameter>
              </Parameters>
              <MethodInstances>
                <MethodInstance Name="Create" Type="Creator" ReturnParameterName="returnCCCadastrados" ReturnTypeDescriptorPath="ReturnCCCadastrados" />
              </MethodInstances>
            </Method>
EN

回答 1

Stack Overflow用户

发布于 2014-08-01 13:57:25

我只是在我的自定义字段类中重写属性Sortable

代码语言:javascript
复制
public override bool Sortable
{
    get
    {
        return false;
    }
}

很有魅力。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25068161

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档