Existing Folder Behavior

Dec 8, 2016 at 7:42 PM
Hello,

Migrating to an empty library in SharePoint Online. Folder and document structure outline is as follows:

Folder 1
Doc1

Folder 2
Doc2
Doc3

Folder 3
Doc4

Folder 4
Doc5

Folder 5
Doc6

All folders are created, and all documents are migrated except Doc3 (the second doc in the same folder). It fails with the error below.

Configuration is also below with domain, username and password redacted.

I reviewed the documentation but did not see this use case. Do I need to create folders beforehand in this scenario?

Thanks!
About to connect to source : 
Source connected : 
Source filled : 6 rows loaded
About to connect to destination : 
Destination connected : 
Imported : \\PSLT0164\IMStore\000\000\000000010-.TIF
Imported : \\PSLT0164\IMStore\000\000\000000012-12.TIF
Exception importing : \\PSLT0164\IMStore\000\000\000000013-13.TIF : A file or folder with the name https://clubquarters.sharepoint.com/sites/cpx3test/ConnectPoint Archived Invoices/Acme American Repairs, Inc already exists.
Imported : \\PSLT0164\IMStore\000\000\000000014-14.TIF
Imported : \\PSLT0164\IMStore\000\000\000000015-.TIF
Imported : \\PSLT0164\IMStore\000\000\000000017-17.TIF
<?xml version="1.0" encoding="utf-8"?>
<DataSetImportSettings xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <Source>
    <SourceDataSetType>OLEDbSelect</SourceDataSetType>
    <OleDbSourceDataSetSettings>
      <ConnectionString>Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Temp\AP Invoices CP Archived Invoice TIF.xlsx;Extended Properties="Excel 12.0 Xml;HDR=YES;IMEX=0";</ConnectionString>
    </OleDbSourceDataSetSettings>
    <OleDbTableSourceDataSetSettings />
    <OleDbSelectSourceDataSetSettings>
      <SelectStatement>select * from [files$]</SelectStatement>
    </OleDbSelectSourceDataSetSettings>
    <ODBCSourceDataSetSettings />
    <ODBCSelectSourceDataSetSettings />
  </Source>
  <Destination>
    <AuthenticationSettings>
      <AuthenticationType>Office365</AuthenticationType>
      <domain />
      <username>*************************</username>
      <encryptedpassed>**********************</encryptedpassed>
    </AuthenticationSettings>
    <DestinationItemSettings>
      <DestinationItemType>Document</DestinationItemType>
      <ItemExistsBehaviour>Overwrite</ItemExistsBehaviour>
      <ImportMappings>
        <ImportMapping xsi:type="ImportMapping_String">
          <DestinationField>Title</DestinationField>
          <SourceColumn>Title</SourceColumn>
        </ImportMapping>
        <ImportMapping xsi:type="ImportMapping_String">
          <DestinationField>Batch No</DestinationField>
          <SourceColumn>Batch No</SourceColumn>
        </ImportMapping>
        <ImportMapping xsi:type="ImportMapping_String">
          <DestinationField>Vendor No</DestinationField>
          <SourceColumn>Vendor No</SourceColumn>
        </ImportMapping>
        <ImportMapping xsi:type="ImportMapping_String">
          <DestinationField>Vendor Name</DestinationField>
          <SourceColumn>Vendor Name</SourceColumn>
        </ImportMapping>
        <ImportMapping xsi:type="ImportMapping_String">
          <DestinationField>Invoice Number</DestinationField>
          <SourceColumn>Invoice No</SourceColumn>
        </ImportMapping>
        <ImportMapping xsi:type="ImportMapping_String">
          <DestinationField>GL Account Code</DestinationField>
          <SourceColumn>GL Account Code</SourceColumn>
        </ImportMapping>
        <ImportMapping xsi:type="ImportMapping_String">
          <DestinationField>GL Account Description</DestinationField>
          <SourceColumn>GL Account Description</SourceColumn>
        </ImportMapping>
        <ImportMapping xsi:type="ImportMapping_Native">
          <DestinationField>Invoice Total</DestinationField>
          <SourceColumn>Invoice Total</SourceColumn>
        </ImportMapping>
        <ImportMapping xsi:type="ImportMapping_DateTimeFromString">
          <DestinationField>Archive Invoice Date</DestinationField>
          <SourceColumn>Invoice Date</SourceColumn>
          <ConversionMask>MM/dd/yyyy</ConversionMask>
          <Culture>en-US</Culture>
        </ImportMapping>
        <ImportMapping xsi:type="ImportMapping_DateTimeFromString">
          <DestinationField>Posting Date</DestinationField>
          <SourceColumn>Posting Date</SourceColumn>
          <ConversionMask>MM/dd/yyyy</ConversionMask>
          <Culture>en-US</Culture>
        </ImportMapping>
      </ImportMappings>
    </DestinationItemSettings>
    <DestinationListSettings>
      <DestinationWebUrlRelative>/sites/CPX3Test</DestinationWebUrlRelative>
      <DestinationFolderUrlRelative>/sites/CPX3Test/ConnectPoint Archived Invoices</DestinationFolderUrlRelative>
      <DestinationServerUrl>https://*************s.sharepoint.com</DestinationServerUrl>
      <DestinationListName>ConnectPoint Archived Invoices</DestinationListName>
    </DestinationListSettings>
    <SourceColumns>
      <SourceFileNameAndPath>FullName</SourceFileNameAndPath>
      <ContentType>ContentType</ContentType>
      <DestinationSubFolder>DestinationSubDirectories</DestinationSubFolder>
      <DestinationFileName>DestinationFileName</DestinationFileName>
      <Publish>Publish</Publish>
      <CheckInComment>CheckInComment</CheckInComment>
      <PublishComment>PublishComment</PublishComment>
      <PageLayoutASPXName>PageLayoutASPXName</PageLayoutASPXName>
    </SourceColumns>
  </Destination>
</DataSetImportSettings>
Coordinator
Dec 8, 2016 at 9:36 PM
Probably the comma in the folder name causing the problem

Either that or create the folders beforehand
Dec 9, 2016 at 3:15 PM
Edited Dec 9, 2016 at 3:33 PM
Hello,

Good call: the comma and the period characters were causing the issue. Once both were removed from the folder names in the Excel source then DIFS ran in one shot (no need to create folders beforehand).

Thanks!
Jul 13 at 7:48 PM
Hello,

Opening this again because I am receiving this error 1) with no bad characters (at least that I can see) in the folder names and 2) it doesn't make any difference if the folders are created beforehand or not.

Some sample folder names that are failing:

SPImportHelper Information: 1013 : Ensure_Folder : Creating a folder of name MAIN EVENT CATERERS - MAIN01-38 West Forest
SPImportHelper Information: 1000 : Progress : Exception importing : G:\docLink\000000981-981.PDF : A file or folder with the name https://clubquarters.sharepoint.com/sites/cpx3/ConnectPoint Archived Invoices/RCRC-980523-MM-HM-VPOP-CEO/MAIN EVENT CATERERS - MAIN01-38 West Forest already exists.

SPImportHelper Information: 1013 : Ensure_Folder : Creating a folder of name MACKENZIE DOOR CO - MACK01-4900 West Side
SPImportHelper Information: 1000 : Progress : Exception importing : G:\docLink\000000995-995.PDF : A file or folder with the name https://clubquarters.sharepoint.com/sites/cpx3/ConnectPoint Archived Invoices/RCWS-980523-MM-HM-VPOP-CEO/MACKENZIE DOOR CO - MACK01-4900 West Side already exists.

Configuration is also below with domain, username and password redacted.

Thanks!

--Ben
<?xml version="1.0" encoding="utf-8"?>
<DataSetImportSettings xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <Source>
    <SourceDataSetType>OLEDbTable</SourceDataSetType>
    <OleDbSourceDataSetSettings>
      <ConnectionString>Provider=sqloledb;Data Source=DOCLINKSVR1;Initial Catalog=doclink2_test;Integrated Security=SSPI;</ConnectionString>
    </OleDbSourceDataSetSettings>
    <OleDbTableSourceDataSetSettings>
      <TableName>docLinkMigration</TableName>
    </OleDbTableSourceDataSetSettings>
    <OleDbSelectSourceDataSetSettings />
    <ODBCSourceDataSetSettings />
    <ODBCSelectSourceDataSetSettings />
  </Source>
  <Destination>
    <AuthenticationSettings>
      <AuthenticationType>Office365</AuthenticationType>
      <domain />
      <username>************************</username>
      <encryptedpassed>***********************</encryptedpassed>
    </AuthenticationSettings>
    <DestinationItemSettings>
      <DestinationItemType>Document</DestinationItemType>
      <ItemExistsBehaviour>Overwrite</ItemExistsBehaviour>
      <ImportMappings>
        <ImportMapping xsi:type="ImportMapping_String">
          <DestinationField>Title</DestinationField>
          <SourceColumn>Title</SourceColumn>
        </ImportMapping>
    <ImportMapping xsi:type="ImportMapping_Lookup">
        <!-- This is the field of type lookup.-->
        <DestinationField>Supplier Name</DestinationField>
        <SourceColumn>Vendor Name</SourceColumn>
        <!-- This is the list that contains the lookup values -->
        <LookupListTitle>ConnectPoint Suppliers</LookupListTitle>
        <!-- This is the field in the lookup list the value of which matches the value in the source column-->
        <LookupFieldInternalName>SupplierName</LookupFieldInternalName>
        <!-- This is the CAML value type Text,Number,DateTime,Guid,MultiChoice,Lookup for the field on in the lookup list that matches the value specified in the source column -->
        <LookupFieldCAMLType>Text</LookupFieldCAMLType>
    </ImportMapping>
        <ImportMapping xsi:type="ImportMapping_DateTimeFromString">
          <DestinationField>Created</DestinationField>
          <SourceColumn>Created</SourceColumn>
          <ConversionMask>MM/dd/yyyy</ConversionMask>
          <Culture>en-US</Culture>
        </ImportMapping>
        <ImportMapping xsi:type="ImportMapping_DateTimeFromString">
          <DestinationField>Modified</DestinationField>
          <SourceColumn>Modified</SourceColumn>
          <ConversionMask>MM/dd/yyyy</ConversionMask>
          <Culture>en-US</Culture>
        </ImportMapping>
        <ImportMapping xsi:type="ImportMapping_String">
          <DestinationField>Invoice No.</DestinationField>
          <SourceColumn>Invoice No</SourceColumn>
        </ImportMapping>
        <ImportMapping xsi:type="ImportMapping_String">
          <DestinationField>GL code</DestinationField>
          <SourceColumn>GL Account Code</SourceColumn>
        </ImportMapping>
        <ImportMapping xsi:type="ImportMapping_String">
          <DestinationField>GL Name</DestinationField>
          <SourceColumn>GL Account Description</SourceColumn>
        </ImportMapping>
    <ImportMapping xsi:type="ImportMapping_Lookup">
        <!-- This is the field of type lookup.-->
        <DestinationField>Site</DestinationField>
        <SourceColumn>Site</SourceColumn>
        <!-- This is the list that contains the lookup values -->
        <LookupListTitle>ConnectPoint Sites</LookupListTitle>
        <!-- This is the field in the lookup list the value of which matches the value in the source column-->
        <LookupFieldInternalName>SiteNumber</LookupFieldInternalName>
        <!-- This is the CAML value type Text,Number,DateTime,Guid,MultiChoice,Lookup for the field on in the lookup list that matches the value specified in the source column -->
        <LookupFieldCAMLType>Text</LookupFieldCAMLType>
    </ImportMapping>
           <ImportMapping xsi:type="ImportMapping_Native">
          <DestinationField>Amount - tax</DestinationField>
          <SourceColumn>Invoice Total</SourceColumn>
        </ImportMapping>
    <ImportMapping xsi:type="ImportMapping_Native">
          <DestinationField>Amount + tax</DestinationField>
          <SourceColumn>Invoice Total</SourceColumn>
        </ImportMapping>
        <ImportMapping xsi:type="ImportMapping_DateTimeFromString">
          <DestinationField>Invoice Date</DestinationField>
          <SourceColumn>Invoice Date</SourceColumn>
          <ConversionMask>MM/dd/yyyy</ConversionMask>
          <Culture>en-US</Culture>
        </ImportMapping>
     <ImportMapping xsi:type="ImportMapping_String">
          <DestinationField>Invoice Type</DestinationField>
          <SourceColumn>Invoice Type</SourceColumn>
        </ImportMapping>
        <!--
    <ImportMapping xsi:type="ImportMapping_DateTimeFromString">
          <DestinationField>Posting Date</DestinationField>
          <SourceColumn>Posting Date</SourceColumn>
          <ConversionMask>MM/dd/yyyy</ConversionMask>
          <Culture>en-US</Culture>
        </ImportMapping>
    -->
    <ImportMapping xsi:type="ImportMapping_String">
          <DestinationField>Invoice Payment Number</DestinationField>
          <SourceColumn>Payment No</SourceColumn>
        </ImportMapping>
    <ImportMapping xsi:type="ImportMapping_DateTimeFromString">
          <DestinationField>Invoice Payment Date</DestinationField>
          <SourceColumn>Payment Date</SourceColumn>
          <ConversionMask>MM/dd/yyyy</ConversionMask>
          <Culture>en-US</Culture>
        </ImportMapping>
    <ImportMapping xsi:type="ImportMapping_Native">
          <DestinationField>Check Amount</DestinationField>
          <SourceColumn>Payment Total</SourceColumn>
        </ImportMapping>
      </ImportMappings>
    </DestinationItemSettings>
    <DestinationListSettings>
      <DestinationWebUrlRelative>/sites/CPX3</DestinationWebUrlRelative>
      <DestinationFolderUrlRelative>/sites/CPX3/ConnectPoint Archived Invoices</DestinationFolderUrlRelative>
      <DestinationServerUrl>https://************.sharepoint.com</DestinationServerUrl>
      <DestinationListName>ConnectPoint Archived Invoices</DestinationListName>
    </DestinationListSettings>
    <SourceColumns>
      <SourceFileNameAndPath>FilePath</SourceFileNameAndPath>
      <ContentType>ContentType</ContentType>
      <DestinationSubFolder>DestinationSubDirectories</DestinationSubFolder>
      <DestinationFileName>DestinationFileName</DestinationFileName>
      <Publish>Publish</Publish>
      <CheckInComment>CheckInComment</CheckInComment>
      <PublishComment>PublishComment</PublishComment>
      <PageLayoutASPXName>PageLayoutASPXName</PageLayoutASPXName>
    </SourceColumns>
  </Destination>
</DataSetImportSettings>
Jul 18 at 2:33 PM
Hello,

Trailing spaces in several vendor names were the culprit. Import is working after appropriate trimming of the column in the source SQL table.

Thanks!

--Ben
Marked as answer by bwalker31 on 7/18/2017 at 7:33 AM