VS2012 を使用して、カスタム リストとタスク リストを作成しました。ワークフローを作成している同じソリューションで、ワークフローをリストとタスク リストに関連付けたいのですが、ワークフローの作成時にリストのドロップダウンに名前が表示されません。リストに関連付ける方法はありますか? アプリの実行時に、リストのワークフローを手動で追加したくありません。
1117 次
1 に答える
1
VS ソリューション エクスプローラーで機能を右クリックして、機能にイベント レシーバーを追加します。
サイト コレクション機能を使用しているため、機能がアクティブ化されたハンドラーでライブラリへの参照を取得します。
public override void FeatureActivated(SPFeatureReceiverProperties properties)
{
SPSite site = (SPSite) properties.Feature.Parent;
SPWeb web = site.RootWeb;
SPList list = web.Lists["Name of the Document Library"];
}
これは、Web がルート サイト コレクション Web であることを前提としており、次のメソッドを呼び出すことができます。
public void EnsureWorkflowAssociation(SPList list, string workflowTemplateName, string associationName, bool allowManual, bool startCreate, bool startUpdate)
{
var workflowAssociation =
list.WorkflowAssociations.Cast<SPWorkflowAssociation>().FirstOrDefault(i => i.Name == associationName);
if (workflowAssociation!=null)
{
list.WorkflowAssociations.Remove(workflowAssociation);
list.Update();
}
var web = list.ParentWeb;
var lcid = (int)web.Language;
var defaultCulture = new CultureInfo(lcid);
var template = web.WorkflowTemplates.GetTemplateByName(workflowTemplateName, defaultCulture);
var association = SPWorkflowAssociation.CreateListAssociation(template, associationName,
web.Lists[Lists.Tasks.Description()],
web.Lists[Lists.WorkflowHistory.Description()]
);
association.AllowManual = true;
association.AutoStartChange = true;
association.AutoStartCreate = true;
list.WorkflowAssociations.Add(association);
list.Update();
association = list.WorkflowAssociations[association.Id];
association.AllowManual = allowManual;
association.AutoStartChange = startUpdate;
association.AutoStartCreate = startCreate;
association.AssociationData = "<Dummy></Dummy>";
association.Enabled = true;
list.WorkflowAssociations.Update(association);
list.Update();
}
workflowTemplateNameはワークフローの名前である必要があります
associationName 関連付けのために選択する必要がある名前
于 2013-07-12T16:55:56.547 に答える