"Diese Aktion kann nicht abgeschlossen werden" wenn Sie versuchen, bereitstellen list-Instanz mit Website TaxonomyField

Fair warning: Das setup für diese Frage ist lange, so geduldig zu sein und bei mir bleiben.

Habe ich zwei Funktionen in meiner Lösung Paket. Die erste ist eine Reihe von Website, die Felder und Inhaltstypen; nennen wir dies eine Verfügen über Eine. Zwischen den Feldern ein Feld vom Typ "TaxonomyFieldType" und assoziiertes Feld "Hinweis" (eine Erläuterung der Hinweis-Feld).

<Elements ...>  
<Field ID="{956a1078-ec35-4c04-83c4-0a3742119496}" 
        Name="TaxonomyTextField" 
        Type="Note" DisplayName="Tags_0" 
        ShowInViewForms="FALSE" 
        Required="FALSE"
        Group="MyGroup"
        Hidden="TRUE"/>

<Field ID="{92BC866B-0415-45F0-B431-D4DF69C421CC}"
        Name="Tags"
        DisplayName="Custom Tags"
        Type="TaxonomyFieldType"
        ShowField="Term1033"
        Required="FALSE"
        Group="MyGroup"
        >
  <Customization>
    <ArrayOfProperty>
      <Property>
        <Name>IsPathRendered</Name>
        <Value xmlns:q7="http://www.w3.org/2001/XMLSchema" p4:type="q7:boolean" xmlns:p4="http://www.w3.org/2001/XMLSchema-instance">true</Value>
      </Property>
      <Property>
        <Name>TextField</Name>
        <Value xmlns:q6="http://www.w3.org/2001/XMLSchema" p4:type="q6:string" xmlns:p4="http://www.w3.org/2001/XMLSchema-instance">{956a1078-ec35-4c04-83c4-0a3742119496}</Value>
      </Property>
    </ArrayOfProperty>
  </Customization>
</Field>
</Elements>

und

<Elements xmlns="http://schemas.microsoft.com/sharepoint/">
  <!-- Parent ContentType: Item (0x01) -->
  <ContentType ID="0x0100b61c774f4c0e4a89bf230cbb44cd4f75"
               Name="MyContent"
               Group="MyGroup"
               Description="Description of My Content Type"
               Inherits="FALSE"
               Overwrite="TRUE"
               Version="0">
    <FieldRefs>
      <FieldRef ID="{52578fc3-1f01-4f4d-b016-94ccbcf428cf}" DisplayName="Comments" Name="Comments" Required="FALSE"/>
      <FieldRef ID="{956a1078-ec35-4c04-83c4-0a3742119496}" Name="TimeTrackerTaxonomyTextField"/>
      <FieldRef ID="{92BC866B-0415-45F0-B431-D4DF69C421CC}" DisplayName="Tags" Name="Tags" Required="FALSE"/>
    </FieldRefs>
  </ContentType>
</Elements>

In der feature-Empfänger für die erste Funktion (nennen wir es mal die Funktion A), die ich programmgesteuert abrufen dieser TaxonomyField und
sicherzustellen, dass Sie so konfiguriert ist, abrufen, Begriffe aus einem vorgegebenen Begriff setzen:

public override void FeatureActivated(SPFeatureReceiverProperties properties)
{
    SPWeb web = GetWebObj(properties.Feature.Parent);
    Guid fieldId = new Guid("92BC866B-0415-45F0-B431-D4DF69C421CC");
    TaxonomyField field = web.Fields[fieldId] as TaxonomyField;
    string groupName = properties.Feature.Properties["TaxonomyGroupName"].Value;
    string termSetName = properties.Feature.Properties["TermSetName"].Value;
    DiagnosticService logger = DiagnosticService.Local;

    TermSet set = null;
    TaxonomySession session = new TaxonomySession(web.Site);
    TermSetCollection termSets = session.GetTermSets(termSetName, System.Threading.Thread.CurrentThread.CurrentUICulture.LCID);
    if (termSets == null || termSets.Count == 0)
    {
        logger.WriteTrace(1, logger[CategoryId.Deployment], TraceSeverity.Medium,
            "Activity Tags term set not found.  Ensuring '{0}' group and '{1}' term set.", groupName, termSetName);
        //create the term set in the default store
        var store = session.DefaultSiteCollectionTermStore;
        var group = store.EnsureGroup(groupName);
        set = group.EnsureTermSet(termSetName);

        store.CommitAll();
        logger.WriteTrace(1, logger[CategoryId.Provisioning], TraceSeverity.Verbose, "created taxonomy group '{0}' and term set '{1}'", group, set);
    }
    else
    {
        logger.WriteTrace(1, logger[CategoryId.Deployment], TraceSeverity.Verbose, "term set found.");
        //need to make sure we grab the one in the right group, or it might be someone else's term set.                
        foreach (var termSet in termSets)
        {
            if (String.Equals(termSet.Group.Name,groupName))
            {
                if (set == null)
                {
                    set = termSet;
                }
                else
                {
                    logger.WriteTrace(1, logger[CategoryId.Deployment], TraceSeverity.Unexpected,
                        "Multiple term sets named '{0}' found in more than one taxonomy group.", termSetName);
                    throw new SPException(String.Format("Multiple term sets named '{0}' found in more than one taxonomy group.  "+
                                                        "Was there a previous installation that was not removed properly?", termSetName));
                }
            }
        }

        if (set == null)
        {
            //term set found, but in an unrecognized group.  leave it alone and do like above
            logger.WriteTrace(1, logger[CategoryId.Deployment], TraceSeverity.Verbose,
                "Term set '{0}' found, but in unrecognized group.  Provisioning new group and term set as configured.", termSetName);
            var store = session.DefaultSiteCollectionTermStore;
            var group = store.EnsureGroup(groupName);
            set = group.EnsureTermSet(termSetName);

            store.CommitAll();
            logger.WriteTrace(1, logger[CategoryId.Provisioning], TraceSeverity.Verbose, "created taxonomy group '{0}' and term set '{1}'", group, set);
        }
    }

    //set termSets to the newly created term set                
    field.SspId = set.TermStore.Id;
    field.TermSetId = set.Id;
    field.TargetTemplate = String.Empty;
    field.AnchorId = Guid.Empty;
    field.Open = true;
    field.AllowMultipleValues = true;
    field.Update();
}

Die zweite Funktion enthält eine Liste von Vorlagen und Instanzen, von denen verwendet, die oben genannten Inhalte geben; nennen wir diese Funktion Funktion B.

Hier ist die Liste schema für die Liste, die explodiert, wenn bereitgestellt (ListInstance element nicht angezeigt):

<?xml version="1.0" encoding="utf-8"?>
<List xmlns:ows="Microsoft SharePoint" Title="My List" FolderCreation="FALSE" Direction="$Resources:Direction;" Url="Lists/MyList" BaseType="0" xmlns="http://schemas.microsoft.com/sharepoint/">
  <MetaData>
    <ContentTypes>      
      <ContentTypeRef ID="0x0100b61c774f4c0e4a89bf230cbb44cd4f75"></ContentTypeRef>
    </ContentTypes>

    <Fields> 
      <Field ID="{956a1078-ec35-4c04-83c4-0a3742119496}" Name="TaxonomyTextField" Type="Note"/>      
      <Field ID="{92bc866b-0415-45f0-b431-d4df69c421cc}" Name="Tags" Type="TaxonomyFieldType"/>
      <Field ID="{52578FC3-1F01-4f4d-B016-94CCBCF428CF}" Name="_Comments" Type="Note"/>      
    </Fields>
    <Views>
      <View BaseViewID="1" Type="HTML" WebPartZoneID="Main" DisplayName="$Resources:core,objectiv_schema_mwsidcamlidC24;" DefaultView="TRUE" MobileView="TRUE" MobileDefaultView="TRUE" SetupPath="pages\viewpage.aspx" ImageUrl="/_layouts/images/generic.png" Url="AllItems.aspx">
        <Toolbar Type="Standard" />
        <XslLink Default="TRUE">main.xsl</XslLink>
        <RowLimit Paged="TRUE">30</RowLimit>
        <ViewFields>
          <!-- <FieldRef Name="Tags"></FieldRef> -->
          <FieldRef Name="_Comments"></FieldRef>
        </ViewFields>
        <Query>
          <OrderBy>
            <FieldRef Name="ID">
            </FieldRef>
          </OrderBy>
        </Query>
        <ParameterBindings>
          <ParameterBinding Name="NoAnnouncements" Location="Resource(wss,noXinviewofY_LIST)" />
          <ParameterBinding Name="NoAnnouncementsHowTo" Location="Resource(wss,noXinviewofY_DEFAULT)" />
        </ParameterBindings>
      </View>
    </Views>
    <Forms>
      <Form Type="DisplayForm" Url="DispForm.aspx" SetupPath="pages\form.aspx" WebPartZoneID="Main" />
      <Form Type="EditForm" Url="EditForm.aspx" SetupPath="pages\form.aspx" WebPartZoneID="Main" />
      <Form Type="NewForm" Url="NewForm.aspx" SetupPath="pages\form.aspx" WebPartZoneID="Main" />
    </Forms>
  </MetaData>
</List>

Nachdem die Lösung implementiert ist, ich bin in der Lage zu aktivieren Verfügen über Eine, ohne Frage. Die Websitespalten und Inhaltstypen erstellt werden. Wenn ich versuche zu aktivieren Funktion B, die die Aktivierung der Funktion call-stack explodiert und die Ergebnisse in eine Fehler-Seite mit dem folgenden stack trace:

[COMException (0 x 80004005): diese Aktion kann Nicht abgeschlossen werden. 

Bitte versuchen Sie es erneut.] 
Microsoft.SharePoint.Bibliothek.SPRequestInternalClass.UpdateField(String bstrUrl, String bstrListName, String bstrXML) +0 
Microsoft.SharePoint.Bibliothek.SPRequest.UpdateField(String bstrUrl, String bstrListName, String bstrXML) +134 

[SPException: diese Aktion kann Nicht abgeschlossen werden. 

Bitte versuchen Sie es erneut.] 
Microsoft.SharePoint.Verwaltung.SPElementDefinitionCollection.ProvisionListInstances(SPFeaturePropertyCollection Requisiten, SPSite site, SPWeb web, Boolean fForce) +23649702 
Microsoft.SharePoint.Verwaltung.SPElementDefinitionCollection.ProvisionElements(SPFeaturePropertyCollection Requisiten, SPWebApplication webapp, SPSite site, SPWeb web, Boolean fForce) +197 
Microsoft.SharePoint.SPFeature.Aktivieren(SPSite siteParent, SPWeb webParent, SPFeaturePropertyCollection props, Boolean fForce) +25437263 
Microsoft.SharePoint.SPFeatureCollection.AddInternal(SPFeatureDefinition featdef, Version version, SPFeaturePropertyCollection Eigenschaften, Boolean force, Boolean fMarkOnly) +27496735 
Microsoft.SharePoint.SPFeatureCollection.AddInternalWithName(Guid featureId, String featureName, Version version, SPFeaturePropertyCollection Eigenschaften, Boolean force, Boolean fMarkOnly, SPFeatureDefinitionScope featdefScope) +150 
Microsoft.SharePoint.SPFeatureCollection.Add(Guid featureId, Boolean force, SPFeatureDefinitionScope featdefScope) +83 
Microsoft.SharePoint.WebControls.FeatureActivator.ActivateFeature(Guid featid, SPFeatureDefinitionScope featdefScope) +699 
Microsoft.SharePoint.WebControls.FeatureActivatorItem.BtnActivateFeature_Click(Objekt objSender, EventArgs evtargs) +140 
System.Web.UI.WebControls.- Taste.OnClick(EventArgs e) +115 
System.Web.UI.WebControls.- Taste.RaisePostBackEvent(String eventArgument) +140 
System.Web.UI.Seite.RaisePostBackEvent(IPostBackEventHandler sourceControl, String eventArgument) +29 
System.Web.UI.Seite.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +2981 

Ich bin ziemlich sicher, dass es etwas falsch mit der Art, wie ich die Konfiguration der TaxonomyField im Verfügen über Eine; die Assoziation mit einer list-Instanz an die provisioning-Zeit ist die Ursache des Fehlers (ich habe bestimmt dies durch das auskommentieren der Stücke und die Bereitstellung über und über). Es scheint sehr wenig Dokumentation, oder auch blogger-Erfahrungen mit TaxonomyFields - und provisioning-Sie in der Liste Instanzen, so bin ich ein wenig ratlos. Hat jemand eine Idee, was falsch läuft?

Ein upvote für mit mit spärlichen Unterlagen und diese gut formulierte Frage 😉

InformationsquelleAutor Ben Collins | 2011-02-17

Schreibe einen Kommentar