1

私はSharePointを初めて使用するので、何か間違ったことをした場合は修正してください。

予約を取るドキュメントライブラリ(ドキュメント、名前、電話番号などの顧客の情報)があります。次に、顧客からそれらの情報を取得してドキュメントライブラリに送信するサイトページとWebパーツを作成しました。そのフォームに入力して保存すると、listはパラメーターを非常にうまく取得します。その後、一部のユーザーがドキュメントを承認するために、そのライブラリの承認SharePointワークフローを作成しました。問題はここから始まります:手動で(アイテムの追加を押して)ドキュメントリストにアイテムを追加すると、ワークフロー列アイテム(ワークフローの名前)が自動的に生成され、正常に機能します。しかし、コードで追加しようとすると、ワークフローアイテムが生成されません。

       public static void InsertIntoDocumentToLib( string name, int age,string path,SPContext context)
    {
        SPSecurity.RunWithElevatedPrivileges(delegate()
        {
            using (var site = new SPSite(context.Site.ID))
            {
                using (var siteCollection = new SPSite(context.Site.Url))   // site.RootWeb
                {
                    using (var currentWeb = siteCollection.OpenWeb(context.Web.ID))
                    {
                        SPList spList = currentWeb.Lists.TryGetList(DOCUMENT_LIB_NAME);
                        if (spList != null)
                        {
                            currentWeb.AllowUnsafeUpdates = true;
                            SPFolder myLibrary = currentWeb.Folders[DOCUMENT_LIB_NAME];
                            bool replaceExistingFiles = true;
                            string fileName = System.IO.Path.GetFileName(path);

                            FileStream fileStream = File.OpenRead(path);
                            SPFile spfile = myLibrary.Files.Add(fileName, fileStream, replaceExistingFiles);
                            spfile.Item[NAME_COLUMN] = name;
                            spfile.Item[AGE_COLUMN] = age; 
                            spfile.Item.Update();
                            myLibrary.Update();
                            currentWeb.AllowUnsafeUpdates = false;
                        }

                    }
                }
            }
        });

    }
4

1 に答える 1

0

SharePoint のワークフローは、システム アカウントによってトリガーすることはできません。これは、おそらく [作成者] のユーザー名です。リスト アイテムを手動で (アイテムの追加を使用して) 作成したときは、ユーザー アカウントでアイテムを作成しました。

最も簡単で安全な方法は、RunWithElevatedPermissions を削除することですが、ターゲット リストにエントリを作成する権限を持つユーザーのみがページを使用できます。

他のユーザーもページを使用する必要があるという要件がある場合は、偽装を使用する必要があります。

あなたがすることは、リストにアイテムを作成する権限を持つ非システム ユーザーから資格情報SPUserTokenを使用することです。

このブログ記事には、SPUserToken の使用方法の例があります。

別の Windows ユーザーとしてログインすることもできますが、サイト ページで実行しているので、その必要はないと思います。

Extreme SharePointには、SharePointでの昇格/偽装の概要も掲載されています。

于 2013-01-12T14:18:22.910 に答える