2013-06-06 3 views
5

Ich schreibe eine benutzerdefinierte Indizierung Connector mit Changelog inkrementelle Crawl-Ansatz.Benutzerdefinierte BCS Indizierung Connector mit Changelog inremental Crawl funktioniert nicht richtig

Ich benutze Probe von http://msdn.microsoft.com/en-us/library/ff625800%28v=office.14%29.aspx und versuche, es für mich zu ändern.

Mein Modell hat neben Stereotypen: IdEnumerator, ChangedIdEnumerator, DeletedIdEnumerator, Specific, Finder, StreamAccessor

Wenn ich beginne vollständigen Crawl, IdEnumerator, ChangedIdEnumerator wird DeletedIdEnumerator aufgerufen werden.

Erstes Problem: der SpecificFinder wird nicht aufgerufen.

Wenn ich inkrementellen Crawl Start bin, werden ChangedIdEnumerator und DeletedIdEnumerator aufgerufen werden.

DeletedIdEnumerator funktioniert: Elemente mit gelöschten IDs werden aus dem Index gelöscht.

Zweites Problem: ChangedIdEnumerator funktioniert nicht. Nach der Rückgabe der geänderten IDs passiert nichts.

Es gibt jetzt Fehler im crowl Protokoll. hier

ist mein Modell:

<Model xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" Name="MyFileModel" xmlns="http://schemas.microsoft.com/windows/2007/BusinessDataCatalog"> 
    <LobSystems> 
    <LobSystem Name="MyFileSystem" Type="Custom"> 
     <Properties> 
     <Property Name="SystemUtilityTypeName" Type="System.String">MyFileConnector.MyFileConnector, MyFileConnector, Version=1.0.0.0, Culture=neutral, PublicKeyToken=15865f58b9878bf8</Property> 
     <Property Name="SystemUtilityInstallDate" Type="System.DateTime">2013-01-01 00:00:00Z</Property> 
     <Property Name="InputUriProcessor" Type="System.String">MyFileConnector.MyFileLobUri, MyFileConnector, Version=1.0.0.0, Culture=neutral, PublicKeyToken=15865f58b9878bf8</Property> 
     <Property Name="OutputUriProcessor" Type="System.String">MyFileConnector.MyFileNamingContainer, MyFileConnector, Version=1.0.0.0, Culture=neutral, PublicKeyToken=15865f58b9878bf8</Property> 
     </Properties> 
     <LobSystemInstances> 
     <LobSystemInstance Name="MyFileConnector_instance"> 
      <Properties> 
      <Property Name="AuthenticationType" Type="System.String">Credentials</Property> 
     </Properties> 
     </LobSystemInstance> 
     </LobSystemInstances> 
    <Entities> 
    <Entity Name="MyFolder" Namespace="MyFileConnector" Version="1.0.0.1"> 
     <Properties> 
     <Property Name="Title" Type="System.String">Name</Property> 
     </Properties> 
     <Identifiers> 
     <Identifier Name="ID" TypeName="System.String" /> 
     </Identifiers> 

     <Methods> 
     <!--  IdEnumerator   --> 
     <Method Name="ReadAllIds" DefaultDisplayName="ReadAllIds" IsStatic="false"> 
      <Parameters> 
      <Parameter Name="returnIds" Direction="Return"> 
       <TypeDescriptor Name="Nodes" TypeName="Microsoft.BusinessData.Runtime.DynamicType[]" IsCollection="true"> 
       <TypeDescriptors> 
        <TypeDescriptor TypeName="Microsoft.BusinessData.Runtime.DynamicType" Name="Node"> 
        <TypeDescriptors> 
         <TypeDescriptor Name="ID" TypeName="System.String" IdentifierName="ID" /> 
        </TypeDescriptors> 
        </TypeDescriptor> 
       </TypeDescriptors> 
       </TypeDescriptor> 
      </Parameter> 
      </Parameters> 
      <MethodInstances> 
      <MethodInstance Type="IdEnumerator" Name="ReadAllIds" DefaultDisplayName="ReadAllIds" ReturnParameterName="returnIds" Default="true"> 
       <Properties> 
       <Property Name="RootFinder" Type="System.String">true</Property> 
       </Properties> 
       <AccessControlList> 
       <AccessControlEntry Principal="NT AUTHORITY\Authenticated Users"> 
        <Right BdcRight="Execute" /> 
       </AccessControlEntry> 
       <AccessControlEntry Principal="NT AUTHORITY\System"> 
        <Right BdcRight="SetPermissions"/> 
       </AccessControlEntry> 
       </AccessControlList> 
      </MethodInstance> 
      </MethodInstances> 
     </Method> 
     <!--  ChangedIdEnumerator   --> 
     <Method Name="ReadIncrementalList" IsStatic="false"> 
      <FilterDescriptors> 
      <FilterDescriptor Name="LastCrawl" Type="InputOutput"> 
       <Properties> 
       <Property Name="SynchronizationCookie" Type="System.String">x</Property> 
       </Properties> 
      </FilterDescriptor> 
      <FilterDescriptor Name="Timestamp" Type="Timestamp" /> 
      </FilterDescriptors> 
      <Parameters> 
      <Parameter Name="lastCrawlDate" Direction="InOut"> 
       <TypeDescriptor Name="LastCrawlDate" TypeName="System.DateTime" IsCollection="false" AssociatedFilter="LastCrawl"> 
       <Interpretation> 
        <NormalizeDateTime LobDateTimeMode="Local" /> 
       </Interpretation> 
       </TypeDescriptor> 
      </Parameter> 
      <Parameter Name="returnIds" Direction="Return"> 
       <TypeDescriptor TypeName="Microsoft.BusinessData.Runtime.DynamicType[]" Name="Nodes" IsCollection="true" > 
       <TypeDescriptors> 
        <TypeDescriptor TypeName="Microsoft.BusinessData.Runtime.DynamicType" Name="Node"> 
        <TypeDescriptors> 
         <TypeDescriptor TypeName="System.String" IdentifierName="ID" Name="ID" /> 
        </TypeDescriptors> 
        </TypeDescriptor> 
       </TypeDescriptors> 
       </TypeDescriptor> 
      </Parameter> 
      </Parameters> 
      <MethodInstances> 
      <MethodInstance Name="ReadIncrementalListInstance" Type="ChangedIdEnumerator" ReturnParameterName="returnIds" Default="true"> 
       <AccessControlList> 
       <AccessControlEntry Principal="NT AUTHORITY\Authenticated Users"> 
        <Right BdcRight="Execute" /> 
        <Right BdcRight="SetPermissions" /> 
       </AccessControlEntry> 
       </AccessControlList> 
      </MethodInstance> 
      </MethodInstances> 
     </Method> 
     <!--  DeletedIdEnumerator   --> 
     <Method Name="ReadDeletedIncrementalList" IsStatic="false" DefaultDisplayName="ReadDeletedIncrementalList"> 
      <FilterDescriptors> 
      <FilterDescriptor Name="LastCrawl" Type="InputOutput"> 
       <Properties> 
       <Property Name="SynchronizationCookie" Type="System.String">x</Property> 
       </Properties> 
      </FilterDescriptor> 
      <FilterDescriptor Name="Timestamp" Type="Timestamp" /> 
      </FilterDescriptors> 
      <Parameters> 
      <Parameter Name="LastCrawlDate" Direction="InOut"> 
       <TypeDescriptor Name="LastCrawlDate" TypeName="System.DateTime" IsCollection="false" AssociatedFilter="LastCrawl"> 
       <Interpretation> 
        <NormalizeDateTime LobDateTimeMode="Local" /> 
       </Interpretation> 
       </TypeDescriptor> 
      </Parameter> 
      <Parameter Name="deletedIds" Direction="Return"> 
       <TypeDescriptor TypeName="Microsoft.BusinessData.Runtime.DynamicType[]" Name="Nodes" IsCollection="true"> 
       <TypeDescriptors> 
        <TypeDescriptor TypeName="Microsoft.BusinessData.Runtime.DynamicType" Name="Node"> 
        <TypeDescriptors> 
         <TypeDescriptor Name="ID" TypeName="System.String" IdentifierName="ID" /> 
        </TypeDescriptors> 
        </TypeDescriptor> 
       </TypeDescriptors> 
       </TypeDescriptor> 
      </Parameter> 
      </Parameters> 
      <MethodInstances> 
      <MethodInstance Name="ReadDeletedIncrementalListInstance" Type="DeletedIdEnumerator" ReturnParameterName="deletedIds"> 
       <AccessControlList> 
       <AccessControlEntry Principal="NT AUTHORITY\Authenticated Users"> 
        <Right BdcRight="Execute" /> 
        <Right BdcRight="SetPermissions" /> 
       </AccessControlEntry> 
       </AccessControlList> 
      </MethodInstance> 
      </MethodInstances> 
     </Method> 

     <!--  Finder   --> 
     <Method Name="ReadAllItems" DefaultDisplayName="ReadAllItems" IsStatic="false"> 
      <Parameters> 
      <Parameter Name="returnAllItems" Direction="Return"> 
       <TypeDescriptor TypeName="Microsoft.BusinessData.Runtime.DynamicType[]" Name="Nodes" IsCollection="true" > 
       <TypeDescriptors> 
        <TypeDescriptor TypeName="Microsoft.BusinessData.Runtime.DynamicType" Name="Node"> 
        <TypeDescriptors> 
         <TypeDescriptor TypeName="System.String" IdentifierName="ID" Name="ID" /> 
         <TypeDescriptor TypeName="System.String" Name="Name" /> 
         <TypeDescriptor TypeName="System.String" Name="Title" /> 
         <TypeDescriptor TypeName="System.String" Name="Path" /> 
        </TypeDescriptors> 
        </TypeDescriptor> 
       </TypeDescriptors> 
       </TypeDescriptor> 
      </Parameter> 
      </Parameters> 
      <MethodInstances> 
      <MethodInstance Type="Finder" Name="ReadAllItems" DefaultDisplayName="ReadAllItems" ReturnParameterName="returnAllItems" Default="true" ReturnTypeDescriptorName="Nodes" ReturnTypeDescriptorLevel="0"> 
       <AccessControlList> 
       <AccessControlEntry Principal="NT AUTHORITY\Authenticated Users"> 
        <Right BdcRight="Execute" /> 
       </AccessControlEntry> 
       <AccessControlEntry Principal="NT AUTHORITY\System"> 
        <Right BdcRight="SetPermissions"/> 
       </AccessControlEntry> 
       </AccessControlList> 
      </MethodInstance> 
      </MethodInstances> 
     </Method> 

     <!--  SpecificFinder   --> 
     <Method Name="ReadItem" DefaultDisplayName="ReadItem" IsStatic="false"> 
      <Parameters> 
      <Parameter Direction="In" Name="ID"> 
       <TypeDescriptor TypeName="System.String" IdentifierName="ID" Name="ID" /> 
      </Parameter> 
      <Parameter Direction="Return" Name="returnParameter"> 
       <TypeDescriptor TypeName="Microsoft.BusinessData.Runtime.DynamicType" Name="Node"> 
       <TypeDescriptors> 
        <TypeDescriptor TypeName="System.String" IdentifierName="ID" Name="ID" ReadOnly="true" /> 
        <TypeDescriptor TypeName="System.String" Name="Title" /> 
        <TypeDescriptor TypeName="System.String" Name="Author" /> 
       </TypeDescriptors> 
       </TypeDescriptor> 
      </Parameter> 
      </Parameters> 
      <MethodInstances> 
      <MethodInstance Type="SpecificFinder" ReturnParameterName="returnParameter" ReturnTypeDescriptorName="Node" Default="true" Name="ReadItem" DefaultDisplayName="ReadItem" ReturnTypeDescriptorLevel="0"> 
       <AccessControlList> 
       <AccessControlEntry Principal="NT AUTHORITY\Authenticated Users"> 
        <Right BdcRight="Execute" /> 
       </AccessControlEntry> 
       <AccessControlEntry Principal="NT AUTHORITY\System"> 
        <Right BdcRight="SetPermissions"/> 
       </AccessControlEntry> 
       </AccessControlList> 
      </MethodInstance> 
      </MethodInstances> 
     </Method> 
     </Methods> 
    </Entity> 
    </Entities> 
</LobSystem> 

Was ich falsch mache? Ich würde jeden Input sehr schätzen.

Antwort

0

Sie haben die gleichen Namen für Ihre SynchronizationCookie („x“), einen anderen Cookie-Namen für jede Ihrer Methoden

0

Ich traf ähnliches Problem gibt vor kurzem in meinem benutzerdefinierten BCS-Anschluss (Specific nicht genannt) und verwalten sortiere es aus. In meinem Szenario habe ich zwei Entitäten (Eltern und Kind), und SpecificFinder wurde nur für die übergeordneten Entitäten aufgerufen, wurde aber nicht für die untergeordneten Entitäten aufgerufen. Es stellte sich heraus, dass das Problem damit zusammenhing, wie ich "Access URIs" erstellt habe. Am Anfang waren die URIs wie folgt aus:

<protocol>://<entity_name>/<entity_id> 

Und meine Start-URL (in der Inhaltsquelle Definition angegeben) war eine URL eines "falschen" Mutterunternehmens (ohne ID):

<protocol>://<parent_entity_name> 

Aber Offenbar behandelt der SharePoint-Crawler Zugriffs-URIs wie Web-URLs und wendet einen Filter nach dem in der Inhaltsquellendefinition angegebenen URL-Pfad an.Mit anderen Worten, in meinem Fall wäre es nur kriechen URIs das folgende Muster entspricht:

<protocol>://<parent_entity_name>/* 

Nachdem ich meinen Zugang URI-Format zu

geändert
<protocol>://root/<entity_name> 

und meine Start-URL in der Inhaltsquelle eingestellt Definition zu

<protocol>://root 

alles begann ordnungsgemäß zu arbeiten.

Verwandte Themen