/// <summary> /// 検索実行 /// </summary> private async Task DoSearch(Dispatcher d) { try { // サイトコレクション取得 var task = PnPUtility.GetSiteCollectionsAsync(_vm.Tenant, null); await task; if (task.Exception == null) { // 成功したらViewModelへ追加 ObservableCollection <Site> sites = new ObservableCollection <Site>(); var result = task.Result; // 絞り込み if (!string.IsNullOrEmpty(_vm.SiteName)) { result = (from s in result where s.Title.ToLower().Contains(_vm.SiteName.ToLower()) select s).ToList(); } if (!string.IsNullOrEmpty(_vm.SiteURL)) { result = (from s in result where s.Url.ToLower().Contains(_vm.SiteURL.ToLower()) select s).ToList(); } // 追加 foreach (var siteCollection in result) { var site = new Site(_vm) { Title = siteCollection.Title, URL = siteCollection.Url }; await site.InitializeDataAsync().ConfigureAwait(false); sites.Add(site); } // 検索終了 await d.Execute(() => { _vm.Sites = sites; _vm.IsSearching = false; }, true).ConfigureAwait(false); } else { // 検索終了 await d.Execute(() => { _vm.IsSearching = false; }, true).ConfigureAwait(false); MessageBox.Show($"検索に失敗しました。\r\n{ task.Exception.InnerException?.Message?.ToString() }"); } } catch (Exception ex) { // 検索終了 await d.Execute(() => { _vm.IsSearching = false; }, true).ConfigureAwait(false); var message = (ex.InnerException != null) ? ex.InnerException.Message : ex.Message; MessageBox.Show($"検索に失敗しました。\r\n{ message }"); } }
/// <summary> /// ログイン実行 /// </summary> /// <returns></returns> private void DoLogin() { try { // テナント接続情報 var tenantInfo = new TenantConnectionInfo( $"https://{_vm.Domain}-admin.sharepoint.com", _vm.Account, _vm.Password); // サイトコレクション取得 var task = PnPUtility.ConnectSpoAdminCenterAsync(tenantInfo); task.Wait(); if (task.Exception == null) { // アカウント保存 AppSettingUtil.Account = new AccountSetting() { Domain = _vm.Domain, Account = _vm.Account, Password = _vm.Password }; // ログインボタン起動可能 _vm.IsLoginTrying = false; // メイン画面起動 var view = new SPOTemplateInstaller.MainView(tenantInfo); view.ShowDialog(); } else { // ログインボタン起動可能 _vm.IsLoginTrying = false; MessageBox.Show($"ログインに失敗しました。\r\n{ task.Exception.InnerException?.Message?.ToString() }"); } } catch (Exception ex) { // ログインボタン起動可能 _vm.IsLoginTrying = false; var message = (ex.InnerException != null) ? ex.InnerException.Message : ex.Message; MessageBox.Show($"ログインに失敗しました。\r\n{ message }"); } }
/// <summary> /// エンドポイント /// </summary> /// <param name="args">引数</param> static void Main(string[] args) { // ログ出力用メソッド名 string methodName = MethodBase.GetCurrentMethod().Name; // 開始ログ Log.Write(methodName, "PnPバッチ開始"); try { // 引数解析 AppArgs appArgs = new AppArgs(args); Log.Write(methodName, appArgs.LogMsg.ToArray()); // 処理 if (appArgs.Retrived) { // サイト情報 var site = new SiteConnectionInfo(appArgs.SiteUrl, appArgs.Account, appArgs.Password); // 保存先 var template = new FileSystemConnectionInfo(appArgs.FolderPath, appArgs.FileName); // 進捗報告 var progress = new Progress <string>((log) => { Log.Write(methodName, log); }); // 実行 var task = (appArgs.Mode == AppArgs.MODE.GET)? PnPUtility.SaveSiteAsProvisioningTemplateAsync(site, template, progress) : PnPUtility.ApplyProvisioningTemplateAsync(site, template, progress); task.ConfigureAwait(false); task.Wait(); } } catch (Exception ex) { var message = (ex.InnerException != null) ? ex.InnerException : ex; Log.Write(methodName, message); } // 終了ログ Log.Write(methodName, "PnPバッチ終了"); }
/// <summary> /// サブサイト情報を初期化 /// </summary> private async Task InitializeSubSitesAsync() { // 他の構成ではSharePointから取得 try { var infoList = await PnPUtility.GetSubSitesAsync(new SiteConnectionInfo(URL, VM?.Tenant?.UserAccount, VM?.Tenant?.UserPassword), false, null); var subSites = new ObservableCollection <Site>(); foreach (var info in infoList) { subSites.Add(new Site(VM) { Title = info.Title, URL = info.Url }); } SubSites = subSites; } catch (Exception) { } }
/// <summary> /// テンプレート取得実行 /// </summary> private async Task DoGet(Dispatcher d) { try { // 保存先を選択 var fileName = $"Template_{ DateTime.Now.ToString("yyyyMMddHHmmss") }.xml"; var dialog = new SaveFileDialog() { Title = "保存先の選択", Filter = $"XML(*.xml)|*.xml", FileName = fileName, OverwritePrompt = true }; // 取得を実行 if (dialog.ShowDialog() == true) { // ログタブに切り替え await d.Execute(() => { _vm.LogTabSelected = true; }, true).ConfigureAwait(false); // サイト情報 var site = new SiteConnectionInfo(_vm.SelectedSite.URL, _vm.Tenant.UserAccount, _vm.Tenant.UserPassword); // 保存先 var template = new FileSystemConnectionInfo(Path.GetDirectoryName(dialog.FileName), Path.GetFileName(dialog.FileName)); // ログ var progress = new Progress <string>(WriteLog); // テンプレート取得 var task = PnPUtility.SaveSiteAsProvisioningTemplateAsync(site, template, progress); await task; if (task.Exception == null) { // テンプレート取得終了 await d.Execute(() => { _vm.IsGetting = false; }, true).ConfigureAwait(false); } else { // テンプレート取得終了 await d.Execute(() => { _vm.IsGetting = false; }, true).ConfigureAwait(false); MessageBox.Show($"テンプレート取得に失敗しました。\r\n{ task.Exception.InnerException?.Message?.ToString() }"); } } else { // テンプレート取得終了 await d.Execute(() => { _vm.IsGetting = false; }, true).ConfigureAwait(false); } } catch (Exception ex) { // テンプレート取得終了 await d.Execute(() => { _vm.IsGetting = false; }, true).ConfigureAwait(false); var message = (ex.InnerException != null) ? ex.InnerException.Message : ex.Message; MessageBox.Show($"テンプレート取得に失敗しました。\r\n{ message }"); } }
/// <summary> /// 検索実行 /// </summary> private async Task DoSearch(Dispatcher d) { try { // テンプレートを選択 var dialog = new OpenFileDialog() { Title = "テンプレートファイルの選択", Multiselect = false, Filter = $"XML(*.xml)|*.xml" }; // 取得を実行 if (dialog.ShowDialog() == true) { // ログタブに切り替え await d.Execute(() => { _vm.LogTabSelected = true; }, true).ConfigureAwait(false); // サイト情報 var site = new SiteConnectionInfo(_vm.SelectedSite.URL, _vm.Tenant.UserAccount, _vm.Tenant.UserPassword); // テンプレート var template = new FileSystemConnectionInfo(Path.GetDirectoryName(dialog.FileName), Path.GetFileName(dialog.FileName)); // ログ var progress = new Progress <string>(WriteLog); // テンプレート適用 var task = PnPUtility.ApplyProvisioningTemplateAsync(site, template, progress); await task; if (task.Exception == null) { // テンプレート取得終了 await d.Execute(() => { _vm.IsApplying = false; }, true).ConfigureAwait(false); } else { // テンプレート取得終了 await d.Execute(() => { _vm.IsApplying = false; }, true).ConfigureAwait(false); MessageBox.Show($"テンプレート取得に失敗しました。\r\n{ task.Exception.InnerException?.Message?.ToString() }"); } } else { // テンプレート取得終了 await d.Execute(() => { _vm.IsApplying = false; }, true).ConfigureAwait(false); } } catch (Exception ex) { // テンプレート取得終了 await d.Execute(() => { _vm.IsApplying = false; }, true).ConfigureAwait(false); var message = (ex.InnerException != null) ? ex.InnerException.Message : ex.Message; MessageBox.Show($"テンプレート取得に失敗しました。\r\n{ message }"); } }