Chilkat HOME .NET Core C# Android™ AutoIt C C# C++ Chilkat2-Python CkPython Classic ASP DataFlex Delphi ActiveX Delphi DLL Go Java Lianja Mono C# Node.js Objective-C PHP ActiveX PHP Extension Perl PowerBuilder PowerShell PureBasic Ruby SQL Server Swift 2 Swift 3,4,5... Tcl Unicode C Unicode C++ VB.NET VBScript Visual Basic 6.0 Visual FoxPro Xojo Plugin
(Objective-C) SharePoint -- Download Newer FilesSee more SharePoint ExamplesDemonstrates how to download all files from a SharePoint folder that are newer than the local files.
#import <CkoHttp.h> #import <CkoStringBuilder.h> #import <CkoFileAccess.h> #import <CkoJsonObject.h> #import <CkoDateTime.h> #import <NSString.h> // This requires the Chilkat API to have been previously unlocked. // See Global Unlock Sample for sample code. // ------------------------------------------------------------------------- // The following comments apply to SharePoint Windows classic authentication. // ------------------------------------------------------------------------- // For example, imagine our SharePoint endpoint is https://xyzoffice.mycompany.com/ // The SHAREPOINT_NTLM_DOMAIN would be "mycompany.com" // The SHAREPOINT_HTTPS_DOMAIN would be "xyzoffice.mycompany.com" // Also, the SHAREPOINT_USERNAME would be just the name, not a full email address. // for example, "chilkat" instead of "chilkat@mycompany.com" CkoHttp *http = [[CkoHttp alloc] init]; // If SharePoint Windows classic authentication is used, then set the // Login, Password, LoginDomain, and NtlmAuth properties. http.Login = @"SHAREPOINT_USERNAME"; http.Password = @"SHAREPOINT_PASSWORD"; http.LoginDomain = @"SHAREPOINT_NTLM_DOMAIN"; http.NtlmAuth = YES; // ------------------------------------------------------------------------- // The more common case is to use SharePoint Online authentication (via the SPOIDCRL cookie). // If so, do not set Login, Password, LoginDomain, and NtlmAuth, and instead // establish the cookie as shown at SharePoint Online Authentication // ------------------------------------------------------------------------- // First we'll download a list of all the files in the /Documents folder. // This provides the names and last-modified date/times of the files located // on the SharePoint server. http.Accept = @"application/json;odata=verbose"; http.AcceptCharset = @"utf-8"; CkoStringBuilder *sbJson = [[CkoStringBuilder alloc] init]; BOOL success = [http QuickGetSb: @"https://SHAREPOINT_HTTPS_DOMAIN/_api/web/GetFolderByServerRelativeUrl('/Documents')/Files" sbContent: sbJson]; if (success != YES) { NSLog(@"%@",http.LastErrorText); return; } // Before proceeding, make sure the local directory where we'll be downloading files exists. CkoFileAccess *fac = [[CkoFileAccess alloc] init]; [fac DirEnsureExists: @"qa_output/sharepoint/Documents"]; // OK.. load the JSON and iterate over each file CkoJsonObject *json = [[CkoJsonObject alloc] init]; [json LoadSb: sbJson]; int numFiles = [[json SizeOfArray: @"d.results"] intValue]; NSLog(@"%@%d",@"Number of Files in the SharePoint /Documents folder = ",numFiles); CkoDateTime *lastModRemote = [[CkoDateTime alloc] init]; CkoDateTime *lastModLocal = 0; CkoStringBuilder *localPath = [[CkoStringBuilder alloc] init]; CkoStringBuilder *fileUrl = [[CkoStringBuilder alloc] init]; int i = 0; while (i < numFiles) { json.I = [NSNumber numberWithInt: i]; NSString *filename = [json StringOf: @"d.results[i].Name"]; NSString *sLastModified = [json StringOf: @"d.results[i].TimeLastModified"]; NSLog(@"%d%@%@%@%@%@",i + 1,@": ",filename,@" (",sLastModified,@")"); [lastModRemote SetFromTimestamp: sLastModified]; BOOL bDownload = NO; // Check to see if the local file exists. If not, then download. [localPath SetString: @"qa_output/sharepoint/Documents/"]; [localPath Append: filename]; if ([fac FileExists: [localPath GetAsString]] != YES) { NSLog(@"%@",@"This file does not exist locally."); bDownload = YES; } else { // Get the local file's date time and compare with the remote file date/time. lastModLocal = [fac GetLastModified: [localPath GetAsString]]; if (fac.LastMethodSuccess == YES) { // Get the difference in seconds between the local and remote last-modified times. // if the return value is negative, then the caller's time is // older than the argument. (in this case, a negative return value means // the local file is older than the remote file. // Note: The DiffSeconds method was found to be missing in the Chilkat .NET build // (and possibly in other builds). It will be present in the v9.5.0.67 release and later. int numSeconds = [[lastModLocal DiffSeconds: lastModRemote] intValue]; if (numSeconds < 0) { NSLog(@"%@",@"The local file is older than the remote file."); bDownload = YES; } } else { NSLog(@"%@",@"Unable to get the local file's last-modified date/time."); NSLog(@"%@",fac.LastErrorText); } } if (bDownload == YES) { [fileUrl SetString: @"https://SHAREPOINT_HTTPS_DOMAIN/_api/web/GetFolderByServerRelativeUrl('/Documents')/Files('"]; [fileUrl Append: filename]; [fileUrl Append: @"')/$value"]; NSLog(@"%@%@",@"Downloading ",filename); success = [http Download: [fileUrl GetAsString] saveToPath: [localPath GetAsString]]; if (success != YES) { NSLog(@"%@",http.LastErrorText); return; } // Set the local file's last-modified date/time to that of the server's. [fac SetLastModified: [localPath GetAsString] lastModified: lastModRemote]; } i = i + 1; } NSLog(@"%@",@"All finished."); |
© 2000-2024 Chilkat Software, Inc. All Rights Reserved.